# HG changeset patch # User HIROSE Yuuji # Date 1437832858 -32400 # Node ID 916d81b9c4fc875545c95353bf3fbcfed238ab57 # Parent ccd0c67362157d6605c8673c124c826afdf3da98 Selection from group member diff -r ccd0c6736215 -r 916d81b9c4fc s4-blog.sh --- a/s4-blog.sh Thu Jul 23 11:35:05 2015 +0900 +++ b/s4-blog.sh Sat Jul 25 23:00:58 2015 +0900 @@ -139,11 +139,11 @@ number=0 hrefhome0="&3 - #case $ct in - # [Ii]mage*) anch="$fn" ;; - # *) anch=$fn ;; - # esac - # Should not contain newlines for sed argument - # echo -n "$anch" iconhref $td/$fn "$hrfb+$ri" "$fn" "$fn" done) imgs=`echo "$imgs"|tr -d '\n'` # kill newlines for sed diff -r ccd0c6736215 -r 916d81b9c4fc s4-cgi.sh --- a/s4-cgi.sh Thu Jul 23 11:35:05 2015 +0900 +++ b/s4-cgi.sh Sat Jul 25 23:00:58 2015 +0900 @@ -114,3 +114,9 @@ # $1=name $2=val(filename) cgi_multi $1 "$2" cgi_file "$3" } + +html() { + echo "<$*>" + cat + echo "" +} diff -r ccd0c6736215 -r 916d81b9c4fc s4-funcs.sh --- a/s4-funcs.sh Thu Jul 23 11:35:05 2015 +0900 +++ b/s4-funcs.sh Sat Jul 25 23:00:58 2015 +0900 @@ -535,9 +535,11 @@ ###vcount=`sq $db "select count(val) from $cond"` # Reset val to store filenames if type is string val=`query "select val from $cond and type like 'file:%' order by rowid;"` +err gvb1-sql: "select count(val) from $cond;" vcount=`query "select count(val) from $cond;"` echo $vcount > $td/$c.count i=0 +err gvbid: i=$i vcount=$vcount while [ $i -lt $vcount ]; do slice="order by rowid limit 1 offset $i" i=$((i+1)) @@ -1020,7 +1022,7 @@ esac } email4group() { - # Get for-$1=group email address(es) for $2=user + # Get for-$1=group email address(es) for $2...=users qgrp=`sqlquote "$1"`; shift users=`for i; do sqlquote "$i"; done` users=`echo $users|tr ' ' ','` @@ -1031,6 +1033,20 @@ err `echo $sql` query "$sql" } +email4groupbyuid() { + # Get for-$1=group email address(es) for $2...=user-ids + qgrp=`sqlquote "$1"`; shift +err em4gbid-IN: "\$1=$1 qgrp=$qgrp" + uids=`echo "$@"` + uids=`echo $uids|tr ' ' ','` + sql="select coalesce(s.val, g.user) from grp_mem g + left join grp_mem_s s on g.gname=s.gname and g.user=s.user + and s.key='email' + where g.gname=$qgrp and g.user in + (select name from user where rowid in ($uids));" + err email4gByid `echo $sql` + query "$sql" +} collectemail() ( # Collect email addresses for group $1 for e; do @@ -1374,7 +1390,8 @@ iamowner=$rowid fi if ismember "$user" "$grp"; then - echo "${iamowner:+ / }グループの新規話題作成

" + echo "${iamowner:+ / }グループの新規話題作成" + echo "/ メンバーを個別選択しての操作

" # div.fold input[type="checkbox"]:checked ~ div {display: block;} cat< @@ -1434,6 +1451,115 @@ thumbxy=50x50 listmember "" "$c" \ |sed -e "s|\(
\),not=\(.*\)|\1管理者委託|" } +grpaction() { # $1=group-rowid + # $grid=Group-id $grp=gname (got in s4.cgi) + usel=`getpar usel` + if [ -n "$usel" ]; then + uids=$(echo `echo $usel`|tr ' ' ',') + #err grpaction-1: grp=$grp, `echo $sql` + text=`getpar text` + + rm=`getpar rm` cfm=`getpar confirm` +err rm=$rm cfm=$cfm + if [ x"$rm" = x"yes" ]; then + if isgrpowner "$user" "$grp"; then + if [ x"$rm$cfm" = x"yesyes" ]; then + # Eliminate + cond="where gname=(select gname from grp where rowid=$grid) and user in (select name from user where rowid in ($uids))" + for tbl in grp_mem grp_mem_s grp_mem_m; do + sql="delete from $tbl $cond;" + # echo "sql=$sql" + query "$sql" + err rmGRPuser "$sql" + done + num=`query "select count(*) from user where rowid in ($uids);"` + #err num=$num + if [ 0$num -gt 0 ]; then + sql="select coalesce(b.val,a.name) from user a left join \ + user_s b on a.name=b.name and key='gecos' where a.rowid in ($uids);" + # err `echo "$sql"` + html pre<確認のチェックがないのでやめておきます。

" + return + fi + else # not Group Owner + echo "

グループ管理者でないのでメンバー操作はできません。

" + return + fi + cat<Note: 以下のメンバーにメッセージを送信しました。" + echo "

"
+	sql="select coalesce(b.val, a.name) from
+		(select name from user where rowid in ($uids)) a
+		left join user_s b on a.name=b.name and b.key='gecos';"
+	query $sql
+	err SendDone: `echo $sql`
+	echo "(送信者である `gecos $user` さんも含まれます)
" + fi + fi + fi + # New entry + sql="select u.rowid||','||j.* from user u + join (select a.user as name,coalesce(b.val,a.user) + from (select gname,user from grp_mem + where gname=(select gname from grp where rowid=$1)) + a left join (select gname,user,val from grp_mem_s where key='email') + b using(gname,user)) + j using(name) order by u.name;" + sql="select a.rowid||','||coalesce(val,a.name) as name from + (select rowid,name from user where name in + (select user from grp_mem where + gname=(select gname from grp where rowid=1))) + a left join user_s on a.name=user_s.name and key='gecos' + order by name;" + err grpaction: `echo $sql` + b1='' + cgi_form grpaction<\)\([0-9]*\),\([^<]*\)|\1$b1\2$b2\3$b3|" \ + | m4 -D_TITLE_="グループ[$grp]参加メンバーに対する操作" \ + -D_SUBTITLE_="チェック後操作ボタン" \ + -D_FORM_="syscmd(cat)" -D_DUMPTABLE_="" \ + $layout/groupman.m4.html +
+`cgi_radio rm send id="sendmsg"` +
+`cgi_textarea text "" cols=40` +
+
+
+`cgi_radio rm yes ` 下でチェックした人のグループ登録解除 +
+本当に消します! `cgi_checkbox confirm yes` 確認 +

この操作による通知は本人に行きません。 +あらかじめ通知するか、登録解除してよい状況かしっかり確認してください。

+
+
+

$grp 参加者一覧

+ +`sq $db -html "$sql"` +`cgi_hidden grp $grid` +
+EOF +} send2grpmember() { rowid=`getpar grp` if [ -z "$rowid" ]; then diff -r ccd0c6736215 -r 916d81b9c4fc s4.cgi --- a/s4.cgi Thu Jul 23 11:35:05 2015 +0900 +++ b/s4.cgi Sat Jul 25 23:00:58 2015 +0900 @@ -137,7 +137,17 @@ m4 -D_TITLE_="グループ $grp" \ $layout/html.m4.html showgroup "$grid" - + ;; + "grpaction") # $2=group-rowid + contenttype; echo + grid=${2:-`getpar grp`} + grp=`getgroupbyid "$grid"` + if [ -z "$grp" ]; then + echo "

無効な指定です。

" + return + fi + m4 -D_TITLE_="グループ $grp 個別選択操作" $layout/html.m4.html + grpaction "$grid" ;; "commission") # $2=grp-rowid $3=user-rowid @@ -286,8 +296,8 @@ sql="select quote(bin) from $2 where rowid='$3';" sq $db "$sql" | unhexize > $bin tv=`query "select type,val from $2 where rowid='$3';"` - type=${tv%|*} fn=${tv#*|} - err tv=$tv type=$type fn=$fn + type=${tv%\|*} fn=${tv#*\|} + err tv=$tv type=$type fn=$fn, tp2=${tv%\|*} ct=${type#file:} case $ct in # all text/* changed to text/plain text/*) diff -r ccd0c6736215 -r 916d81b9c4fc templ/default/default.css --- a/templ/default/default.css Thu Jul 23 11:35:05 2015 +0900 +++ b/templ/default/default.css Sat Jul 25 23:00:58 2015 +0900 @@ -80,7 +80,8 @@ xxdisplay: none; max-height: 80%; overflow: auto; height: 0px; opacity: 0; padding: 0 1ex; } -div.fold input[type="checkbox"]:checked ~ div { +div.fold input[type="checkbox"]:checked ~ div, +div.fold input[type="radio"]:checked ~ div { display: block; background: #eef; height: auto; opacity: 1.0; transition: 1s; }