s4

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