s4
changeset 26:514acfff7453
periodic
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Wed, 22 Jul 2015 09:02:55 +0900 |
parents | 850f0d4228f7 |
children | 18b4d56a6206 |
files | s4-funcs.sh |
diffstat | 1 files changed, 87 insertions(+), 17 deletions(-) [+] |
line diff
1.1 --- a/s4-funcs.sh Wed Jul 22 08:17:46 2015 +0900 1.2 +++ b/s4-funcs.sh Wed Jul 22 09:02:55 2015 +0900 1.3 @@ -1,6 +1,9 @@ 1.4 #!/bin/sh 1.5 # Here's global variable table. Do not use this names. 1.6 # $HGid$ 1.7 + 1.8 +[ -f s4-config.sh ] && . ./s4-config.sh 1.9 + 1.10 myname=`basename ${SCRIPT_NAME:-$0}` 1.11 mydir=`dirname ${SCRIPT_FILENAME:-$0}` 1.12 myargs="$@" 1.13 @@ -1014,19 +1017,26 @@ 1.14 em=`query "select val from user_m where name='$1' and key='email';"` 1.15 [ -n "$em" ] && echo "$em" || echo "$1" 1.16 else 1.17 - query "with recursive allmem as 1.18 - (select gname,val from grp_m where gname='$1' 1.19 - union all select grp_m.gname,grp_m.val from grp_m,allmem 1.20 - where allmem.val=grp_m.gname) 1.21 - select coalesce(b.val,a.val) 1.22 - from allmem a left join grp_mem_s b 1.23 - on a.gname=b.gname and a.val=b.user and b.key='email' 1.24 - where a.val in (select name from user) limit 10000;" 1.25 + # sql="with recursive allmem as 1.26 + # (select gname,val from grp_m where gname='$1' 1.27 + # union all select grp_m.gname,grp_m.val from grp_m,allmem 1.28 + # where allmem.val=grp_m.gname) 1.29 + # select coalesce(b.val,a.val) 1.30 + # from allmem a left join grp_mem_s b 1.31 + # on a.gname=b.gname and a.val=b.user and b.key='email' 1.32 + # where a.val in (select name from user) limit 10000;" 1.33 + # tmp tmp tmp tmp tmp tmp tmp 1.34 + qgrp=`sqlquote $1` 1.35 + sql="select coalesce(s.val,g.user) from grp_mem g left join grp_mem_s s 1.36 + on g.gname=s.gname and g.user=s.user and s.key='email' 1.37 + where g.gname=$qgrp;" 1.38 + err CollectEmail: `echo "$sql"` 1.39 + query "$sql" 1.40 fi 1.41 } 1.42 sendinvitation() ( 1.43 # $1=email 1.44 - iss="invite-`date +%s`-$(genrandom 10)" 1.45 + iss="invite-`date +%s`-$user" 1.46 addsession $iss +7days # 1 week due date 1.47 query "replace into par values('$iss', 'invite', 'string', \"$1\");" 1.48 gecos=`gecos` 1.49 @@ -1071,7 +1081,13 @@ 1.50 "") repo="招待したい人のメイルアドレスを入力してください。" ;; 1.51 *) repo="無効なアドレスです" ;; 1.52 esac 1.53 - m4 -D_REPORT_="$repo" -D_ACTION_="$myname?invite" \ 1.54 + addr=`query "select val from par where sessid like 'invite-%-$user';"` 1.55 +err addr=$addr 1.56 + if [ -n "$addr" ]; then 1.57 + susp="<h2>招待済みで加入待ちのアドレス</h2><pre>$addr</pre>" 1.58 + fi 1.59 + m4 -D_TITLE_="招待" -D_REPORT_="$repo" -D_ACTION_="?invite" \ 1.60 + -D_BODYCLASS_="default" -D_SUSPENDED_="$susp" \ 1.61 $layout/html.m4.html $layout/invite.m4.html 1.62 } 1.63 regist() { 1.64 @@ -1096,6 +1112,7 @@ 1.65 query "replace into par values('$session', 'pswd', 'string', 'wasureta'), 1.66 ('$session', 'user', 'string', '$email');" 1.67 wasureta $email 1.68 + addsession $1 # for removal after 1 minute 1.69 m4 -D_SYSNAME_="Initial Login" -D_MYNAME_="$myname?userconf" \ 1.70 $layout/login.m4.html 1.71 return 1.72 @@ -1146,19 +1163,23 @@ 1.73 and="${1:+and }" 1.74 href="<a href=\"$myname?grp+" 1.75 echo '<div class="listgroup">' 1.76 - sql="select val from grp_s where key='tag' $and$* group by val order by ctime desc;" 1.77 -err ListGRP: query 1.78 + NGsql="select distinct tag from\ 1.79 + (select gname, max(case key when 'tag' then val end) as tag, \ 1.80 + max(case key when 'ctime' then val end) as ctime\ 1.81 + from grp_s group by gname order by ctime);" 1.82 + sql="select val from grp_s where key='tag' $and$* group by val;" 1.83 +err ListGRP: query sql="$sql" 1.84 for tag in `query "$sql"` 1.85 do 1.86 err ListGrp: tag=$tag 1.87 tn=${tagline%%=${tag}*} 1.88 tn=${tn##*[ :]} 1.89 - sql="select gname as 'グループ名',説明 from (select gname,max(case key when 'gecos' then val end) as '説明',max(case key when 'tag' then val end) as 'tag' from grp_s group by gname having tag='$tag');" 1.90 + sql="select rowid||':'||gname as 'グループ名',説明 from (select (select rowid from grp g where g.gname=grp_s.gname) as rowid,gname,max(case key when 'gecos' then val end) as '説明',max(case key when 'tag' then val end) as 'tag',max(case key when 'mtime' then val end) as mtime from grp_s group by gname having tag='$tag' order by mtime desc);" 1.91 err PersonalGroupList= `echo $sql` 1.92 echo "<h2>$tn</h2>" 1.93 echo '<table class="b listgroup">' 1.94 sq -header -html $db "$sql" \ 1.95 - | sed "s,\(<TR><TD>\)\([-_A-z0-9]*\)</TD>,\1$href\2\">\2</a>," 1.96 + | sed "s,\(<TR><TD>\)\([0-9]*\):\([-_A-z0-9]*\)</TD>,\1$href\2\">\3</a>," 1.97 echo '</table>' 1.98 done 1.99 echo '</div>' 1.100 @@ -1325,6 +1346,20 @@ 1.101 fi 1.102 if ismember "$user" "$grp"; then 1.103 echo "${iamowner:+ / }<a href=\"?blog+$rowid\">グループの新規話題作成</a></p>" 1.104 +# div.fold input[type="checkbox"]:checked ~ div {display: block;} 1.105 + cat<<EOF 1.106 +<form action="?send2mem" method="POST" enctype="multipart/form-data"> 1.107 +<div class="fold"> 1.108 +`cgi_checkbox send yes id="send"`<label 1.109 + for="send">グループ全員にメッセージ送信</label> 1.110 +<div> 1.111 +`cgi_textarea message "" "cols=60"` 1.112 +`cgi_submit 送信` 1.113 +`cgi_reset リセット` 1.114 +</div> 1.115 +`cgi_hidden grp $rowid` 1.116 +</div></form> 1.117 +EOF 1.118 fi 1.119 # 加入ボタン + 加入者リスト 1.120 err ismember $user $grp 1.121 @@ -1335,8 +1370,14 @@ 1.122 err EML: "select val from grp_mem_s where gname='$2' and user='$user' \ 1.123 and key='email';" 1.124 err email=$eml 1.125 - echo '<h2>このグループに</h2>' 1.126 + cat <<EOF 1.127 +<div class="fold"> 1.128 +`cgi_checkbox reg yes id="reg"`<label 1.129 + for="reg">自身の参加状態を操作する</label> 1.130 +<div> 1.131 +EOF 1.132 cgi_form grp <<EOF 1.133 +<p>このグループに</p> 1.134 <table class="b"> 1.135 <tr><th>メンバーとして</th><td> 1.136 <label>`cgi_radio joingrp "yes" $ismem`参加</label> / 1.137 @@ -1348,7 +1389,7 @@ 1.138 </table> 1.139 `cgi_hidden grp $grp` 1.140 EOF 1.141 - 1.142 + echo '</div></div>' 1.143 echo '<h2>話題一覧</h2>' 1.144 cgi_form searchart<<EOF 1.145 <label>`cgi_text kwd`という語を含むコメントを検索</label> 1.146 @@ -1363,13 +1404,42 @@ 1.147 thumbxy=50x50 listmember "" "$c" \ 1.148 |sed -e "s|\(<br>\),not=\(.*\)|\1<a href=\"$cm+\2\">管理者委託</a>|" 1.149 } 1.150 +send2grpmember() { 1.151 + rowid=`getpar grp` 1.152 + if [ -z "$rowid" ]; then 1.153 + echo "<p>グループが未指定です。</p>" 1.154 + return 1.155 + fi 1.156 + message=`getpar message` 1.157 + if [ -z "$msg" ]; then 1.158 + echo "<p>文章を入れてください。</p>" 1.159 + return 1.160 + fi 1.161 + grp=`getgroupbyid $rowid` 1.162 + members=`collectemail $grp` 1.163 + # smail rcpt subj (file) 1.164 + smail "$members" "グループ $grp 宛メッセージ(from `gecos $user`)" <<EOF 1.165 +$urlbase?grp+$rowid 1.166 +グループ $grp に所属する 1.167 +`gecos $user` さんよりメッセージ: 1.168 + 1.169 +$message 1.170 +EOF 1.171 + cat<<EOF 1.172 +<p>以下の宛先に送信しました。</p> 1.173 +<pre> 1.174 +$members 1.175 +</pre> 1.176 +<p><a href="?grp+$rowid">グループ $grp</a>に戻る。</p> 1.177 +EOF 1.178 +} 1.179 joingrp() { 1.180 # $1=group $2=user $3=yes/no $4=email(if any $5=AsAdmin) 1.181 err joingrp: \$1=$1 \$2=$2 \$3=$3 \$4=$4 1.182 isgrpowner "$user" "$1" && isowner="yes" || isowner="" 1.183 err jg:isgrpowner: isowner="$isowner" 1.184 if [ x"$2" != x"$user" ]; then # if user is not login user 1.185 - if [ -z "$isowner" ; then 1.186 + if [ -z "$isowner" ]; then 1.187 echo "<p>本人か、グループ管理者しか加入操作はできません。</p>" 1.188 return 1.189 fi