# HG changeset patch # User HIROSE Yuuji # Date 1437523375 -32400 # Node ID 514acfff7453ef80a40ce17e50e3b680f30395bf # Parent 850f0d4228f712f81dfdfae10d58585c03b51b3b periodic diff -r 850f0d4228f7 -r 514acfff7453 s4-funcs.sh --- 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="

招待済みで加入待ちのアドレス

$addr
" + 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="' - 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 "

$tn

" echo '' sq -header -html $db "$sql" \ - | sed "s,\(,\1$href\2\">\2," + | sed "s,\(,\1$href\2\">\3," echo '
\)\([-_A-z0-9]*\)
\)\([0-9]*\):\([-_A-z0-9]*\)
' done echo '' @@ -1325,6 +1346,20 @@ fi if ismember "$user" "$grp"; then echo "${iamowner:+ / }
グループの新規話題作成

" +# div.fold input[type="checkbox"]:checked ~ div {display: block;} + cat< +
+`cgi_checkbox send yes id="send"` +
+`cgi_textarea message "" "cols=60"` +`cgi_submit 送信` +`cgi_reset リセット` +
+`cgi_hidden grp $rowid` +
+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 '

このグループに

' + cat < +`cgi_checkbox reg yes id="reg"` +
+EOF cgi_form grp <このグループに

メンバーとして / @@ -1348,7 +1389,7 @@
`cgi_hidden grp $grp` EOF - + echo '
' echo '

話題一覧

' cgi_form searchart<`cgi_text kwd`という語を含むコメントを検索 @@ -1363,13 +1404,42 @@ thumbxy=50x50 listmember "" "$c" \ |sed -e "s|\(
\),not=\(.*\)|\1管理者委託|" } +send2grpmember() { + rowid=`getpar grp` + if [ -z "$rowid" ]; then + echo "

グループが未指定です。

" + return + fi + message=`getpar message` + if [ -z "$msg" ]; then + echo "

文章を入れてください。

" + return + fi + grp=`getgroupbyid $rowid` + members=`collectemail $grp` + # smail rcpt subj (file) + smail "$members" "グループ $grp 宛メッセージ(from `gecos $user`)" <以下の宛先に送信しました。

+
+$members
+
+

グループ $grpに戻る。

+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 "

本人か、グループ管理者しか加入操作はできません。

" return fi