s4

changeset 79:f088d45dfdf2

Code cleaning: move substantial jobs from s4.cgi to s4-funcs.sh
author HIROSE Yuuji <yuuji@gentei.org>
date Sun, 02 Aug 2015 10:58:58 +0900
parents 0cbbb0874eb5
children 39e69daa2071
files s4-funcs.sh s4.cgi
diffstat 2 files changed, 117 insertions(+), 187 deletions(-) [+]
line diff
     1.1 --- a/s4-funcs.sh	Sat Aug 01 23:00:57 2015 +0900
     1.2 +++ b/s4-funcs.sh	Sun Aug 02 10:58:58 2015 +0900
     1.3 @@ -39,13 +39,15 @@
     1.4  
     1.5      資料配布、グループ管理・ML、ファイル交換、クリッカー、アンケート
     1.6      レポート提出管理
     1.7 -○グループへの一斉送信機能は付いたが表に出てない(7/6)
     1.8  ひとつのarticleをheadingにして新規ツリーを作成、あるといいかも。
     1.9  
    1.10 +8/2	s4.cgi生成系
    1.11 +	Web
    1.12 +	締切設定
    1.13 +	自分の提出物リスト
    1.14 +
    1.15  7/19	○設置
    1.16 -	締切設定
    1.17  	○一斉送信
    1.18 -	自分の提出物リスト
    1.19  	○getparfilename の tmpd の扱い
    1.20  	○やっぱりs4にしようかな
    1.21  7/18	○書込著者からホームへのリンク
    1.22 @@ -1208,17 +1210,48 @@
    1.23       $layout/html.m4.html $layout/form+dump.m4.html
    1.24  }
    1.25  userconf() {
    1.26 +  [ -n "`getpar rowid`" ] && par2table $formdir/user.def
    1.27    m4 -D_BODYCLASS_=userconf -D_TITLE_="ユーザ情報編集" $layout/html.m4.html
    1.28    GF_ACTION="?home" edittable "$formdir/user.def" "user" "$user"
    1.29  }
    1.30  groupconf() {
    1.31    # $1=rowid in grp (2015-07-21 changed from gname)
    1.32 +  [ -n "`getpar rowid`" ] && par2table $formdir/grp.def
    1.33    m4 -D_BODYCLASS_=groupconf -D_TITLE_="グループ情報編集" $layout/html.m4.html
    1.34    #rowid=`query "select rowid from grp where gname='$1';"`
    1.35    rowid=${1%%[!A-Z0-9a-z_]*}
    1.36  err gcon \$1=$1 rowid=$rowid
    1.37    GF_ACTION="?grp+$1" edittable "$formdir/grp.def" "grp" "$rowid"
    1.38  }
    1.39 +mems() {
    1.40 +  m4 -D_TITLE_="参加者一覧" -D_BODYCLASS_=listmember $layout/html.m4.html
    1.41 +  kwd=`getpar kwd`
    1.42 +  listmember $kwd
    1.43 +}
    1.44 +grps() {
    1.45 +  m4 -D_TITLE_="グループ一覧" -D_BODYCLASS_=listgroup $layout/html.m4.html
    1.46 +  kwd=`getpar kwd`
    1.47 +  listgroup $kwd \
    1.48 +      | m4 -D_DUMPTABLE_="syscmd(\`cat')" \
    1.49 +	   -D_TITLE_="グループ関連操作" \
    1.50 +	   -D_FORM_="<a href=\"?groupman\">新規グループ作成</a>" \
    1.51 +	   $layout/form+dump.m4.html
    1.52 +}
    1.53 +grp() {	# $1=group-rowid
    1.54 +  gpg=`getpar grp`
    1.55 +  grid=${1:-$gpg}
    1.56 +  grp=`getgroupbyid "$grid"`
    1.57 +  err grp: getpar-grp"(gpg)=[$grp]"
    1.58 +  ## . ./s4-blog.sh
    1.59 +  jg=`getpar joingrp`
    1.60 +  if [ -n "$jg" ]; then
    1.61 +    err jg=$jg, grp=$grp
    1.62 +    [ -n "$jg" -a -n "$grp" ] &&
    1.63 +	joingrp "$grp" "$user" "$jg" "`getpar email`"
    1.64 +  fi
    1.65 +  m4 -D_TITLE_="グループ $grp" $layout/html.m4.html
    1.66 +  showgroup "$grid"
    1.67 +}
    1.68  showhome() {
    1.69    # $1=userRowIdToShow
    1.70  err showhome \$1=$1
    1.71 @@ -1259,7 +1292,17 @@
    1.72    # Record access log
    1.73    [ -n "$1" ] && [ x"$1" != x"$user" ] && acclog user $1
    1.74  }
    1.75 -
    1.76 +commission() {  # $1=grp-rowid $2=user-rowid
    1.77 +  contenttype; echo
    1.78 +  err commission: "$@"
    1.79 +  gname=`getgroupbyid $1`
    1.80 +  m4 -D_TITLE_="グループ $gname 管理者委任" $layout/html.m4.html
    1.81 +  if [ -n "$2" ]; then
    1.82 +    grp_reg_adm "$@"
    1.83 +  else
    1.84 +    echo "無効な指定です。普通のアクセスならここに来ないはず。"|html p
    1.85 +  fi
    1.86 +}
    1.87  listgroupbytable() {
    1.88    # $1=deffile $2...=condition
    1.89    tagline=`grep :tag: $1`; shift
    1.90 @@ -1516,11 +1559,19 @@
    1.91        |sed -e "s|\(<br>\),not=\(.*\)|\1<a href=\"$cm+\2\">管理者委託</a>|"
    1.92  }
    1.93  grpaction() {			# $1=group-rowid
    1.94 -  # $grid=Group-id $grp=gname (got in s4.cgi)
    1.95 +  err GRP_ACTION:IN
    1.96 +  grid=${1:-`getpar grp`}
    1.97 +  grp=`getgroupbyid "$grid"`
    1.98 +  if [ -z "$grp" ]; then
    1.99 +    echo "無効な指定です。" | html p
   1.100 +    return
   1.101 +  fi
   1.102 +  m4 -D_TITLE_="グループ $grp 個別選択操作" $layout/html.m4.html
   1.103 +
   1.104    usel=`getpar usel`
   1.105    if [ -n "$usel" ]; then
   1.106      uids=$(echo `echo $usel`|tr ' ' ',')
   1.107 -    #err grpaction-1: grp=$grp, `echo $sql`
   1.108 +    err grpaction-1: grp=$grp, `echo $sql`
   1.109      text=`getpar text`
   1.110      
   1.111      rm=`getpar rm` cfm=`getpar confirm`
   1.112 @@ -1625,7 +1676,45 @@
   1.113  </table>
   1.114  EOF
   1.115  }
   1.116 -send2grpmember() {
   1.117 +editheading() {	# $1=rowid-of-heading
   1.118 +  rowid=${1%%[!A-Z0-9a-z_]*}
   1.119 +  if [ -z "$rowid" ]; then
   1.120 +    echo "話題番号が未指定です。" | html p
   1.121 +    return
   1.122 +  fi
   1.123 +  owner=`getvalbyid blog owner $rowid`
   1.124 +  title=`getvalbyid blog title $rowid`
   1.125 +  m4 -D_TITLE_="修正" \
   1.126 +     -D_SUBTITLE_="[$title]@$owner" -D_DIARY_="" \
   1.127 +     -D_BLOGS_="" -D_DUMPTABLE_="" \
   1.128 +     -D_FORM_="`GF_ACTION=\"?blog\" edittable $formdir/blog.def blog $rowid`" \
   1.129 +     $layout/html.m4.html $layout/form+dump.m4.html
   1.130 +}
   1.131 +editart() {	# $1=article-rowid $2=blogrowid
   1.132 +  rowid=${1%%[!A-Z0-9a-z_]*}
   1.133 +  blogrowid=${2%%[!A-Z0-9a-z_]*}
   1.134 +  if [ -z "$rowid" -o -z "$blogrowid" ]; then
   1.135 +    echo "表示する記事番号が未指定です。" | html p
   1.136 +    return
   1.137 +  fi
   1.138 +  owner=`getvalbyid blog owner $blogrowid`
   1.139 +  title=`getvalbyid blog title $blogrowid`
   1.140 +  author=`getvalbyid article author $rowid`
   1.141 +  err EDITart: owner=$owner, author=$author
   1.142 +  if isgrpowner $user $owner; then
   1.143 +    : EDIT OK
   1.144 +  elif [ x"$owner" != x"$user" -a x"$author" != x"$user" ]; then
   1.145 +    echo "本人か所有者しか編集できません." | html p
   1.146 +    return
   1.147 +  fi
   1.148 +  aid=`query "select id from article where rowid=$rowid;"`
   1.149 +  m4 -D_TITLE_="コメントの修正" -D_DIARY_="" \
   1.150 +     -D_FORM_="`GF_ACTION=\"?replyblog+$blogrowid#$aid\" edittable $formdir/article.def article $rowid`" \
   1.151 +     -D_SUBTITLE_="`gecos $owner`の「$title」" \
   1.152 +     -D_BLOGS_= -D_DUMPTABLE_= \
   1.153 +     $layout/html.m4.html $layout/form+dump.m4.html
   1.154 +}
   1.155 +send2mem() {
   1.156    rowid=`getpar grp`
   1.157    if [ -z "$rowid" ]; then
   1.158      echo "グループが未指定です。" | html p
     2.1 --- a/s4.cgi	Sat Aug 01 23:00:57 2015 +0900
     2.2 +++ b/s4.cgi	Sun Aug 02 10:58:58 2015 +0900
     2.3 @@ -20,122 +20,35 @@
     2.4      ;;
     2.5  esac
     2.6  
     2.7 -## err 1=$1 2=$2 3=$3 4=$4
     2.8 +err 1=$1 2=$2 3=$3 4=$4
     2.9  stage=`getpar stage`
    2.10  stage=${stage:-$1}
    2.11  case ${stage} in
    2.12 -  # "")
    2.13 -  #   contenttype; echo
    2.14 -  #   m4 -D_SITE_="S System" $layout/welcome.m4.html
    2.15 -  #   # echo "<pre>"; gencookie "user=$user" "skey=$skey"; echo "</pre>"
    2.16 -  #   # echo "<pre>`env|sort -u`</pre>"
    2.17 -  #   ;;
    2.18 -  "home"|"")
    2.19 +  home|"")
    2.20      contenttype; echo
    2.21 -err HOME: just in rowid=`getpar rowid`
    2.22 +    err HOME: just in rowid=`getpar rowid`
    2.23      [ -n "`getpar rowid`" ] && par2table $formdir/user.def
    2.24      showhome ${2:-$user}
    2.25      ;;
    2.26 -  # "diary")
    2.27 -  #   contenttype; echo
    2.28 -  #   title=`getpar title` #diary=`getpar diary` wday=`getpar wday`
    2.29 -  #   [ -n "$title" ] && par2table $formdir/diary.def
    2.30 -  #   m4 -D_TITLE_="$title" -D_DIARY_="$diary" \
    2.31 -  #      -D_FORM_="`genform templ/form/diary.def`" \
    2.32 -  #      -D_FORM2_="syscmd(\`genform templ/form/diary.def')" \
    2.33 -  #      -D_DUMPTABLE_="`dumptable html diary title,wday,diary`" \
    2.34 -  #      $layout/html.m4.html $layout/diary.m4.html
    2.35 -  #   ;;
    2.36 -  "login")
    2.37 +  login)
    2.38      contenttype; echo
    2.39      myargs=""
    2.40      showlogin
    2.41      ;;
    2.42 -  "invite")
    2.43 +  # "edittable")
    2.44 +  #   contenttype; echo
    2.45 +  #   m4 -D_TITLE_="グループ編集/削除" $layout/html.m4.html
    2.46 +  #   edittable "$formdir/$2.def" "$2" "$3"
    2.47 +  #   ;;
    2.48 +  "showattc")
    2.49 +    shift
    2.50 +    showattc "$@"
    2.51 +    exit 0			# Do not output further chunks
    2.52 +    ;;
    2.53 +  invite|groupman|userconf|groupconf|mems|grps|grp|grpaction|commission|editheading|editart|showattc|send2mem)
    2.54      contenttype; echo
    2.55 -    invite
    2.56 -    ;;
    2.57 -  "groupman")
    2.58 -    contenttype; echo
    2.59 -    groupman
    2.60 -    ;;
    2.61 -  "edittable")
    2.62 -    contenttype; echo
    2.63 -    m4 -D_TITLE_="グループ編集/削除" $layout/html.m4.html
    2.64 -    edittable "$formdir/$2.def" "$2" "$3"
    2.65 -    ;;
    2.66 -  "userconf")
    2.67 -    contenttype; echo
    2.68 -    [ -n "`getpar rowid`" ] && par2table $formdir/user.def
    2.69 -    userconf
    2.70 -    ;;
    2.71 -  "groupconf")
    2.72 -    contenttype; echo
    2.73 -    [ -n "`getpar rowid`" ] && par2table $formdir/grp.def
    2.74 -    groupconf "$2"
    2.75 -    ;;
    2.76 -  "mems")
    2.77 -    contenttype; echo
    2.78 -    m4 -D_TITLE_="参加者一覧" -D_BODYCLASS_=listmember $layout/html.m4.html
    2.79 -    kwd=`getpar kwd`
    2.80 -    listmember $kwd
    2.81 -    ;;
    2.82 -  "grps")
    2.83 -    contenttype; echo
    2.84 -    m4 -D_TITLE_="グループ一覧" -D_BODYCLASS_=listgroup $layout/html.m4.html
    2.85 -    kwd=`getpar kwd`
    2.86 -    listgroup $kwd \
    2.87 -	| m4 -D_DUMPTABLE_="syscmd(\`cat')" \
    2.88 -	     -D_TITLE_="グループ関連操作" \
    2.89 -	     -D_FORM_="<a href=\"?groupman\">新規グループ作成</a>" \
    2.90 -	     $layout/form+dump.m4.html
    2.91 -    ;;
    2.92 -  "grps2")
    2.93 -    contenttype; echo
    2.94 -    m4 -D_TITLE_="グループ一覧" \
    2.95 -       -D_FORM_="`listgroup2 $formdir/grp.def`" -D_DUMPTABLE_= \
    2.96 -       $layout/html.m4.html \
    2.97 -       $layout/form+dump-whead.m4.html
    2.98 -    ;;
    2.99 -  "grp") # $2=group-rowid
   2.100 -    contenttype; echo
   2.101 -    gpg=`getpar grp`
   2.102 -    grid=${2:-$gpg}
   2.103 -    grp=`getgroupbyid "$grid"`
   2.104 -err grp: getpar-grp"(gpg)=[$grp]"
   2.105 -    ## . ./s4-blog.sh
   2.106 -    jg=`getpar joingrp`
   2.107 -    if [ -n "$jg" ]; then
   2.108 -      err jg=$jg, grp=$grp
   2.109 -      [ -n "$jg" -a -n "$grp" ] &&
   2.110 -	  joingrp "$grp" "$user" "$jg" "`getpar email`"
   2.111 -    fi
   2.112 -    m4 -D_TITLE_="グループ $grp" \
   2.113 -       $layout/html.m4.html
   2.114 -    showgroup "$grid"
   2.115 -    ;;
   2.116 -  "grpaction")			# $2=group-rowid
   2.117 -    contenttype; echo
   2.118 -    grid=${2:-`getpar grp`}
   2.119 -    grp=`getgroupbyid "$grid"`
   2.120 -    if [ -z "$grp" ]; then
   2.121 -      echo "<p>無効な指定です。</p>"
   2.122 -      return
   2.123 -    fi
   2.124 -    m4 -D_TITLE_="グループ $grp 個別選択操作" $layout/html.m4.html
   2.125 -    grpaction "$grid"
   2.126 -    ;;
   2.127 -  "commission")
   2.128 -    # $2=grp-rowid $3=user-rowid
   2.129 -    contenttype; echo
   2.130 -err commission: "$@"
   2.131 -    m4 -D_TITLE_="グループ $2 管理者委任" $layout/html.m4.html
   2.132 -    shift			# $1=grp-rowid $2=user-rowid
   2.133 -    if [ -n "$2" ]; then
   2.134 -      grp_reg_adm "$@"
   2.135 -    else
   2.136 -      echo "無効な指定です。普通のアクセスならここに来ないはず。"|html p
   2.137 -    fi
   2.138 +    [ -n "$1" ] && shift
   2.139 +    $stage "$@"
   2.140      ;;
   2.141    "blog")	# $2=grpID
   2.142      contenttype; echo
   2.143 @@ -150,49 +63,7 @@
   2.144  err blog_reply $rowid
   2.145      blog_reply $rowid
   2.146      ;;
   2.147 -  "editheading")
   2.148 -    contenttype; echo
   2.149 -    rowid=${2%%[!A-Z0-9a-z_]*}
   2.150 -    # blogrowid=${3%%[!A-Z0-9a-z_]*}
   2.151 -    if [ -z "$rowid" ]; then
   2.152 -      echo "話題番号が未指定です。" | html p
   2.153 -      return
   2.154 -    fi
   2.155 -    owner=`getvalbyid blog owner $2`
   2.156 -    title=`getvalbyid blog title $2`
   2.157 -    m4 -D_TITLE_="修正" \
   2.158 -       -D_SUBTITLE_="[$title]@$owner" -D_DIARY_="" \
   2.159 -       -D_BLOGS_="" -D_DUMPTABLE_="" \
   2.160 -       -D_FORM_="`GF_ACTION=\"?blog\" edittable $formdir/blog.def blog $rowid`" \
   2.161 -       $layout/html.m4.html $layout/form+dump.m4.html
   2.162 -    ;;
   2.163 -  "editart")
   2.164 -    contenttype; echo
   2.165 -    rowid=${2%%[!A-Z0-9a-z_]*}
   2.166 -    blogrowid=${3%%[!A-Z0-9a-z_]*}
   2.167 -    if [ -z "$rowid" -o -z "$blogrowid" ]; then
   2.168 -      echo "表示する記事番号が未指定です。" | html p
   2.169 -      return
   2.170 -    fi
   2.171 -    owner=`getvalbyid blog owner $blogrowid`
   2.172 -    title=`getvalbyid blog title $blogrowid`
   2.173 -    author=`getvalbyid article author $rowid`
   2.174 -    err EDITart: owner=$owner, author=$author
   2.175 -    if isgrpowner $user $owner; then
   2.176 -	: EDIT OK
   2.177 -    elif [ x"$owner" != x"$user" -a x"$author" != x"$user" ]; then
   2.178 -      echo "本人か所有者しか編集できません." | html p
   2.179 -      return
   2.180 -    fi
   2.181 -    aid=`query "select id from article where rowid=$rowid;"`
   2.182 -    # title=`getvalbyid blog title $2`
   2.183 -    m4 -D_TITLE_="コメントの修正" -D_DIARY_="" \
   2.184 -       -D_FORM_="`GF_ACTION=\"?replyblog+$blogrowid#$aid\" edittable $formdir/article.def article $rowid`" \
   2.185 -       -D_SUBTITLE_="`gecos $owner`の「$title」" \
   2.186 -       -D_BLOGS_= -D_DUMPTABLE_= \
   2.187 -       $layout/html.m4.html $layout/form+dump.m4.html
   2.188 -    ;;
   2.189 -  "lshandout")
   2.190 +  lshandout|gethandout)
   2.191      contenttype; echo
   2.192      rowid=${2%%[!A-Z0-9a-z_]*}
   2.193      if [ -z "$rowid" ]; then
   2.194 @@ -200,16 +71,7 @@
   2.195        return
   2.196      fi
   2.197      . ./s4-blog.sh
   2.198 -    lshandout $rowid
   2.199 -    ;;
   2.200 -  "gethandout")
   2.201 -    rowid=${2%%[!A-Z0-9a-z_]*}
   2.202 -    if [ -z "$rowid" ]; then
   2.203 -      echo "話題番号が未指定です。" | html p
   2.204 -      return
   2.205 -    fi
   2.206 -    . ./s4-blog.sh
   2.207 -    gethandout $rowid
   2.208 +    $stage $rowid
   2.209      ;;
   2.210    "searchart")			# $2=blogowner
   2.211      contenttype; echo
   2.212 @@ -217,29 +79,8 @@
   2.213      . ./s4-blog.sh
   2.214      searchart $2
   2.215      ;;
   2.216 -  "send2mem")
   2.217 -    contenttype; echo
   2.218 -    send2grpmember
   2.219 -    ;;
   2.220 -  "showattc")
   2.221 -    # $2=table_m $3=rowid $4=val
   2.222 -    shift
   2.223 -    showattc "$@"
   2.224 -    exit 0
   2.225 -   ;;
   2.226 -  "gallery")
   2.227 -    ## contenttype "Image/jpeg"
   2.228 -    sql="select quote(b) from te where a='${2:-mikan.jpg}'"
   2.229 -    idir=`umask 002; mktempd` || exit 1
   2.230 -    # tmpfiles=$tmpfiles"${tmpfiles+ }$idir"
   2.231 -    img=$idir/$myname-$$.bin
   2.232 -    db=b.sq3
   2.233 -    sqlite3 $db "$sql" | xxd -r -p > $img
   2.234 -    len=`cat $img | wc -c`
   2.235 -    echo "Content-Length: $len"
   2.236 -    type=`file --mime-type $img | cut -d' ' -f2`
   2.237 -    echo 'Content-type: $type'; echo
   2.238 -    cat $img
   2.239 +  *)
   2.240 +    exec $0 login
   2.241      ;;
   2.242  esac
   2.243