Mercurial > hgrepos > hgweb.cgi > s4
changeset 741:f2c7117f452e feature-annex
Merged
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Fri, 05 Jun 2020 16:49:25 +0900 |
parents | c892a3633baa (diff) b5df3b16c9d8 (current diff) |
children | 3d2502af9c07 |
files | s4-funcs.sh |
diffstat | 5 files changed, 140 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/examples/common/default/default.css Fri Jun 05 14:49:59 2020 +0900 +++ b/examples/common/default/default.css Fri Jun 05 16:49:25 2020 +0900 @@ -331,6 +331,20 @@ input[type="reset"] {margin-left: 4em;} /* + * Annex + */ +li.casmenu div {display: none; position: relative; width: 10%; + min-width: 80%; margin-right: 0;} +li.casmenu div table { + background: white; position: absolute; top: 0em; border: 3px solid navy; +} +li.casmenu:hover div, li.casmenu:active div, +li.casmenu div:hover, li.casmenu div:active +{display: block;} + + + +/* * PR Web */ body.pr {font-size: 200%;}
--- a/examples/common/default/footer.m4.html Fri Jun 05 14:49:59 2020 +0900 +++ b/examples/common/default/footer.m4.html Fri Jun 05 16:49:25 2020 +0900 @@ -1,6 +1,6 @@ <p class="copyright">Driven by <a href="http://www.gentei.org/~yuuji/software/s4/">s4</a> -©2015-2019 by +©2015-2020 by <a href="http://www.gentei.org/~yuuji/">yuuji</a> </body> </html>
--- a/examples/common/default/html.m4.html Fri Jun 05 14:49:59 2020 +0900 +++ b/examples/common/default/html.m4.html Fri Jun 05 16:49:25 2020 +0900 @@ -18,8 +18,8 @@ <body class="_BODYCLASS_"> <div class="topmenu"> <ul> - <li><a href="?home" accesskey="1" title="Shortcut: 1 -Home">ホーム</a></li> + <li class="casmenu"><a href="?home" accesskey="1" title="Shortcut: 1 +Home">ホーム</a>_S4ANNEXES_</li> <!-- <li><a href="?blog">話題作成</a></li> --> <li><a href="?mems" accesskey="2" title="Shortcut: 2 Members">参加者一覧</a></li>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/s4-annex.sh Fri Jun 05 16:49:25 2020 +0900 @@ -0,0 +1,74 @@ +#!/bin/sh + +if [ -z "$S4MASTERDB" -o ! -s "$S4MASTERDB" ]; then + return +fi +if [ "$db" -ef "$S4MASTERDB" ]; then + return # Points to the same file +fi + +# Now S4ANNEX mode is ACTIVE +S4ANNEXNAME=`dirname $mydir` +sessdb=`dirname $S4MASTERDB`/sess.sq3 +S4ANNEXES="<div><table><tr><th><a + href=\"$S4MASTERURL\">本館</a></th></tr></table><div>" +## skey="skey-`basename $mydir`" +syncflag=$dbdir/usersynced +userupdateflag=`dirname $S4MASTERDB`/`basename $userupdateflag` +test ! -e "$userupdateflag" && return +test "$syncflag" -nt "$userupdateflag" && return + +# for sub.sq3 +# +# main: user: 'taro', 'hanako', 'shige' +# sub: user: 'taro', 'hanako', 'shige' +# sub2: user_s: ('taro', 't'), ('hanako', 'h'), ('shige', 's') +# then update +# + +## sqlite3 -cmd '.timer 1' -cmd '.echo 1' $db <<EOF +err "Starting account synchronization" +err "db=$db mas=$S4MASTERDB sess=$sessdb" +num=$(sqlite3 -bail -cmd 'PRAGMA FOREIGN_KEYS=on' $db <<EOF +ATTACH DATABASE "$S4MASTERDB" AS m; +CREATE TABLE IF NOT EXISTS user(name, primary key(name)); +BEGIN; +DElETE FROM main.user WHERE rowid NOT IN (SELECT rowid FROM m.user); +INSERT INTO main.user(rowid, name) + SELECT rowid, name FROM m.user + WHERE m.user.rowid NOT IN (SELECT rowid FROM user); +UPDATE user SET name = (SELECT name FROM m.user WHERE main.user.rowid=m.user.rowid); +DELETE FROM main.user_s; +INSERT INTO main.user_s(rowid, name, key, type, val, bin) + SELECT rowid,* FROM m.user_s; +DELETE FROM main.user_m; +INSERT INTO main.user_m(rowid, name, key, type, val, bin) + SELECT rowid,* FROM m.user_m + WHERE key NOT LIKE '%cache%'; +END; + +/* Compare user tables */ +WITH master AS ( + SELECT p.rowid,* FROM m.user p + NATURAL LEFT JOIN m.user_s + NATURAL LEFT JOIN m.user_m +), annex AS ( + SELECT p.rowid,* FROM user p + NATURAL LEFT JOIN user_s + NATURAL LEFT JOIN user_m +), m_a AS ( + SELECT * FROM master EXCEPT SELECT * FROM annex +), a_m AS ( + SELECT * FROM annex EXCEPT SELECT * FROM master +) SELECT (SELECT count(*) FROM m_a) + (SELECT count(*) FROM a_m); + +-- SELECT * FROM annex; +-- SELECT rowid,* FROM m.user LIMIT 10; +-- SELECT rowid,* FROM user WHERE rowid NOT IN (SELECT rowid FROM m.user); +DETACH DATABASE m; +EOF +) +if [ $num -eq 0 ]; then + touch $syncflag +fi +return $num
--- a/s4-funcs.sh Fri Jun 05 14:49:59 2020 +0900 +++ b/s4-funcs.sh Fri Jun 05 16:49:25 2020 +0900 @@ -12,12 +12,13 @@ tmpdir=${TMPDIR:-tmp} dbdir=${DBDIR:-db} tmpfiles="" -db=${DB:-$dbdir/cgi.sq3} querylog=${QUERYLOG:-$tmpdir/query.log} searchlog=${SEARCHLOG:-$tmpdir/search.log} -workdb=$dbdir/tmpdata.sq3 +db=${DB:-$dbdir/cgi.sq3} sessdb=$dbdir/sess.sq3 +userupdateflag=$dbdir/userupdate sesstb=tmp.sess +workdb=$dbdir/tmpdata.sq3 listentlimit=${LISTENTLIMIT:-30} admin=${ADMIN:-hostmaster@example.org} noreply=${NOREPLY:-noreply@example.org} @@ -64,10 +65,36 @@ " likeesc=`printf '\037'` # ESCAPE char of LIKE operator iconcachekey="profimgcache_S" + +# Start debug logging +exec 3>> $tmpdir/debug.out +err() { + echo "[`date +%F-%T%z`] $@" 1>&3 +} case "$HTTP_USER_AGENT" in *i[Pp]hone*|*[Aa]ndroid*) touchpanel=1 ;; *) touchpanel="" ;; esac + +# If S4MASTERDB is set, behave as ANNEX s4 +if [ -n "$S4MASTERDB" -a -s "$S4MASTERDB" ]; then + # $S4ANNEX is set after s4-annex setup + . ./s4-annex.sh 2>> tmp/debug.out + err S4ANNEXES="$S4ANNEXES" S4ANNEXNAME=$S4ANNEXNAME +elif [ -n "$S4ANNEXES" ]; then + # Master Site mode, which has annexes + v="" + for i in $S4ANNEXES; do + _aname=${i%:*}; _apath=${i##*:} + v=${v}"<tr><td>⇒ <a href=\"$_apath\">$_aname</a></td></tr>$nl" + done + if [ -n "$v" ]; then + i="<tr><th title=\"Annex\">別館</a></th></tr>$nl" + S4ANNEXES="${touchpanel:+ : ▼}<div><table>$i$v</table></div>" + fi +fi + + [ -f ./s4-cgi.sh ] && . ./s4-cgi.sh : <<EOF @@ -374,7 +401,6 @@ if [ -n "$isCGI" ]; then exec 2>> $tmpdir/error.out fi - exec 3>> $tmpdir/debug.out exec 5> $sqi # Turning $sqi access through fd5 for continuous open state chmod o-r $tmpdir/error.out $tmpdir/debug.out rm $sqi @@ -423,7 +449,8 @@ } _m4() { #S4NAME=f,f,f - m4 ${S4NAME:+"-D_S4NAME_=${S4NAME}"} ${S4CSS:+-D_S4CSS_="$S4CSS"} "$@" + m4 ${S4NAME:+"-D_S4NAME_=${S4NAME}"} ${S4CSS:+-D_S4CSS_="$S4CSS"} \ + -D_S4ANNEXES_="${S4ANNEXES}" "$@" } ismember() { # $1=user, $2=group @@ -1201,9 +1228,10 @@ for kv in `echo $HTTP_COOKIE|sed 's/[;, ]/ /g'`; do k="${kv%%=*}" v="`echo ${kv#*=}|nkf -Ww -mQ|sed -e 's/\"/\"\"/g'`" +err "GetCookie: $k=[$v]" case "$k" in user) _user="$v" ;; - skey) _skey="$v" ;; + skey) _skey="$v"; k=skey ;; esac query "replace into cookie values('$session', '$k', 'string', \"$v\");" done @@ -1220,7 +1248,7 @@ # smail rcpts subj (file) # $SMAIL_TO <- Recipient value of To: header # $MAIL_FROM <- From: header value - from=`echo "${MAIL_FROM:-$admin}"|nkf -jM|tr -d '\n'` + from=`echo "${MAIL_FROM:-$admin}"|nkf -jM|tr : /|tr -d '\n'` rcpt=`echo $1|tr ' ' '\n'|sort -u|tr '\n' ' '` # uniq and strip newlines rcptheader=`echo $1|tr ' ' '\n'|sort -u|sed '2,$s/^/To: /g'` subj=`echo $2|nkf -jM|tr -d '\n'` @@ -1310,7 +1338,7 @@ # $1=passwd dbpswd=`getpwfield $user pswd` encpswd=`mycrypt "$1" "$dbpswd"` - ## err user=$user, pswd=$1, db=$dbpswd, enc=$encpswd + # err user=$user, pswd=$1, db=$dbpswd, enc=$encpswd [ x"$dbpswd" = x"$encpswd" ] } mypwhash() { @@ -1328,7 +1356,7 @@ newpswd=`genrandom` # newsalt=`genrandom 5` #encpswd=`mycrypt "$newpswd" "$newsalt"` encpswd=`echo $newpswd|mypwhash` - dbsetbyid user $user pswd "$encpswd" + dbsetbyid user $user pswd "$encpswd" && touch $userupdateflag # Avoid $user substitution with m4, because $url comes from user input. _m4 -D_PSWD_="$newpswd" -D_URL_="$url" -D_ADMIN_="$admin" \ $msgdir/mail-newaccount.m4 \ @@ -1363,6 +1391,7 @@ newsession=`genrandom 34` if setskey "$user" "$newsession" && dbsetbyid user "$user" login "`date '+%F %T'`"; then + # err gencookie "user=$user" "skey=$newsession" gencookie "user=$user" "skey=$newsession" return 0 else @@ -1403,9 +1432,6 @@ trap cleanup INT HUP EXIT TERM PIPE # trap cleanup INT HUP -err() { - echo "[`date +%F-%T%z`] $@" 1>&3 -} cgiinit() { tmpd=`tmpd=$tmpdir mktempd` @@ -2049,8 +2075,14 @@ cond="gname in (select gname from grp_mem where user='$uname')" search_form_args="" if [ x"$user" = x"$uname" ]; then - usermenu="<a href=\"?userconf\" accesskey=\"e\" - title=\"Shortcut: E${nl}Edit Profile\">プロフィールの編集</a> / + if [ -z "$S4ANNEXNAME" ]; then + usermenu="<a href=\"?userconf\" accesskey=\"e\" + title=\"Shortcut: E${nl}Edit Profile\">プロフィールの編集</a> / " + elif [ -n "$S4MASTERURL" ]; then + usermenu="<a href=\"$S4MASTERURL\" accesskey=\"e\" + title=\"Shortcut: E${nl}Main Site\">本館</a> / " + fi + usermenu="$usermenu <a href=\"?blog\" accesskey=\"n\" title=\"Shortcut: N${nl}New blog\">新規話題の作成</a>" # Display folders sql="select count(id) from article_m where id @@ -3940,8 +3972,10 @@ .read $transaction RELEASE SAVEPOINT pa2table_insert; EOF - return $? - ##err donee + rc=$? + [ $rc -eq 0 -a x"$tbl" = x"user" ] && touch $userupdateflag + ## err "Table:$tbl update done " + return $rc ) genform() { # $1 = form definition file