s4

changeset 13:f2204bd941d5

periodic
author HIROSE Yuuji <yuuji@gentei.org>
date Tue, 21 Jul 2015 10:13:33 +0900
parents 262bbdea72e2
children 59b6b1c446c8
files mpsplit.rb templ/form/grp.def y4-blog.sh y4-funcs.sh y4-init.sh y4.cgi
diffstat 6 files changed, 84 insertions(+), 42 deletions(-) [+]
line diff
     1.1 --- a/mpsplit.rb	Tue Jul 21 08:02:30 2015 +0900
     1.2 +++ b/mpsplit.rb	Tue Jul 21 10:13:33 2015 +0900
     1.3 @@ -24,8 +24,6 @@
     1.4      printf("%s:filename=%s\n", name, fn.unpack("H*")[0])
     1.5    elsif /name=(['\"]?)(.*?)\1/ =~ header
     1.6      v=$2
     1.7 -#    out=NKF::nkf("-w -MQ", body).gsub(/([^=])\n/, "\\1=0a").gsub(/=\n/, "")
     1.8 -#    printf("%s=%s\n", v, out)
     1.9      printf("%s=%s\n", v, body.unpack("H*")[0])
    1.10    end
    1.11  end
     2.1 --- a/templ/form/grp.def	Tue Jul 21 08:02:30 2015 +0900
     2.2 +++ b/templ/form/grp.def	Tue Jul 21 10:13:33 2015 +0900
     2.3 @@ -4,3 +4,4 @@
     2.4  所有者:owner:m:*grp_adm:
     2.5  プロフィール画像:profimg:m:image:
     2.6  メンバー:member:m:*grp_mem:maxlength="4M"
     2.7 +更新:mtime:s:stamp:
     3.1 --- a/y4-blog.sh	Tue Jul 21 08:02:30 2015 +0900
     3.2 +++ b/y4-blog.sh	Tue Jul 21 10:13:33 2015 +0900
     3.3 @@ -355,7 +355,7 @@
     3.4    if isuser "$owner"; then
     3.5      subtitle="`gecos $owner` さんの話題"
     3.6    else
     3.7 -    subtitle="<a href=\"?grp+$owner\">$owner</a> での話題"
     3.8 +    subtitle="<a href=\"?grp+$owner\">`gecos $owner`</a> での話題"
     3.9    fi
    3.10    if [ -z "$title" ]; then
    3.11      echo "<p>日記番号指定が無効です。</p>"
     4.1 --- a/y4-funcs.sh	Tue Jul 21 08:02:30 2015 +0900
     4.2 +++ b/y4-funcs.sh	Tue Jul 21 10:13:33 2015 +0900
     4.3 @@ -43,6 +43,8 @@
     4.4  	締切設定
     4.5  	一斉送信
     4.6  	自分の提出物リスト
     4.7 +	getparfilename の tmpd の扱い
     4.8 +	やっぱりs4にしようかな
     4.9  7/18	○書込著者からホームへのリンク
    4.10  7/17	○個人blogに「レポート提出用」がついたときの挙動
    4.11  	○添付ファイル回収
    4.12 @@ -418,7 +420,7 @@
    4.13  getparfilename() {
    4.14    # null if type of $1 is not file
    4.15    (f=`query "select val from par where var='$1' and sessid='$session' and type='file' $2;"`
    4.16 -   [ -n "$f" ] && echo $tmpdir/$f)
    4.17 +   [ -n "$f" ] && echo $f)
    4.18  }
    4.19  sqlquote() {
    4.20    (v="$1"
    4.21 @@ -489,7 +491,7 @@
    4.22     key=`query "select $pk from $1 where rowid=$3;"`
    4.23     ### err "select $pk from $1 where rowid=$3" - key=$key '$4(tmp)'=$4
    4.24     for kt in s m; do
    4.25 -     td=${4:-$tmpdir}
    4.26 +     td=${4:-$tmpd}
    4.27       [ -d $td ] || mkdir -p $td
    4.28       t=${1}_$kt
    4.29       for c in `gettbl_${kt}_cols $1`; do
    4.30 @@ -945,8 +947,10 @@
    4.31    getcookie
    4.32    case "$REQUEST_METHOD" in
    4.33      get|GET)	s="$QUERY_STRING" ;;
    4.34 -    post|POST)	dd count=$CONTENT_LENGTH bs=1 of=$tmpf 2>/dev/null
    4.35 -		# cat > $tmpf
    4.36 +    post|POST)	## dd count=$CONTENT_LENGTH bs=1 of=$tmpf 2>/dev/null #slow
    4.37 +		# cat > $tmpf		# too much?
    4.38 +		head -c $CONTENT_LENGTH > $tmpf	# safe?
    4.39 +      		(echo CL=$CONTENT_LENGTH; ls -lF $tmpf) 1>&3
    4.40  		s="`cat tmp/stream`"
    4.41  		tmpfiles=$tmpfiles"${tmpfiles+ }$tmpf"
    4.42  		;;
    4.43 @@ -954,8 +958,8 @@
    4.44    case "$CONTENT_TYPE" in
    4.45      *boundary*)
    4.46        bndry=${CONTENT_TYPE#*boundary=}
    4.47 -      #for us in `LC_CTYPE=C ./mpsplit.rb "$bndry" $tmpdir < $tmpf`
    4.48 -      for us in `LC_CTYPE=C ./mpsplit.pl "$bndry" $tmpdir < $tmpf`
    4.49 +      #for us in `LC_CTYPE=C ./mpsplit.rb "$bndry" $tmpd < $tmpf`
    4.50 +      for us in `LC_CTYPE=C ./mpsplit.pl "$bndry" $tmpd < $tmpf`
    4.51        do
    4.52  	k=${us%%\=*}
    4.53  	#echo u=$us
    4.54 @@ -965,9 +969,10 @@
    4.55  	case "$k" in
    4.56  	  *:filename)
    4.57  	    type='file'; k=${k%:filename}
    4.58 -	    case `file --mime-type $tmpdir/$v|cut -d' ' -f2` in
    4.59 +(echo k=$k; ls -lF $tmpd/$v; file --mime-type $tmpd/$v) 1>&3
    4.60 +	    case `file --mime-type $tmpd/$v|cut -d' ' -f2` in
    4.61  	      [Ii]mage/*)
    4.62 -		mogrify -resize $maximagexy'>' $tmpdir/$v
    4.63 +		mogrify -resize $maximagexy'>' $tmpd/$v
    4.64  		;;
    4.65  	    esac
    4.66  	    ;;
    4.67 @@ -1119,8 +1124,9 @@
    4.68    and="${1:+and }"
    4.69    href="<a href=\"$myname?grp+"
    4.70    echo '<div class="listgroup">'
    4.71 -err ListGRP: query "select val from grp_s where key='tag' $and$* group by val;"
    4.72 -  for tag in `query "select val from grp_s where key='tag' $and$* group by val;"`
    4.73 +  sql="select val from grp_s where key='tag' $and$* group by val order by ctime desc;"
    4.74 +err ListGRP: query 
    4.75 +  for tag in `query "$sql"`
    4.76    do
    4.77  err ListGrp: tag=$tag
    4.78      tn=${tagline%%=${tag}*}
    4.79 @@ -1184,9 +1190,11 @@
    4.80  
    4.81    # XX: これ複雑すぎるかな。もっとシンプルにしたい。$3条件も。2015-07-08
    4.82    sql="select a.rowid, a.$link, coalesce(b.gecos, a.$nm) as nick, b.tag,
    4.83 -	case when '$iamowner' = '' then ''
    4.84 -	     when a.$nm in (select user from grp_adm
    4.85 -			where gname='$grp') then '(管理者)'
    4.86 +	case when a.$nm in (select user from grp_adm
    4.87 +			where gname='$grp') then '(管理者)' -- from group mode
    4.88 +	     when '$user' in (select user from grp_adm where gname=a.$nm)
    4.89 +		then '(ADMIN)'
    4.90 +	     when '$iamowner' = '' then ''
    4.91  	     else ',not='||a.rowid end as ownerlink
    4.92  	from $tbl a left join
    4.93  		(select $nm as name,
    4.94 @@ -1227,7 +1235,7 @@
    4.95  EOF
    4.96    fi
    4.97  
    4.98 -  err `echo $sql\;`
    4.99 +  err ListEntry: `echo $sql\;`
   4.100  
   4.101    query "$sql limit $limit ${offset:+offset $offset};" \
   4.102        | while IFS='|' read id lnk name tag ownerp; do
   4.103 @@ -1254,12 +1262,21 @@
   4.104  }
   4.105  showgroup() {
   4.106    grp=$1
   4.107 -  
   4.108 -  showgroupsub $formdir/grp.def $grp | \
   4.109 -      m4 -D_TITLE_="グループ $grp" \
   4.110 -	 -D_FORM_="syscmd(\`cat')" \
   4.111 -	 -D_DUMPTABLE_="" \
   4.112 -	 $layout/groupman.m4.html
   4.113 +
   4.114 +  gname=`getpar gname`
   4.115 +  if [ -n "$gname" ]; then
   4.116 +    err REMOVING:::::::
   4.117 +    par2table $formdir/grp.def
   4.118 +  fi
   4.119 +  if isgroup "$grp"; then
   4.120 +     showgroupsub $formdir/grp.def "$grp" | \
   4.121 +	 m4 -D_TITLE_="グループ $grp" \
   4.122 +	    -D_FORM_="syscmd(\`cat')" \
   4.123 +	    -D_DUMPTABLE_="" \
   4.124 +	    $layout/groupman.m4.html
   4.125 +  else				# if $grp is removed at par2table
   4.126 +    listgroup
   4.127 +  fi
   4.128  }
   4.129  showgroupsub() {
   4.130    # $1=def-file $2=group
   4.131 @@ -1272,16 +1289,16 @@
   4.132    val=`getvalbyid grp profimg $rowid $tmpd`
   4.133    # 6/14の次グループのHOMEで出す情報を作る Done
   4.134    viewtable $1 grp $rowid
   4.135 -  if isgrpowner $user $grp; then
   4.136 +  if isgrpowner "$user" "$grp"; then
   4.137      echo "<p><a href=\"?groupconf+$grp\">グループ情報の編集</a>"
   4.138      iamowner=$grp
   4.139    fi
   4.140 -  if ismember $user $grp; then
   4.141 +  if ismember "$user" "$grp"; then
   4.142      echo "${iamowner:+ / }<a href=\"?blog+$grp\">グループの新規話題作成</a></p>"
   4.143    fi
   4.144    # 加入ボタン + 加入者リスト
   4.145  err ismember $user $grp
   4.146 -  ismember $user $grp && ismem='checked' || nomem='checked'
   4.147 +  ismember "$user" "$grp" && ismem='checked' || nomem='checked'
   4.148    # このグループでの加入アドレス
   4.149    eml=`query "select val from grp_mem_s where gname='$2' and user='$user' \
   4.150  	and key='email';"`
   4.151 @@ -1317,10 +1334,11 @@
   4.152        |sed -e "s|\(<br>\),not=\(.*\)|\1<a href=\"$cm+\2\">管理者委託</a>|"
   4.153  }
   4.154  joingrp() {
   4.155 -  # $1=group $2=user $3=yes/no $4=email(if any)
   4.156 +  # $1=group $2=user $3=yes/no $4=email(if any $5=AsAdmin)
   4.157  err joingrp: \$1=$1 \$2=$2 \$3=$3 \$4=$4
   4.158 +  isgrpowner "$user" "$1" && isowner="yes" || isowner=""
   4.159    if [ x"$2" != x"$user" ]; then # if user is not login user
   4.160 -    if ! isgrpowner $user $1; then
   4.161 +    if [ -z "$isowner" ; then
   4.162        echo "<p>本人か、グループ管理者しか加入操作はできません。</p>"
   4.163        return
   4.164      fi
   4.165 @@ -1334,6 +1352,19 @@
   4.166  		'string', '$4', NULL);"
   4.167  	query "replace into grp_mem_s values('$1', '$user', 'email', \
   4.168  		'string', '$4', NULL);"
   4.169 +	if [ -n "$5" ]; then	# as ADMIN
   4.170 +	  # Coming here means newly created group
   4.171 +	  sql="select case\
   4.172 +		 when (select count(*) from grp_mem where gname='$1')=1\
   4.173 +		 then (select user from grp_mem\
   4.174 +			 where gname='$1' and user='$user')\
   4.175 +		 else '' end;"
   4.176 +	  err NewGrpChk: $sql
   4.177 +	  if [ -n "`query \"$sql\"`" ]; then
   4.178 +	    err ADMIN: "replace into grp_adm values('$1', '$user');"
   4.179 +	    query "replace into grp_adm values('$1', '$user');"
   4.180 +	  fi
   4.181 +	fi
   4.182        else
   4.183  	echo $msg
   4.184        fi
   4.185 @@ -1371,7 +1402,7 @@
   4.186    showgroup $1
   4.187  }
   4.188  dumptable() {
   4.189 -  # $1=mode $2=Table $3=column-list(defaults to *) $4=conditions(if any)
   4.190 +  # $1=mode $2=Table $3=column-list-of-*_s(defaults to *) $4=conditions(if any)
   4.191    # textのフィールドだけ全てダンプにしたほうがいいか
   4.192    # $DT_VIEW sets link
   4.193    # 6/17の次: editリンクじゃなくてスレッドVIEWリンクでいいんちゃう?
   4.194 @@ -1398,8 +1429,12 @@
   4.195    substr=${dumpcollen:+"substr(val, 0, $dumpcollen)"}
   4.196    substr=${substr:-val}
   4.197    for col in ${3:-`gettbl_s_cols $2`}; do
   4.198 -    eav=$eav${eav:+,}" max(case key when '$col' then $substr end) as $col"
   4.199 -    scols="$scols${scols:+, }b.$col"
   4.200 +    case $col in
   4.201 +      *:*)	col=${col%:*} as=${col#*:} ;;
   4.202 +      *)	as=${col} ;;
   4.203 +    esac
   4.204 +    eav=$eav${eav:+,}" max(case key when '$col' then $substr end) as $as"
   4.205 +    scols="$scols${scols:+, }b.$as"
   4.206    done
   4.207  #case author when '$user' then a.rowid else '---' end as ID,
   4.208    sql="select \
   4.209 @@ -1432,13 +1467,15 @@
   4.210      if [ x"$tbl" = x"user" ]; then
   4.211        rowowner=`query "select name from $tbl where rowid=$rowid;"`
   4.212      elif [ x"$tbl" = x"grp" ]; then
   4.213 -      isgrpowner $user `query "select gname from $tbl where rowid=$rowid;"` \
   4.214 -	  && rowowner=$user
   4.215 +      sql="select gname from $tbl where rowid=$rowid;"
   4.216 +      ##err p2t:grp:q $sql
   4.217 +      isgrpowner $user "`query $sql`" && rowowner=$user
   4.218      else
   4.219        rowowner=`query "select owner from $tbl where rowid=$rowid;"`
   4.220        rowowner=${rowowner:-`query "select author from $tbl
   4.221  	 where rowid=$rowid;"`}
   4.222      fi
   4.223 +    ### err rowowner=$rowowner
   4.224      if [ x"$user" != x"$rowowner" ]; then
   4.225        echo "<p>他人のレコードはいじれないの</p>"
   4.226        return
   4.227 @@ -1528,7 +1565,7 @@
   4.228  	     edit)
   4.229  	       case `gettbl_coltype $tbl/$origcol` in
   4.230  		 image|document|binary)
   4.231 -		   file=`getparfilename $v`
   4.232 +		   file=$tmpd/`getparfilename $v`
   4.233  		   err type=file=$file
   4.234  		   [ -z "$file" ] && continue
   4.235  		   bn=${file##*/}
   4.236 @@ -1568,7 +1605,7 @@
   4.237  	 bin=NULL
   4.238  err partype$col=`getpartype $col "$limit"`
   4.239  	 case $ptype in
   4.240 -	   file) file=`getparfilename $col "$limit"`
   4.241 +	   file) file=$tmpd/`getparfilename $col "$limit"`
   4.242  err parfile-$col=$file
   4.243  		 [ -z "$file" ] && continue
   4.244  		 bin="X'"$(hexize $file)"'"
   4.245 @@ -1605,7 +1642,7 @@
   4.246  	     fi
   4.247  	     ;;
   4.248  	 esac
   4.249 -	 #err "replace into $tb2 values($pval, \"$col\", $type, $val, $bin);"
   4.250 +err p2t: "replace into $tb2 values($pval, \"$col\", $type, $val, $bin);"
   4.251  	 echo "replace into $tb2 values($pval, \"$col\", $type, $val, $bin);" \
   4.252  	     | sq $db
   4.253         done
   4.254 @@ -1807,6 +1844,7 @@
   4.255   <table class="b $2">
   4.256  $forms
   4.257   </table>$hiddens
   4.258 + ${GF_STAGE:+`cgi_hidden stage $GF_STAGE`}
   4.259   ${rowid:+<input type="hidden" name="rowid" value="$rowid">}
   4.260  EOF
   4.261    if [ -z $GF_VIEWONLY ]; then
     5.1 --- a/y4-init.sh	Tue Jul 21 08:02:30 2015 +0900
     5.2 +++ b/y4-init.sh	Tue Jul 21 10:13:33 2015 +0900
     5.3 @@ -44,6 +44,7 @@
     5.4  	     addcol=$col
     5.5  	     case $keytype in
     5.6  	       *pf*|*fp*)
     5.7 +		 pkey="$pkey${pkey:+, }$col"
     5.8  		 fkey="${fkey}, foreign key($col) references $objtype on delete cascade on update cascade"
     5.9  		 fkey2="${fkey2}, foreign key($col) references $objtype on delete cascade on update cascade" ;;
    5.10  	       *p*)
    5.11 @@ -95,7 +96,7 @@
    5.12  create_struct $formdir/grp_adm.def
    5.13  create_struct $formdir/blog.def
    5.14  create_struct $formdir/article.def
    5.15 -create_struct $formdir/diary.def
    5.16 +#### create_struct $formdir/diary.def
    5.17  
    5.18  create table acclog "(user, tbl, rowid, time, \
    5.19  	primary key(user, tbl, rowid), \
     6.1 --- a/y4.cgi	Tue Jul 21 08:02:30 2015 +0900
     6.2 +++ b/y4.cgi	Tue Jul 21 10:13:33 2015 +0900
     6.3 @@ -22,7 +22,7 @@
     6.4      ;;
     6.5  esac
     6.6  
     6.7 -## err 1=$1 2=$2 3=$3 4=$4
     6.8 +err 1=$1 2=$2 3=$3 4=$4
     6.9  stage=`getpar stage`
    6.10  stage=${stage:-$1}
    6.11  case ${stage} in
    6.12 @@ -55,10 +55,14 @@
    6.13    "groupman")
    6.14      contenttype; echo
    6.15      gname=`getpar gname`
    6.16 -    [ -n "$gname" ] && par2table $formdir/grp.def
    6.17 +    if [ -n "$gname" ]; then
    6.18 +      par2table $formdir/grp.def
    6.19 +      joingrp "$gname" "$user" yes "$user" as-admin
    6.20 +    fi
    6.21 +    GF_STAGE=groupman
    6.22      m4 -D_TITLE_="グループ作成" \
    6.23         -D_FORM_="`genform $formdir/grp.def`" \
    6.24 -       -D_DUMPTABLE_="`DT_VIEW=grp dumptable html grp 'gname gecos'`" \
    6.25 +       -D_DUMPTABLE_="`DT_VIEW=grp dumptable html grp 'gname gecos:DESC mtime:TIME' 'order by b.TIME desc'`" \
    6.26         $layout/html.m4.html $layout/groupman.m4.html
    6.27      ;;
    6.28    "edittable")
    6.29 @@ -80,7 +84,7 @@
    6.30      contenttype; echo
    6.31      m4 -D_TITLE_="参加者一覧" -D_BODYCLASS_=listmember $layout/html.m4.html
    6.32      kwd=`getpar kwd`
    6.33 -    listmember $kwd | tee tmp/listmem.out
    6.34 +    listmember $kwd
    6.35      ;;
    6.36    "grps")
    6.37      contenttype; echo
    6.38 @@ -113,7 +117,7 @@
    6.39      fi
    6.40      m4 -D_TITLE_="グループ $grp" \
    6.41         $layout/html.m4.html
    6.42 -    showgroup $grp
    6.43 +    showgroup "$grp"
    6.44      
    6.45      ;;
    6.46    "commission")