diff s4.cgi @ 17:01f579d2c889

Rename to s4
author HIROSE Yuuji <yuuji@gentei.org>
date Tue, 21 Jul 2015 14:43:24 +0900
parents y4.cgi@636df1c1bdf2
children 18b4d56a6206
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s4.cgi	Tue Jul 21 14:43:24 2015 +0900
@@ -0,0 +1,313 @@
+#!/bin/sh
+# 愛
+PATH=/usr/local/sqlite3/bin:$PATH
+myname=`basename $0`
+mydir=`dirname $0`
+. $mydir/s4-funcs.sh
+
+cgiinit
+if [ x"$1" = x"reg" ]; then
+  contenttype; echo
+  regist $2
+  putfooter
+  exit
+fi
+
+dologin
+#gencookie; echo
+
+case ${SERVER_SOFTWARE} in
+  bozohttp*)
+    set -- `echo "$@"|(IFS=+ read a b c d e f g; echo $a $b $c $d $e $f $g)`
+    ;;
+esac
+
+err 1=$1 2=$2 3=$3 4=$4
+stage=`getpar stage`
+stage=${stage:-$1}
+case ${stage} in
+  # "")
+  #   contenttype; echo
+  #   m4 -D_SITE_="S System" $layout/welcome.m4.html
+  #   # echo "<pre>"; gencookie "user=$user" "skey=$skey"; echo "</pre>"
+  #   # echo "<pre>`env|sort -u`</pre>"
+  #   ;;
+  "home"|"")
+    contenttype; echo
+err HOME: just in rowid=`getpar rowid`
+    [ -n "`getpar rowid`" ] && par2table $formdir/user.def
+    showhome ${2:-$user}
+    ;;
+  # "diary")
+  #   contenttype; echo
+  #   title=`getpar title` #diary=`getpar diary` wday=`getpar wday`
+  #   [ -n "$title" ] && par2table $formdir/diary.def
+  #   m4 -D_TITLE_="$title" -D_DIARY_="$diary" \
+  #      -D_FORM_="`genform templ/form/diary.def`" \
+  #      -D_FORM2_="syscmd(\`genform templ/form/diary.def')" \
+  #      -D_DUMPTABLE_="`dumptable html diary title,wday,diary`" \
+  #      $layout/html.m4.html $layout/diary.m4.html
+  #   ;;
+  "invite")
+    contenttype; echo
+    invite
+    ;;
+  "groupman")
+    contenttype; echo
+    gname=`getpar gname`
+    if [ -n "$gname" ]; then
+      #gname=${gname%%[!-A-Z0-9a-z_.!#$%^&()=:/*]*}
+      newgname=`echo "$gname"|tr -dc '\-0-9A-Za-z#=:/_.,'`
+      if [ x"$newgname" != x"$gname" ]; then
+	err NewGNAME: gname=$newgname
+	echo "<p>使用禁止文字を除去し $gname としました。</p>"
+	gname=$newgname
+      fi
+      replpar gname string "$gname"
+      par2table $formdir/grp.def
+      joingrp "$gname" "$user" yes "$user" as-admin
+    fi
+    GF_STAGE=groupman
+    note="<p>グループ名に使用できない文字は自動的に削除されます。</p>"
+    m4 -D_TITLE_="グループ作成" \
+       -D_FORM_="$note`genform $formdir/grp.def`" \
+       -D_DUMPTABLE_="`DT_VIEW=grp dumptable html grp 'gname gecos:DESC mtime:TIME' 'order by b.TIME desc'`" \
+       $layout/html.m4.html $layout/groupman.m4.html
+    ;;
+  "edittable")
+    contenttype; echo
+    m4 -D_TITLE_="グループ編集/削除" $layout/html.m4.html
+    edittable "$formdir/$2.def" "$2" "$3"
+    ;;
+  "userconf")
+    contenttype; echo
+    [ -n "`getpar rowid`" ] && par2table $formdir/user.def
+    userconf
+    ;;
+  "groupconf")
+    contenttype; echo
+    [ -n "`getpar rowid`" ] && par2table $formdir/grp.def
+    groupconf "$2"
+    ;;
+  "mems")
+    contenttype; echo
+    m4 -D_TITLE_="参加者一覧" -D_BODYCLASS_=listmember $layout/html.m4.html
+    kwd=`getpar kwd`
+    listmember $kwd
+    ;;
+  "grps")
+    contenttype; echo
+    m4 -D_TITLE_="グループ一覧" -D_BODYCLASS_=listgroup $layout/html.m4.html
+    kwd=`getpar kwd`
+    listgroup $kwd \
+	| m4 -D_DUMPTABLE_="syscmd(\`cat')" \
+	     -D_TITLE_="グループ関連操作" \
+	     -D_FORM_="<a href=\"?groupman\">新規グループ作成</a>" \
+	     $layout/groupman.m4.html
+	
+    ;;
+  "grps2")
+    contenttype; echo
+    m4 -D_TITLE_="グループ一覧" \
+       -D_FORM_="`listgroup2 $formdir/grp.def`" -D_DUMPTABLE_= \
+       $layout/html.m4.html \
+       $layout/groupman.m4.html
+    ;;
+  "grp") # $2=group
+    contenttype; echo
+    gpg=`getpar grp`
+    grp=${2:-$gpg}
+    grp=`getgroupbyid "$grp"`
+err grp: getpar-grp"(gpg)=[$grp]"
+    ## . ./s4-blog.sh
+    jg=`getpar joingrp`
+    if [ -n "$jg" ]; then
+      err jg=$jg, grp=$grp
+      [ -n "$jg" -a -n "$grp" ] &&
+	  joingrp "$grp" "$user" "$jg" "`getpar email`"
+    fi
+    m4 -D_TITLE_="グループ $grp" \
+       $layout/html.m4.html
+    showgroup "$grp"
+    
+    ;;
+  "commission")
+    # $2=grp $3=user-rowid
+    contenttype; echo
+err commission: "$@"
+    m4 -D_TITLE_="グループ $2 管理者委任" $layout/html.m4.html
+    shift			# $1=grp $2=user-rowid
+    if [ -n "$2" ]; then
+      grp_reg_adm "$@"
+    else
+      echo "<p>無効な指定です。普通のアクセスならここに来ないはず。</p>"
+    fi
+    ;;
+  "blog")
+    contenttype; echo
+    . ./s4-blog.sh
+    blog_addentry $2
+    ;;
+  "replyblog")
+    contenttype; echo
+    rowid=${2%%[!A-Z0-9a-z_]*}
+    ## err ROWid=$rowid, '$2'=$2
+    . ./s4-blog.sh
+err blog_reply $rowid
+    blog_reply $rowid
+    ;;
+  "editheading")
+    contenttype; echo
+    rowid=${2%%[!A-Z0-9a-z_]*}
+    # blogrowid=${3%%[!A-Z0-9a-z_]*}
+    if [ -z "$rowid" ]; then
+      echo "<p>話題番号が未指定です。</p>"
+      return
+    fi
+    owner=`getvalbyid blog owner $2`
+    title=`getvalbyid blog title $2`
+    m4 -D_TITLE_="修正" \
+       -D_SUBTITLE_="[$title]@$owner" -D_DIARY_="" \
+       -D_BLOGS_="" -D_DUMPTABLE_="" \
+       -D_FORM_="`GF_ACTION=\"?blog\" edittable $formdir/blog.def blog $rowid`" \
+       $layout/html.m4.html $layout/diary.m4.html
+    ;;
+  "editart")
+    contenttype; echo
+    rowid=${2%%[!A-Z0-9a-z_]*}
+    blogrowid=${3%%[!A-Z0-9a-z_]*}
+    if [ -z "$rowid" -o -z "$blogrowid" ]; then
+      echo "<p>表示する記事番号が未指定です。</p>"
+      return
+    fi
+    owner=`getvalbyid blog owner $blogrowid`
+    title=`getvalbyid blog title $blogrowid`
+    author=`getvalbyid article author $rowid`
+    err EDITart: owner=$owner, author=$author
+    if isgrpowner $user $owner; then
+	: EDIT OK
+    elif [ x"$owner" != x"$user" -a x"$author" != x"$user" ]; then
+      echo "<p>本人か所有者しか編集できません.</p>"
+      return
+    fi
+    aid=`query "select id from article where rowid=$rowid;"`
+    # title=`getvalbyid blog title $2`
+    m4 -D_TITLE_="コメントの修正" -D_DIARY_="" \
+       -D_FORM_="`GF_ACTION=\"?replyblog+$blogrowid#$aid\" edittable $formdir/article.def article $rowid`" \
+       -D_SUBTITLE_="`gecos $owner`の「$title」" \
+       -D_BLOGS_= -D_DUMPTABLE_= \
+       $layout/html.m4.html $layout/diary.m4.html
+    ;;
+  "lshandout")
+    contenttype; echo
+    rowid=${2%%[!A-Z0-9a-z_]*}
+    if [ -z "$rowid" ]; then
+      echo "<p>話題番号が未指定です。</p>"
+      return
+    fi
+    . ./s4-blog.sh
+    lshandout $rowid
+    ;;
+  "gethandout")
+    rowid=${2%%[!A-Z0-9a-z_]*}
+    if [ -z "$rowid" ]; then
+      echo "<p>話題番号が未指定です。</p>"
+      return
+    fi
+    . ./s4-blog.sh
+    gethandout $rowid
+    ;;
+  "searchart")			# $2=blogowner
+    contenttype; echo
+    m4 -D_TITLE_="検索結果" $layout/html.m4.html
+    kwd=`getpar kwd`
+    if [ -z "$kwd" ]; then
+      echo "<p>検索語を指定してください</p>"
+    else
+      owner=`getpar owner`
+      owner=${owner:-$2}
+      echo "<h2>「$kwd」による検索結果</h2>"
+      if [ -n "$owner" ]; then
+	cond="where key='owner' and val='$owner'"
+	if isuser $owner; then
+	  echo "<p>(`linkhome $owner` さんの記録からの検索)</p>"
+	else
+	  linkhome $owner 1>&3
+	  echo "<p>(`linkhome $owner` グループからの検索)</p>"
+	fi
+      fi
+      # article_s:	id=article-id, key='text', val='TEXT'
+      # article:	id=article-id, blogid=blogkd
+      # blog:		id=blog-id, author=LeaderAuthor
+      # blog_s:		id=blog-id, key='title', val='BLOG-TITLE'
+      # WANT: blog-ROWid,article-id,val(TEXT)
+      sql="select b.rowid||'#'||x.id as '',
+		  b.title as TITLE,
+		  substr(x.val, 0, 80) as TEXT
+	from (select blog.rowid,blog.*,bs.val as title from blog join blog_s bs
+		on blog.id=bs.id and bs.key='title') b
+	  join
+	    (select a.id,a.blogid,s.val from article a join article_s s
+		 on a.id=s.id where s.val like '%$kwd%')
+	     x on b.id=x.blogid
+	 where b.id in (select id from blog_s
+	$cond);"
+      sedopt="s,<TR><TD>\([^<]*\)</TD>,<TR><TD><a\
+ href=\"?replyblog+\1\">VIEW</a></TD>,"
+      cat<<EOF
+<table class="b searchart">
+`sq -header -html $db "$sql"|sed "$sedopt"`
+</table>
+EOF
+    fi
+    ;;
+  "showattc")
+    # $2=table_m $3=rowid $4=val
+    if ! isfilereadable $user $2 $3; then
+      contenttype; echo
+      echo "<p>このファイルは管理者のみしか見られません</p>"
+      putfooter; exit
+    fi
+    idir=`umask 002; mktempd` || exit 1
+    # tmpfiles=$tmpfiles"${tmpfiles+ }$idir"
+    bin=$idir/$myname-$$.bin
+    sql="select quote(bin) from $2 where rowid='$3';"
+    sq $db "$sql" | unhexize > $bin
+    tv=`query "select type,val from $2 where rowid='$3';"`
+    type=${tv%|*} fn=${tv#*|}
+    err tv=$tv type=$type fn=$fn
+    ct=${type#file:}
+    case $ct in			# all text/* changed to text/plain
+      text/*)
+	charset=`nkf -g $bin|cut -d' ' -f1`
+	case $charset in
+	  ASCII*)	charset=""	;;
+	esac
+	ct="text/plain${charset:+; charset=$charset}"
+	 ;;
+    esac
+    contenttype "$ct"
+    echo "Content-Disposition: filename=\"$fn\""
+    echo "Content-Length: " `cat $bin | wc -c`; echo
+    #echo "Content-Type: " ${type#file:}; echo
+    cat $bin
+    exit 0
+   ;;
+  "gallery")
+    ## contenttype "Image/jpeg"
+    sql="select quote(b) from te where a='${2:-mikan.jpg}'"
+    idir=`umask 002; mktempd` || exit 1
+    # tmpfiles=$tmpfiles"${tmpfiles+ }$idir"
+    img=$idir/$myname-$$.bin
+    db=b.sq3
+    sqlite3 $db "$sql" | xxd -r -p > $img
+    len=`cat $img | wc -c`
+    echo "Content-Length: $len"
+    type=`file --mime-type $img | cut -d' ' -f2`
+    echo 'Content-type: $type'; echo
+    cat $img
+    ;;
+esac
+
+
+putfooter

yatex.org