s4
changeset 78:0cbbb0874eb5
Code cleaning
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Sat, 01 Aug 2015 23:00:57 +0900 |
parents | 10bd684f07d2 |
children | f088d45dfdf2 |
files | s4-blog.sh s4-funcs.sh s4.cgi |
diffstat | 3 files changed, 175 insertions(+), 90 deletions(-) [+] |
line diff
1.1 --- a/s4-blog.sh Fri Jul 31 23:53:56 2015 +0900 1.2 +++ b/s4-blog.sh Sat Aug 01 23:00:57 2015 +0900 1.3 @@ -144,10 +144,8 @@ 1.4 hrefhome0="<a href=\"?home" 1.5 for a in $arts; do 1.6 arid=${a%%\|*} aid=`echo "$a"|cut -d'|' -f2` author=${a##*\|} imgs="" 1.7 -err a=$a, aid=$aid, author=$author 1.8 - # name='' # Get gecos?? 1.9 - # td=$(echo $bstmpdir/`echo $at|md5`) 1.10 -err td=$td 1.11 + err a=$a, aid=$aid, author=$author 1.12 + err td=$td 1.13 val=`getvalbyid article image "$arid" "$td"` 1.14 err val="[$val]" and td as follows: 1.15 1.16 @@ -293,7 +291,47 @@ 1.17 echo 1.18 cat $arc 1.19 } 1.20 - 1.21 +searchart() { 1.22 + kwd=`getpar kwd` 1.23 + if [ -z "$kwd" ]; then 1.24 + echo "検索語を指定してください" | html p; return 1.25 + fi 1.26 + owner=`getpar owner` 1.27 + owner=${owner:-$1} 1.28 + echo "「$kwd」による検索結果" | html p 1.29 + if [ -n "$owner" ]; then 1.30 + cond="where key='owner' and val='$owner'" 1.31 + if isuser $owner; then 1.32 + echo "(`linkhome $owner` さんの記録からの検索)" | html p 1.33 + else 1.34 + linkhome $owner 1>&3 1.35 + echo "(`linkhome $owner` グループからの検索)" | html p 1.36 + fi 1.37 + fi 1.38 + # article_s: id=article-id, key='text', val='TEXT' 1.39 + # article: id=article-id, blogid=blogkd 1.40 + # blog: id=blog-id, author=LeaderAuthor 1.41 + # blog_s: id=blog-id, key='title', val='BLOG-TITLE' 1.42 + # WANT: blog-ROWid,article-id,val(TEXT) 1.43 + sql="select b.rowid||'#'||x.id as '', 1.44 + b.title as TITLE, 1.45 + substr(x.val, 0, 80) as TEXT 1.46 + from (select blog.rowid,blog.*,bs.val as title from blog join blog_s bs 1.47 + on blog.id=bs.id and bs.key='title') b 1.48 + join 1.49 + (select a.id,a.blogid,s.val from article a join article_s s 1.50 + on a.id=s.id where s.val like '%$kwd%') 1.51 + x on b.id=x.blogid 1.52 + where b.id in (select id from blog_s 1.53 + $cond);" 1.54 + sedopt="s,<TR><TD>\([^<]*\)</TD>,<TR><TD><a\ 1.55 + href=\"?replyblog+\1\">VIEW</a></TD>," 1.56 + cat<<EOF 1.57 +<table class="b searchart"> 1.58 +`sq -header -html $db "$sql"|sed "$sedopt"` 1.59 +</table> 1.60 +EOF 1.61 +} 1.62 listblog() ( 1.63 # $1={user,group} 1.64 qow=`sqlquote $1`
2.1 --- a/s4-funcs.sh Fri Jul 31 23:53:56 2015 +0900 2.2 +++ b/s4-funcs.sh Sat Aug 01 23:00:57 2015 +0900 2.3 @@ -334,7 +334,9 @@ 2.4 isfilereadable() { # $1=user $2=tbl $3=rowid 2.5 # Return true if user($1) can read attachment files in tbl($2):rowid($3) 2.6 [ -z "$1" -o -z "$2" -o -z "$3" ] && return 1 # invalid argument 2.7 - 2.8 + 2.9 + # Return true when anonymous mode 2.10 + [ "$anonymousmode" ] && return 0 2.11 # case `getvalbyid blog mode $2` in 2.12 # normal|*open*|"") return 0 ;; 2.13 # *closed*) 2.14 @@ -501,12 +503,17 @@ 2.15 getparquote() { 2.16 sqlquote `getpar $1` 2.17 } 2.18 +getbinbyid() { 2.19 + # $1=tbl $2=col $3=rowid $4=tmpdirForBinary 2.20 + 2.21 +} 2.22 getvalbyid() { 2.23 # $1=tbl $2=col $3=rowid $4=tmpdirForBinary 2.24 # If two or more values found, save them to $tmpd/${column}.$N and 2.25 # store the number of files into $tmpd/${column}.count and 2.26 # their each rowid stored into $tmpd/${column}.$N.rowid. 2.27 ### err gtb-$1=`gettblcols $1`, tbl=$1, col=$2, '$3'=$3 2.28 + # Non-null for $GVAL_KEEP_ORIG_BIN keep original binary instead of icon 2.29 (for c in `gettblcols $1`; do 2.30 if [ x"$2" = x"$c" ]; then 2.31 err "select $2 from $1 where rowid=$3" 2.32 @@ -550,6 +557,7 @@ 2.33 file=$td/`query "select val from $cond $slice;"` 2.34 # FOR SPEED: Skip file generation if imgcache exists 2.35 [ -s $file -a -s $td/$fn.rowid ] && continue 2.36 + # err gvbid-get="select quote(bin) from $cond $slice;" 2.37 sq $db<<EOF | unhexize > $file 2.38 .output $td/$fn.rowid 2.39 select rowid from $cond $slice; 2.40 @@ -560,8 +568,10 @@ 2.41 .output stdout 2.42 select quote(bin) from $cond $slice; 2.43 EOF 2.44 + # err gvbid-get2: "`ls -lF $file`" 2.45 ## err i=$i - file=$file rowid=`cat $td/$fn.rowid` 2.46 ln $td/$fn.rowid $file.rowid 2>&3 # for convenience 2.47 + cp $file $file.orig 2>&3 2.48 ls -lh $file | awk '{print $5"B"}' > $file.size 2.49 case $type in 2.50 *:[Ii]mage*) mogrify -geometry $thumbxy $file ;; 2.51 @@ -1176,6 +1186,27 @@ 2.52 $layout/login.m4.html 2.53 return 2.54 } 2.55 +groupman() { 2.56 + gname=`getpar gname` 2.57 + if [ -n "$gname" ]; then 2.58 + newgname=`echo "$gname"|tr -d '\"'` 2.59 + newgname=$gname 2.60 + if [ x"$newgname" != x"$gname" ]; then 2.61 + err NewGNAME: gname=$newgname 2.62 + echo "使用禁止文字を除去し $gname としました。" | html p 2.63 + gname=$newgname 2.64 + replpar gname string "$gname" 2.65 + fi 2.66 + par2table $formdir/grp.def 2.67 + joingrp "$gname" "$user" yes "$user" as-admin 2.68 + fi 2.69 + GF_STAGE=groupman 2.70 + note="<p>グループ名に使用できない文字は自動的に削除されます。</p>" 2.71 + m4 -D_TITLE_="グループ作成" \ 2.72 + -D_FORM_="$note`genform $formdir/grp.def`" \ 2.73 + -D_DUMPTABLE_="`DT_VIEW=grp dumptable html grp 'gname gecos:DESC mtime:TIME' 'order by b.TIME desc'`" \ 2.74 + $layout/html.m4.html $layout/form+dump.m4.html 2.75 +} 2.76 userconf() { 2.77 m4 -D_BODYCLASS_=userconf -D_TITLE_="ユーザ情報編集" $layout/html.m4.html 2.78 GF_ACTION="?home" edittable "$formdir/user.def" "user" "$user" 2.79 @@ -1280,7 +1311,7 @@ 2.80 offset=$((offset + 0)) # change to numeric forcibly 2.81 [ $offset -lt 0 ] && offset=0 2.82 limit=30 2.83 - dir=$tmpdir/$imgcached/$thumbxy.`echo $1|md5` 2.84 + dir=`getcachedir "$1"` 2.85 if [ x"$1" = x"user" ]; then 2.86 hrb="$myname?home" 2.87 deficon=person-default.png 2.88 @@ -2180,26 +2211,6 @@ 2.89 viewtable() { 2.90 GF_VIEWONLY=1 genform "$@" 2.91 } 2.92 -default0() { # $1=def-file 2.93 - tbl=`basename $1` 2.94 - tbl=${tbl%.def} 2.95 - cols="`grep :text $1|cut -d: -f2`" 2.96 - col=`echo "$cols"|head -1` 2.97 - vcol=`getpar $col` 2.98 - err default0: \$1=$1 col=$col cols="[$cols]" vcol=$vcol 2.99 - if [ -n "$vcol" ]; then 2.100 - par2table $1 2.101 - fi 2.102 - ### DT_VIEW="edittable+$tbl" dumptable html $tbl "$cols" \ 2.103 - ## DT_VIEW="edittable+$tbl" dumptable html $tbl "name memo file" \ 2.104 - query "select rowid from $tbl order by rowid desc;" \ 2.105 - | while read rowid; do 2.106 - viewtable $1 $tbl $rowid 2.107 - done | m4 -D_TITLE_="$tbl" \ 2.108 - -D_FORM_="`genform $1`" \ 2.109 - -D_DUMPTABLE_="syscmd(cat)" \ 2.110 - $layout/html.m4.html $layout/form+dump.m4.html 2.111 -} 2.112 showattc() { 2.113 # $1=table_m $2=rowid 2.114 err \$1=$1 \$2=$2 2.115 @@ -2233,3 +2244,98 @@ 2.116 #echo "Content-Type: " ${type#file:}; echo 2.117 cat $bin 2.118 } 2.119 +# 2.120 +# Some default stupid handler on CGI values 2.121 +# 2.122 +default_storedb() { 2.123 + # ARG: $1=table-def-file 2.124 + # RET: $tbl=table-name, $col=mail-column, $cols=columns 2.125 + tbl=`basename $1` 2.126 + tbl=${tbl%.def} 2.127 + cols="`grep :text $1|cut -d: -f2`" 2.128 + col=`echo "$cols"|head -1` 2.129 + vcol=`getpar $col` 2.130 + err default0: \$1=$1 col=$col cols="[$cols]" vcol=$vcol 2.131 + if [ -n "$vcol" ]; then 2.132 + par2table $1 2.133 + else 2.134 + return 2 # No insertion occurred 2.135 + fi 2.136 +} 2.137 + 2.138 +default_view() { # $1=def-file 2.139 + ### DT_VIEW="edittable+$tbl" dumptable html $tbl "$cols" \ 2.140 + ## DT_VIEW="edittable+$tbl" dumptable html $tbl "name memo file" \ 2.141 + default_storedb "$@" 2.142 + query "select rowid from $tbl order by rowid desc;" \ 2.143 + | while read rowid; do 2.144 + viewtable $1 $tbl $rowid 2.145 + done | m4 -D_TITLE_="$tbl" \ 2.146 + -D_FORM_="`genform $1`" \ 2.147 + -D_DUMPTABLE_="syscmd(cat)" \ 2.148 + $layout/html.m4.html $layout/form+dump.m4.html 2.149 +} 2.150 +default_viewtext() { # $1=def-file 2.151 + ### DT_VIEW="edittable+$tbl" dumptable html $tbl "$cols" \ 2.152 + default_storedb "$@" 2.153 + DT_VIEW="viewtable+$tbl" dumptable html $tbl "name memo file" \ 2.154 + | m4 -D_TITLE_="$tbl" \ 2.155 + -D_FORM_="`genform $1`" \ 2.156 + -D_DUMPTABLE_="syscmd(cat)" \ 2.157 + $layout/html.m4.html $layout/form+dump.m4.html 2.158 +} 2.159 +default_smail() { 2.160 + default_storedb "$@" 2.161 + if [ $? -eq 2 ]; then 2.162 + m4 -D_TITLE_="入力" \ 2.163 + -D_FORM_="`genform $1`" \ 2.164 + -D_DUMPTABLE_="" \ 2.165 + $layout/html.m4.html $layout/form+dump.m4.html 2.166 + return 2.167 + fi 2.168 + cond="" 2.169 + for pk in `gettblpkey $tbl`; do 2.170 + pv=$(sqlquote $(getpar $pk)) 2.171 + cond="$cond${cond:+ and }$pk=$pv" 2.172 + done 2.173 + sql="select rowid from $tbl where $cond;" 2.174 + rowid=`query "$sql"` 2.175 + err smail1 - "$sql" "-> rowid=$rowid" 2.176 + 2.177 + while IFS=: read prompt name keytype type args; do # Read from $1 2.178 + val=`getpar $name` 2.179 + if [ -n "$val" ]; then 2.180 + text="$text 2.181 +$prompt 2.182 +$name=$val 2.183 +---------------------------------------------------------" 2.184 + fi 2.185 + case "$type" in 2.186 + image|document|file) 2.187 + fn="`getvalbyid $tbl $name $rowid $tmpd`" 2.188 + fns=$(echo "$fn"|while read fn; do 2.189 + err mv $tmpd/$fn.orig $tmpd/$fn 2.190 + mv $tmpd/$fn.orig $tmpd/$fn 2.191 + rm $tmpd/$fn.rowid # Remove cache flag 2.192 + err "`ls $tmpd/$fn`" 2.193 + echo $fn 2.194 + done) 2.195 + files="$files $fns" 2.196 + ;; 2.197 + esac 2.198 + done < $1 2.199 + err FILES=$files "`ls -lF $tmpd`" 2.200 + subj="from ${REMOTE_ADDR}" 2.201 + (echo "$URL" 2.202 + echo "への書き込みがありました。" 2.203 + echo "------" 2.204 + echo "$text" 2.205 + ) | (cd $tmpd && 2.206 + err LS="`ls -lF`" && 2.207 + $mydir/sendmultipart.sh -t "$admin" -s "$subj" $files) 2.208 + m4 -D_TITLE_="入力完了" $layout/html.m4.html 2.209 + echo "以下の内容で送信しました。" | html p 2.210 + viewtable $1 $tbl \ 2.211 + `query "select rowid from $tbl order by rowid desc limit 1;"` 2.212 + echo "戻る" | html a "href=\"?\"" 2.213 +}
3.1 --- a/s4.cgi Fri Jul 31 23:53:56 2015 +0900 3.2 +++ b/s4.cgi Sat Aug 01 23:00:57 2015 +0900 3.3 @@ -20,7 +20,7 @@ 3.4 ;; 3.5 esac 3.6 3.7 -err 1=$1 2=$2 3=$3 4=$4 3.8 +## err 1=$1 2=$2 3=$3 4=$4 3.9 stage=`getpar stage` 3.10 stage=${stage:-$1} 3.11 case ${stage} in 3.12 @@ -57,27 +57,7 @@ 3.13 ;; 3.14 "groupman") 3.15 contenttype; echo 3.16 - gname=`getpar gname` 3.17 - if [ -n "$gname" ]; then 3.18 - #gname=${gname%%[!-A-Z0-9a-z_.!#$%^&()=:/*]*} 3.19 - #newgname=`echo "$gname"|tr -dc '\-0-9A-Za-z#=:/_.,'` 3.20 - newgname=`echo "$gname"|tr -d '\"'` 3.21 - newgname=$gname 3.22 - if [ x"$newgname" != x"$gname" ]; then 3.23 - err NewGNAME: gname=$newgname 3.24 - echo "使用禁止文字を除去し $gname としました。" | html p 3.25 - gname=$newgname 3.26 - replpar gname string "$gname" 3.27 - fi 3.28 - par2table $formdir/grp.def 3.29 - joingrp "$gname" "$user" yes "$user" as-admin 3.30 - fi 3.31 - GF_STAGE=groupman 3.32 - note="グループ名に使用できない文字は自動的に削除されます。" | html p 3.33 - m4 -D_TITLE_="グループ作成" \ 3.34 - -D_FORM_="$note`genform $formdir/grp.def`" \ 3.35 - -D_DUMPTABLE_="`DT_VIEW=grp dumptable html grp 'gname gecos:DESC mtime:TIME' 'order by b.TIME desc'`" \ 3.36 - $layout/html.m4.html $layout/form+dump.m4.html 3.37 + groupman 3.38 ;; 3.39 "edittable") 3.40 contenttype; echo 3.41 @@ -109,7 +89,6 @@ 3.42 -D_TITLE_="グループ関連操作" \ 3.43 -D_FORM_="<a href=\"?groupman\">新規グループ作成</a>" \ 3.44 $layout/form+dump.m4.html 3.45 - 3.46 ;; 3.47 "grps2") 3.48 contenttype; echo 3.49 @@ -235,46 +214,8 @@ 3.50 "searchart") # $2=blogowner 3.51 contenttype; echo 3.52 m4 -D_TITLE_="検索結果" $layout/html.m4.html 3.53 - kwd=`getpar kwd` 3.54 - if [ -z "$kwd" ]; then 3.55 - echo "検索語を指定してください" | html p 3.56 - else 3.57 - owner=`getpar owner` 3.58 - owner=${owner:-$2} 3.59 - echo "「$kwd」による検索結果" | html p 3.60 - if [ -n "$owner" ]; then 3.61 - cond="where key='owner' and val='$owner'" 3.62 - if isuser $owner; then 3.63 - echo "(`linkhome $owner` さんの記録からの検索)" | html p 3.64 - else 3.65 - linkhome $owner 1>&3 3.66 - echo "(`linkhome $owner` グループからの検索)" | html p 3.67 - fi 3.68 - fi 3.69 - # article_s: id=article-id, key='text', val='TEXT' 3.70 - # article: id=article-id, blogid=blogkd 3.71 - # blog: id=blog-id, author=LeaderAuthor 3.72 - # blog_s: id=blog-id, key='title', val='BLOG-TITLE' 3.73 - # WANT: blog-ROWid,article-id,val(TEXT) 3.74 - sql="select b.rowid||'#'||x.id as '', 3.75 - b.title as TITLE, 3.76 - substr(x.val, 0, 80) as TEXT 3.77 - from (select blog.rowid,blog.*,bs.val as title from blog join blog_s bs 3.78 - on blog.id=bs.id and bs.key='title') b 3.79 - join 3.80 - (select a.id,a.blogid,s.val from article a join article_s s 3.81 - on a.id=s.id where s.val like '%$kwd%') 3.82 - x on b.id=x.blogid 3.83 - where b.id in (select id from blog_s 3.84 - $cond);" 3.85 - sedopt="s,<TR><TD>\([^<]*\)</TD>,<TR><TD><a\ 3.86 - href=\"?replyblog+\1\">VIEW</a></TD>," 3.87 - cat<<EOF 3.88 -<table class="b searchart"> 3.89 -`sq -header -html $db "$sql"|sed "$sedopt"` 3.90 -</table> 3.91 -EOF 3.92 - fi 3.93 + . ./s4-blog.sh 3.94 + searchart $2 3.95 ;; 3.96 "send2mem") 3.97 contenttype; echo