diff s4-world.sh @ 825:e9817a71f332

List groups in other worlds
author HIROSE Yuuji <yuuji@gentei.org>
date Sun, 21 Jun 2020 09:50:32 +0900
parents e64d18e78507
children f2d69fb3e038
line wrap: on
line diff
--- 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
+  }
+)

yatex.org