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

yatex.org