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