s4
changeset 16:636df1c1bdf2
Track group by rowid in URLs
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Tue, 21 Jul 2015 14:38:21 +0900 |
parents | 5e75802f2f0b |
children | 01f579d2c889 |
files | y4-blog.sh y4-funcs.sh y4.cgi |
diffstat | 3 files changed, 74 insertions(+), 30 deletions(-) [+] |
line diff
1.1 --- a/y4-blog.sh Tue Jul 21 14:37:00 2015 +0900 1.2 +++ b/y4-blog.sh Tue Jul 21 14:38:21 2015 +0900 1.3 @@ -284,7 +284,7 @@ 1.4 1.5 blog_addentry() { 1.6 # $1=GRPname(if it is a group) 1.7 - grp=$1 1.8 + grprowid=$1 1.9 rowid=`getpar rowid` 1.10 err ba: rowid=$rowid 1.11 #if [ -z "$rowid" ]; then 1.12 @@ -293,8 +293,9 @@ 1.13 listing=$user guide="[個人]" 1.14 #listing代入は rowid 時でもするべき 1.15 else 1.16 - if isgroup $1; then 1.17 - listing=$1 guide="[${1}]" GF_OWNER=$1 1.18 + grp=`getgroupbyid $grprowid` 1.19 + if [ -n "$grp" ]; then 1.20 + listing=$1 guide="[${grp}]" GF_OWNER=$grp 1.21 else 1.22 echo "<p>無効なグループ指定です。</p>" 1.23 return 1.24 @@ -355,7 +356,8 @@ 1.25 if isuser "$owner"; then 1.26 subtitle="`gecos $owner` さんの話題" 1.27 else 1.28 - subtitle="<a href=\"?grp+$owner\">`gecos $owner`</a> での話題" 1.29 + grprowid=`query "select rowid from grp where gname=\"$owner\";"` 1.30 + subtitle="<a href=\"?grp+$grprowid\">`gecos $owner`</a> での話題" 1.31 fi 1.32 if [ -z "$title" ]; then 1.33 echo "<p>日記番号指定が無効です。</p>"
2.1 --- a/y4-funcs.sh Tue Jul 21 14:37:00 2015 +0900 2.2 +++ b/y4-funcs.sh Tue Jul 21 14:38:21 2015 +0900 2.3 @@ -16,7 +16,7 @@ 2.4 layout=$templ/default 2.5 formdir=$templ/form 2.6 imgdir=img 2.7 -url=${URL:-"${REQUEST_SCHEME}://$HTTP_HOST$REQUEST_URI"} 2.8 +url=${URL:-"${REQUEST_SCHEME:-http${HTTPS:+s}}://$HTTP_HOST$REQUEST_URI"} 2.9 urlbase=${url%%\?*} 2.10 msg=$templ/msg 2.11 timeout="+2 days" 2.12 @@ -311,20 +311,30 @@ 2.13 } 2.14 ismember() { 2.15 # $1=user, $2=group 2.16 -err ismem: "select user from grp_mem where gname='$2' and user='$1';" 2.17 - test -n "`query \"select user from grp_mem where gname='$2' and user='$1';\"`" 2.18 +err ismem: "select user from grp_mem where gname=$(sqlquote $2) and user='$1';" 2.19 + test -n "`query \"select user from grp_mem where gname=$(sqlquote $2) and user='$1';\"`" 2.20 } 2.21 isuser() { # Check if $1 is a valid user 2.22 test -n "`query \"select name from user where name='$1';\"`" 2.23 } 2.24 isgroup() { # Check if $1 is a valid group 2.25 - test -n "`query \"select gname from grp where gname='$1';\"`" 2.26 + err isgroup: "select gname from grp where gname=$(sqlquote $1);" 2.27 + test -n "`query \"select gname from grp where gname=$(sqlquote $1);\"`" 2.28 } 2.29 -isgrpowner() { 2.30 +isgrpowner() ( 2.31 # $1=user, $2=group 2.32 - test -n "`query \"select user from grp_adm 2.33 - where gname='$2' and user='$1';\"`" 2.34 -} 2.35 + gn=`sqlquote "$2"` 2.36 + sql="select user from grp_adm where gname=$gn and user='$1';" 2.37 + err isgrpowner: $sql 2.38 + test -n "`query $sql`" 2.39 +) 2.40 +getgroupbyid() ( 2.41 + # $1=id|gname 2.42 + sql="select coalesce((select gname from grp where gname=$(sqlquote $1)), 2.43 + (select gname from grp where rowid=$(sqlquote $1)));" 2.44 +err ggbyid: `echo $sql` 2.45 + query $sql 2.46 +) 2.47 isfilereadable() { # $1=user $2=tbl $3=rowid 2.48 # Return true if user($1) can read attachment files in tbl($2):rowid($3) 2.49 [ -z "$1" -o -z "$2" -o -z "$3" ] && return 1 # invalid argument 2.50 @@ -384,22 +394,30 @@ 2.51 fi 2.52 } 2.53 gecos() ( 2.54 - u=${1:-$user} 2.55 + u=`sqlquote ${1:-$user}` 2.56 #gecos=`query "select val from user_s where name='$u' and key='gecos';"` 2.57 - sql="select case when (select name from user where name='$u') is not null 2.58 - then (select val from user_s where name='$u' and key='gecos') 2.59 - when (select gname from grp where gname='$u') is not null 2.60 - then (select val from grp_s where gname='$u' and key='gecos') 2.61 - else '$u' 2.62 + sql="select case when (select name from user where name=$u) is not null 2.63 + then (select val from user_s where name=$u and key='gecos') 2.64 + when (select gname from grp where gname=$u) is not null 2.65 + then (select val from grp_s where gname=$u and key='gecos') 2.66 + else $u 2.67 end;" 2.68 query "$sql" 2.69 ) 2.70 +setpar() { 2.71 + query "replace into par values('$session', '$1', '$2', \"$3\");" 2.72 +} 2.73 +replpar() { 2.74 + query "update par set val=\"$3\" where sessid='$session' and var='$1' and type='$2';" 2.75 +} 2.76 getpar() { 2.77 err getpar: "select val from par where var='$1' and sessid='$session' $2;" 2.78 val=`query "select val from par where var='$1' and sessid='$session' $2;"` 2.79 +err getpar/val1: "val=[$val]" 2.80 if [ -z "$val" ]; then 2.81 val=`query "select val from cookie where var='$1' and sessid='$session' $2;"` 2.82 fi 2.83 +err getpar/val2: "val=[$val]" 2.84 case "$var" in 2.85 owner) 2.86 if [ x"$user" = x"$val" ]; then 2.87 @@ -408,6 +426,7 @@ 2.88 echo $val; return 2.89 fi ;; 2.90 esac 2.91 +err getpar/ret: "val=[$val]" 2.92 echo "$val" 2.93 } 2.94 2.95 @@ -964,7 +983,7 @@ 2.96 k=${us%%\=*} 2.97 #echo u=$us 2.98 #v="`echo ${us#*=}|nkf -Ww -mQ|sed -e 's/\"/\"\"/g'`" 2.99 - v="`echo ${us#*=}|unhexize`" 2.100 + v="`echo ${us#*=}|unhexize|sed -e 's/\"/\"\"/g'`" 2.101 # err k=$k v=$v 2.102 case "$k" in 2.103 *:filename) 2.104 @@ -980,7 +999,8 @@ 2.105 type='string' 2.106 ;; 2.107 esac 2.108 - sq $db "replace into par values('$session', '$k', '$type', \"$v\")" 2.109 + #sq $db "replace into par values('$session', '$k', '$type', \"$v\")" 2.110 + setpar "$k" "$type" "$v" 2.111 done 2.112 ;; 2.113 *) 2.114 @@ -1085,8 +1105,10 @@ 2.115 GF_ACTION="?home" edittable "$formdir/user.def" "user" "$user" 2.116 } 2.117 groupconf() { 2.118 + # $1=rowid in grp (2015-07-21 changed from gname) 2.119 m4 -D_BODYCLASS_=groupconf -D_TITLE_="グループ情報編集" $layout/html.m4.html 2.120 - rowid=`query "select rowid from grp where gname='$1';"` 2.121 + #rowid=`query "select rowid from grp where gname='$1';"` 2.122 + rowid=${1%%[!A-Z0-9a-z_]*} 2.123 err gcon \$1=$1 rowid=$rowid 2.124 GF_ACTION="?grp+$1" edittable "$formdir/grp.def" "grp" "$rowid" 2.125 } 2.126 @@ -1173,7 +1195,7 @@ 2.127 else # if group 2.128 hrb="$myname?grp" 2.129 deficon=person-default.png 2.130 - entity="グループ" tbl=grp link=gname nm=gname stage=grps 2.131 + entity="グループ" tbl=grp link=rowid nm=gname stage=grps 2.132 tagline=`grep :tag: $formdir/grp.def|cut -d: -f5-` 2.133 if [ -n "$tagline" ]; then 2.134 tagconv=`echo $tagline|sed 's/\([^= :]*\)=\([^= :]*\)/-D\2=\1/g'` 2.135 @@ -1189,9 +1211,11 @@ 2.136 fi 2.137 2.138 # XX: これ複雑すぎるかな。もっとシンプルにしたい。$3条件も。2015-07-08 2.139 + qgrp=`sqlquote $grp` 2.140 + qgrp=${qgrp:-'""'} 2.141 sql="select a.rowid, a.$link, coalesce(b.gecos, a.$nm) as nick, b.tag, 2.142 case when a.$nm in (select user from grp_adm 2.143 - where gname='$grp') then '(管理者)' -- from group mode 2.144 + where gname=$qgrp) then '(管理者)' -- from group mode 2.145 when '$user' in (select user from grp_adm where gname=a.$nm) 2.146 then '(ADMIN)' 2.147 when '$iamowner' = '' then '' 2.148 @@ -1203,6 +1227,7 @@ 2.149 from ${tbl}_s group by $nm) 2.150 b on a.$nm=b.name $cond $3 2.151 order by b.tag desc, a.rowid asc" 2.152 +err LE:sql.1="$sql" 2.153 total=`query "with x as ($sql) select count(*) from x;"` 2.154 echo "<h2>${entity} 一覧</h2>" 2.155 if [ $total -gt $limit ]; then 2.156 @@ -1239,7 +1264,8 @@ 2.157 2.158 query "$sql limit $limit ${offset:+offset $offset};" \ 2.159 | while IFS='|' read id lnk name tag ownerp; do 2.160 -err name=$name owner=$ownerp 2.161 +err name=$name owner=$ownerp lnk=$lnk 2.162 +err newlnk=$lnk 2.163 files=`getvalbyid $tbl profimg $id $dir` 2.164 # Pick up only first icon 2.165 echo "<div class=\"iconlist xy$thumbxy\"><p class=\"tag _$tag\">$tag</p>" \ 2.166 @@ -1262,12 +1288,14 @@ 2.167 } 2.168 showgroup() { 2.169 grp=$1 2.170 +err showgroup1: grp=$grp qgrp="[$(sqlquote $grp)]" 2.171 2.172 gname=`getpar gname` 2.173 if [ -n "$gname" ]; then 2.174 - err REMOVING::::::: 2.175 + err UPdating/Removing of group::::::: 2.176 par2table $formdir/grp.def 2.177 fi 2.178 +err showgroup2: grp=$grp qgrp="[$(sqlquote $grp)]" 2.179 if isgroup "$grp"; then 2.180 showgroupsub $formdir/grp.def "$grp" | \ 2.181 m4 -D_TITLE_="グループ $grp" \ 2.182 @@ -1281,20 +1309,22 @@ 2.183 showgroupsub() { 2.184 # $1=def-file $2=group 2.185 grp=$2 2.186 - rowid=`sq $db "select rowid from grp where gname='$grp'"` 2.187 + qgrp=`sqlquote $grp` 2.188 + rowid=`sq $db "select rowid from grp where gname=$qgrp"` 2.189 if [ -z "$rowid" ]; then 2.190 rowid=`sq $db "select rowid from grp where rowid=$grp"` 2.191 grp=`sq $db "select gname from grp where rowid=$grp"` 2.192 fi 2.193 + mmgrp=`echo "$grp"|nkf -Ww -MQ|tr '=' '%'` 2.194 val=`getvalbyid grp profimg $rowid $tmpd` 2.195 # 6/14の次グループのHOMEで出す情報を作る Done 2.196 viewtable $1 grp $rowid 2.197 if isgrpowner "$user" "$grp"; then 2.198 - echo "<p><a href=\"?groupconf+$grp\">グループ情報の編集</a>" 2.199 + echo "<p><a href=\"?groupconf+$rowid\">グループ情報の編集</a>" 2.200 iamowner=$grp 2.201 fi 2.202 if ismember "$user" "$grp"; then 2.203 - echo "${iamowner:+ / }<a href=\"?blog+$grp\">グループの新規話題作成</a></p>" 2.204 + echo "${iamowner:+ / }<a href=\"?blog+$rowid\">グループの新規話題作成</a></p>" 2.205 fi 2.206 # 加入ボタン + 加入者リスト 2.207 err ismember $user $grp 2.208 @@ -1329,7 +1359,7 @@ 2.209 DT_VIEW=replyblog dumptable html blog 'ctime title heading' "$cond" 2.210 2.211 c="group by b.name having b.name in (select user from grp_mem where gname='$grp')" 2.212 - cm="?commission+$grp" 2.213 + cm="?commission+$mmgrp" 2.214 thumbxy=50x50 listmember "" "$c" \ 2.215 |sed -e "s|\(<br>\),not=\(.*\)|\1<a href=\"$cm+\2\">管理者委託</a>|" 2.216 } 2.217 @@ -1337,6 +1367,7 @@ 2.218 # $1=group $2=user $3=yes/no $4=email(if any $5=AsAdmin) 2.219 err joingrp: \$1=$1 \$2=$2 \$3=$3 \$4=$4 2.220 isgrpowner "$user" "$1" && isowner="yes" || isowner="" 2.221 +err jg:isgrpowner: isowner="$isowner" 2.222 if [ x"$2" != x"$user" ]; then # if user is not login user 2.223 if [ -z "$isowner" ; then 2.224 echo "<p>本人か、グループ管理者しか加入操作はできません。</p>"
3.1 --- a/y4.cgi Tue Jul 21 14:37:00 2015 +0900 3.2 +++ b/y4.cgi Tue Jul 21 14:38:21 2015 +0900 3.3 @@ -56,12 +56,21 @@ 3.4 contenttype; echo 3.5 gname=`getpar gname` 3.6 if [ -n "$gname" ]; then 3.7 + #gname=${gname%%[!-A-Z0-9a-z_.!#$%^&()=:/*]*} 3.8 + newgname=`echo "$gname"|tr -dc '\-0-9A-Za-z#=:/_.,'` 3.9 + if [ x"$newgname" != x"$gname" ]; then 3.10 + err NewGNAME: gname=$newgname 3.11 + echo "<p>使用禁止文字を除去し $gname としました。</p>" 3.12 + gname=$newgname 3.13 + fi 3.14 + replpar gname string "$gname" 3.15 par2table $formdir/grp.def 3.16 joingrp "$gname" "$user" yes "$user" as-admin 3.17 fi 3.18 GF_STAGE=groupman 3.19 + note="<p>グループ名に使用できない文字は自動的に削除されます。</p>" 3.20 m4 -D_TITLE_="グループ作成" \ 3.21 - -D_FORM_="`genform $formdir/grp.def`" \ 3.22 + -D_FORM_="$note`genform $formdir/grp.def`" \ 3.23 -D_DUMPTABLE_="`DT_VIEW=grp dumptable html grp 'gname gecos:DESC mtime:TIME' 'order by b.TIME desc'`" \ 3.24 $layout/html.m4.html $layout/groupman.m4.html 3.25 ;; 3.26 @@ -108,6 +117,8 @@ 3.27 contenttype; echo 3.28 gpg=`getpar grp` 3.29 grp=${2:-$gpg} 3.30 + grp=`getgroupbyid "$grp"` 3.31 +err grp: getpar-grp"(gpg)=[$grp]" 3.32 ## . ./y4-blog.sh 3.33 jg=`getpar joingrp` 3.34 if [ -n "$jg" ]; then