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 "$@"