s4

annotate s4-world.sh @ 797:56adb6e5ee68

Add world-links to Grps entry of topmenu
author HIROSE Yuuji <yuuji@gentei.org>
date Sun, 14 Jun 2020 11:15:45 +0900
parents 8646ec4bd6fc
children ba11fd987baf
rev   line source
yuuji@734 1 #!/bin/sh
yuuji@734 2
yuuji@791 3 # Setup variables for running time
yuuji@791 4 if $isCGI; then
yuuji@791 5 case "$S4WORLDLIST" in
yuuji@791 6 *:*:*)
yuuji@791 7 worldlistfile=cache/worldlist
yuuji@797 8 worldgrpfile=cache/worldgrps
yuuji@791 9 worldoptionfile=cache/worldoption
yuuji@791 10 worldnamefile=cache/worldname
yuuji@791 11 if [ ! -e $worldlistfile -o $worldlistfile -ot s4-config.sh \
yuuji@791 12 -o ! -e $worldoptionfile -o $worldoptionfile -ot s4-config.sh \
yuuji@794 13 -o s4-world.sh -nt $worldoptionfile ]
yuuji@791 14 then
yuuji@791 15 echo S4MASTERURL=$S4MASTERURL >> tmp/debug.out
yuuji@791 16 cat <<-EOF > $worldlistfile
yuuji@797 17 <div><table>
yuuji@791 18 <tr><th>World List</th></tr>
yuuji@794 19 <tr><td title="Base World$nl拠点となるWorldです">&rArr;
yuuji@794 20 <a href="${S4MASTERURL:-$URL}">Base</a></td></tr>
yuuji@791 21 EOF
yuuji@791 22 true > $worldoptionfile
yuuji@791 23 for i in $S4WORLDLIST; do
yuuji@791 24 echo $i | {
yuuji@791 25 IFS=: read name short d
yuuji@791 26 cgi="s4-world-$short$cgiext"
yuuji@791 27 conf="s4-config-$short.sh"
yuuji@791 28 cat<<-EOF >>$worldlistfile
yuuji@791 29 <tr><td title="$d">&rArr; <a href="$cgi">$name</a></td></tr>
yuuji@791 30 EOF
yuuji@791 31 cat<<-EOF >>$worldoptionfile
yuuji@791 32 <option title="$d" value="$conf">$name</option>
yuuji@791 33 EOF
yuuji@791 34 echo "$name" > $worldnamefile.$short
yuuji@791 35 }
yuuji@791 36 done
yuuji@791 37 if [ -s "$worldoptionfile" ]; then
yuuji@791 38 echo "<option value=\"s4-config.sh\">Base</option>" >> $worldoptionfile
yuuji@791 39 echo "</table>$nl</div>" >> $worldlistfile
yuuji@797 40 sed 's/href="\([^>]*\)"/href="\1?grps"/' $worldlistfile \
yuuji@797 41 > $worldgrpfile
yuuji@791 42 else
yuuji@791 43 true > $worldoptionfile; true > $worldlistfile # Remove contents
yuuji@791 44 rm -f ${worldnamefile}.*
yuuji@791 45 fi
yuuji@791 46 fi
yuuji@791 47 if [ -s "$worldlistfile" ]; then
yuuji@797 48 S4WORLDS="▼spaste(\`$worldlistfile')"
yuuji@791 49 S4WORLDNAME=${S4WORLD:+`cat $worldnamefile.$S4WORLD`}
yuuji@797 50 S4WORLDGRPS="▼spaste(\`$worldgrpfile')"
yuuji@797 51 err S4WORLDGRPS=$S4WORLDGRPS
yuuji@791 52 fi
yuuji@791 53 ;;
yuuji@791 54 esac
yuuji@791 55 fi
yuuji@791 56
yuuji@791 57 err "db=$db mas=$S4MASTERDB sessdb=$sessdb"
yuuji@791 58 # If in parent world, no need to do rest of jobs
yuuji@734 59 if [ -z "$S4MASTERDB" -o ! -s "$S4MASTERDB" ]; then
yuuji@734 60 return
yuuji@734 61 fi
yuuji@791 62 # Confim child
yuuji@734 63 if [ "$db" -ef "$S4MASTERDB" ]; then
yuuji@734 64 return # Points to the same file
yuuji@734 65 fi
yuuji@734 66
yuuji@743 67 # Now Another world is ACTIVE
yuuji@742 68 # sessdb=`dirname $S4MASTERDB`/sess.sq3
yuuji@739 69 ## skey="skey-`basename $mydir`"
yuuji@742 70 syncflag=${db%.*}.synctime
yuuji@794 71 runflag=${db%.*}.run
yuuji@734 72 userupdateflag=`dirname $S4MASTERDB`/`basename $userupdateflag`
yuuji@771 73 err SYNCFLAG=$syncflag
yuuji@734 74 test ! -e "$userupdateflag" && return
yuuji@734 75 test "$syncflag" -nt "$userupdateflag" && return
yuuji@794 76 if [ -s "$runflag" ]; then
yuuji@794 77 limit=`cat $runflag|tr -c -d 0-9`
yuuji@794 78 if [ -n "$limit" -a "$limit" -gt `date +%s` ]; then
yuuji@794 79 err "World $S4WORLD account sync withholded by process $$"
yuuji@794 80 return # Running sync by other process not leaching timeout
yuuji@794 81 fi
yuuji@794 82 fi
yuuji@794 83 echo $((`date +%s` + 10)) > $runflag # Setting running flag by timeout 10s
yuuji@742 84
yuuji@734 85 # for sub.sq3
yuuji@734 86 #
yuuji@734 87 # main: user: 'taro', 'hanako', 'shige'
yuuji@734 88 # sub: user: 'taro', 'hanako', 'shige'
yuuji@734 89 # sub2: user_s: ('taro', 't'), ('hanako', 'h'), ('shige', 's')
yuuji@734 90 # then update
yuuji@734 91 #
yuuji@734 92
yuuji@734 93 ## sqlite3 -cmd '.timer 1' -cmd '.echo 1' $db <<EOF
yuuji@794 94 err "`gdate +%S.%3N` Starting account synchronization[$$]"
yuuji@794 95 ## cat > tmp/sql <<EOF
yuuji@794 96 num=$(sqlite3 -bail -cmd 'PRAGMA FOREIGN_KEYS=on' $db <<EOF
yuuji@734 97 ATTACH DATABASE "$S4MASTERDB" AS m;
yuuji@734 98 CREATE TABLE IF NOT EXISTS user(name, primary key(name));
yuuji@734 99 BEGIN;
yuuji@734 100 DElETE FROM main.user WHERE rowid NOT IN (SELECT rowid FROM m.user);
yuuji@734 101 INSERT INTO main.user(rowid, name)
yuuji@734 102 SELECT rowid, name FROM m.user
yuuji@734 103 WHERE m.user.rowid NOT IN (SELECT rowid FROM user);
yuuji@734 104 UPDATE user SET name = (SELECT name FROM m.user WHERE main.user.rowid=m.user.rowid);
yuuji@742 105 DELETE FROM main.user_s WHERE rowid NOT IN (SELECT rowid FROM m.user_s);
yuuji@742 106 REPLACE INTO main.user_s(rowid, name, key, type, val, bin)
yuuji@734 107 SELECT rowid,* FROM m.user_s;
yuuji@742 108 DELETE FROM main.user_m WHERE rowid NOT IN (SELECT rowid FROM m.user_m);
yuuji@742 109 REPLACE INTO main.user_m(rowid, name, key, type, val, bin)
yuuji@734 110 SELECT rowid,* FROM m.user_m
yuuji@734 111 WHERE key NOT LIKE '%cache%';
yuuji@734 112 END;
yuuji@734 113
yuuji@734 114 /* Compare user tables */
yuuji@734 115 WITH master AS (
yuuji@734 116 SELECT p.rowid,* FROM m.user p
yuuji@734 117 NATURAL LEFT JOIN m.user_s
yuuji@734 118 NATURAL LEFT JOIN m.user_m
yuuji@743 119 ), thisworld AS (
yuuji@734 120 SELECT p.rowid,* FROM user p
yuuji@734 121 NATURAL LEFT JOIN user_s
yuuji@734 122 NATURAL LEFT JOIN user_m
yuuji@734 123 ), m_a AS (
yuuji@743 124 SELECT * FROM master EXCEPT SELECT * FROM thisworld
yuuji@734 125 ), a_m AS (
yuuji@743 126 SELECT * FROM thisworld EXCEPT SELECT * FROM master
yuuji@734 127 ) SELECT (SELECT count(*) FROM m_a) + (SELECT count(*) FROM a_m);
yuuji@734 128 DETACH DATABASE m;
yuuji@734 129 EOF
yuuji@794 130 )
yuuji@794 131 ### num=$(sqlite3 -bail -cmd 'PRAGMA FOREIGN_KEYS=on' $db < tmp/sql )
yuuji@794 132 if [ -n "$num" -a $num -eq 0 ]; then
yuuji@794 133 err "`gdate +%S.%3N` Account synchronization[$$] done in difference $num"
yuuji@794 134 echo "`date '+%F %T'`: Sync done by process $$" >> $syncflag
yuuji@794 135 else
yuuji@794 136 err "Account synch[$$] failed or bailed with num=[$num]"
yuuji@739 137 fi
yuuji@794 138 test -e "$runflag" && rm -f "$runflag"
yuuji@739 139 return $num