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  }