s4
changeset 382:7b1c44bf12e8
Add feature of cloning a group
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Mon, 28 Nov 2016 09:24:20 +0859 |
parents | 879d7f1cd676 |
children | 93ba4a8f3398 |
files | examples/sns/form/grp.def s4-funcs.sh s4.cgi |
diffstat | 3 files changed, 54 insertions(+), 3 deletions(-) [+] |
line diff
1.1 --- a/examples/sns/form/grp.def Mon Nov 28 07:46:35 2016 +0859 1.2 +++ b/examples/sns/form/grp.def Mon Nov 28 09:24:20 2016 +0859 1.3 @@ -9,3 +9,4 @@ 1.4 プロフィール画像:profimg:m:image: 1.5 メンバー:member:m:*grp_mem:maxlength="4M" 1.6 更新:mtime:s:stamp: 1.7 +書込:wtime:s:stamp:
2.1 --- a/s4-funcs.sh Mon Nov 28 07:46:35 2016 +0859 2.2 +++ b/s4-funcs.sh Mon Nov 28 09:24:20 2016 +0859 2.3 @@ -1395,6 +1395,51 @@ 2.4 ## err grpupdate:new-grid=$grid, sql=$sql 2.5 grp $grid 2.6 } 2.7 +groupclone() { 2.8 + # $1=grp-rowid of clone-base group 2.9 + qgrp=`query "SELECT quote(gname) FROM grp WHERE rowid=$1;"` 2.10 + if [ -z "$qgrp" ]; then 2.11 + echo "無効なグループIDです($1)" | html p 2.12 + return 2.13 + fi 2.14 + i=0 2.15 + while true; do 2.16 + copy="-copy$i" 2.17 + newqname=`query "SELECT quote($qgrp || '$copy');"` 2.18 + # err Trying new grp=$newqname with copy=$copy 2.19 + test=`query "SELECT gname FROM grp WHERE gname=$newqname;"` 2.20 + if [ -n "$test" ]; then 2.21 + i=$((i++)) 2.22 + continue 2.23 + fi 2.24 + break 2.25 + done 2.26 + # Creating New group "$newqname" with members of old group 2.27 + # err Creating new grp=$newqname with copy=$copy 2.28 + query<<-EOF 2.29 + BEGIN; 2.30 + INSERT INTO grp VALUES($newqname); -- Create NEW one 2.31 + REPLACE INTO grp_s(gname, key, val) -- Copy tag 2.32 + SELECT $newqname, key, val 2.33 + FROM grp_s WHERE gname=$qgrp AND key IN ('tag', 'mode'); 2.34 + REPLACE INTO grp_s(gname, key, type, val) -- Copy gecos with "copy$n" 2.35 + SELECT $newqname, key, type, val || '$copy' 2.36 + FROM grp_s WHERE gname=$qgrp AND key='gecos'; 2.37 + -- Copy members and their configuration -- 2.38 + REPLACE INTO grp_mem SELECT $newqname, user 2.39 + FROM grp_mem WHERE gname=$qgrp; 2.40 + REPLACE INTO grp_mem_s SELECT $newqname, user, key, type, val, bin 2.41 + FROM grp_mem_s WHERE gname=$qgrp; 2.42 + REPLACE INTO grp_mem_m SELECT $newqname, user, key, type, val, bin 2.43 + FROM grp_mem_m WHERE gname=$qgrp; 2.44 + -- Copy administrators -- 2.45 + REPLACE INTO grp_adm SELECT $newqname, user 2.46 + FROM grp_mem WHERE gname=$qgrp; 2.47 + COMMIT; 2.48 + EOF 2.49 + newrowid=`query "SELECT rowid FROM grp WHERE gname=$newqname;"` 2.50 + STOPCLONEMSG=1 groupconf "$newrowid" 2.51 +} 2.52 groupman() { 2.53 note="<p>グループ名に使用できない文字は自動的に削除されます。</p>" 2.54 2.55 @@ -1419,6 +1464,9 @@ 2.56 rowid=${1%%[!A-Z0-9a-z_]*} 2.57 # GF_ACTION="?grp+$1" edittable "$formdir/grp.def" "grp" "$rowid" #2015-0804 2.58 GF_STAGE="groupupdate" edittable "$formdir/grp.def" "grp" "$rowid" 2.59 + test -z "$STOPCLONEMSG" && 2.60 + echo "<a href=\"?groupclone+$rowid\">同じ構成員で新規グループ作成</a>" \ 2.61 + | html p 2.62 } 2.63 mems() { 2.64 _m4 -D_TITLE_="参加者一覧" -D_BODYCLASS_=listmember $layout/html.m4.html 2.65 @@ -2949,11 +2997,13 @@ 2.66 #err "select quote($col) from $tbl where rowid=$rowid;" 2.67 old=`query "select quote($col) from $tbl where rowid=$rowid;"` 2.68 cat<<-EOF | query 2.69 - BEGIN; 2.70 + -- Here we cannot use BEGIN-COMMIT because groupupdate() 2.71 + -- should use EXCLUSIVE transaction outside of this. 2.72 + SAVEPOINT par2table; 2.73 $sql 2.74 update blog_s set val=$val 2.75 where key='owner' and val=$old; 2.76 - COMMIT; 2.77 + RELEASE SAVEPOINT par2table; 2.78 EOF 2.79 ## XX: DIRTY Hack Ends here 2.80 ## We should keep blog's owner as a single column which has
3.1 --- a/s4.cgi Mon Nov 28 07:46:35 2016 +0859 3.2 +++ b/s4.cgi Mon Nov 28 09:24:20 2016 +0859 3.3 @@ -48,7 +48,7 @@ 3.4 showattc "$@" 3.5 exit 0 # Do not output further chunks 3.6 ;; 3.7 - invite|groupman|userconf|groupconf|mems|grps|grp|groupupdate|grpaction|joingrpadmit|commission|editheading|editart|showattc|send2mem|mvart) 3.8 + invite|groupman|userconf|groupconf|mems|grps|grp|groupupdate|groupclone|grpaction|joingrpadmit|commission|editheading|editart|showattc|send2mem|mvart) 3.9 contenttype; echo 3.10 [ -n "$1" ] && shift 3.11 $stage "$@"