diff s4-blog.sh @ 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 130114486d8c
children 511406c0cbbe
line wrap: on
line diff
--- a/s4-blog.sh	Tue Dec 22 15:26:43 2015 +0859
+++ b/s4-blog.sh	Tue Dec 29 09:50:35 2015 +0859
@@ -226,6 +226,203 @@
   acclog blog $rowid
 }
 
+blog_showentry2() {
+  # $1=table $2=rowid
+  # if [ -n "$2" ]; then
+  #   if [ -n "$imgcached" ]; then
+  #     bstmpdir=$tmpdir/$imgcached/$thumbxy
+  #   else
+  #     bstmpdir=$tmpd
+  #     # tmpd=`mktempd`
+  #     # tmpfiles=$tmpfiles" $tmpd"
+  #   fi
+  # fi
+  td=`getcachedir "article/$2"`
+  tbl=${1%%[!A-Z0-9a-z_]*} rowid=${2%%[!A-Z0-9a-z_]*}
+err rowid=$rowid, '$2'=$2
+  ts=${tbl}_s tm=${tbl}_m
+  at=article as=article_s am=article_m
+  serial=$(($(date +%s)-1420038000))s$$
+  blog_writable $rowid $user && iswritable=true || iswritable=false
+  # This function grasps blog entry definiton directly.
+  # blog:   id
+  # blog_s: title,ctime,heading
+  # blog_m: *article
+
+  # 2015-10-05 check readable
+  if ! $iswritable; then
+    blogowner=`getvalbyid blog owner "$2"`
+    # err blogowner=$blogowner
+    if isgroup $blogowner; then
+      regmode=`getgroupattr $blogowner regmode`
+      # err regmode=$regmode
+      if [ x"$regmode" = x"moderated" ]; then
+	if ! ismember $user $blogowner; then
+	  echo "加入してからどうぞ" | html p
+	  return
+	fi
+      fi
+    fi
+  fi
+
+  err "SELECT id from $tbl where rowid=$rowid"
+  id=`query "select id from $tbl where rowid=$rowid;"`
+err id=$id
+err "select val from $ts where key='title' and id='$id';"
+
+
+  #(1)Display root article
+  cat<<EOF
+<form class="replyblog" action="$myname?replyblog+${rowid}#bottom" method="POST" enctype="multipart/form-data">
+<table class="bloghead">
+EOF
+
+  href="<a href=\"?editheading+$rowid\"> 編集 </a>"
+  if $iswritable; then
+    href2="<a href=\"?lshandout+$rowid\"> 提出状況 </a>"
+    href3="(<a href=\"?gethandout+$rowid\">ファイル取得</a>)"
+  fi
+  cat<<EOF | sq -html $db \
+      | sed -e "s|\(<TR><TD>\),e,|\1 $href |" \
+	    -e "s|,s,\(</TD>\)|$href2$href3\1|"
+-- select val from $ts where key="title" and id="$id";
+select
+ coalesce((select ",e," from blog where rowid=$rowid and author='$user'),'')
+||val||" "
+||case (select val from $ts where key="mode" and id="$id")
+  when 'report-closed' then "レポート提出用(自身のファイルのみ参照可),s,"
+  when 'report-open' then "レポート提出用,s,"
+  else ""
+  end
+ from $ts where key="ctime" and id="$id";
+select val from $ts where key="heading" and id="$id";
+EOF
+  cat<<EOF
+</table>
+<table class="blog_replies">
+EOF
+
+  lkhome="<a href=\"$myname?home" lke='">'
+  lkedit="<a href=\"$myname?editart"
+  if false; then
+    sq -html $db<<EOF |
+WITH a_s AS (
+  SELECT id,
+         max(CASE key WHEN 'ctime' THEN val END) TIME,
+         max(CASE key WHEN 'text' THEN val END) TEXT
+  FROM article_s
+  GROUP by id
+)
+SELECT	'id:'||a.id,
+	CASE author
+	WHEN '$user' THEN 'ed:'||a.rowid||':'||$rowid
+	ELSE 'e0:'
+	END edit,
+	'at:'||(SELECT rowid FROM user WHERE name=author)||':'
+	     ||coalesce((SELECT val FROM user_s
+			 WHERE name=author AND key='gecos'),
+			author),
+	'ti:'||s.TIME,
+	'te:'||s.TEXT,
+	'im:'||(SELECT group_concat(hex(bin)
+FROM (select rowid,id,author from article where blogid in
+     (select id from blog where rowid=$rowid)) a
+  LEFT JOIN
+     a_s s
+  ON a.id=s.id;
+EOF
+  sed -e "s|^<TR><TD>id:\(.*\)</TD>|<TR id=\"\1\"><TD>|" \
+      -e "/^<TR/N" -e 's/\n//' \
+      -e "s|<TD>ed:\([0-9]*\):\(.*\)</TD>|$lkedit+\1+\2${lke}編集</a>|" \
+      -e "s|<TD>e0:</TD>||" \
+      -e "s|^<TD>at:\([0-9]*\):\(.*\)</TD>|$lkhome+\1$lke\2</a>|" \
+      -e "s|^<TD>ti:\(.*\)</TD>|\1</TD>|" \
+      -e "s|^<TD>te:\(.*\)|<TD>\1|"
+  else
+    hlink="$myname?home" elink="$myname?editart"
+    catlink="$myname?showattc+article_m"
+    deficon="img/file-icon.png"
+    sq $db<<EOF |
+WITH a_s AS (
+  SELECT id,
+         max(CASE key WHEN 'ctime' THEN val END) TIME,
+         max(CASE key WHEN 'text' THEN val END) TEXT
+  FROM article_s
+  GROUP by id
+)
+SELECT	a.id,
+	CASE author
+	WHEN '$user' THEN a.rowid||'+'||$rowid
+	ELSE ''
+	END edit,
+	(SELECT rowid FROM user WHERE name=author) user_rid,
+	coalesce((SELECT val FROM user_s
+			 WHERE name=author AND key='gecos'),
+			author) uname,
+	s.TIME,
+	hex(s.TEXT),
+	(SELECT group_concat(rowid||':'||length(bin)||':'||hex(val), ' ')
+	 FROM article_m
+	 WHERE id=a.id AND key='image') imxgids
+FROM (select rowid,id,author from article where blogid in
+     (select id from blog where rowid=$rowid)) a
+  LEFT JOIN
+     a_s s
+  ON a.id=s.id;
+EOF
+    while IFS='|' read id edit uid uname tm hte imgids; do
+      cat<<EOF
+<tr id="$id">
+<td>${edit:+<a href="$elink+$edit">編集</a>}
+<a href="$hlink+$uid">$uname</a>
+$tm</td><td>`echo "$hte"|unhexize`
+EOF
+      for i in $imgids; do
+	mrid=${i%%:*}; i=${i#*:}; sz=`size_h ${i%%:*}`
+	fn=`echo "${i#*:}"|unhexize`
+	fnb=$fn"(${sz})"
+	# echo r=$mrid fn=$fn
+	case "$fn" in
+	  *.[Pp][Nn][Gg]|*.[Jj][Pp][Gg])
+	    sq $db "SELECT hex(bin) FROM article_m WHERE rowid=$mrid" \
+		| unhexize \
+		| convert -define jpeg:size=100x100 -resize 100x100'>' - jpeg:- \
+		| hexize \
+		| sed -e 's/\(..\)/%\1/g' \
+	    	      -e "s|^|<a href=\"$catlink+$mrid\"><img src=\"data:image/jpeg,|" \
+		      -e "s|\$|\">$fnb</a>|"
+	    ;;
+	  *)
+	    echo "<a href=\"$catlink+$mrid\"><img src=\"$deficon\">$fnb</a>"
+	    ;;
+	esac
+      done
+    done
+  fi
+
+  textform='<div><table class="b">
+<tr><td><textarea name="text" cols="40" rows="4"></textarea></td></tr>
+<tr><td>添付ファイル: <input type="file" name="image" multiple></td></tr>
+</table>
+<input type="submit" value="送信">
+<input type="reset" value="リセット"></div>
+'
+  echo '</table>'
+  
+  $iswritable && cat<<EOF
+<div class="blogcomment">
+<p>コメント記入</p>
+<input type="hidden" name="blogid" value="$id">
+<input type="hidden" name="stage" value="replyblog">
+<input type="hidden" name="serial" value="$serial">
+$textform
+</div>
+EOF
+  echo "</form><p id=\"bottom\"></p>"
+  # Record access log
+  acclog blog $rowid
+}
+
 lshandout() {
   # $1=rowid of blog
   if ! blog_writable $1 $user; then
@@ -522,7 +719,7 @@
   def=$formdir/article.def
   echo "$title" > $tmpd/title.$$
   echo "$subtitle" > $tmpd/subtitle.$$
-  blog_showentry blog $rowid \
+  ${BLOG_SHOW:-blog_showentry} blog $rowid \
       | m4 -D_TITLE_="spaste(\`$tmpd/title.$$')" -D_BODYCLASS_=general \
 	   -D_FORMHEAD_="spaste(\`$tmpd/subtitle.$$')" -D_FORM_="" \
 	   -D_DUMPTABLE_="syscmd(cat)" -D_DUMPHEAD_="" \

yatex.org