s4
changeset 59:916d81b9c4fc
Selection from group member
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Sat, 25 Jul 2015 23:00:58 +0900 |
parents | ccd0c6736215 |
children | 9f4e85181d40 |
files | s4-blog.sh s4-cgi.sh s4-funcs.sh s4.cgi templ/default/default.css |
diffstat | 5 files changed, 151 insertions(+), 14 deletions(-) [+] |
line diff
1.1 --- a/s4-blog.sh Thu Jul 23 11:35:05 2015 +0900 1.2 +++ b/s4-blog.sh Sat Jul 25 23:00:58 2015 +0900 1.3 @@ -139,11 +139,11 @@ 1.4 number=0 1.5 hrefhome0="<a href=\"?home" 1.6 for a in $arts; do 1.7 - arid=${a%%|*} aid=`echo "$a"|cut -d'|' -f2` author=${a##*|} imgs="" 1.8 + arid=${a%%\|*} aid=`echo "$a"|cut -d'|' -f2` author=${a##*\|} imgs="" 1.9 err a=$a, aid=$aid, author=$author 1.10 # name='' # Get gecos?? 1.11 td=$(echo $bstmpdir/`echo $a|md5`) 1.12 - val=`getvalbyid article image $arid $td` 1.13 + val=`getvalbyid article image "$arid" "$td"` 1.14 err val="[$val]" and td as follows: 1.15 1.16 if true; then 1.17 @@ -156,12 +156,6 @@ 1.18 #ct=`cat $td/$fn.content-type` 1.19 ri=`cat $td/$fn.rowid` 1.20 err fn=$fn ct=$ct ri=$ri; ls -lF $td/ 1>&3 1.21 - #case $ct in 1.22 - # [Ii]mage*) anch="<img src=\"data:$ct,$data\">$fn" ;; 1.23 - # *) anch=$fn ;; 1.24 - # esac 1.25 - # Should not contain newlines for sed argument 1.26 - # echo -n "<a href=\"$hrfb+$ri\">$anch</a>" 1.27 iconhref $td/$fn "$hrfb+$ri" "$fn" "$fn" 1.28 done) 1.29 imgs=`echo "$imgs"|tr -d '\n'` # kill newlines for sed
2.1 --- a/s4-cgi.sh Thu Jul 23 11:35:05 2015 +0900 2.2 +++ b/s4-cgi.sh Sat Jul 25 23:00:58 2015 +0900 2.3 @@ -114,3 +114,9 @@ 2.4 # $1=name $2=val(filename) 2.5 cgi_multi $1 "$2" cgi_file "$3" 2.6 } 2.7 + 2.8 +html() { 2.9 + echo "<$*>" 2.10 + cat 2.11 + echo "</$1>" 2.12 +}
3.1 --- a/s4-funcs.sh Thu Jul 23 11:35:05 2015 +0900 3.2 +++ b/s4-funcs.sh Sat Jul 25 23:00:58 2015 +0900 3.3 @@ -535,9 +535,11 @@ 3.4 ###vcount=`sq $db "select count(val) from $cond"` 3.5 # Reset val to store filenames if type is string 3.6 val=`query "select val from $cond and type like 'file:%' order by rowid;"` 3.7 +err gvb1-sql: "select count(val) from $cond;" 3.8 vcount=`query "select count(val) from $cond;"` 3.9 echo $vcount > $td/$c.count 3.10 i=0 3.11 +err gvbid: i=$i vcount=$vcount 3.12 while [ $i -lt $vcount ]; do 3.13 slice="order by rowid limit 1 offset $i" 3.14 i=$((i+1)) 3.15 @@ -1020,7 +1022,7 @@ 3.16 esac 3.17 } 3.18 email4group() { 3.19 - # Get for-$1=group email address(es) for $2=user 3.20 + # Get for-$1=group email address(es) for $2...=users 3.21 qgrp=`sqlquote "$1"`; shift 3.22 users=`for i; do sqlquote "$i"; done` 3.23 users=`echo $users|tr ' ' ','` 3.24 @@ -1031,6 +1033,20 @@ 3.25 err `echo $sql` 3.26 query "$sql" 3.27 } 3.28 +email4groupbyuid() { 3.29 + # Get for-$1=group email address(es) for $2...=user-ids 3.30 + qgrp=`sqlquote "$1"`; shift 3.31 +err em4gbid-IN: "\$1=$1 qgrp=$qgrp" 3.32 + uids=`echo "$@"` 3.33 + uids=`echo $uids|tr ' ' ','` 3.34 + sql="select coalesce(s.val, g.user) from grp_mem g 3.35 + left join grp_mem_s s on g.gname=s.gname and g.user=s.user 3.36 + and s.key='email' 3.37 + where g.gname=$qgrp and g.user in 3.38 + (select name from user where rowid in ($uids));" 3.39 + err email4gByid `echo $sql` 3.40 + query "$sql" 3.41 +} 3.42 collectemail() ( 3.43 # Collect email addresses for group $1 3.44 for e; do 3.45 @@ -1374,7 +1390,8 @@ 3.46 iamowner=$rowid 3.47 fi 3.48 if ismember "$user" "$grp"; then 3.49 - echo "${iamowner:+ / }<a href=\"?blog+$rowid\">グループの新規話題作成</a></p>" 3.50 + echo "${iamowner:+ / }<a href=\"?blog+$rowid\">グループの新規話題作成</a>" 3.51 + echo "/ <a href=\"?grpaction+$rowid\">メンバーを個別選択しての操作</a></p>" 3.52 # div.fold input[type="checkbox"]:checked ~ div {display: block;} 3.53 cat<<EOF 3.54 <form action="?send2mem" method="POST" enctype="multipart/form-data"> 3.55 @@ -1434,6 +1451,115 @@ 3.56 thumbxy=50x50 listmember "" "$c" \ 3.57 |sed -e "s|\(<br>\),not=\(.*\)|\1<a href=\"$cm+\2\">管理者委託</a>|" 3.58 } 3.59 +grpaction() { # $1=group-rowid 3.60 + # $grid=Group-id $grp=gname (got in s4.cgi) 3.61 + usel=`getpar usel` 3.62 + if [ -n "$usel" ]; then 3.63 + uids=$(echo `echo $usel`|tr ' ' ',') 3.64 + #err grpaction-1: grp=$grp, `echo $sql` 3.65 + text=`getpar text` 3.66 + 3.67 + rm=`getpar rm` cfm=`getpar confirm` 3.68 +err rm=$rm cfm=$cfm 3.69 + if [ x"$rm" = x"yes" ]; then 3.70 + if isgrpowner "$user" "$grp"; then 3.71 + if [ x"$rm$cfm" = x"yesyes" ]; then 3.72 + # Eliminate 3.73 + cond="where gname=(select gname from grp where rowid=$grid) and user in (select name from user where rowid in ($uids))" 3.74 + for tbl in grp_mem grp_mem_s grp_mem_m; do 3.75 + sql="delete from $tbl $cond;" 3.76 + # echo "sql=$sql" 3.77 + query "$sql" 3.78 + err rmGRPuser "$sql" 3.79 + done 3.80 + num=`query "select count(*) from user where rowid in ($uids);"` 3.81 + #err num=$num 3.82 + if [ 0$num -gt 0 ]; then 3.83 + sql="select coalesce(b.val,a.name) from user a left join \ 3.84 + user_s b on a.name=b.name and key='gecos' where a.rowid in ($uids);" 3.85 + # err `echo "$sql"` 3.86 + html pre<<EOF 3.87 +以下の${num}名のグループ $grp 登録を解除しました。 3.88 +`query "$sql"` 3.89 +EOF 3.90 + fi 3.91 + else 3.92 + echo "<p>確認のチェックがないのでやめておきます。</p>" 3.93 + return 3.94 + fi 3.95 + else # not Group Owner 3.96 + echo "<p>グループ管理者でないのでメンバー操作はできません。</p>" 3.97 + return 3.98 + fi 3.99 + cat<<EOF 3.100 + 3.101 +EOF 3.102 + elif [ -n "$text" ]; then # if NOT removal mode 3.103 + smail "`email4groupbyuid "$grp" $usel` $user" \ 3.104 + "`gecos $user` さんからのメッセージ" <<EOF 3.105 +$url 3.106 +のグループ「$grp」のメンバーである `gecos $user` さんから、 3.107 +あなた宛へのメッセージです。 3.108 +---------------------------------------------------------- 3.109 +$text 3.110 +EOF 3.111 + if [ $? = 0 ]; then 3.112 + echo "<p>Note: 以下のメンバーにメッセージを送信しました。" 3.113 + echo "</p><pre>" 3.114 + sql="select coalesce(b.val, a.name) from 3.115 + (select name from user where rowid in ($uids)) a 3.116 + left join user_s b on a.name=b.name and b.key='gecos';" 3.117 + query $sql 3.118 + err SendDone: `echo $sql` 3.119 + echo "(送信者である `gecos $user` さんも含まれます)</pre>" 3.120 + fi 3.121 + fi 3.122 + fi 3.123 + # New entry 3.124 + sql="select u.rowid||','||j.* from user u 3.125 + join (select a.user as name,coalesce(b.val,a.user) 3.126 + from (select gname,user from grp_mem 3.127 + where gname=(select gname from grp where rowid=$1)) 3.128 + a left join (select gname,user,val from grp_mem_s where key='email') 3.129 + b using(gname,user)) 3.130 + j using(name) order by u.name;" 3.131 + sql="select a.rowid||','||coalesce(val,a.name) as name from 3.132 + (select rowid,name from user where name in 3.133 + (select user from grp_mem where 3.134 + gname=(select gname from grp where rowid=1))) 3.135 + a left join user_s on a.name=user_s.name and key='gecos' 3.136 + order by name;" 3.137 + err grpaction: `echo $sql` 3.138 + b1='<label> <input type="checkbox" name="usel" value="' 3.139 + b2='"> ' b3='</label>' 3.140 + cgi_form grpaction<<EOF \ 3.141 + | sed -e "s|^\(<TR><TD>\)\([0-9]*\),\([^<]*\)|\1$b1\2$b2\3$b3|" \ 3.142 + | m4 -D_TITLE_="グループ[$grp]参加メンバーに対する操作" \ 3.143 + -D_SUBTITLE_="チェック後操作ボタン" \ 3.144 + -D_FORM_="syscmd(cat)" -D_DUMPTABLE_="" \ 3.145 + $layout/groupman.m4.html 3.146 +<div class="fold"> 3.147 +`cgi_radio rm send id="sendmsg"`<label 3.148 + for="sendmsg">下でチェックした人にメッセージを送信する</label> 3.149 +<div> 3.150 +`cgi_textarea text "" cols=40` 3.151 +</div> 3.152 +</div> 3.153 +<div class="fold"> 3.154 +`cgi_radio rm yes ` 下でチェックした人のグループ登録解除 3.155 +<div> 3.156 +本当に消します! `cgi_checkbox confirm yes` 確認 3.157 +<p>この操作による通知は本人に行きません。 3.158 +あらかじめ通知するか、登録解除してよい状況かしっかり確認してください。</p> 3.159 +</div> 3.160 +</div> 3.161 +<h4>$grp 参加者一覧</h4> 3.162 +<table> 3.163 +`sq $db -html "$sql"` 3.164 +`cgi_hidden grp $grid` 3.165 +</table> 3.166 +EOF 3.167 +} 3.168 send2grpmember() { 3.169 rowid=`getpar grp` 3.170 if [ -z "$rowid" ]; then
4.1 --- a/s4.cgi Thu Jul 23 11:35:05 2015 +0900 4.2 +++ b/s4.cgi Sat Jul 25 23:00:58 2015 +0900 4.3 @@ -137,7 +137,17 @@ 4.4 m4 -D_TITLE_="グループ $grp" \ 4.5 $layout/html.m4.html 4.6 showgroup "$grid" 4.7 - 4.8 + ;; 4.9 + "grpaction") # $2=group-rowid 4.10 + contenttype; echo 4.11 + grid=${2:-`getpar grp`} 4.12 + grp=`getgroupbyid "$grid"` 4.13 + if [ -z "$grp" ]; then 4.14 + echo "<p>無効な指定です。</p>" 4.15 + return 4.16 + fi 4.17 + m4 -D_TITLE_="グループ $grp 個別選択操作" $layout/html.m4.html 4.18 + grpaction "$grid" 4.19 ;; 4.20 "commission") 4.21 # $2=grp-rowid $3=user-rowid 4.22 @@ -286,8 +296,8 @@ 4.23 sql="select quote(bin) from $2 where rowid='$3';" 4.24 sq $db "$sql" | unhexize > $bin 4.25 tv=`query "select type,val from $2 where rowid='$3';"` 4.26 - type=${tv%|*} fn=${tv#*|} 4.27 - err tv=$tv type=$type fn=$fn 4.28 + type=${tv%\|*} fn=${tv#*\|} 4.29 + err tv=$tv type=$type fn=$fn, tp2=${tv%\|*} 4.30 ct=${type#file:} 4.31 case $ct in # all text/* changed to text/plain 4.32 text/*)
5.1 --- a/templ/default/default.css Thu Jul 23 11:35:05 2015 +0900 5.2 +++ b/templ/default/default.css Sat Jul 25 23:00:58 2015 +0900 5.3 @@ -80,7 +80,8 @@ 5.4 xxdisplay: none; max-height: 80%; overflow: auto; 5.5 height: 0px; opacity: 0; padding: 0 1ex; 5.6 } 5.7 -div.fold input[type="checkbox"]:checked ~ div { 5.8 +div.fold input[type="checkbox"]:checked ~ div, 5.9 +div.fold input[type="radio"]:checked ~ div { 5.10 display: block; background: #eef; 5.11 height: auto; opacity: 1.0; transition: 1s; 5.12 }