s4

view s4.cgi @ 17:01f579d2c889

Rename to s4
author HIROSE Yuuji <yuuji@gentei.org>
date Tue, 21 Jul 2015 14:43:24 +0900
parents y4.cgi@636df1c1bdf2
children 18b4d56a6206
line source
1 #!/bin/sh
2 # 愛
3 PATH=/usr/local/sqlite3/bin:$PATH
4 myname=`basename $0`
5 mydir=`dirname $0`
6 . $mydir/s4-funcs.sh
8 cgiinit
9 if [ x"$1" = x"reg" ]; then
10 contenttype; echo
11 regist $2
12 putfooter
13 exit
14 fi
16 dologin
17 #gencookie; echo
19 case ${SERVER_SOFTWARE} in
20 bozohttp*)
21 set -- `echo "$@"|(IFS=+ read a b c d e f g; echo $a $b $c $d $e $f $g)`
22 ;;
23 esac
25 err 1=$1 2=$2 3=$3 4=$4
26 stage=`getpar stage`
27 stage=${stage:-$1}
28 case ${stage} in
29 # "")
30 # contenttype; echo
31 # m4 -D_SITE_="S System" $layout/welcome.m4.html
32 # # echo "<pre>"; gencookie "user=$user" "skey=$skey"; echo "</pre>"
33 # # echo "<pre>`env|sort -u`</pre>"
34 # ;;
35 "home"|"")
36 contenttype; echo
37 err HOME: just in rowid=`getpar rowid`
38 [ -n "`getpar rowid`" ] && par2table $formdir/user.def
39 showhome ${2:-$user}
40 ;;
41 # "diary")
42 # contenttype; echo
43 # title=`getpar title` #diary=`getpar diary` wday=`getpar wday`
44 # [ -n "$title" ] && par2table $formdir/diary.def
45 # m4 -D_TITLE_="$title" -D_DIARY_="$diary" \
46 # -D_FORM_="`genform templ/form/diary.def`" \
47 # -D_FORM2_="syscmd(\`genform templ/form/diary.def')" \
48 # -D_DUMPTABLE_="`dumptable html diary title,wday,diary`" \
49 # $layout/html.m4.html $layout/diary.m4.html
50 # ;;
51 "invite")
52 contenttype; echo
53 invite
54 ;;
55 "groupman")
56 contenttype; echo
57 gname=`getpar gname`
58 if [ -n "$gname" ]; then
59 #gname=${gname%%[!-A-Z0-9a-z_.!#$%^&()=:/*]*}
60 newgname=`echo "$gname"|tr -dc '\-0-9A-Za-z#=:/_.,'`
61 if [ x"$newgname" != x"$gname" ]; then
62 err NewGNAME: gname=$newgname
63 echo "<p>使用禁止文字を除去し $gname としました。</p>"
64 gname=$newgname
65 fi
66 replpar gname string "$gname"
67 par2table $formdir/grp.def
68 joingrp "$gname" "$user" yes "$user" as-admin
69 fi
70 GF_STAGE=groupman
71 note="<p>グループ名に使用できない文字は自動的に削除されます。</p>"
72 m4 -D_TITLE_="グループ作成" \
73 -D_FORM_="$note`genform $formdir/grp.def`" \
74 -D_DUMPTABLE_="`DT_VIEW=grp dumptable html grp 'gname gecos:DESC mtime:TIME' 'order by b.TIME desc'`" \
75 $layout/html.m4.html $layout/groupman.m4.html
76 ;;
77 "edittable")
78 contenttype; echo
79 m4 -D_TITLE_="グループ編集/削除" $layout/html.m4.html
80 edittable "$formdir/$2.def" "$2" "$3"
81 ;;
82 "userconf")
83 contenttype; echo
84 [ -n "`getpar rowid`" ] && par2table $formdir/user.def
85 userconf
86 ;;
87 "groupconf")
88 contenttype; echo
89 [ -n "`getpar rowid`" ] && par2table $formdir/grp.def
90 groupconf "$2"
91 ;;
92 "mems")
93 contenttype; echo
94 m4 -D_TITLE_="参加者一覧" -D_BODYCLASS_=listmember $layout/html.m4.html
95 kwd=`getpar kwd`
96 listmember $kwd
97 ;;
98 "grps")
99 contenttype; echo
100 m4 -D_TITLE_="グループ一覧" -D_BODYCLASS_=listgroup $layout/html.m4.html
101 kwd=`getpar kwd`
102 listgroup $kwd \
103 | m4 -D_DUMPTABLE_="syscmd(\`cat')" \
104 -D_TITLE_="グループ関連操作" \
105 -D_FORM_="<a href=\"?groupman\">新規グループ作成</a>" \
106 $layout/groupman.m4.html
108 ;;
109 "grps2")
110 contenttype; echo
111 m4 -D_TITLE_="グループ一覧" \
112 -D_FORM_="`listgroup2 $formdir/grp.def`" -D_DUMPTABLE_= \
113 $layout/html.m4.html \
114 $layout/groupman.m4.html
115 ;;
116 "grp") # $2=group
117 contenttype; echo
118 gpg=`getpar grp`
119 grp=${2:-$gpg}
120 grp=`getgroupbyid "$grp"`
121 err grp: getpar-grp"(gpg)=[$grp]"
122 ## . ./s4-blog.sh
123 jg=`getpar joingrp`
124 if [ -n "$jg" ]; then
125 err jg=$jg, grp=$grp
126 [ -n "$jg" -a -n "$grp" ] &&
127 joingrp "$grp" "$user" "$jg" "`getpar email`"
128 fi
129 m4 -D_TITLE_="グループ $grp" \
130 $layout/html.m4.html
131 showgroup "$grp"
133 ;;
134 "commission")
135 # $2=grp $3=user-rowid
136 contenttype; echo
137 err commission: "$@"
138 m4 -D_TITLE_="グループ $2 管理者委任" $layout/html.m4.html
139 shift # $1=grp $2=user-rowid
140 if [ -n "$2" ]; then
141 grp_reg_adm "$@"
142 else
143 echo "<p>無効な指定です。普通のアクセスならここに来ないはず。</p>"
144 fi
145 ;;
146 "blog")
147 contenttype; echo
148 . ./s4-blog.sh
149 blog_addentry $2
150 ;;
151 "replyblog")
152 contenttype; echo
153 rowid=${2%%[!A-Z0-9a-z_]*}
154 ## err ROWid=$rowid, '$2'=$2
155 . ./s4-blog.sh
156 err blog_reply $rowid
157 blog_reply $rowid
158 ;;
159 "editheading")
160 contenttype; echo
161 rowid=${2%%[!A-Z0-9a-z_]*}
162 # blogrowid=${3%%[!A-Z0-9a-z_]*}
163 if [ -z "$rowid" ]; then
164 echo "<p>話題番号が未指定です。</p>"
165 return
166 fi
167 owner=`getvalbyid blog owner $2`
168 title=`getvalbyid blog title $2`
169 m4 -D_TITLE_="修正" \
170 -D_SUBTITLE_="[$title]@$owner" -D_DIARY_="" \
171 -D_BLOGS_="" -D_DUMPTABLE_="" \
172 -D_FORM_="`GF_ACTION=\"?blog\" edittable $formdir/blog.def blog $rowid`" \
173 $layout/html.m4.html $layout/diary.m4.html
174 ;;
175 "editart")
176 contenttype; echo
177 rowid=${2%%[!A-Z0-9a-z_]*}
178 blogrowid=${3%%[!A-Z0-9a-z_]*}
179 if [ -z "$rowid" -o -z "$blogrowid" ]; then
180 echo "<p>表示する記事番号が未指定です。</p>"
181 return
182 fi
183 owner=`getvalbyid blog owner $blogrowid`
184 title=`getvalbyid blog title $blogrowid`
185 author=`getvalbyid article author $rowid`
186 err EDITart: owner=$owner, author=$author
187 if isgrpowner $user $owner; then
188 : EDIT OK
189 elif [ x"$owner" != x"$user" -a x"$author" != x"$user" ]; then
190 echo "<p>本人か所有者しか編集できません.</p>"
191 return
192 fi
193 aid=`query "select id from article where rowid=$rowid;"`
194 # title=`getvalbyid blog title $2`
195 m4 -D_TITLE_="コメントの修正" -D_DIARY_="" \
196 -D_FORM_="`GF_ACTION=\"?replyblog+$blogrowid#$aid\" edittable $formdir/article.def article $rowid`" \
197 -D_SUBTITLE_="`gecos $owner`の「$title」" \
198 -D_BLOGS_= -D_DUMPTABLE_= \
199 $layout/html.m4.html $layout/diary.m4.html
200 ;;
201 "lshandout")
202 contenttype; echo
203 rowid=${2%%[!A-Z0-9a-z_]*}
204 if [ -z "$rowid" ]; then
205 echo "<p>話題番号が未指定です。</p>"
206 return
207 fi
208 . ./s4-blog.sh
209 lshandout $rowid
210 ;;
211 "gethandout")
212 rowid=${2%%[!A-Z0-9a-z_]*}
213 if [ -z "$rowid" ]; then
214 echo "<p>話題番号が未指定です。</p>"
215 return
216 fi
217 . ./s4-blog.sh
218 gethandout $rowid
219 ;;
220 "searchart") # $2=blogowner
221 contenttype; echo
222 m4 -D_TITLE_="検索結果" $layout/html.m4.html
223 kwd=`getpar kwd`
224 if [ -z "$kwd" ]; then
225 echo "<p>検索語を指定してください</p>"
226 else
227 owner=`getpar owner`
228 owner=${owner:-$2}
229 echo "<h2>「$kwd」による検索結果</h2>"
230 if [ -n "$owner" ]; then
231 cond="where key='owner' and val='$owner'"
232 if isuser $owner; then
233 echo "<p>(`linkhome $owner` さんの記録からの検索)</p>"
234 else
235 linkhome $owner 1>&3
236 echo "<p>(`linkhome $owner` グループからの検索)</p>"
237 fi
238 fi
239 # article_s: id=article-id, key='text', val='TEXT'
240 # article: id=article-id, blogid=blogkd
241 # blog: id=blog-id, author=LeaderAuthor
242 # blog_s: id=blog-id, key='title', val='BLOG-TITLE'
243 # WANT: blog-ROWid,article-id,val(TEXT)
244 sql="select b.rowid||'#'||x.id as '',
245 b.title as TITLE,
246 substr(x.val, 0, 80) as TEXT
247 from (select blog.rowid,blog.*,bs.val as title from blog join blog_s bs
248 on blog.id=bs.id and bs.key='title') b
249 join
250 (select a.id,a.blogid,s.val from article a join article_s s
251 on a.id=s.id where s.val like '%$kwd%')
252 x on b.id=x.blogid
253 where b.id in (select id from blog_s
254 $cond);"
255 sedopt="s,<TR><TD>\([^<]*\)</TD>,<TR><TD><a\
256 href=\"?replyblog+\1\">VIEW</a></TD>,"
257 cat<<EOF
258 <table class="b searchart">
259 `sq -header -html $db "$sql"|sed "$sedopt"`
260 </table>
261 EOF
262 fi
263 ;;
264 "showattc")
265 # $2=table_m $3=rowid $4=val
266 if ! isfilereadable $user $2 $3; then
267 contenttype; echo
268 echo "<p>このファイルは管理者のみしか見られません</p>"
269 putfooter; exit
270 fi
271 idir=`umask 002; mktempd` || exit 1
272 # tmpfiles=$tmpfiles"${tmpfiles+ }$idir"
273 bin=$idir/$myname-$$.bin
274 sql="select quote(bin) from $2 where rowid='$3';"
275 sq $db "$sql" | unhexize > $bin
276 tv=`query "select type,val from $2 where rowid='$3';"`
277 type=${tv%|*} fn=${tv#*|}
278 err tv=$tv type=$type fn=$fn
279 ct=${type#file:}
280 case $ct in # all text/* changed to text/plain
281 text/*)
282 charset=`nkf -g $bin|cut -d' ' -f1`
283 case $charset in
284 ASCII*) charset="" ;;
285 esac
286 ct="text/plain${charset:+; charset=$charset}"
287 ;;
288 esac
289 contenttype "$ct"
290 echo "Content-Disposition: filename=\"$fn\""
291 echo "Content-Length: " `cat $bin | wc -c`; echo
292 #echo "Content-Type: " ${type#file:}; echo
293 cat $bin
294 exit 0
295 ;;
296 "gallery")
297 ## contenttype "Image/jpeg"
298 sql="select quote(b) from te where a='${2:-mikan.jpg}'"
299 idir=`umask 002; mktempd` || exit 1
300 # tmpfiles=$tmpfiles"${tmpfiles+ }$idir"
301 img=$idir/$myname-$$.bin
302 db=b.sq3
303 sqlite3 $db "$sql" | xxd -r -p > $img
304 len=`cat $img | wc -c`
305 echo "Content-Length: $len"
306 type=`file --mime-type $img | cut -d' ' -f2`
307 echo 'Content-type: $type'; echo
308 cat $img
309 ;;
310 esac
313 putfooter