s4

diff s4-blog.sh @ 397:e9e8b4d40220

Add feature of `frozen state' of the blog board
author HIROSE Yuuji <yuuji@gentei.org>
date Tue, 27 Dec 2016 08:41:10 +0859
parents 606404fbb3d3
children db25589d864c
line diff
     1.1 --- a/s4-blog.sh	Mon Nov 28 12:07:18 2016 +0859
     1.2 +++ b/s4-blog.sh	Tue Dec 27 08:41:10 2016 +0859
     1.3 @@ -1,6 +1,10 @@
     1.4  #
     1.5  type cgiinit >/dev/null 2>&1 || . ./s4-funcs.sh
     1.6  
     1.7 +# Global error flags
     1.8 +BLOG_NOTMEM=1
     1.9 +BLOG_FROZEN=2
    1.10 +
    1.11  blog_genform() {
    1.12    #
    1.13    t=$1 
    1.14 @@ -8,8 +12,15 @@
    1.15  
    1.16  blog_writable() (
    1.17    # $1=articleid $2=user
    1.18 +  # Return: $?=0 - Writable
    1.19 +  # 	      =1 - NOT Writable because user is not a member
    1.20 +  # 	      =2 - NOT Writable because blog is frozen
    1.21    blogowner=`getvalbyid blog owner "$1"`
    1.22 -  [ x"$blogowner" = x"$2" ] || isuser "$blogowner" || ismember "$2" "$blogowner"
    1.23 +  state=`getvalbyid blog state "$1"`
    1.24 +  rc=0
    1.25 +  [ x"$blogowner" = x"$2" ] || isuser "$blogowner" || ismember "$2" "$blogowner" || rc=$((rc+$BLOG_NOTMEM))
    1.26 +  [ "$state" = "frozen" ] && rc=$((rc+$BLOG_FROZEN))
    1.27 +  return $rc
    1.28  )
    1.29  blog_readable() {
    1.30    # $1=articleid $2=user
    1.31 @@ -74,7 +85,19 @@
    1.32    ts=${tbl}_s tm=${tbl}_m
    1.33    at=article as=article_s am=article_m
    1.34    serial=$(($(date +%s)-1420038000))s$$
    1.35 -  blog_writable $rowid $user && iswritable=true || iswritable=false
    1.36 +  blog_writable $rowid $user
    1.37 +  rc=$?
    1.38 +  if [ $rc = 0 ]; then
    1.39 +    iswritable=true
    1.40 +    ismem=true
    1.41 +  else
    1.42 +    iswritable=false
    1.43 +    if [ $((rc & $BLOG_NOTMEM)) -gt 0 ]; then
    1.44 +      ismem=false
    1.45 +    else
    1.46 +      ismem=true
    1.47 +    fi
    1.48 +  fi
    1.49    # This function grasps blog entry definiton directly.
    1.50    # blog:   id
    1.51    # blog_s: title,ctime,heading
    1.52 @@ -88,7 +111,8 @@
    1.53        regmode=`getgroupattr $blogowner regmode`
    1.54        # err regmode=$regmode
    1.55        if [ x"$regmode" = x"moderated" ]; then
    1.56 -	if ! ismember $user $blogowner; then
    1.57 +	# if ! ismember $user $blogowner; then
    1.58 +	if ! $ismem; then
    1.59  	  echo "加入してからどうぞ" | html p
    1.60  	  return
    1.61  	fi
    1.62 @@ -113,7 +137,7 @@
    1.63  EOF
    1.64  
    1.65    href="<a href=\"?editheading+$rowid\" accesskey=\"e\" title=\"E\"> 編集 </a>"
    1.66 -  if $iswritable; then
    1.67 +  if $ismem; then
    1.68      case `getvalbyid blog mode $rowid` in
    1.69        *report*)
    1.70  	href2="<a href=\"?lshandout+$rowid\" accesskey=\"l\" title=\"L\"> 提出状況 </a>"
    1.71 @@ -139,7 +163,7 @@
    1.72    { IFS='|' read edit ctime hexhead blogtype
    1.73      cat<<-EOF
    1.74  	<tr><td>${edit:+$href }$ctime $blogtype $href2$href3 $href4</td></tr>
    1.75 -	<tr class="preface">
    1.76 +	<tr class="preface${frozen_class:+ }$frozen_class">
    1.77  	 <td>`echo "$hexhead"|unhexize|hreflink|minitbl`</td></tr>
    1.78  	</table>
    1.79  
    1.80 @@ -772,6 +796,21 @@
    1.81    fi
    1.82    title=`getvalbyid blog title $rowid`
    1.83    owner=`getvalbyid blog owner $rowid`
    1.84 +  if [ -z "$title" ]; then
    1.85 +    echo "日記番号指定が無効です。" | html p
    1.86 +    return
    1.87 +  fi
    1.88 +  blog_writable $rowid $user; rc=$?
    1.89 +  if [ $rc = 0 ]; then
    1.90 +    iswritable=true
    1.91 +  else
    1.92 +    iswritable=false
    1.93 +    if [ $((rc & $BLOG_FROZEN)) -gt 0 ]; then
    1.94 +      isfrozen=true
    1.95 +      frozen_class='frozen"'
    1.96 +      frozen_flag="<span class=\"$frozen_class\">[凍結]</span>"
    1.97 +    fi
    1.98 +  fi
    1.99    if isuser "$owner"; then
   1.100      subtitle="`gecos $owner` さんの話題"
   1.101    else
   1.102 @@ -785,14 +824,10 @@
   1.103  	 \"|htmlescape`"
   1.104      memclass=`grp_getbodyclass "$owner"`
   1.105    fi
   1.106 -  if [ -z "$title" ]; then
   1.107 -    echo "日記番号指定が無効です。" | html p
   1.108 -    return
   1.109 -  fi
   1.110  
   1.111    text=`getpar text`
   1.112    if [ -n "$text" ]; then
   1.113 -    if blog_writable $rowid $user; then
   1.114 +    if $iswritable; then
   1.115        par2table $formdir/article.def
   1.116        st=$?
   1.117        case $st in
   1.118 @@ -806,12 +841,16 @@
   1.119  	;;
   1.120        esac
   1.121      else
   1.122 -      title="$title(加入してないので書き込み不可)"
   1.123 +      if $isfrozen; then
   1.124 +	title="$title(凍結板につき書き込み不可)"
   1.125 +      else
   1.126 +	title="$title(加入してないので書き込み不可)"
   1.127 +      fi
   1.128      fi
   1.129    fi
   1.130    def=$formdir/article.def
   1.131    echo "$title" > $tmpd/title.$$
   1.132 -  echo "$subtitle" > $tmpd/subtitle.$$
   1.133 +  echo "$subtitle$frozen_flag" > $tmpd/subtitle.$$
   1.134    ${BLOG_SHOW:-blog_showentry} blog $rowid \
   1.135        | _m4 -D_TITLE_="spaste(\`$tmpd/title.$$')" \
   1.136  	    -D_BODYCLASS_=general"${memclass:+ $memclass}" \