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 wrap: on
line diff
--- 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="<a href=\"?home"
   for a in $arts; do
     arid=${a%%\|*} aid=`echo "$a"|cut -d'|' -f2` author=${a##*\|} imgs=""
-err a=$a, aid=$aid, author=$author
-    # name=''	# Get gecos??
-    # td=$(echo $bstmpdir/`echo $at|md5`)
-err td=$td
+    err a=$a, aid=$aid, author=$author
+    err td=$td
     val=`getvalbyid article image "$arid" "$td"`
     err val="[$val]" and td as follows:
     
@@ -293,7 +291,47 @@
   echo
   cat $arc
 }
-
+searchart() {
+  kwd=`getpar kwd`
+  if [ -z "$kwd" ]; then
+    echo "検索語を指定してください" | html p; return
+  fi
+  owner=`getpar owner`
+  owner=${owner:-$1}
+  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,<TR><TD>\([^<]*\)</TD>,<TR><TD><a\
+ href=\"?replyblog+\1\">VIEW</a></TD>,"
+  cat<<EOF
+<table class="b searchart">
+`sq -header -html $db "$sql"|sed "$sedopt"`
+</table>
+EOF
+}
 listblog() (
   # $1={user,group}
   qow=`sqlquote $1`
--- 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<<EOF | unhexize > $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="<p>グループ名に使用できない文字は自動的に削除されます。</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
+}
 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=\"?\""
+}
--- 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_="<a href=\"?groupman\">新規グループ作成</a>" \
 	     $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,<TR><TD>\([^<]*\)</TD>,<TR><TD><a\
- href=\"?replyblog+\1\">VIEW</a></TD>,"
-      cat<<EOF
-<table class="b searchart">
-`sq -header -html $db "$sql"|sed "$sedopt"`
-</table>
-EOF
-    fi
+    . ./s4-blog.sh
+    searchart $2
     ;;
   "send2mem")
     contenttype; echo

yatex.org