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 diff
     1.1 --- a/examples/common/default/default.css	Sat Jun 20 18:18:17 2020 +0900
     1.2 +++ b/examples/common/default/default.css	Sun Jun 21 09:50:32 2020 +0900
     1.3 @@ -344,6 +344,7 @@
     1.4  li.casmenu:hover div, li.casmenu:active div,
     1.5  li.casmenu div:hover, li.casmenu div:active
     1.6  {display: block;}
     1.7 +span.pre {white-space: pre;}
     1.8  
     1.9  /*
    1.10   * PR Web
     2.1 --- a/s4-funcs.sh	Sat Jun 20 18:18:17 2020 +0900
     2.2 +++ b/s4-funcs.sh	Sun Jun 21 09:50:32 2020 +0900
     2.3 @@ -32,7 +32,8 @@
     2.4  tmpfiles=""
     2.5  querylog=${QUERYLOG:-$logdir/query.log}
     2.6  searchlog=${SEARCHLOG:-$logdir/search.log}
     2.7 -db=${DB:-$dbdir/cgi.sq3}
     2.8 +defaultdb=$dbdir/cgi.sq3
     2.9 +db=${DB:-$defaultdb}
    2.10  sessdb=${SESSDB:-$dbdir/sess.sq3}
    2.11  userupdateflag=$dbdir/userupdate
    2.12  sesstb=tmp.sess
    2.13 @@ -2334,7 +2335,7 @@
    2.14    fi
    2.15    ) > $hometail &		# Is background call safe to m4??
    2.16    #
    2.17 -  listgroupbytable $formdir/grp.def $cond |
    2.18 +  listgroupbytable $formdir/grp.def "$cond" $uname |
    2.19        _m4 -D_BODYCLASS_=home -D_TITLE_="spaste(\`$tf')" \
    2.20  	  -D_PROFILE_="spaste(\`$pf')$usermenu" \
    2.21  	  -D_PROFIMG_="spaste(\`$imf')" \
    2.22 @@ -2361,16 +2362,12 @@
    2.23    fi
    2.24  }
    2.25  listgroupbytable() {
    2.26 -  # $1=deffile $2...=condition
    2.27 -  tagline=`grep :tag: $1`; shift
    2.28 -  and="${1:+and }" where=${1:+where }
    2.29 +  # $1=deffile $2...=condition $3(optional)=uname
    2.30 +  tagline=`grep :tag: $1`;
    2.31 +  and="${2:+and }" where=${2:+where }
    2.32    href="<a href=\"$myname?grp+"
    2.33    echo '<div class="listgroup">'
    2.34 -  NGsql="select distinct tag from\
    2.35 -	(select gname, max(case key when 'tag' then val end) as tag, \
    2.36 -	  max(case key when 'ctime' then val end) as ctime\
    2.37 -	 from grp_s group by gname order by ctime);"
    2.38 -  sql="select val from grp_s where key='tag' $and$* group by val;"
    2.39 +  sql="select val from grp_s where key='tag' $and$2 group by val;"
    2.40  ## err ListGRP: query sql="$sql"
    2.41    for tag in `query "$sql"`
    2.42    do
    2.43 @@ -2384,7 +2381,7 @@
    2.44  	 max(case key when 'gecos' then val end) as '説明',
    2.45  	 max(case key when 'tag' then val end) as 'tag',
    2.46  	 max(case key when 'mtime' then val end) as mtime from grp_s
    2.47 -	 $where$* group by gname having tag='$tag' order by mtime desc);"
    2.48 +	 $where$2 group by gname having tag='$tag' order by mtime desc);"
    2.49  ## err PersonalGroupList= `echo $sql`
    2.50      echo "<h2>$tn</h2>"
    2.51      echo '<table class="b listgroup">'
    2.52 @@ -2392,6 +2389,9 @@
    2.53        | sed "s,\(<TR><TD>\)\([0-9]*\):\([^<]*\)</TD>,\1$href\2\">\3</a>,"
    2.54      echo '</table>'
    2.55    done
    2.56 +  if [ -n "$S4WORLDLIST" -a -n "$3" ]; then
    2.57 +    peekgrpworlds mem="$3"
    2.58 +  fi
    2.59    echo '</div>'
    2.60  }
    2.61  iconhref() (
    2.62 @@ -2550,7 +2550,7 @@
    2.63      # limit=3
    2.64      hiddens=$hiddens" "`cgi_hidden tag2 "$tag"`
    2.65    fi
    2.66 -  if [ $total -gt $limit ]; then
    2.67 +  if [ $total -gt $limit -o \( -n "$S4WORLDLIST" -a x"$tbl" = x"grp" \) ]; then
    2.68      echo '<div>'
    2.69      METHOD=GET cgi_form $stage <<EOF
    2.70  $form
    2.71 @@ -2633,6 +2633,9 @@
    2.72    done
    2.73    echo "</div>"					# End of List-entry div
    2.74    echo ${pnbtn:+"<hr>$nextbtn$prevbtn"}
    2.75 +  if [ -n "$kwd" -a x"$tbl" = x"grp" -a -n "$S4WORLDS" ]; then
    2.76 +    peekgrpworlds kwd="$kwd"
    2.77 +  fi
    2.78  )
    2.79  listmember() {
    2.80    listentry user "$@"
     3.1 --- a/s4-world.sh	Sat Jun 20 18:18:17 2020 +0900
     3.2 +++ b/s4-world.sh	Sun Jun 21 09:50:32 2020 +0900
     3.3 @@ -164,3 +164,76 @@
     3.4  	EOF
     3.5    return $rc
     3.6  }
     3.7 +
     3.8 +getworldDB() {	# $1=conf
     3.9 +  (unset DB; . "$1"; echo ${DB:-$defaultdb})
    3.10 +}
    3.11 +
    3.12 +worldnameDBlist() {
    3.13 +  echo Base:Base:`getworldDB ./s4-config.sh`
    3.14 +  for w in $S4WORLDLIST; do
    3.15 +    case "$w" in
    3.16 +      *:*:*:*)	continue ;;
    3.17 +      *:*:*)	w=${w%:*}; name=${w%:*}; world=${w#*:} ;;
    3.18 +      *)	continue ;;
    3.19 +    esac
    3.20 +    d=`getworldDB "./s4-config-$world.sh"`
    3.21 +    test -s "$d" && echo ${world}:${name}:$d
    3.22 +  done
    3.23 +}
    3.24 +
    3.25 +grepgrpworld() (
    3.26 +  world=$1; wname=$2; kwd=$3; db=$4 cond=$5
    3.27 +  case $world in
    3.28 +    Base)	cgi=`basename ${S4MASTERURL:-$URL}` ;;
    3.29 +    *)		cgi=s4-world-$world$cgiext ;;
    3.30 +  esac
    3.31 +  query <<-EOF |
    3.32 +	ATTACH DATABASE "$db" AS td;
    3.33 +	SELECT DISTINCT td.grp.rowid,hex(gname)
    3.34 +	FROM td.grp NATURAL JOIN td.grp_mem
    3.35 +	WHERE $cond;
    3.36 +	DETACH DATABASE td;
    3.37 +	EOF
    3.38 +  while IFS='|' read rowid hgname; do
    3.39 +    # echo rowid=$rowid - `echo "$hgname"|unhexize|htmlescape`
    3.40 +    htmlgn=`echo $hgname|unhexize|htmlescape`
    3.41 +    printf '<a href="%s?grp+%d">%s</a> ' "$cgi" "$rowid" "$htmlgn"
    3.42 +  done | {
    3.43 +    read ans
    3.44 +    if [ -n "$ans" ]; then
    3.45 +      w=`echo $wname|htmlescape`
    3.46 +      cat<<-EOF
    3.47 +	<tr>
    3.48 +	 <tr><td><a href="$cgi?grps"><span class="pre">$w</span></a></td>
    3.49 +	 <td>$ans</td>
    3.50 +	</dl>
    3.51 +	EOF
    3.52 +    fi
    3.53 +  }
    3.54 +)
    3.55 +
    3.56 +peekgrpworlds() (
    3.57 +  # $1=(kwd=Pattern|mem=User)
    3.58 +  arg=${1#*=}
    3.59 +  case $1 in
    3.60 +    kwd=*) cond="gname LIKE '%$arg%'"
    3.61 +	   guide="`echo $arg|htmlescape` を含むグループは別世界にもあります" ;;
    3.62 +    mem=*) cond="user = '$arg'"
    3.63 +	   guide="別世界の所属グループ";;
    3.64 +  esac
    3.65 +  for wd in `worldnameDBlist`; do
    3.66 +    world=${wd%%:*}; wd=${wd#*:}
    3.67 +    worldname=${wd%:*}
    3.68 +    d=${wd#*:}
    3.69 +    if [ ! $db -ef $d -a -s $d ]; then
    3.70 +      grepgrpworld "$world" "$worldname" "$1" "$d" "$cond"
    3.71 +    fi
    3.72 +  done | {
    3.73 +    result=`cat`
    3.74 +    if [ -n "$result" ]; then
    3.75 +      echo "<h2>$guide</h2>"
    3.76 +      echo "<table class=\"b\">$nl $result$nl</table>"
    3.77 +    fi
    3.78 +  }
    3.79 +)