Mercurial > hgrepos > hgweb.cgi > s4
diff s4-funcs.sh @ 382:7b1c44bf12e8
Add feature of cloning a group
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Mon, 28 Nov 2016 09:24:20 +0859 |
parents | 165fa0a61d18 |
children | 93ba4a8f3398 |
line wrap: on
line diff
--- a/s4-funcs.sh Mon Nov 28 07:46:35 2016 +0859 +++ b/s4-funcs.sh Mon Nov 28 09:24:20 2016 +0859 @@ -1395,6 +1395,51 @@ ## err grpupdate:new-grid=$grid, sql=$sql grp $grid } +groupclone() { + # $1=grp-rowid of clone-base group + qgrp=`query "SELECT quote(gname) FROM grp WHERE rowid=$1;"` + if [ -z "$qgrp" ]; then + echo "無効なグループIDです($1)" | html p + return + fi + i=0 + while true; do + copy="-copy$i" + newqname=`query "SELECT quote($qgrp || '$copy');"` + # err Trying new grp=$newqname with copy=$copy + test=`query "SELECT gname FROM grp WHERE gname=$newqname;"` + if [ -n "$test" ]; then + i=$((i++)) + continue + fi + break + done + # Creating New group "$newqname" with members of old group + # err Creating new grp=$newqname with copy=$copy + query<<-EOF + BEGIN; + INSERT INTO grp VALUES($newqname); -- Create NEW one + REPLACE INTO grp_s(gname, key, val) -- Copy tag + SELECT $newqname, key, val + FROM grp_s WHERE gname=$qgrp AND key IN ('tag', 'mode'); + REPLACE INTO grp_s(gname, key, type, val) -- Copy gecos with "copy$n" + SELECT $newqname, key, type, val || '$copy' + FROM grp_s WHERE gname=$qgrp AND key='gecos'; + -- Copy members and their configuration -- + REPLACE INTO grp_mem SELECT $newqname, user + FROM grp_mem WHERE gname=$qgrp; + REPLACE INTO grp_mem_s SELECT $newqname, user, key, type, val, bin + FROM grp_mem_s WHERE gname=$qgrp; + REPLACE INTO grp_mem_m SELECT $newqname, user, key, type, val, bin + FROM grp_mem_m WHERE gname=$qgrp; + -- Copy administrators -- + REPLACE INTO grp_adm SELECT $newqname, user + FROM grp_mem WHERE gname=$qgrp; + COMMIT; + EOF + newrowid=`query "SELECT rowid FROM grp WHERE gname=$newqname;"` + STOPCLONEMSG=1 groupconf "$newrowid" +} groupman() { note="<p>グループ名に使用できない文字は自動的に削除されます。</p>" @@ -1419,6 +1464,9 @@ rowid=${1%%[!A-Z0-9a-z_]*} # GF_ACTION="?grp+$1" edittable "$formdir/grp.def" "grp" "$rowid" #2015-0804 GF_STAGE="groupupdate" edittable "$formdir/grp.def" "grp" "$rowid" + test -z "$STOPCLONEMSG" && + echo "<a href=\"?groupclone+$rowid\">同じ構成員で新規グループ作成</a>" \ + | html p } mems() { _m4 -D_TITLE_="参加者一覧" -D_BODYCLASS_=listmember $layout/html.m4.html @@ -2949,11 +2997,13 @@ #err "select quote($col) from $tbl where rowid=$rowid;" old=`query "select quote($col) from $tbl where rowid=$rowid;"` cat<<-EOF | query - BEGIN; + -- Here we cannot use BEGIN-COMMIT because groupupdate() + -- should use EXCLUSIVE transaction outside of this. + SAVEPOINT par2table; $sql update blog_s set val=$val where key='owner' and val=$old; - COMMIT; + RELEASE SAVEPOINT par2table; EOF ## XX: DIRTY Hack Ends here ## We should keep blog's owner as a single column which has