Mercurial > hgrepos > hgweb.cgi > 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 wrap: on
line diff
--- a/s4-funcs.sh Wed Jul 22 08:17:46 2015 +0900 +++ b/s4-funcs.sh Wed Jul 22 09:02:55 2015 +0900 @@ -1,6 +1,9 @@ #!/bin/sh # Here's global variable table. Do not use this names. # $HGid$ + +[ -f s4-config.sh ] && . ./s4-config.sh + myname=`basename ${SCRIPT_NAME:-$0}` mydir=`dirname ${SCRIPT_FILENAME:-$0}` myargs="$@" @@ -1014,19 +1017,26 @@ em=`query "select val from user_m where name='$1' and key='email';"` [ -n "$em" ] && echo "$em" || echo "$1" else - query "with recursive allmem as - (select gname,val from grp_m where gname='$1' - union all select grp_m.gname,grp_m.val from grp_m,allmem - where allmem.val=grp_m.gname) - select coalesce(b.val,a.val) - from allmem a left join grp_mem_s b - on a.gname=b.gname and a.val=b.user and b.key='email' - where a.val in (select name from user) limit 10000;" + # sql="with recursive allmem as + # (select gname,val from grp_m where gname='$1' + # union all select grp_m.gname,grp_m.val from grp_m,allmem + # where allmem.val=grp_m.gname) + # select coalesce(b.val,a.val) + # from allmem a left join grp_mem_s b + # on a.gname=b.gname and a.val=b.user and b.key='email' + # where a.val in (select name from user) limit 10000;" + # tmp tmp tmp tmp tmp tmp tmp + qgrp=`sqlquote $1` + 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;" + err CollectEmail: `echo "$sql"` + query "$sql" fi } sendinvitation() ( # $1=email - iss="invite-`date +%s`-$(genrandom 10)" + iss="invite-`date +%s`-$user" addsession $iss +7days # 1 week due date query "replace into par values('$iss', 'invite', 'string', \"$1\");" gecos=`gecos` @@ -1071,7 +1081,13 @@ "") repo="招待したい人のメイルアドレスを入力してください。" ;; *) repo="無効なアドレスです" ;; esac - m4 -D_REPORT_="$repo" -D_ACTION_="$myname?invite" \ + addr=`query "select val from par where sessid like 'invite-%-$user';"` +err addr=$addr + if [ -n "$addr" ]; then + susp="<h2>招待済みで加入待ちのアドレス</h2><pre>$addr</pre>" + fi + m4 -D_TITLE_="招待" -D_REPORT_="$repo" -D_ACTION_="?invite" \ + -D_BODYCLASS_="default" -D_SUSPENDED_="$susp" \ $layout/html.m4.html $layout/invite.m4.html } regist() { @@ -1096,6 +1112,7 @@ query "replace into par values('$session', 'pswd', 'string', 'wasureta'), ('$session', 'user', 'string', '$email');" wasureta $email + addsession $1 # for removal after 1 minute m4 -D_SYSNAME_="Initial Login" -D_MYNAME_="$myname?userconf" \ $layout/login.m4.html return @@ -1146,19 +1163,23 @@ and="${1:+and }" href="<a href=\"$myname?grp+" echo '<div class="listgroup">' - sql="select val from grp_s where key='tag' $and$* group by val order by ctime desc;" -err ListGRP: query + NGsql="select distinct tag from\ + (select gname, max(case key when 'tag' then val end) as tag, \ + max(case key when 'ctime' then val end) as ctime\ + from grp_s group by gname order by ctime);" + sql="select val from grp_s where key='tag' $and$* group by val;" +err ListGRP: query sql="$sql" for tag in `query "$sql"` do err ListGrp: tag=$tag tn=${tagline%%=${tag}*} tn=${tn##*[ :]} - 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');" + 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);" err PersonalGroupList= `echo $sql` echo "<h2>$tn</h2>" echo '<table class="b listgroup">' sq -header -html $db "$sql" \ - | sed "s,\(<TR><TD>\)\([-_A-z0-9]*\)</TD>,\1$href\2\">\2</a>," + | sed "s,\(<TR><TD>\)\([0-9]*\):\([-_A-z0-9]*\)</TD>,\1$href\2\">\3</a>," echo '</table>' done echo '</div>' @@ -1325,6 +1346,20 @@ fi if ismember "$user" "$grp"; then echo "${iamowner:+ / }<a href=\"?blog+$rowid\">グループの新規話題作成</a></p>" +# div.fold input[type="checkbox"]:checked ~ div {display: block;} + cat<<EOF +<form action="?send2mem" method="POST" enctype="multipart/form-data"> +<div class="fold"> +`cgi_checkbox send yes id="send"`<label + for="send">グループ全員にメッセージ送信</label> +<div> +`cgi_textarea message "" "cols=60"` +`cgi_submit 送信` +`cgi_reset リセット` +</div> +`cgi_hidden grp $rowid` +</div></form> +EOF fi # 加入ボタン + 加入者リスト err ismember $user $grp @@ -1335,8 +1370,14 @@ err EML: "select val from grp_mem_s where gname='$2' and user='$user' \ and key='email';" err email=$eml - echo '<h2>このグループに</h2>' + cat <<EOF +<div class="fold"> +`cgi_checkbox reg yes id="reg"`<label + for="reg">自身の参加状態を操作する</label> +<div> +EOF cgi_form grp <<EOF +<p>このグループに</p> <table class="b"> <tr><th>メンバーとして</th><td> <label>`cgi_radio joingrp "yes" $ismem`参加</label> / @@ -1348,7 +1389,7 @@ </table> `cgi_hidden grp $grp` EOF - + echo '</div></div>' echo '<h2>話題一覧</h2>' cgi_form searchart<<EOF <label>`cgi_text kwd`という語を含むコメントを検索</label> @@ -1363,13 +1404,42 @@ thumbxy=50x50 listmember "" "$c" \ |sed -e "s|\(<br>\),not=\(.*\)|\1<a href=\"$cm+\2\">管理者委託</a>|" } +send2grpmember() { + rowid=`getpar grp` + if [ -z "$rowid" ]; then + echo "<p>グループが未指定です。</p>" + return + fi + message=`getpar message` + if [ -z "$msg" ]; then + echo "<p>文章を入れてください。</p>" + return + fi + grp=`getgroupbyid $rowid` + members=`collectemail $grp` + # smail rcpt subj (file) + smail "$members" "グループ $grp 宛メッセージ(from `gecos $user`)" <<EOF +$urlbase?grp+$rowid +グループ $grp に所属する +`gecos $user` さんよりメッセージ: + +$message +EOF + cat<<EOF +<p>以下の宛先に送信しました。</p> +<pre> +$members +</pre> +<p><a href="?grp+$rowid">グループ $grp</a>に戻る。</p> +EOF +} joingrp() { # $1=group $2=user $3=yes/no $4=email(if any $5=AsAdmin) err joingrp: \$1=$1 \$2=$2 \$3=$3 \$4=$4 isgrpowner "$user" "$1" && isowner="yes" || isowner="" err jg:isgrpowner: isowner="$isowner" if [ x"$2" != x"$user" ]; then # if user is not login user - if [ -z "$isowner" ; then + if [ -z "$isowner" ]; then echo "<p>本人か、グループ管理者しか加入操作はできません。</p>" return fi