Mercurial > hgrepos > hgweb.cgi > s4
changeset 369:5f01ead0174f
Add feature of scoring up all report-style blogs.
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Sat, 26 Nov 2016 09:38:11 +0859 |
parents | aba7076b6ea6 |
children | 0cfba5e4c7a3 |
files | examples/common/default/default.css s4-blog.sh s4.cgi |
diffstat | 3 files changed, 124 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/examples/common/default/default.css Sat Nov 26 09:37:13 2016 +0859 +++ b/examples/common/default/default.css Sat Nov 26 09:38:11 2016 +0859 @@ -20,10 +20,21 @@ div.topmenu ul a {text-decoration: none;} ldiv.topmenu + h1 {clear: both; margin-top: 3em;} +pre.list { + overflow: auto; width: 96%; height: 40%; background: white; + border: 2px inset; +} +p.copyright { + border-top: 2px inset #555; text-align: right; + font-size: 50%; +} +p.copyright a {text-decoration: none;} td {padding-left: 0.5ex; padding-right: 0.5ex;} table.td2r td:nth-child(2) {text-align: right;} table.td3r td:nth-child(3) {text-align: right;} +table.td3rr td:nth-child(n+3) {text-align: right;} +table.td3evw th:nth-child(2n+4) {background: white;} table.form, table.b, table.b tr, table.b td, table.b th { border: 1px solid black; border-collapse: collapse; @@ -142,7 +153,7 @@ } div.foldtabs > div { position: absolute; top: 2.5em; opacity: 0.0; background: pink; - margin: 2px; scroll: auto; + margin: 2px; overflow: auto; } div.foldtabs input[type="radio"] {display: none;} div.foldtabs input[type="radio"]:checked + label + div {
--- a/s4-blog.sh Sat Nov 26 09:37:13 2016 +0859 +++ b/s4-blog.sh Sat Nov 26 09:38:11 2016 +0859 @@ -114,7 +114,11 @@ href="<a href=\"?editheading+$rowid\" accesskey=\"e\" title=\"E\"> 編集 </a>" if $iswritable; then - href2="<a href=\"?lshandout+$rowid\" accesskey=\"l\" title=\"L\"> 提出状況 </a>" + case `getvalbyid blog mode $rowid` in + *report*) + href2="<a href=\"?lshandout+$rowid\" accesskey=\"l\" title=\"L\"> 提出状況 </a>" + ;; + esac href3="(<a href=\"?gethandout+$rowid\" accesskey=\"f\" title=\"F\">ファイル取得</a>)" fi href4='<a href="#bottom" accesskey="b" title="B"> 末尾へ</a>' @@ -303,41 +307,132 @@ owner=`getvalbyid blog owner $1` title=`getvalbyid blog title $1` ge=`gecos $owner` + fh=$tmpd/formhead + echo "$time [$title]@${ge:-$owner}" > $fh lshandoutsub $owner "$@" \ |_m4 -D_TITLE_="提出状況" \ - -D_FORMHEAD_="$time [$title]@${ge:-$owner}" \ + -D_FORMHEAD_="syscmd(cat $fh)" \ -D_FORM_="syscmd(cat)" -D_DUMPHEAD_= -D_DUMPTABLE_= \ $layout/html.m4.html $layout/form+dump-whead.m4.html + gn=`echo $owner|htmlescape` + echo "<p><a href=\"?lshandoutall+$1\">グループ $gn すべてのレポート板集計</a></p>" +} +gethandoutcsv() { + # contenttype; echo + CATCSV=1 lshandoutall "$1" +} +lshandout_ulink_table() { + # NO Args. Read stdin as SQL + echo '<table class="b td3rr td3evw">' + hrb="<a href=\"?home+" + # echo "$sql" | sq -header -html $db \ # Formerly, this is called via sq() + + printf ".mode html\n.header ON\n" | query + cat | query \ + | sed -e "s,\(<TR><TD>\)\([^ ]*\) \(.*\)</TD>,\1$hrb\2\">\3</TD>," -e 's,<TD>0</TD>,<TD class="warn">0</TD>,' + echo '</table>' + printf ".mode list\n.header OFF\n" | query +} +lshandoutall() { + # $1=rowid of blog + if ! blog_writable $1 $user; then + echo "メンバー以外は利用できません。" | html p; return + fi + rowid=$(($1 + 0)) + owner=`getvalbyid blog owner $1` + qowner=`sqlquotestr "$owner"` + + query<<-EOF + CREATE TEMPORARY TABLE IF NOT EXISTS report_type_blogs AS + WITH blog_owner_mode AS ( + SELECT id, + blog.rowid brid, + max(CASE key WHEN 'owner' THEN val END) owner, + max(CASE key WHEN 'mode' THEN val END) mode, + max(CASE key WHEN 'title' THEN val END) title + FROM blog NATURAL JOIN blog_s + GROUP BY id + ) + SELECT id, brid, title FROM blog_owner_mode + WHERE owner=$qowner AND mode LIKE '%report%'; + /* ↑これでレポート形式の blogid 一覧を得る */ + EOF + bridlist=`query "SELECT brid FROM report_type_blogs;"` + if [ -z "$CATCSV" ]; then + _m4 -D_TITLE_="提出状況" $layout/html.m4.html + ge=`gecos "$owner"` + tbls="" + grptxt=`echo "${ge:-$owner}"|htmlescape` + echo "<h1>$grptxt 書き込み状況一覧</h1>" + fi + for brid in $bridlist; do + brid=$(($brid + 0)) # Ensure to be a number + [ $brid = 0 ] && continue + time=`getvalbyid blog ctime $brid|colrm 11` + title=`getvalbyid blog title $brid|htmlescape` + tt="handout_$brid" + if [ -z "$CATCSV" ]; then + echo "<h2>$time - <a href=\"?replyblog+$brid\">$title</a></h2>" + lshandoutsub "$owner" $brid "$tt" + else + lshandoutsub "$owner" $brid "$tt" >/dev/null # Only create temp.table + fi + tbls="$tbls${tbls:+ NATURAL JOIN }$tt" + done + sql="SELECT * FROM $tbls;" + if [ -z "$CATCSV" ]; then + echo "<hr><h2>総合</h2>" + echo "$sql" | lshandout_ulink_table + echo "<h2>総合(<a href=\"?gethandoutcsv+$rowid\">csv</a>)</h2>" + printf ".mode csv\n.header ON\n" | query + echo '<pre class="list">' + echo "$sql" | query | sed 's/^"[0-9]* /"/' + echo "</pre>" + else + contenttype "Application/CSV" + printf ".mode csv\n.header ON\n" | query >/dev/null + fn=report-count.csv + printf 'Content-Disposition: filename="%s"\n' "$fn" + outfile=tmp/out-$$.csv + rm tmp/sql.out + echo "$sql" | query | sed 's/^"[0-9]* /"/' > $outfile + echo "Content-Length: " `cat $outfile | wc -c`; echo + + cat $outfile + exit 0 + fi + printf ".mode list\n.header OFF\n.separator |\n" | query } lshandoutsub() { - # $1=owner $2=rowid of blog + # $1=owner $2=rowid of blog &optional $3=temp_table name + qgname=`sqlquote "$1"` if isgroup $1; then - sample="(select user from grp_mem where gname='$1')" + sample="(select user from grp_mem where gname=$qgname)" else sample="(select distinct author as user from arts)" echo "(集計は板への投稿者のみ)" | html p fi - sql="with arts as (select id,author from article \ + tmpname="${3:-handout_$2}" + sql="CREATE TEMPORARY TABLE IF NOT EXISTS $tmpname AS + with arts as (select id,author from article \ where blogid=(select id from blog where rowid=$2))\ select (select rowid from user where name=c0.user)||' '|| \ (select gecos from gecoses where name=c0.user) as 'メンバー',\ (select substr(c0.user, 1, instr(c0.user, '@')-1)) 'uname',\ sum(case when c1.key is not null then 1 else 0 end)\ - as 'コメント記入',\ + as '[$title] コメント記入',\ sum(case when c2.key is not null then 1 else 0 end)\ - as 'ファイルの提出'\ + as '[$title] ファイルの提出'\ from $sample c0 \ left join (select id,author from arts) a\ on c0.user=a.author\ left join (select id,key from article_s where key='text') c1\ on a.id=c1.id left join (select id,key from article_m ) c2\ - on c1.id=c2.id group by c0.user order by c0.user;" + on c1.id=c2.id group by c0.user order by c0.user;\ + \ + SELECT * FROM $tmpname;" err ishandoutsub: sql="$sql" - echo '<table class="b td2r td3r">' - hrb="<a href=\"?home+" - echo "$sql" | sq -header -html $db \ - | sed -e "s,\(<TR><TD>\)\([^ ]*\) \(.*\)</TD>,\1$hrb\2\">\3</TD>," -e 's,<TD>0</TD>,<TD class="warn">0</TD>,' - echo '</table>' + echo "$sql" | lshandout_ulink_table } gethandout() { # $1=rowid of blog
--- a/s4.cgi Sat Nov 26 09:37:13 2016 +0859 +++ b/s4.cgi Sat Nov 26 09:38:11 2016 +0859 @@ -71,10 +71,10 @@ echo "Refresh: 0; $newurl"; echo exit 0 ;; - lshandout|gethandout) - if [ x"$stage" = x"lshandout" ]; then - contenttype; echo - fi + lshandout|lshandoutall|gethandout|gethandoutcsv) + case "$stage" in + lshandout*) contenttype; echo ;; + esac rowid=${2%%[!A-Z0-9a-z_]*} if [ -z "$rowid" ]; then echo "話題番号が未指定です。" | html p