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 wrap: on
line diff
--- a/mpsplit.rb	Tue Jul 21 08:02:30 2015 +0900
+++ b/mpsplit.rb	Tue Jul 21 10:13:33 2015 +0900
@@ -24,8 +24,6 @@
     printf("%s:filename=%s\n", name, fn.unpack("H*")[0])
   elsif /name=(['\"]?)(.*?)\1/ =~ header
     v=$2
-#    out=NKF::nkf("-w -MQ", body).gsub(/([^=])\n/, "\\1=0a").gsub(/=\n/, "")
-#    printf("%s=%s\n", v, out)
     printf("%s=%s\n", v, body.unpack("H*")[0])
   end
 end
--- a/templ/form/grp.def	Tue Jul 21 08:02:30 2015 +0900
+++ b/templ/form/grp.def	Tue Jul 21 10:13:33 2015 +0900
@@ -4,3 +4,4 @@
 所有者:owner:m:*grp_adm:
 プロフィール画像:profimg:m:image:
 メンバー:member:m:*grp_mem:maxlength="4M"
+更新:mtime:s:stamp:
--- a/y4-blog.sh	Tue Jul 21 08:02:30 2015 +0900
+++ b/y4-blog.sh	Tue Jul 21 10:13:33 2015 +0900
@@ -355,7 +355,7 @@
   if isuser "$owner"; then
     subtitle="`gecos $owner` さんの話題"
   else
-    subtitle="<a href=\"?grp+$owner\">$owner</a> での話題"
+    subtitle="<a href=\"?grp+$owner\">`gecos $owner`</a> での話題"
   fi
   if [ -z "$title" ]; then
     echo "<p>日記番号指定が無効です。</p>"
--- a/y4-funcs.sh	Tue Jul 21 08:02:30 2015 +0900
+++ b/y4-funcs.sh	Tue Jul 21 10:13:33 2015 +0900
@@ -43,6 +43,8 @@
 	締切設定
 	一斉送信
 	自分の提出物リスト
+	getparfilename の tmpd の扱い
+	やっぱりs4にしようかな
 7/18	○書込著者からホームへのリンク
 7/17	○個人blogに「レポート提出用」がついたときの挙動
 	○添付ファイル回収
@@ -418,7 +420,7 @@
 getparfilename() {
   # null if type of $1 is not file
   (f=`query "select val from par where var='$1' and sessid='$session' and type='file' $2;"`
-   [ -n "$f" ] && echo $tmpdir/$f)
+   [ -n "$f" ] && echo $f)
 }
 sqlquote() {
   (v="$1"
@@ -489,7 +491,7 @@
    key=`query "select $pk from $1 where rowid=$3;"`
    ### err "select $pk from $1 where rowid=$3" - key=$key '$4(tmp)'=$4
    for kt in s m; do
-     td=${4:-$tmpdir}
+     td=${4:-$tmpd}
      [ -d $td ] || mkdir -p $td
      t=${1}_$kt
      for c in `gettbl_${kt}_cols $1`; do
@@ -945,8 +947,10 @@
   getcookie
   case "$REQUEST_METHOD" in
     get|GET)	s="$QUERY_STRING" ;;
-    post|POST)	dd count=$CONTENT_LENGTH bs=1 of=$tmpf 2>/dev/null
-		# cat > $tmpf
+    post|POST)	## dd count=$CONTENT_LENGTH bs=1 of=$tmpf 2>/dev/null #slow
+		# cat > $tmpf		# too much?
+		head -c $CONTENT_LENGTH > $tmpf	# safe?
+      		(echo CL=$CONTENT_LENGTH; ls -lF $tmpf) 1>&3
 		s="`cat tmp/stream`"
 		tmpfiles=$tmpfiles"${tmpfiles+ }$tmpf"
 		;;
@@ -954,8 +958,8 @@
   case "$CONTENT_TYPE" in
     *boundary*)
       bndry=${CONTENT_TYPE#*boundary=}
-      #for us in `LC_CTYPE=C ./mpsplit.rb "$bndry" $tmpdir < $tmpf`
-      for us in `LC_CTYPE=C ./mpsplit.pl "$bndry" $tmpdir < $tmpf`
+      #for us in `LC_CTYPE=C ./mpsplit.rb "$bndry" $tmpd < $tmpf`
+      for us in `LC_CTYPE=C ./mpsplit.pl "$bndry" $tmpd < $tmpf`
       do
 	k=${us%%\=*}
 	#echo u=$us
@@ -965,9 +969,10 @@
 	case "$k" in
 	  *:filename)
 	    type='file'; k=${k%:filename}
-	    case `file --mime-type $tmpdir/$v|cut -d' ' -f2` in
+(echo k=$k; ls -lF $tmpd/$v; file --mime-type $tmpd/$v) 1>&3
+	    case `file --mime-type $tmpd/$v|cut -d' ' -f2` in
 	      [Ii]mage/*)
-		mogrify -resize $maximagexy'>' $tmpdir/$v
+		mogrify -resize $maximagexy'>' $tmpd/$v
 		;;
 	    esac
 	    ;;
@@ -1119,8 +1124,9 @@
   and="${1:+and }"
   href="<a href=\"$myname?grp+"
   echo '<div class="listgroup">'
-err ListGRP: query "select val from grp_s where key='tag' $and$* group by val;"
-  for tag in `query "select val from grp_s where key='tag' $and$* group by val;"`
+  sql="select val from grp_s where key='tag' $and$* group by val order by ctime desc;"
+err ListGRP: query 
+  for tag in `query "$sql"`
   do
 err ListGrp: tag=$tag
     tn=${tagline%%=${tag}*}
@@ -1184,9 +1190,11 @@
 
   # XX: これ複雑すぎるかな。もっとシンプルにしたい。$3条件も。2015-07-08
   sql="select a.rowid, a.$link, coalesce(b.gecos, a.$nm) as nick, b.tag,
-	case when '$iamowner' = '' then ''
-	     when a.$nm in (select user from grp_adm
-			where gname='$grp') then '(管理者)'
+	case when a.$nm in (select user from grp_adm
+			where gname='$grp') then '(管理者)' -- from group mode
+	     when '$user' in (select user from grp_adm where gname=a.$nm)
+		then '(ADMIN)'
+	     when '$iamowner' = '' then ''
 	     else ',not='||a.rowid end as ownerlink
 	from $tbl a left join
 		(select $nm as name,
@@ -1227,7 +1235,7 @@
 EOF
   fi
 
-  err `echo $sql\;`
+  err ListEntry: `echo $sql\;`
 
   query "$sql limit $limit ${offset:+offset $offset};" \
       | while IFS='|' read id lnk name tag ownerp; do
@@ -1254,12 +1262,21 @@
 }
 showgroup() {
   grp=$1
-  
-  showgroupsub $formdir/grp.def $grp | \
-      m4 -D_TITLE_="グループ $grp" \
-	 -D_FORM_="syscmd(\`cat')" \
-	 -D_DUMPTABLE_="" \
-	 $layout/groupman.m4.html
+
+  gname=`getpar gname`
+  if [ -n "$gname" ]; then
+    err REMOVING:::::::
+    par2table $formdir/grp.def
+  fi
+  if isgroup "$grp"; then
+     showgroupsub $formdir/grp.def "$grp" | \
+	 m4 -D_TITLE_="グループ $grp" \
+	    -D_FORM_="syscmd(\`cat')" \
+	    -D_DUMPTABLE_="" \
+	    $layout/groupman.m4.html
+  else				# if $grp is removed at par2table
+    listgroup
+  fi
 }
 showgroupsub() {
   # $1=def-file $2=group
@@ -1272,16 +1289,16 @@
   val=`getvalbyid grp profimg $rowid $tmpd`
   # 6/14の次グループのHOMEで出す情報を作る Done
   viewtable $1 grp $rowid
-  if isgrpowner $user $grp; then
+  if isgrpowner "$user" "$grp"; then
     echo "<p><a href=\"?groupconf+$grp\">グループ情報の編集</a>"
     iamowner=$grp
   fi
-  if ismember $user $grp; then
+  if ismember "$user" "$grp"; then
     echo "${iamowner:+ / }<a href=\"?blog+$grp\">グループの新規話題作成</a></p>"
   fi
   # 加入ボタン + 加入者リスト
 err ismember $user $grp
-  ismember $user $grp && ismem='checked' || nomem='checked'
+  ismember "$user" "$grp" && ismem='checked' || nomem='checked'
   # このグループでの加入アドレス
   eml=`query "select val from grp_mem_s where gname='$2' and user='$user' \
 	and key='email';"`
@@ -1317,10 +1334,11 @@
       |sed -e "s|\(<br>\),not=\(.*\)|\1<a href=\"$cm+\2\">管理者委託</a>|"
 }
 joingrp() {
-  # $1=group $2=user $3=yes/no $4=email(if any)
+  # $1=group $2=user $3=yes/no $4=email(if any $5=AsAdmin)
 err joingrp: \$1=$1 \$2=$2 \$3=$3 \$4=$4
+  isgrpowner "$user" "$1" && isowner="yes" || isowner=""
   if [ x"$2" != x"$user" ]; then # if user is not login user
-    if ! isgrpowner $user $1; then
+    if [ -z "$isowner" ; then
       echo "<p>本人か、グループ管理者しか加入操作はできません。</p>"
       return
     fi
@@ -1334,6 +1352,19 @@
 		'string', '$4', NULL);"
 	query "replace into grp_mem_s values('$1', '$user', 'email', \
 		'string', '$4', NULL);"
+	if [ -n "$5" ]; then	# as ADMIN
+	  # Coming here means newly created group
+	  sql="select case\
+		 when (select count(*) from grp_mem where gname='$1')=1\
+		 then (select user from grp_mem\
+			 where gname='$1' and user='$user')\
+		 else '' end;"
+	  err NewGrpChk: $sql
+	  if [ -n "`query \"$sql\"`" ]; then
+	    err ADMIN: "replace into grp_adm values('$1', '$user');"
+	    query "replace into grp_adm values('$1', '$user');"
+	  fi
+	fi
       else
 	echo $msg
       fi
@@ -1371,7 +1402,7 @@
   showgroup $1
 }
 dumptable() {
-  # $1=mode $2=Table $3=column-list(defaults to *) $4=conditions(if any)
+  # $1=mode $2=Table $3=column-list-of-*_s(defaults to *) $4=conditions(if any)
   # textのフィールドだけ全てダンプにしたほうがいいか
   # $DT_VIEW sets link
   # 6/17の次: editリンクじゃなくてスレッドVIEWリンクでいいんちゃう?
@@ -1398,8 +1429,12 @@
   substr=${dumpcollen:+"substr(val, 0, $dumpcollen)"}
   substr=${substr:-val}
   for col in ${3:-`gettbl_s_cols $2`}; do
-    eav=$eav${eav:+,}" max(case key when '$col' then $substr end) as $col"
-    scols="$scols${scols:+, }b.$col"
+    case $col in
+      *:*)	col=${col%:*} as=${col#*:} ;;
+      *)	as=${col} ;;
+    esac
+    eav=$eav${eav:+,}" max(case key when '$col' then $substr end) as $as"
+    scols="$scols${scols:+, }b.$as"
   done
 #case author when '$user' then a.rowid else '---' end as ID,
   sql="select \
@@ -1432,13 +1467,15 @@
     if [ x"$tbl" = x"user" ]; then
       rowowner=`query "select name from $tbl where rowid=$rowid;"`
     elif [ x"$tbl" = x"grp" ]; then
-      isgrpowner $user `query "select gname from $tbl where rowid=$rowid;"` \
-	  && rowowner=$user
+      sql="select gname from $tbl where rowid=$rowid;"
+      ##err p2t:grp:q $sql
+      isgrpowner $user "`query $sql`" && rowowner=$user
     else
       rowowner=`query "select owner from $tbl where rowid=$rowid;"`
       rowowner=${rowowner:-`query "select author from $tbl
 	 where rowid=$rowid;"`}
     fi
+    ### err rowowner=$rowowner
     if [ x"$user" != x"$rowowner" ]; then
       echo "<p>他人のレコードはいじれないの</p>"
       return
@@ -1528,7 +1565,7 @@
 	     edit)
 	       case `gettbl_coltype $tbl/$origcol` in
 		 image|document|binary)
-		   file=`getparfilename $v`
+		   file=$tmpd/`getparfilename $v`
 		   err type=file=$file
 		   [ -z "$file" ] && continue
 		   bn=${file##*/}
@@ -1568,7 +1605,7 @@
 	 bin=NULL
 err partype$col=`getpartype $col "$limit"`
 	 case $ptype in
-	   file) file=`getparfilename $col "$limit"`
+	   file) file=$tmpd/`getparfilename $col "$limit"`
 err parfile-$col=$file
 		 [ -z "$file" ] && continue
 		 bin="X'"$(hexize $file)"'"
@@ -1605,7 +1642,7 @@
 	     fi
 	     ;;
 	 esac
-	 #err "replace into $tb2 values($pval, \"$col\", $type, $val, $bin);"
+err p2t: "replace into $tb2 values($pval, \"$col\", $type, $val, $bin);"
 	 echo "replace into $tb2 values($pval, \"$col\", $type, $val, $bin);" \
 	     | sq $db
        done
@@ -1807,6 +1844,7 @@
  <table class="b $2">
 $forms
  </table>$hiddens
+ ${GF_STAGE:+`cgi_hidden stage $GF_STAGE`}
  ${rowid:+<input type="hidden" name="rowid" value="$rowid">}
 EOF
   if [ -z $GF_VIEWONLY ]; then
--- a/y4-init.sh	Tue Jul 21 08:02:30 2015 +0900
+++ b/y4-init.sh	Tue Jul 21 10:13:33 2015 +0900
@@ -44,6 +44,7 @@
 	     addcol=$col
 	     case $keytype in
 	       *pf*|*fp*)
+		 pkey="$pkey${pkey:+, }$col"
 		 fkey="${fkey}, foreign key($col) references $objtype on delete cascade on update cascade"
 		 fkey2="${fkey2}, foreign key($col) references $objtype on delete cascade on update cascade" ;;
 	       *p*)
@@ -95,7 +96,7 @@
 create_struct $formdir/grp_adm.def
 create_struct $formdir/blog.def
 create_struct $formdir/article.def
-create_struct $formdir/diary.def
+#### create_struct $formdir/diary.def
 
 create table acclog "(user, tbl, rowid, time, \
 	primary key(user, tbl, rowid), \
--- a/y4.cgi	Tue Jul 21 08:02:30 2015 +0900
+++ b/y4.cgi	Tue Jul 21 10:13:33 2015 +0900
@@ -22,7 +22,7 @@
     ;;
 esac
 
-## err 1=$1 2=$2 3=$3 4=$4
+err 1=$1 2=$2 3=$3 4=$4
 stage=`getpar stage`
 stage=${stage:-$1}
 case ${stage} in
@@ -55,10 +55,14 @@
   "groupman")
     contenttype; echo
     gname=`getpar gname`
-    [ -n "$gname" ] && par2table $formdir/grp.def
+    if [ -n "$gname" ]; then
+      par2table $formdir/grp.def
+      joingrp "$gname" "$user" yes "$user" as-admin
+    fi
+    GF_STAGE=groupman
     m4 -D_TITLE_="グループ作成" \
        -D_FORM_="`genform $formdir/grp.def`" \
-       -D_DUMPTABLE_="`DT_VIEW=grp dumptable html grp 'gname gecos'`" \
+       -D_DUMPTABLE_="`DT_VIEW=grp dumptable html grp 'gname gecos:DESC mtime:TIME' 'order by b.TIME desc'`" \
        $layout/html.m4.html $layout/groupman.m4.html
     ;;
   "edittable")
@@ -80,7 +84,7 @@
     contenttype; echo
     m4 -D_TITLE_="参加者一覧" -D_BODYCLASS_=listmember $layout/html.m4.html
     kwd=`getpar kwd`
-    listmember $kwd | tee tmp/listmem.out
+    listmember $kwd
     ;;
   "grps")
     contenttype; echo
@@ -113,7 +117,7 @@
     fi
     m4 -D_TITLE_="グループ $grp" \
        $layout/html.m4.html
-    showgroup $grp
+    showgroup "$grp"
     
     ;;
   "commission")

yatex.org