# HG changeset patch # User HIROSE Yuuji # Date 1438437657 -32400 # Node ID 0cbbb0874eb50ad864d15f9538a35fc48ef586a7 # Parent 10bd684f07d271078026dcbf2e0ec42592b486ec Code cleaning diff -r 10bd684f07d2 -r 0cbbb0874eb5 s4-blog.sh --- a/s4-blog.sh Fri Jul 31 23:53:56 2015 +0900 +++ b/s4-blog.sh Sat Aug 01 23:00:57 2015 +0900 @@ -144,10 +144,8 @@ hrefhome0="&3 + echo "(`linkhome $owner` グループからの検索)" | html p + fi + fi + # article_s: id=article-id, key='text', val='TEXT' + # article: id=article-id, blogid=blogkd + # blog: id=blog-id, author=LeaderAuthor + # blog_s: id=blog-id, key='title', val='BLOG-TITLE' + # WANT: blog-ROWid,article-id,val(TEXT) + sql="select b.rowid||'#'||x.id as '', + b.title as TITLE, + substr(x.val, 0, 80) as TEXT + from (select blog.rowid,blog.*,bs.val as title from blog join blog_s bs + on blog.id=bs.id and bs.key='title') b + join + (select a.id,a.blogid,s.val from article a join article_s s + on a.id=s.id where s.val like '%$kwd%') + x on b.id=x.blogid + where b.id in (select id from blog_s + $cond);" + sedopt="s,\([^<]*\),VIEW," + cat< +`sq -header -html $db "$sql"|sed "$sedopt"` + +EOF +} listblog() ( # $1={user,group} qow=`sqlquote $1` diff -r 10bd684f07d2 -r 0cbbb0874eb5 s4-funcs.sh --- a/s4-funcs.sh Fri Jul 31 23:53:56 2015 +0900 +++ b/s4-funcs.sh Sat Aug 01 23:00:57 2015 +0900 @@ -334,7 +334,9 @@ isfilereadable() { # $1=user $2=tbl $3=rowid # Return true if user($1) can read attachment files in tbl($2):rowid($3) [ -z "$1" -o -z "$2" -o -z "$3" ] && return 1 # invalid argument - + + # Return true when anonymous mode + [ "$anonymousmode" ] && return 0 # case `getvalbyid blog mode $2` in # normal|*open*|"") return 0 ;; # *closed*) @@ -501,12 +503,17 @@ getparquote() { sqlquote `getpar $1` } +getbinbyid() { + # $1=tbl $2=col $3=rowid $4=tmpdirForBinary + +} getvalbyid() { # $1=tbl $2=col $3=rowid $4=tmpdirForBinary # If two or more values found, save them to $tmpd/${column}.$N and # store the number of files into $tmpd/${column}.count and # their each rowid stored into $tmpd/${column}.$N.rowid. ### err gtb-$1=`gettblcols $1`, tbl=$1, col=$2, '$3'=$3 + # Non-null for $GVAL_KEEP_ORIG_BIN keep original binary instead of icon (for c in `gettblcols $1`; do if [ x"$2" = x"$c" ]; then err "select $2 from $1 where rowid=$3" @@ -550,6 +557,7 @@ file=$td/`query "select val from $cond $slice;"` # FOR SPEED: Skip file generation if imgcache exists [ -s $file -a -s $td/$fn.rowid ] && continue + # err gvbid-get="select quote(bin) from $cond $slice;" sq $db< $file .output $td/$fn.rowid select rowid from $cond $slice; @@ -560,8 +568,10 @@ .output stdout select quote(bin) from $cond $slice; EOF + # err gvbid-get2: "`ls -lF $file`" ## err i=$i - file=$file rowid=`cat $td/$fn.rowid` ln $td/$fn.rowid $file.rowid 2>&3 # for convenience + cp $file $file.orig 2>&3 ls -lh $file | awk '{print $5"B"}' > $file.size case $type in *:[Ii]mage*) mogrify -geometry $thumbxy $file ;; @@ -1176,6 +1186,27 @@ $layout/login.m4.html return } +groupman() { + gname=`getpar gname` + if [ -n "$gname" ]; then + newgname=`echo "$gname"|tr -d '\"'` + newgname=$gname + if [ x"$newgname" != x"$gname" ]; then + err NewGNAME: gname=$newgname + echo "使用禁止文字を除去し $gname としました。" | html p + gname=$newgname + replpar gname string "$gname" + fi + par2table $formdir/grp.def + joingrp "$gname" "$user" yes "$user" as-admin + fi + GF_STAGE=groupman + note="

グループ名に使用できない文字は自動的に削除されます。

" + m4 -D_TITLE_="グループ作成" \ + -D_FORM_="$note`genform $formdir/grp.def`" \ + -D_DUMPTABLE_="`DT_VIEW=grp dumptable html grp 'gname gecos:DESC mtime:TIME' 'order by b.TIME desc'`" \ + $layout/html.m4.html $layout/form+dump.m4.html +} userconf() { m4 -D_BODYCLASS_=userconf -D_TITLE_="ユーザ情報編集" $layout/html.m4.html GF_ACTION="?home" edittable "$formdir/user.def" "user" "$user" @@ -1280,7 +1311,7 @@ offset=$((offset + 0)) # change to numeric forcibly [ $offset -lt 0 ] && offset=0 limit=30 - dir=$tmpdir/$imgcached/$thumbxy.`echo $1|md5` + dir=`getcachedir "$1"` if [ x"$1" = x"user" ]; then hrb="$myname?home" deficon=person-default.png @@ -2180,26 +2211,6 @@ viewtable() { GF_VIEWONLY=1 genform "$@" } -default0() { # $1=def-file - tbl=`basename $1` - tbl=${tbl%.def} - cols="`grep :text $1|cut -d: -f2`" - col=`echo "$cols"|head -1` - vcol=`getpar $col` - err default0: \$1=$1 col=$col cols="[$cols]" vcol=$vcol - if [ -n "$vcol" ]; then - par2table $1 - fi - ### DT_VIEW="edittable+$tbl" dumptable html $tbl "$cols" \ - ## DT_VIEW="edittable+$tbl" dumptable html $tbl "name memo file" \ - query "select rowid from $tbl order by rowid desc;" \ - | while read rowid; do - viewtable $1 $tbl $rowid - done | m4 -D_TITLE_="$tbl" \ - -D_FORM_="`genform $1`" \ - -D_DUMPTABLE_="syscmd(cat)" \ - $layout/html.m4.html $layout/form+dump.m4.html -} showattc() { # $1=table_m $2=rowid err \$1=$1 \$2=$2 @@ -2233,3 +2244,98 @@ #echo "Content-Type: " ${type#file:}; echo cat $bin } +# +# Some default stupid handler on CGI values +# +default_storedb() { + # ARG: $1=table-def-file + # RET: $tbl=table-name, $col=mail-column, $cols=columns + tbl=`basename $1` + tbl=${tbl%.def} + cols="`grep :text $1|cut -d: -f2`" + col=`echo "$cols"|head -1` + vcol=`getpar $col` + err default0: \$1=$1 col=$col cols="[$cols]" vcol=$vcol + if [ -n "$vcol" ]; then + par2table $1 + else + return 2 # No insertion occurred + fi +} + +default_view() { # $1=def-file + ### DT_VIEW="edittable+$tbl" dumptable html $tbl "$cols" \ + ## DT_VIEW="edittable+$tbl" dumptable html $tbl "name memo file" \ + default_storedb "$@" + query "select rowid from $tbl order by rowid desc;" \ + | while read rowid; do + viewtable $1 $tbl $rowid + done | m4 -D_TITLE_="$tbl" \ + -D_FORM_="`genform $1`" \ + -D_DUMPTABLE_="syscmd(cat)" \ + $layout/html.m4.html $layout/form+dump.m4.html +} +default_viewtext() { # $1=def-file + ### DT_VIEW="edittable+$tbl" dumptable html $tbl "$cols" \ + default_storedb "$@" + DT_VIEW="viewtable+$tbl" dumptable html $tbl "name memo file" \ + | m4 -D_TITLE_="$tbl" \ + -D_FORM_="`genform $1`" \ + -D_DUMPTABLE_="syscmd(cat)" \ + $layout/html.m4.html $layout/form+dump.m4.html +} +default_smail() { + default_storedb "$@" + if [ $? -eq 2 ]; then + m4 -D_TITLE_="入力" \ + -D_FORM_="`genform $1`" \ + -D_DUMPTABLE_="" \ + $layout/html.m4.html $layout/form+dump.m4.html + return + fi + cond="" + for pk in `gettblpkey $tbl`; do + pv=$(sqlquote $(getpar $pk)) + cond="$cond${cond:+ and }$pk=$pv" + done + sql="select rowid from $tbl where $cond;" + rowid=`query "$sql"` + err smail1 - "$sql" "-> rowid=$rowid" + + while IFS=: read prompt name keytype type args; do # Read from $1 + val=`getpar $name` + if [ -n "$val" ]; then + text="$text +$prompt +$name=$val +---------------------------------------------------------" + fi + case "$type" in + image|document|file) + fn="`getvalbyid $tbl $name $rowid $tmpd`" + fns=$(echo "$fn"|while read fn; do + err mv $tmpd/$fn.orig $tmpd/$fn + mv $tmpd/$fn.orig $tmpd/$fn + rm $tmpd/$fn.rowid # Remove cache flag + err "`ls $tmpd/$fn`" + echo $fn + done) + files="$files $fns" + ;; + esac + done < $1 + err FILES=$files "`ls -lF $tmpd`" + subj="from ${REMOTE_ADDR}" + (echo "$URL" + echo "への書き込みがありました。" + echo "------" + echo "$text" + ) | (cd $tmpd && + err LS="`ls -lF`" && + $mydir/sendmultipart.sh -t "$admin" -s "$subj" $files) + m4 -D_TITLE_="入力完了" $layout/html.m4.html + echo "以下の内容で送信しました。" | html p + viewtable $1 $tbl \ + `query "select rowid from $tbl order by rowid desc limit 1;"` + echo "戻る" | html a "href=\"?\"" +} diff -r 10bd684f07d2 -r 0cbbb0874eb5 s4.cgi --- a/s4.cgi Fri Jul 31 23:53:56 2015 +0900 +++ b/s4.cgi Sat Aug 01 23:00:57 2015 +0900 @@ -20,7 +20,7 @@ ;; esac -err 1=$1 2=$2 3=$3 4=$4 +## err 1=$1 2=$2 3=$3 4=$4 stage=`getpar stage` stage=${stage:-$1} case ${stage} in @@ -57,27 +57,7 @@ ;; "groupman") contenttype; echo - gname=`getpar gname` - if [ -n "$gname" ]; then - #gname=${gname%%[!-A-Z0-9a-z_.!#$%^&()=:/*]*} - #newgname=`echo "$gname"|tr -dc '\-0-9A-Za-z#=:/_.,'` - newgname=`echo "$gname"|tr -d '\"'` - newgname=$gname - if [ x"$newgname" != x"$gname" ]; then - err NewGNAME: gname=$newgname - echo "使用禁止文字を除去し $gname としました。" | html p - gname=$newgname - replpar gname string "$gname" - fi - par2table $formdir/grp.def - joingrp "$gname" "$user" yes "$user" as-admin - fi - GF_STAGE=groupman - note="グループ名に使用できない文字は自動的に削除されます。" | html p - m4 -D_TITLE_="グループ作成" \ - -D_FORM_="$note`genform $formdir/grp.def`" \ - -D_DUMPTABLE_="`DT_VIEW=grp dumptable html grp 'gname gecos:DESC mtime:TIME' 'order by b.TIME desc'`" \ - $layout/html.m4.html $layout/form+dump.m4.html + groupman ;; "edittable") contenttype; echo @@ -109,7 +89,6 @@ -D_TITLE_="グループ関連操作" \ -D_FORM_="新規グループ作成" \ $layout/form+dump.m4.html - ;; "grps2") contenttype; echo @@ -235,46 +214,8 @@ "searchart") # $2=blogowner contenttype; echo m4 -D_TITLE_="検索結果" $layout/html.m4.html - kwd=`getpar kwd` - if [ -z "$kwd" ]; then - echo "検索語を指定してください" | html p - else - owner=`getpar owner` - owner=${owner:-$2} - echo "「$kwd」による検索結果" | html p - if [ -n "$owner" ]; then - cond="where key='owner' and val='$owner'" - if isuser $owner; then - echo "(`linkhome $owner` さんの記録からの検索)" | html p - else - linkhome $owner 1>&3 - echo "(`linkhome $owner` グループからの検索)" | html p - fi - fi - # article_s: id=article-id, key='text', val='TEXT' - # article: id=article-id, blogid=blogkd - # blog: id=blog-id, author=LeaderAuthor - # blog_s: id=blog-id, key='title', val='BLOG-TITLE' - # WANT: blog-ROWid,article-id,val(TEXT) - sql="select b.rowid||'#'||x.id as '', - b.title as TITLE, - substr(x.val, 0, 80) as TEXT - from (select blog.rowid,blog.*,bs.val as title from blog join blog_s bs - on blog.id=bs.id and bs.key='title') b - join - (select a.id,a.blogid,s.val from article a join article_s s - on a.id=s.id where s.val like '%$kwd%') - x on b.id=x.blogid - where b.id in (select id from blog_s - $cond);" - sedopt="s,\([^<]*\),VIEW," - cat< -`sq -header -html $db "$sql"|sed "$sedopt"` - -EOF - fi + . ./s4-blog.sh + searchart $2 ;; "send2mem") contenttype; echo