Mercurial > hgrepos > hgweb.cgi > s4
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_="" \