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