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")