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