Mercurial > hgrepos > hgweb.cgi > s4
changeset 825:e9817a71f332
List groups in other worlds
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Sun, 21 Jun 2020 09:50:32 +0900 |
parents | fcf485cbabc6 |
children | f2d69fb3e038 |
files | examples/common/default/default.css s4-funcs.sh s4-world.sh |
diffstat | 3 files changed, 89 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/examples/common/default/default.css Sat Jun 20 18:18:17 2020 +0900 +++ b/examples/common/default/default.css Sun Jun 21 09:50:32 2020 +0900 @@ -344,6 +344,7 @@ li.casmenu:hover div, li.casmenu:active div, li.casmenu div:hover, li.casmenu div:active {display: block;} +span.pre {white-space: pre;} /* * PR Web
--- a/s4-funcs.sh Sat Jun 20 18:18:17 2020 +0900 +++ b/s4-funcs.sh Sun Jun 21 09:50:32 2020 +0900 @@ -32,7 +32,8 @@ tmpfiles="" querylog=${QUERYLOG:-$logdir/query.log} searchlog=${SEARCHLOG:-$logdir/search.log} -db=${DB:-$dbdir/cgi.sq3} +defaultdb=$dbdir/cgi.sq3 +db=${DB:-$defaultdb} sessdb=${SESSDB:-$dbdir/sess.sq3} userupdateflag=$dbdir/userupdate sesstb=tmp.sess @@ -2334,7 +2335,7 @@ fi ) > $hometail & # Is background call safe to m4?? # - listgroupbytable $formdir/grp.def $cond | + listgroupbytable $formdir/grp.def "$cond" $uname | _m4 -D_BODYCLASS_=home -D_TITLE_="spaste(\`$tf')" \ -D_PROFILE_="spaste(\`$pf')$usermenu" \ -D_PROFIMG_="spaste(\`$imf')" \ @@ -2361,16 +2362,12 @@ fi } listgroupbytable() { - # $1=deffile $2...=condition - tagline=`grep :tag: $1`; shift - and="${1:+and }" where=${1:+where } + # $1=deffile $2...=condition $3(optional)=uname + tagline=`grep :tag: $1`; + and="${2:+and }" where=${2:+where } href="<a href=\"$myname?grp+" echo '<div class="listgroup">' - NGsql="select distinct tag from\ - (select gname, max(case key when 'tag' then val end) as tag, \ - max(case key when 'ctime' then val end) as ctime\ - from grp_s group by gname order by ctime);" - sql="select val from grp_s where key='tag' $and$* group by val;" + sql="select val from grp_s where key='tag' $and$2 group by val;" ## err ListGRP: query sql="$sql" for tag in `query "$sql"` do @@ -2384,7 +2381,7 @@ max(case key when 'gecos' then val end) as '説明', max(case key when 'tag' then val end) as 'tag', max(case key when 'mtime' then val end) as mtime from grp_s - $where$* group by gname having tag='$tag' order by mtime desc);" + $where$2 group by gname having tag='$tag' order by mtime desc);" ## err PersonalGroupList= `echo $sql` echo "<h2>$tn</h2>" echo '<table class="b listgroup">' @@ -2392,6 +2389,9 @@ | sed "s,\(<TR><TD>\)\([0-9]*\):\([^<]*\)</TD>,\1$href\2\">\3</a>," echo '</table>' done + if [ -n "$S4WORLDLIST" -a -n "$3" ]; then + peekgrpworlds mem="$3" + fi echo '</div>' } iconhref() ( @@ -2550,7 +2550,7 @@ # limit=3 hiddens=$hiddens" "`cgi_hidden tag2 "$tag"` fi - if [ $total -gt $limit ]; then + if [ $total -gt $limit -o \( -n "$S4WORLDLIST" -a x"$tbl" = x"grp" \) ]; then echo '<div>' METHOD=GET cgi_form $stage <<EOF $form @@ -2633,6 +2633,9 @@ done echo "</div>" # End of List-entry div echo ${pnbtn:+"<hr>$nextbtn$prevbtn"} + if [ -n "$kwd" -a x"$tbl" = x"grp" -a -n "$S4WORLDS" ]; then + peekgrpworlds kwd="$kwd" + fi ) listmember() { listentry user "$@"
--- a/s4-world.sh Sat Jun 20 18:18:17 2020 +0900 +++ b/s4-world.sh Sun Jun 21 09:50:32 2020 +0900 @@ -164,3 +164,76 @@ EOF return $rc } + +getworldDB() { # $1=conf + (unset DB; . "$1"; echo ${DB:-$defaultdb}) +} + +worldnameDBlist() { + echo Base:Base:`getworldDB ./s4-config.sh` + for w in $S4WORLDLIST; do + case "$w" in + *:*:*:*) continue ;; + *:*:*) w=${w%:*}; name=${w%:*}; world=${w#*:} ;; + *) continue ;; + esac + d=`getworldDB "./s4-config-$world.sh"` + test -s "$d" && echo ${world}:${name}:$d + done +} + +grepgrpworld() ( + world=$1; wname=$2; kwd=$3; db=$4 cond=$5 + case $world in + Base) cgi=`basename ${S4MASTERURL:-$URL}` ;; + *) cgi=s4-world-$world$cgiext ;; + esac + query <<-EOF | + ATTACH DATABASE "$db" AS td; + SELECT DISTINCT td.grp.rowid,hex(gname) + FROM td.grp NATURAL JOIN td.grp_mem + WHERE $cond; + DETACH DATABASE td; + EOF + while IFS='|' read rowid hgname; do + # echo rowid=$rowid - `echo "$hgname"|unhexize|htmlescape` + htmlgn=`echo $hgname|unhexize|htmlescape` + printf '<a href="%s?grp+%d">%s</a> ' "$cgi" "$rowid" "$htmlgn" + done | { + read ans + if [ -n "$ans" ]; then + w=`echo $wname|htmlescape` + cat<<-EOF + <tr> + <tr><td><a href="$cgi?grps"><span class="pre">$w</span></a></td> + <td>$ans</td> + </dl> + EOF + fi + } +) + +peekgrpworlds() ( + # $1=(kwd=Pattern|mem=User) + arg=${1#*=} + case $1 in + kwd=*) cond="gname LIKE '%$arg%'" + guide="`echo $arg|htmlescape` を含むグループは別世界にもあります" ;; + mem=*) cond="user = '$arg'" + guide="別世界の所属グループ";; + esac + for wd in `worldnameDBlist`; do + world=${wd%%:*}; wd=${wd#*:} + worldname=${wd%:*} + d=${wd#*:} + if [ ! $db -ef $d -a -s $d ]; then + grepgrpworld "$world" "$worldname" "$1" "$d" "$cond" + fi + done | { + result=`cat` + if [ -n "$result" ]; then + echo "<h2>$guide</h2>" + echo "<table class=\"b\">$nl $result$nl</table>" + fi + } +)