# HG changeset patch # User HIROSE Yuuji # Date 1438696473 -32400 # Node ID 82e215e7546832aa2b32e0374576d45354a748fd # Parent 2342e637a632b4661ba7e949fdbe70ba6f23bdee Add moderated mode to grp diff -r 2342e637a632 -r 82e215e75468 s4-blog.sh --- a/s4-blog.sh Tue Aug 04 22:39:44 2015 +0900 +++ b/s4-blog.sh Tue Aug 04 22:54:33 2015 +0900 @@ -22,10 +22,7 @@ case $mode in admin) if isgroup "$blogowner"; then - emails=`for i in $(getgroupadmins $blogowner); do\ - [ x"$i" = x"$user" ] && continue;\ - email4group "$blogowner" "$i" ;\ - done` + emails=`getgroupadminmails $blogowner` else emails=`collectemail $blogowner` fi diff -r 2342e637a632 -r 82e215e75468 s4-funcs.sh --- a/s4-funcs.sh Tue Aug 04 22:39:44 2015 +0900 +++ b/s4-funcs.sh Tue Aug 04 22:54:33 2015 +0900 @@ -19,8 +19,9 @@ imgdir=${IMGDIR:-img} url=${URL:-"${REQUEST_SCHEME:-http${HTTPS:+s}}://$HTTP_HOST$REQUEST_URI"} urlbase=${url%%\?*} -msg=$templ/msg +msgdir=$templ/msg timeout="+2 days" +memoplimitdays="7" dumpcollen=20 #thumbxy=120x120 thumbxy=96x96 @@ -319,11 +320,22 @@ err isgrpowner: $sql test -n "`query $sql`" ) +getgroupadminmails() { + # $1=group + for i in $(getgroupadmins $1); do + email4group "$1" "$i" ; + done +} getgroupadmins() { # $1=group # This function is called in a backquote, so needn't to be subshellized qgrp=`sqlquote "$1"` query "select user from grp_adm where gname=$qgrp;" } +getgroupattr() { # $1=group $2=attr + # This function is called in a backquote, so needn't to be subshellized + getvalbyid grp $2 \ + $(query "select rowid from grp where gname=`sqlquote $1`;") +} getgroupbyid() { # $1=id|gname sql="select coalesce((select gname from grp where gname=$(sqlquote $1)), @@ -884,9 +896,8 @@ smail() { # smail rcpt subj (file) rcpt=`echo $1` # strip newlines - subj="`echo $2|nkf -jM`" - # echo rcpt=$rcpt - (m4 -D_RCPT_="$rcpt" -D_SUBJ_="\`$subj'" -D_FROM_=$admin $msg/mail-header.m4 + subj=`echo $2|nkf -jM|tr -d '\n'` + (m4 -D_RCPT_="$rcpt" -D_SUBJ_="\`$subj'" -D_FROM_=$admin $msgdir/mail-header.m4 cat $3 | nkf -jd ) | sendmail -f $admin $rcpt } setviastring() { @@ -933,7 +944,7 @@ dbsetbyid user $user pswd "$encpswd" # Avoid $user substitution with m4, because $url comes from user input. m4 -D_PSWD_="$newpswd" -D_URL_="$url" -D_ADMIN_="$admin" \ - $msg/mail-newaccount.m4 \ + $msgdir/mail-newaccount.m4 \ | sed "s/_USER_/$user/g" \ | smail $user "New Account" } @@ -975,7 +986,7 @@ if [ $st != 0 ]; then contenttype; echo m4 -D_USER_="$user" -D_URL_="$url" -D_ADMIN_="$admin" \ - $msg/login-fail-$st.m4.html + $msgdir/login-fail-$st.m4.html showlogin # and EXIT fi } @@ -1111,7 +1122,7 @@ sendinvitation() ( # $1=email iss="invite-`date +%s`-$user" - addsession $iss +7days # 1 week due date + addsession $iss +${memoplimitdays}days # 1 week due date query "replace into par values('$iss', 'invite', 'string', \"$1\");" gecos=`gecos` name=$user"${gecos:+($gecos)}" @@ -1121,7 +1132,7 @@ -D_EMAIL_="$1" \ -D_REGIST_="$regist" \ -D_ADMIN_="$admin" \ - $msg/mail-invite.m4 \ + $msgdir/mail-invite.m4 \ | smail $1 "BBSへの御招待" return 0 ) @@ -1612,6 +1623,10 @@ `cgi_hidden grp $rowid` EOF + if [ x`getgroupattr $grp regmode` = x'moderated' -a -z "$ismem" ]; then + echo "moderated (承認加入の)グループなので実際に参加できるのは +グループ管理者が承認操作をした後になります。" | html p 'class="warn"' + fi echo '' echo '

話題一覧

' cgi_form searchart< $tf + excmsg="
+`cgi_radio rm yes ` 下でチェックした人のグループ登録解除 +
+本当に消します! `cgi_checkbox confirm yes` 確認 +

この操作による通知は本人に行きません。 +あらかじめ通知するか、登録解除してよい状況かしっかり確認してください。

+
+
" cgi_form grpaction<\)\([0-9]*\),\([^<]*\)|\1$b1\2$b2\3$b3|" \ | m4 -D_TITLE_="spaste(\`$tf')" \ @@ -1734,14 +1759,7 @@ `cgi_textarea text "" cols=40` -
-`cgi_radio rm yes ` 下でチェックした人のグループ登録解除 -
-本当に消します! `cgi_checkbox confirm yes` 確認 -

この操作による通知は本人に行きません。 -あらかじめ通知するか、登録解除してよい状況かしっかり確認してください。

-
-
+${isowner:+\"$excmsg\"}

$grp 参加者一覧

`sq $db -html "$sql"` @@ -1801,7 +1819,7 @@ return fi message=`getpar message` - if [ -z "$msg" ]; then + if [ -z "$message" ]; then echo "文章を入れてください。" | html p return fi @@ -1823,16 +1841,86 @@

グループ $grpに戻る。

EOF } +joingrpadmit() { + # $1=yes/no $2=session-key + if [ -z "$2" ]; then + echo "bye bye" | html p; return + fi + t_usr=`session=$2 getpar user` + t_grp=`session=$2 getpar group` + err joingrpadmit: t_usr=$t_usr, t_grp=$t_grp + m4 -D_TITLE_="joingrp" $layout/html.m4.html + if [ -z "$t_usr" -o -z "$t_grp" ]; then + echo "無効な加入依頼です。" | html p + echo "有効期限が切れたか、 +他の管理者がいる場合は処理済みの可能性があります。" | html p + return + fi + if ! isgrpowner "$user" $t_grp; then + echo "グループ管理者のみの機能です。" | html p; return + fi + case $1 in + yes) joingrp "$t_grp" "$t_usr" yes "$t_usr" ;; + no) joingrp "$t_grp" "$t_usr" no "$t_usr" ;; + *) + echo "無効な指定です($1)。" | html p + return ;; + esac + gid=$(query "select rowid from grp where gname=`sqlquote $t_grp`;") + rcpts="`getgroupadminmails $t_grp` $user" + err admit: msgdir=$msgdir, rcpts="["$rcpts"]" + body="グループ $t_grp +に +$t_usr +`[ x$1 = xyes ] && echo 'を追加' || echo 'の解除操作を'` +しました。" + (echo "$body"; echo; echo "$url?grp+$gid") | smail "$rcpts" "joingrp $1" + query "delete from session where id='$2';" + echo "$body" | html p +} + +joingrprequest() { + # $1=group $2=user $3=yes/no $4=email(if any $5=AsAdmin) + jss="joingrp-`date +%s`-`genrandom 12`" + addsession $jss +${memoplimitdays}days + query "replace into par values('$jss', 'group', 'string', `sqlquote $1`), +('$jss', 'user', 'string', `sqlquote $user`);" + smail "$(collectemail `getgroupadmins $1`)" "Join request to $1"<