s4

view y4.cgi @ 10:63c0e22870bb

Use mktempd() instead of mktemp directly
author HIROSE Yuuji <yuuji@gentei.org>
date Mon, 20 Jul 2015 11:53:05 +0900
parents 3db7524d3dea
children 3565d93c2fb1
line source
1 #!/bin/sh
2 # 愛
3 PATH=/usr/local/sqlite3/bin:$PATH
4 myname=`basename $0`
5 mydir=`dirname $0`
6 . $mydir/y4-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 [ -n "$gname" ] && par2table $formdir/grp.def
59 m4 -D_TITLE_="グループ作成" \
60 -D_FORM_="`genform $formdir/grp.def`" \
61 -D_DUMPTABLE_="`DT_VIEW=grp dumptable html grp 'gname gecos'`" \
62 $layout/html.m4.html $layout/groupman.m4.html
63 ;;
64 "edittable")
65 contenttype; echo
66 m4 -D_TITLE_="グループ編集/削除" $layout/html.m4.html
67 edittable "$formdir/$2.def" "$2" "$3"
68 ;;
69 "userconf")
70 contenttype; echo
71 [ -n "`getpar rowid`" ] && par2table $formdir/user.def
72 userconf
73 ;;
74 "groupconf")
75 contenttype; echo
76 [ -n "`getpar rowid`" ] && par2table $formdir/grp.def
77 groupconf "$2"
78 ;;
79 "mems")
80 contenttype; echo
81 m4 -D_TITLE_="参加者一覧" -D_BODYCLASS_=listmember $layout/html.m4.html
82 kwd=`getpar kwd`
83 listmember $kwd | tee tmp/listmem.out
84 ;;
85 "grps")
86 contenttype; echo
87 m4 -D_TITLE_="グループ一覧" -D_BODYCLASS_=listgroup $layout/html.m4.html
88 kwd=`getpar kwd`
89 listgroup $kwd \
90 | m4 -D_DUMPTABLE_="syscmd(\`cat')" \
91 -D_TITLE_="グループ関連操作" \
92 -D_FORM_="<a href=\"?groupman\">新規グループ作成</a>" \
93 $layout/groupman.m4.html
95 ;;
96 "grps2")
97 contenttype; echo
98 m4 -D_TITLE_="グループ一覧" \
99 -D_FORM_="`listgroup2 $formdir/grp.def`" -D_DUMPTABLE_= \
100 $layout/html.m4.html \
101 $layout/groupman.m4.html
102 ;;
103 "grp") # $2=group
104 contenttype; echo
105 gpg=`getpar grp`
106 grp=${2:-$gpg}
107 ## . ./y4-blog.sh
108 jg=`getpar joingrp`
109 if [ -n "$jg" ]; then
110 err jg=$jg, grp=$grp
111 [ -n "$jg" -a -n "$grp" ] &&
112 joingrp "$grp" "$user" "$jg" "`getpar email`"
113 fi
114 m4 -D_TITLE_="グループ $grp" \
115 $layout/html.m4.html
116 showgroup $grp
118 ;;
119 "commission")
120 # $2=grp $3=user-rowid
121 contenttype; echo
122 err commission: "$@"
123 m4 -D_TITLE_="グループ $2 管理者委任" $layout/html.m4.html
124 shift # $1=grp $2=user-rowid
125 if [ -n "$2" ]; then
126 grp_reg_adm "$@"
127 else
128 echo "<p>無効な指定です。普通のアクセスならここに来ないはず。</p>"
129 fi
130 ;;
131 "blog")
132 contenttype; echo
133 . ./y4-blog.sh
134 blog_addentry $2
135 ;;
136 "replyblog")
137 contenttype; echo
138 rowid=${2%%[!A-Z0-9a-z_]*}
139 ## err ROWid=$rowid, '$2'=$2
140 . ./y4-blog.sh
141 err blog_reply $rowid
142 blog_reply $rowid
143 ;;
144 "editheading")
145 contenttype; echo
146 rowid=${2%%[!A-Z0-9a-z_]*}
147 # blogrowid=${3%%[!A-Z0-9a-z_]*}
148 if [ -z "$rowid" ]; then
149 echo "<p>話題番号が未指定です。</p>"
150 return
151 fi
152 owner=`getvalbyid blog owner $2`
153 title=`getvalbyid blog title $2`
154 m4 -D_TITLE_="修正" \
155 -D_SUBTITLE_="[$title]@$owner" -D_DIARY_="" \
156 -D_BLOGS_="" -D_DUMPTABLE_="" \
157 -D_FORM_="`GF_ACTION=\"?blog\" edittable $formdir/blog.def blog $rowid`" \
158 $layout/html.m4.html $layout/diary.m4.html
159 ;;
160 "editart")
161 contenttype; echo
162 rowid=${2%%[!A-Z0-9a-z_]*}
163 blogrowid=${3%%[!A-Z0-9a-z_]*}
164 if [ -z "$rowid" -o -z "$blogrowid" ]; then
165 echo "<p>表示する記事番号が未指定です。</p>"
166 return
167 fi
168 owner=`getvalbyid blog owner $blogrowid`
169 title=`getvalbyid blog title $blogrowid`
170 author=`getvalbyid article author $rowid`
171 err EDITart: owner=$owner, author=$author
172 if isgrpowner $user $owner; then
173 : EDIT OK
174 elif [ x"$owner" != x"$user" -a x"$author" != x"$user" ]; then
175 echo "<p>本人か所有者しか編集できません.</p>"
176 return
177 fi
178 aid=`query "select id from article where rowid=$rowid;"`
179 # title=`getvalbyid blog title $2`
180 m4 -D_TITLE_="コメントの修正" -D_DIARY_="" \
181 -D_FORM_="`GF_ACTION=\"?replyblog+$blogrowid#$aid\" edittable $formdir/article.def article $rowid`" \
182 -D_SUBTITLE_="`gecos $owner`の「$title」" \
183 -D_BLOGS_= -D_DUMPTABLE_= \
184 $layout/html.m4.html $layout/diary.m4.html
185 ;;
186 "lshandout")
187 contenttype; echo
188 rowid=${2%%[!A-Z0-9a-z_]*}
189 if [ -z "$rowid" ]; then
190 echo "<p>話題番号が未指定です。</p>"
191 return
192 fi
193 . ./y4-blog.sh
194 lshandout $rowid
195 ;;
196 "gethandout")
197 rowid=${2%%[!A-Z0-9a-z_]*}
198 if [ -z "$rowid" ]; then
199 echo "<p>話題番号が未指定です。</p>"
200 return
201 fi
202 . ./y4-blog.sh
203 gethandout $rowid
204 ;;
205 "searchart") # $2=blogowner
206 contenttype; echo
207 m4 -D_TITLE_="検索結果" $layout/html.m4.html
208 kwd=`getpar kwd`
209 if [ -z "$kwd" ]; then
210 echo "<p>検索語を指定してください</p>"
211 else
212 owner=`getpar owner`
213 owner=${owner:-$2}
214 echo "<h2>「$kwd」による検索結果</h2>"
215 if [ -n "$owner" ]; then
216 cond="where key='owner' and val='$owner'"
217 if isuser $owner; then
218 echo "<p>(`linkhome $owner` さんの記録からの検索)</p>"
219 else
220 linkhome $owner 1>&3
221 echo "<p>(`linkhome $owner` グループからの検索)</p>"
222 fi
223 fi
224 # article_s: id=article-id, key='text', val='TEXT'
225 # article: id=article-id, blogid=blogkd
226 # blog: id=blog-id, author=LeaderAuthor
227 # blog_s: id=blog-id, key='title', val='BLOG-TITLE'
228 # WANT: blog-ROWid,article-id,val(TEXT)
229 sql="select b.rowid||'#'||x.id as '',
230 b.title as TITLE,
231 substr(x.val, 0, 80) as TEXT
232 from (select blog.rowid,blog.*,bs.val as title from blog join blog_s bs
233 on blog.id=bs.id and bs.key='title') b
234 join
235 (select a.id,a.blogid,s.val from article a join article_s s
236 on a.id=s.id where s.val like '%$kwd%')
237 x on b.id=x.blogid
238 where b.id in (select id from blog_s
239 $cond);"
240 sedopt="s,<TR><TD>\([^<]*\)</TD>,<TR><TD><a\
241 href=\"?replyblog+\1\">VIEW</a></TD>,"
242 cat<<EOF
243 <table class="b searchart">
244 `sq -header -html $db "$sql"|sed "$sedopt"`
245 </table>
246 EOF
247 fi
248 ;;
249 "showattc")
250 # $2=table_m $3=rowid $4=val
251 if ! isfilereadable $user $2 $3; then
252 contenttype; echo
253 echo "<p>このファイルは管理者のみしか見られません</p>"
254 putfooter; exit
255 fi
256 idir=`umask 002; mktempd` || exit 1
257 tmpfiles=$tmpfiles"${tmpfiles+ }$idir"
258 bin=$idir/$myname-$$.bin
259 ##sql="select quote(bin) from $2 where id='$3' and val='$4'"
260 sql="select quote(bin) from $2 where rowid='$3'"
261 sq $db "$sql" | xxd -r -p > $bin
262 # type=`sq $db "select type from $2 where id='$3' and val='$4'"`
263 tv=`sq $db "select type,val from $2 where rowid='$3'"`
264 type=${tv%|*} fn=${tv#*|}
265 err tv=$tv type=$type fn=$fn
266 ct=${type#file:}
267 case $ct in # all text/* changed to text/plain
268 text/*)
269 charset=`nkf -g $bin|cut -d' ' -f1`
270 case $charset in
271 ASCII*) charset="" ;;
272 esac
273 ct="text/plain${charset:+; charset=$charset}"
274 ;;
275 esac
276 contenttype "$ct"
277 echo "Content-Disposition: filename=\"$fn\""
278 echo "Content-Length: " `cat $bin | wc -c`; echo
279 #echo "Content-Type: " ${type#file:}; echo
280 cat $bin
281 exit 0
282 ;;
283 "gallery")
284 ## contenttype "Image/jpeg"
285 sql="select quote(b) from te where a='${2:-mikan.jpg}'"
286 idir=`umask 002; mktempd` || exit 1
287 tmpfiles=$tmpfiles"${tmpfiles+ }$idir"
288 img=$idir/$myname-$$.bin
289 db=b.sq3
290 sqlite3 $db "$sql" | xxd -r -p > $img
291 len=`cat $img | wc -c`
292 echo "Content-Length: $len"
293 type=`file --mime-type $img | cut -d' ' -f2`
294 echo 'Content-type: $type'; echo
295 cat $img
296 ;;
297 esac
300 putfooter