s4

changeset 154:75598f2d3118

TEST: blog_showentry2 - constructing loop by output from single SQL
author HIROSE Yuuji <yuuji@gentei.org>
date Tue, 29 Dec 2015 09:50:35 +0859
parents f7b4f7e5df2a
children 511406c0cbbe
files s4-blog.sh s4-funcs.sh s4.cgi
diffstat 3 files changed, 210 insertions(+), 3 deletions(-) [+]
line diff
     1.1 --- a/s4-blog.sh	Tue Dec 22 15:26:43 2015 +0859
     1.2 +++ b/s4-blog.sh	Tue Dec 29 09:50:35 2015 +0859
     1.3 @@ -226,6 +226,203 @@
     1.4    acclog blog $rowid
     1.5  }
     1.6  
     1.7 +blog_showentry2() {
     1.8 +  # $1=table $2=rowid
     1.9 +  # if [ -n "$2" ]; then
    1.10 +  #   if [ -n "$imgcached" ]; then
    1.11 +  #     bstmpdir=$tmpdir/$imgcached/$thumbxy
    1.12 +  #   else
    1.13 +  #     bstmpdir=$tmpd
    1.14 +  #     # tmpd=`mktempd`
    1.15 +  #     # tmpfiles=$tmpfiles" $tmpd"
    1.16 +  #   fi
    1.17 +  # fi
    1.18 +  td=`getcachedir "article/$2"`
    1.19 +  tbl=${1%%[!A-Z0-9a-z_]*} rowid=${2%%[!A-Z0-9a-z_]*}
    1.20 +err rowid=$rowid, '$2'=$2
    1.21 +  ts=${tbl}_s tm=${tbl}_m
    1.22 +  at=article as=article_s am=article_m
    1.23 +  serial=$(($(date +%s)-1420038000))s$$
    1.24 +  blog_writable $rowid $user && iswritable=true || iswritable=false
    1.25 +  # This function grasps blog entry definiton directly.
    1.26 +  # blog:   id
    1.27 +  # blog_s: title,ctime,heading
    1.28 +  # blog_m: *article
    1.29 +
    1.30 +  # 2015-10-05 check readable
    1.31 +  if ! $iswritable; then
    1.32 +    blogowner=`getvalbyid blog owner "$2"`
    1.33 +    # err blogowner=$blogowner
    1.34 +    if isgroup $blogowner; then
    1.35 +      regmode=`getgroupattr $blogowner regmode`
    1.36 +      # err regmode=$regmode
    1.37 +      if [ x"$regmode" = x"moderated" ]; then
    1.38 +	if ! ismember $user $blogowner; then
    1.39 +	  echo "加入してからどうぞ" | html p
    1.40 +	  return
    1.41 +	fi
    1.42 +      fi
    1.43 +    fi
    1.44 +  fi
    1.45 +
    1.46 +  err "SELECT id from $tbl where rowid=$rowid"
    1.47 +  id=`query "select id from $tbl where rowid=$rowid;"`
    1.48 +err id=$id
    1.49 +err "select val from $ts where key='title' and id='$id';"
    1.50 +
    1.51 +
    1.52 +  #(1)Display root article
    1.53 +  cat<<EOF
    1.54 +<form class="replyblog" action="$myname?replyblog+${rowid}#bottom" method="POST" enctype="multipart/form-data">
    1.55 +<table class="bloghead">
    1.56 +EOF
    1.57 +
    1.58 +  href="<a href=\"?editheading+$rowid\"> 編集 </a>"
    1.59 +  if $iswritable; then
    1.60 +    href2="<a href=\"?lshandout+$rowid\"> 提出状況 </a>"
    1.61 +    href3="(<a href=\"?gethandout+$rowid\">ファイル取得</a>)"
    1.62 +  fi
    1.63 +  cat<<EOF | sq -html $db \
    1.64 +      | sed -e "s|\(<TR><TD>\),e,|\1 $href |" \
    1.65 +	    -e "s|,s,\(</TD>\)|$href2$href3\1|"
    1.66 +-- select val from $ts where key="title" and id="$id";
    1.67 +select
    1.68 + coalesce((select ",e," from blog where rowid=$rowid and author='$user'),'')
    1.69 +||val||" "
    1.70 +||case (select val from $ts where key="mode" and id="$id")
    1.71 +  when 'report-closed' then "レポート提出用(自身のファイルのみ参照可),s,"
    1.72 +  when 'report-open' then "レポート提出用,s,"
    1.73 +  else ""
    1.74 +  end
    1.75 + from $ts where key="ctime" and id="$id";
    1.76 +select val from $ts where key="heading" and id="$id";
    1.77 +EOF
    1.78 +  cat<<EOF
    1.79 +</table>
    1.80 +<table class="blog_replies">
    1.81 +EOF
    1.82 +
    1.83 +  lkhome="<a href=\"$myname?home" lke='">'
    1.84 +  lkedit="<a href=\"$myname?editart"
    1.85 +  if false; then
    1.86 +    sq -html $db<<EOF |
    1.87 +WITH a_s AS (
    1.88 +  SELECT id,
    1.89 +         max(CASE key WHEN 'ctime' THEN val END) TIME,
    1.90 +         max(CASE key WHEN 'text' THEN val END) TEXT
    1.91 +  FROM article_s
    1.92 +  GROUP by id
    1.93 +)
    1.94 +SELECT	'id:'||a.id,
    1.95 +	CASE author
    1.96 +	WHEN '$user' THEN 'ed:'||a.rowid||':'||$rowid
    1.97 +	ELSE 'e0:'
    1.98 +	END edit,
    1.99 +	'at:'||(SELECT rowid FROM user WHERE name=author)||':'
   1.100 +	     ||coalesce((SELECT val FROM user_s
   1.101 +			 WHERE name=author AND key='gecos'),
   1.102 +			author),
   1.103 +	'ti:'||s.TIME,
   1.104 +	'te:'||s.TEXT,
   1.105 +	'im:'||(SELECT group_concat(hex(bin)
   1.106 +FROM (select rowid,id,author from article where blogid in
   1.107 +     (select id from blog where rowid=$rowid)) a
   1.108 +  LEFT JOIN
   1.109 +     a_s s
   1.110 +  ON a.id=s.id;
   1.111 +EOF
   1.112 +  sed -e "s|^<TR><TD>id:\(.*\)</TD>|<TR id=\"\1\"><TD>|" \
   1.113 +      -e "/^<TR/N" -e 's/\n//' \
   1.114 +      -e "s|<TD>ed:\([0-9]*\):\(.*\)</TD>|$lkedit+\1+\2${lke}編集</a>|" \
   1.115 +      -e "s|<TD>e0:</TD>||" \
   1.116 +      -e "s|^<TD>at:\([0-9]*\):\(.*\)</TD>|$lkhome+\1$lke\2</a>|" \
   1.117 +      -e "s|^<TD>ti:\(.*\)</TD>|\1</TD>|" \
   1.118 +      -e "s|^<TD>te:\(.*\)|<TD>\1|"
   1.119 +  else
   1.120 +    hlink="$myname?home" elink="$myname?editart"
   1.121 +    catlink="$myname?showattc+article_m"
   1.122 +    deficon="img/file-icon.png"
   1.123 +    sq $db<<EOF |
   1.124 +WITH a_s AS (
   1.125 +  SELECT id,
   1.126 +         max(CASE key WHEN 'ctime' THEN val END) TIME,
   1.127 +         max(CASE key WHEN 'text' THEN val END) TEXT
   1.128 +  FROM article_s
   1.129 +  GROUP by id
   1.130 +)
   1.131 +SELECT	a.id,
   1.132 +	CASE author
   1.133 +	WHEN '$user' THEN a.rowid||'+'||$rowid
   1.134 +	ELSE ''
   1.135 +	END edit,
   1.136 +	(SELECT rowid FROM user WHERE name=author) user_rid,
   1.137 +	coalesce((SELECT val FROM user_s
   1.138 +			 WHERE name=author AND key='gecos'),
   1.139 +			author) uname,
   1.140 +	s.TIME,
   1.141 +	hex(s.TEXT),
   1.142 +	(SELECT group_concat(rowid||':'||length(bin)||':'||hex(val), ' ')
   1.143 +	 FROM article_m
   1.144 +	 WHERE id=a.id AND key='image') imxgids
   1.145 +FROM (select rowid,id,author from article where blogid in
   1.146 +     (select id from blog where rowid=$rowid)) a
   1.147 +  LEFT JOIN
   1.148 +     a_s s
   1.149 +  ON a.id=s.id;
   1.150 +EOF
   1.151 +    while IFS='|' read id edit uid uname tm hte imgids; do
   1.152 +      cat<<EOF
   1.153 +<tr id="$id">
   1.154 +<td>${edit:+<a href="$elink+$edit">編集</a>}
   1.155 +<a href="$hlink+$uid">$uname</a>
   1.156 +$tm</td><td>`echo "$hte"|unhexize`
   1.157 +EOF
   1.158 +      for i in $imgids; do
   1.159 +	mrid=${i%%:*}; i=${i#*:}; sz=`size_h ${i%%:*}`
   1.160 +	fn=`echo "${i#*:}"|unhexize`
   1.161 +	fnb=$fn"(${sz})"
   1.162 +	# echo r=$mrid fn=$fn
   1.163 +	case "$fn" in
   1.164 +	  *.[Pp][Nn][Gg]|*.[Jj][Pp][Gg])
   1.165 +	    sq $db "SELECT hex(bin) FROM article_m WHERE rowid=$mrid" \
   1.166 +		| unhexize \
   1.167 +		| convert -define jpeg:size=100x100 -resize 100x100'>' - jpeg:- \
   1.168 +		| hexize \
   1.169 +		| sed -e 's/\(..\)/%\1/g' \
   1.170 +	    	      -e "s|^|<a href=\"$catlink+$mrid\"><img src=\"data:image/jpeg,|" \
   1.171 +		      -e "s|\$|\">$fnb</a>|"
   1.172 +	    ;;
   1.173 +	  *)
   1.174 +	    echo "<a href=\"$catlink+$mrid\"><img src=\"$deficon\">$fnb</a>"
   1.175 +	    ;;
   1.176 +	esac
   1.177 +      done
   1.178 +    done
   1.179 +  fi
   1.180 +
   1.181 +  textform='<div><table class="b">
   1.182 +<tr><td><textarea name="text" cols="40" rows="4"></textarea></td></tr>
   1.183 +<tr><td>添付ファイル: <input type="file" name="image" multiple></td></tr>
   1.184 +</table>
   1.185 +<input type="submit" value="送信">
   1.186 +<input type="reset" value="リセット"></div>
   1.187 +'
   1.188 +  echo '</table>'
   1.189 +  
   1.190 +  $iswritable && cat<<EOF
   1.191 +<div class="blogcomment">
   1.192 +<p>コメント記入</p>
   1.193 +<input type="hidden" name="blogid" value="$id">
   1.194 +<input type="hidden" name="stage" value="replyblog">
   1.195 +<input type="hidden" name="serial" value="$serial">
   1.196 +$textform
   1.197 +</div>
   1.198 +EOF
   1.199 +  echo "</form><p id=\"bottom\"></p>"
   1.200 +  # Record access log
   1.201 +  acclog blog $rowid
   1.202 +}
   1.203 +
   1.204  lshandout() {
   1.205    # $1=rowid of blog
   1.206    if ! blog_writable $1 $user; then
   1.207 @@ -522,7 +719,7 @@
   1.208    def=$formdir/article.def
   1.209    echo "$title" > $tmpd/title.$$
   1.210    echo "$subtitle" > $tmpd/subtitle.$$
   1.211 -  blog_showentry blog $rowid \
   1.212 +  ${BLOG_SHOW:-blog_showentry} blog $rowid \
   1.213        | m4 -D_TITLE_="spaste(\`$tmpd/title.$$')" -D_BODYCLASS_=general \
   1.214  	   -D_FORMHEAD_="spaste(\`$tmpd/subtitle.$$')" -D_FORM_="" \
   1.215  	   -D_DUMPTABLE_="syscmd(cat)" -D_DUMPHEAD_="" \
     2.1 --- a/s4-funcs.sh	Tue Dec 22 15:26:43 2015 +0859
     2.2 +++ b/s4-funcs.sh	Tue Dec 29 09:50:35 2015 +0859
     2.3 @@ -738,6 +738,16 @@
     2.4    fi
     2.5    cat "$@" | $enascii
     2.6  }
     2.7 +size_h() {
     2.8 +  i="$1"
     2.9 +  set -- B KB MM GB TB
    2.10 +  while [ $((i)) -gt 0 -a -n "$1" ]; do
    2.11 +    oi=$i
    2.12 +    i=$((i/1024))
    2.13 +  done
    2.14 +  shift
    2.15 +  echo ${oi}$1
    2.16 +}
    2.17  gettblconf() {
    2.18    if [ -z "$tconfs" ]; then
    2.19  ##    tconfs=`sq $db \
     3.1 --- a/s4.cgi	Tue Dec 22 15:26:43 2015 +0859
     3.2 +++ b/s4.cgi	Tue Dec 29 09:50:35 2015 +0859
     3.3 @@ -62,8 +62,8 @@
     3.4      rowid=${2%%[!A-Z0-9a-z_]*}
     3.5      ## err ROWid=$rowid, '$2'=$2
     3.6      . ./s4-blog.sh
     3.7 -err blog_reply $rowid
     3.8 -    blog_reply $rowid
     3.9 +err blog_reply2 $rowid
    3.10 +    BLOG_SHOW=blog_showentry2 blog_reply $rowid
    3.11      ;;
    3.12    lshandout|gethandout)
    3.13      if [ x"$stage" = x"lshandout" ]; then