s4

changeset 213:ca7e27d9224e

Add feature of moving article from personal diary to group board.
author HIROSE Yuuji <yuuji@gentei.org>
date Fri, 29 Apr 2016 18:15:45 +0859
parents 0001236d6a0c
children e4dd3cf443b0
files s4-funcs.sh s4.cgi
diffstat 2 files changed, 90 insertions(+), 1 deletions(-) [+]
line diff
     1.1 --- a/s4-funcs.sh	Fri Apr 29 09:45:07 2016 +0859
     1.2 +++ b/s4-funcs.sh	Fri Apr 29 18:15:45 2016 +0859
     1.3 @@ -1954,6 +1954,25 @@
     1.4  `cgi_hidden grp $grid`
     1.5  EOF
     1.6  }
     1.7 +crview4article() { # $1=rowid of blog, $2(optional)=extra SQL
     1.8 +  query<<EOF
     1.9 +CREATE TEMPORARY VIEW writeusers AS
    1.10 + SELECT DISTINCT author FROM article
    1.11 + WHERE id in (
    1.12 +  select id from article where blogid=(select id from blog where rowid=$1)
    1.13 + );
    1.14 +CREATE TEMPORARY VIEW movablegroups AS
    1.15 +SELECT g.rowid growid , g.gname
    1.16 +       FROM (SELECT grp.rowid, grp.gname FROM grp JOIN grp_mem gm
    1.17 +             ON grp.gname=gm.gname		-- そのユーザが属している
    1.18 +                AND user='$user') g		-- グループに絞る
    1.19 +       WHERE (SELECT author FROM writeusers
    1.20 +              EXCEPT
    1.21 +              SELECT user FROM grp_mem gm WHERE gm.gname = g.gname)
    1.22 +             IS NULL;
    1.23 +$2
    1.24 +EOF
    1.25 +}
    1.26  editheading() {	# $1=rowid-of-heading
    1.27    rowid=${1%%[!A-Z0-9a-z_]*}
    1.28    if [ -z "$rowid" ]; then
    1.29 @@ -1968,6 +1987,76 @@
    1.30  	    -D_BLOGS_="" -D_DUMPTABLE_="" \
    1.31  	    -D_FORM_="syscmd(\`cat')" \
    1.32  	    $layout/html.m4.html $layout/form+dump.m4.html
    1.33 +  # Move to group
    1.34 +  if isuser "$owner"; then
    1.35 +    crview4article $rowid
    1.36 +    n=`query "SELECT count(*) FROM writeusers;"`
    1.37 +    err N=$n
    1.38 +    if [ $((n)) -gt 0 ]; then
    1.39 +      err ROWID=$rowid
    1.40 +      sql="SELECT growid || ':' || gname FROM movablegroups;"
    1.41 +      cat<<-EOF
    1.42 +	<div class="fold">
    1.43 +	`cgi_checkbox mv send id="mv"`<label
    1.44 +	 for="mv">この話題をグループ所有に移動する</label>
    1.45 +	<div>
    1.46 +	<form action="?mvart" method="POST" enctype="multipart/form-data">
    1.47 +	移動先グループ:
    1.48 +	<select name="mv2grp">
    1.49 +	EOF
    1.50 +      query ".mode html"
    1.51 +      query<<-EOF |
    1.52 +	$sql
    1.53 +	.mode list
    1.54 +	EOF
    1.55 +      sed -e '/<\/TR>/d' -e 's,<TR>,,' -e 's,TD>,option>,g' \
    1.56 +	  -e 's,n>\([0-9]*\):\(.*\)<,n value="\1">\2<,'
    1.57 +      cat<<-EOF
    1.58 +	</select>
    1.59 +	<p>`cgi_checkbox cfm yes`<label>確認
    1.60 +	(この操作は元に戻すことができません)</label></p>
    1.61 +	`cgi_hidden blogrowid $rowid`
    1.62 +	`cgi_submit 移動`
    1.63 +	`cgi_reset Reset`
    1.64 +	</form>
    1.65 +	</div>
    1.66 +	</div>
    1.67 +	EOF
    1.68 +    fi
    1.69 +  fi
    1.70 +}
    1.71 +mvart() {
    1.72 +  blogrowid=`getpar blogrowid`
    1.73 +  mv2grp=`getpar mv2grp`
    1.74 +  cfm=`getpar cfm`
    1.75 +  ##### echo move blog:$blogrowid to $mv2grp | html p
    1.76 +  blogrowid=${blogrowid%%[!A-Z0-9a-z_]*}	# Purify
    1.77 +  mv2grp=${mv2grp%%[!A-Z0-9a-z_]*}		# Purify
    1.78 +  . ./s4-blog.sh
    1.79 +  if [ -z "$blogrowid" -o -z "$mv2grp" ]; then
    1.80 +    echo "無効な指定です(mvart)。" | html p
    1.81 +    return
    1.82 +  elif [ x"$cfm" != x"yes" ]; then
    1.83 +    echo "記事移動の確認にチェックがないので通常表示に戻ります。" | html p
    1.84 +  else				# OK to go
    1.85 +    crview4article $blogrowid
    1.86 +    ########## TRANSACTION BEGIN
    1.87 +    query "BEGIN;"
    1.88 +    n=`query "SELECT count(*) FROM writeusers;"`
    1.89 +    err Nwriteuser=$n
    1.90 +    if [ $((n)) -gt 0 ]; then
    1.91 +      query<<-EOF
    1.92 +	UPDATE blog_s SET val=(SELECT gname FROM grp WHERE rowid=$mv2grp)
    1.93 +	WHERE key='owner'
    1.94 +	      AND id=(SELECT id FROM blog WHERE rowid=$blogrowid)
    1.95 +	      AND $mv2grp IN (SELECT growid FROM movablegroups);
    1.96 +	EOF
    1.97 +    fi
    1.98 +    query "END;"
    1.99 +    ########## TRANSACTION END
   1.100 +  fi
   1.101 +  blog_reply $blogrowid
   1.102 +  echo yes | html p
   1.103  }
   1.104  editart() {	# $1=article-rowid $2=blogrowid
   1.105    rowid=${1%%[!A-Z0-9a-z_]*}
     2.1 --- a/s4.cgi	Fri Apr 29 09:45:07 2016 +0859
     2.2 +++ b/s4.cgi	Fri Apr 29 18:15:45 2016 +0859
     2.3 @@ -47,7 +47,7 @@
     2.4      showattc "$@"
     2.5      exit 0			# Do not output further chunks
     2.6      ;;
     2.7 -  invite|groupman|userconf|groupconf|mems|grps|grp|groupupdate|grpaction|joingrpadmit|commission|editheading|editart|showattc|send2mem)
     2.8 +  invite|groupman|userconf|groupconf|mems|grps|grp|groupupdate|grpaction|joingrpadmit|commission|editheading|editart|showattc|send2mem|mvart)
     2.9      contenttype; echo
    2.10      [ -n "$1" ] && shift
    2.11      $stage "$@"