s4

view s4.cgi @ 68:7380bcf19078

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