tinycm annotate plugins/forum/forum.cgi @ rev 89

Tiny edits
author Paul Issott <paul@slitaz.org>
date Sun Feb 12 09:42:27 2017 +0000 (2017-02-12)
parents d6f01c5019bb
children 0893f1ab023c
rev   line source
pankso@83 1 #!/bin/sh
pankso@83 2 #
pankso@83 3 # TinyCM/TazBug Plugin - Support/discussion forum using #hashtags
pankso@83 4 #
pankso@83 5 # Display a topic: ?forum&topic=NB
pankso@83 6 # d= is used by html_header to set page title
pankso@83 7 # t= is used to set the topic number
pankso@83 8 #
pankso@83 9
pankso@83 10 forum="$tiny/$content/forum"
pankso@83 11
pankso@83 12 # Forum tools
pankso@83 13 forum_tools() {
pankso@83 14 cat << EOT
pankso@83 15 <div id="tools">
pankso@83 16 <a href="$script?forum=edit&amp;t=new">$(gettext "New post")</a>
pankso@83 17 $([ "$(GET t)" ] && echo "<a href='$script?forum'>Forum</a>")
pankso@83 18 $([ "$index" == "forum" ] && echo "<a href='$script?d=index'>Index</a>")
pankso@83 19 $([ "$HG" == "yes" ] && echo "<a href='$script?hg'>Hg Log</a>")
pankso@83 20 </div>
pankso@83 21 EOT
pankso@83 22 }
pankso@83 23
pankso@83 24 # Topic tools for admin and author
pankso@83 25 topic_tools() {
pankso@83 26 cat << EOT
pankso@83 27 - <a href="?forum=edit&amp;t=${t}">$(gettext "Edit it!")</a>
pankso@83 28 || <a href="$script?forum=rm&amp;t=${t}">$(gettext "Remove")</a>
pankso@83 29 EOT
pankso@83 30 }
pankso@83 31
pankso@83 32 # Create a XML feed for a new topic
pankso@83 33 gen_rss() {
pankso@83 34 pubdate=$(date "+%a, %d %b %Y %X")
pankso@83 35 title="Forum: $(fgrep '====' ${forum}/${t}/topic.txt | sed s'/====//'g)"
pankso@83 36 cat > ${forum}/${t}/topic.xml << EOT
pankso@83 37 <item>
pankso@83 38 <title>$title</title>
pankso@83 39 <link>http://${SERVER_NAME}?forum=topic&amp;t=$t</link>
pankso@83 40 <guid>topic-$t</guid>
pankso@83 41 <pubDate>$pubdate</pubDate>
pankso@83 42 <description>$hashtags</description>
pankso@83 43 </item>
pankso@83 44 EOT
pankso@83 45 }
pankso@83 46
pankso@83 47 new_msg() {
pankso@83 48 if check_auth; then
pankso@83 49 cat << EOT
pankso@83 50 <div id="edit">
pankso@83 51 <h3>$(gettext "New message")</h3>
pankso@83 52 <form method="get" action="$script" name="editor">
pankso@83 53 <textarea name="message"></textarea>
pankso@83 54 <input type="hidden" name="forum" value="msg" />
pankso@83 55 <input type="hidden" name="t" value="$t" />
pankso@83 56 <input type="submit" value="$(gettext 'Send message')" />
pankso@83 57 $(gettext "Wiki syntax is supported") -
pankso@83 58 <a href="?d=en/help">$(gettext "Help page")</a>
pankso@83 59 </form>
pankso@83 60 </div>
pankso@83 61 EOT
pankso@83 62 fi
pankso@83 63 }
pankso@83 64
pankso@83 65 # Display a forum topic with messages: show_topic NB
pankso@83 66 show_topic() {
pankso@83 67 t=${1%.txt}
pankso@83 68 . ${forum}/${t}/topic.conf
pankso@83 69
pankso@83 70 if [ -f "${PEOPLE}/${AUTHOR}/account.conf" ]; then
pankso@83 71 . ${PEOPLE}/${AUTHOR}/account.conf
pankso@83 72 else
pankso@83 73 echo "ERROR: ${PEOPLE}/${AUTHOR}/account.conf"
pankso@83 74 fi
pankso@83 75
pankso@83 76 echo "<div class='blogpost'>"
pankso@83 77 cat ${forum}/${t}/topic.txt | wiki_parser
pankso@83 78 cat << EOT
pankso@83 79 <div class="post-tools">
pankso@83 80 <a href="$script?user=$USER">$(get_gravatar $MAIL 24)</a>
pankso@83 81 <span class="date">$DATE</span>
pankso@83 82 EOT
pankso@83 83
pankso@83 84 # Topic tools for admin users (edit, remove)
pankso@83 85 if check_auth && admin_user; then
pankso@83 86 topic_tools
pankso@83 87 echo "</div>"
pankso@83 88 else
pankso@83 89 echo "</div>"
pankso@83 90 fi
pankso@83 91 echo "</div>"
pankso@83 92
pankso@83 93 # Hashtags
pankso@83 94 if [ -f "${forum}/${t}/hashtags.txt" ]; then
pankso@83 95 echo "<h3>Hashtags</h3>"
pankso@83 96 echo "<div id='hashtags'>"
pankso@83 97 link_hashtags
pankso@83 98 echo "</div>"
pankso@83 99 fi
pankso@83 100 }
pankso@83 101
pankso@83 102 # Display blog post: show_posts count
pankso@83 103 show_topics() {
pankso@83 104 for t in $(ls $forum | sort -r -n | head -n $1)
pankso@83 105 do
pankso@83 106 . ${forum}/${t}/topic.conf
pankso@83 107 . ${PEOPLE}/${AUTHOR}/account.conf
pankso@83 108 title="$(fgrep '====' ${forum}/${t}/topic.txt | sed s'/====//'g)"
pankso@83 109 cat << EOT
pankso@83 110 <div class="box topic">
pankso@83 111 <a href="?user=${AUTHOR}">$(get_gravatar $MAIL 24)</a>
pankso@83 112 <span class="date">$DATE</span> : <a href="?forum=topic&amp;t=${t}">$title</a>
pankso@83 113 <span>
pankso@83 114 EOT
pankso@83 115 link_hashtags
pankso@83 116 echo "</span></div>"
pankso@83 117 done
pankso@83 118 }
pankso@83 119
pankso@83 120 show_messages() {
pankso@83 121 msgs=$(ls -1 $forum/$t/msg.*.txt | wc -l)
pankso@83 122 echo "<h3>$(gettext 'Messages'): $msgs</h3>"
pankso@83 123 [ "$msgs" == 0 ] && echo "<p>$(gettext 'Be the first to post a message!')<p/>"
pankso@83 124 for msg in $(ls -1tr $forum/$t/msg.*.conf)
pankso@83 125 do
pankso@83 126 . ${msg}
pankso@83 127 rm=""
pankso@83 128 # User can delete his post.
pankso@83 129 if [ "$user" == "$AUTHOR" ]; then
pankso@83 130 rm="- <a href=\"?forum=msgrm&amp;t=$t&amp;msg=$ID\">$(gettext 'Remove')</a>"
pankso@83 131 fi
pankso@83 132 # Display user gravatar, date and message
pankso@83 133 cat << EOT
pankso@83 134 <p>
pankso@83 135 <a href="?user=$AUTHOR">$(get_gravatar $MAIL 24)</a>
pankso@83 136 <span class="date">$DATE</span> $rm
pankso@83 137 </p>
pankso@83 138 <div class="forum-msg">
pankso@83 139 $(cat ${msg%.conf}.txt | wiki_parser)
pankso@83 140 </div>
pankso@83 141 EOT
pankso@83 142 unset NAME DATE
pankso@83 143 done
pankso@83 144 }
pankso@83 145
pankso@83 146 # Create HTML link for a topic #hashtags
pankso@83 147 link_hashtags() {
pankso@83 148 for h in $(cat ${forum}/${t}/hashtags.txt)
pankso@83 149 do
pankso@83 150 echo "<a href='?forum=hashtag&amp;h=${h#\#}'>${h}</a>"
pankso@83 151 done
pankso@83 152 }
pankso@83 153
pankso@83 154 #
pankso@83 155 # Handle GET requests
pankso@83 156 #
pankso@83 157 if [ "$(GET forum)" ]; then
pankso@83 158 case " $(GET forum) " in
pankso@83 159 *\ edit\ *)
pankso@83 160 t="$(GET t)"
pankso@83 161 d="Edit: $(fgrep '====' ${forum}/${t}/topic.txt | sed s'/====//'g)"
pankso@83 162 header
pankso@83 163 html_header
pankso@83 164 user_box
pankso@83 165 if ! check_auth; then
paul@89 166 gettext "You must be logged in to create a new Forum post"
pankso@83 167 html_footer && exit 0
pankso@83 168 fi
pankso@83 169 # New post
pankso@83 170 if [ "$t" == "new" ]; then
pankso@83 171 date=$(date '+%Y-%m-%d %H:%M')
pankso@83 172 last=$(ls -r $forum | head -n 1)
pankso@83 173 nb=${last%.txt}
pankso@83 174 t=$(($nb + 1))
pankso@83 175 conf=$(echo "====Title====")
pankso@83 176 else
pankso@83 177 hashtags="$(cat $forum/$t/hashtags.txt)"
pankso@83 178 fi
pankso@83 179 cat << EOT
pankso@83 180 <h2>$(gettext "Forum topic"): $t</h2>
pankso@83 181
pankso@83 182 <div id="edit">
pankso@83 183 <form method="get" action="$script" name="editor">
pankso@83 184 <input type="hidden" name="forum" value="save" />
pankso@83 185 <input type="hidden" name="t" value="$t" />
pankso@83 186 <textarea name="content">${conf}$(cat "$forum/$t/topic.txt")</textarea>
pankso@83 187 <div>
pankso@83 188 <b>#HashTags : </b>
pankso@83 189 <input type="text" name="hashtags" value="$hashtags" />
pankso@83 190 </div>
pankso@83 191 <input type="submit" value="$(gettext "Post topic")" />
pankso@83 192 $(gettext "Code Helper:")
pankso@83 193 $(cat lib/jseditor.html)
pankso@83 194 </form>
pankso@83 195 </div>
pankso@83 196 EOT
pankso@83 197 html_footer && exit 0 ;;
pankso@83 198
pankso@83 199 *\ save\ *)
pankso@83 200 t="$(GET t)"
pankso@83 201 hashtags="$(GET hashtags)"
pankso@83 202 if check_auth; then
pankso@83 203 [ -d "${forum}/${t}" ] || mkdir -p ${forum}/${t}
pankso@83 204 # New topic ?
pankso@83 205 if [ ! -f "${forum}/${t}/topic.txt" ]; then
pankso@83 206 echo "New Forum topic: <a href='$script?forum=topic&amp;t=$t'>Read it!</a>" \
pankso@83 207 | log_activity
pankso@83 208 cat > ${forum}/${t}/topic.conf << EOT
pankso@83 209 # TinyCM Forum topic config file
pankso@83 210 AUTHOR="$user"
pankso@83 211 DATE="$(date '+%Y-%m-%d %H:%M')"
pankso@83 212 STATUS="open"
pankso@83 213 EOT
pankso@83 214 gen_rss
pankso@83 215 fi
pankso@83 216 # Write content and #hashtags to file
pankso@83 217 sed "s/$(echo -en '\r') /\n/g" > ${forum}/${t}/topic.txt << EOT
pankso@83 218 $(GET content)
pankso@83 219 EOT
pankso@83 220 echo "${hashtags}" > ${forum}/${t}/hashtags.txt
pankso@83 221 fi
pankso@83 222 header "Location: $script?forum=topic&t=$t" ;;
pankso@83 223
pankso@83 224 *\ msgrm\ *)
pankso@83 225 # Remove a message
pankso@83 226 t="$(GET t)"
pankso@83 227 if check_auth; then
pankso@83 228 rm -f ${forum}/${t}/msg."$(GET msg)".*
pankso@83 229 fi
pankso@83 230 header "Location: $script?forum=topic&t=$t" ;;
pankso@83 231
pankso@83 232 *\ msg\ *)
pankso@83 233 t="$(GET t)"
pankso@83 234 if check_auth; then
pankso@83 235 date=$(date "+%Y-%m-%d %H:%M")
pankso@83 236 msgs=$(ls -1 $forum/$t/msg.*.txt | wc -l)
pankso@83 237 count=$(($msgs + 1))
pankso@83 238 # Write config file
pankso@83 239 cat > ${forum}/${t}/msg.${count}.conf << EOT
pankso@83 240 # TinyCM Forum message config file
pankso@83 241 AUTHOR="$user"
pankso@83 242 DATE="$(date '+%Y-%m-%d %H:%M')"
pankso@83 243 ID="$count"
pankso@83 244 EOT
pankso@83 245 # Write message to file
pankso@83 246 sed "s/$(echo -en '\r') /\n/g" > ${forum}/${t}/msg.${count}.txt << EOT
pankso@83 247 $(GET message)
pankso@83 248 EOT
pankso@83 249 fi
pankso@83 250 header "Location: $script?forum=topic&t=$t" ;;
pankso@83 251
pankso@83 252 *\ rm\ *)
pankso@83 253 # Remove a forum topic
pankso@83 254 t="$(GET t)"
pankso@83 255 if [ -d "${forum}/${t}" ]; then
pankso@83 256 rm -rf ${forum}/${t}
pankso@83 257 fi
pankso@83 258 header "Location: $script?forum" ;;
pankso@83 259
pankso@83 260 *\ hashtag\ *)
paul@89 261 # Display a hashtag
pankso@83 262 hashtag="$(GET h)"
pankso@83 263 header
pankso@83 264 html_header
pankso@83 265 user_box
pankso@83 266 echo "<h2>Forum Hashtag #$hashtag</h2>"
pankso@83 267 for h in $(fgrep -l "#$hashtag" ${forum}/*/hashtags.txt)
pankso@83 268 do
pankso@83 269 path=$(dirname ${h})
pankso@83 270 t=$(basename $path)
pankso@83 271 . ${path}/topic.conf
pankso@83 272 title="$(fgrep '====' $(dirname ${h})/topic.txt | sed s'/====//'g)"
pankso@83 273 cat << EOT
pankso@83 274 <div class='box topic'>
pankso@83 275 <span class='date'>$DATE</span> - <a href='?forum=topic&amp;t=$t'>$title</a>
pankso@83 276 </div>
pankso@83 277 EOT
pankso@83 278 done
pankso@83 279 html_footer && exit 0 ;;
pankso@83 280
pankso@83 281 *\ topic\ *)
pankso@83 282 # Single post: get title from topic content before html_header
pankso@83 283 t="$(GET t)"
pankso@83 284 d="Forum: $(fgrep '====' ${forum}/${t}/topic.txt | sed s'/====//'g)"
pankso@83 285 header
pankso@83 286 html_header
pankso@83 287 user_box
pankso@83 288 # Forum tools for auth users
pankso@83 289 [ check_auth ] && forum_tools
pankso@83 290 show_topic "$t"
pankso@83 291 show_messages
pankso@83 292 new_msg
pankso@83 293 html_footer && exit 0 ;;
pankso@83 294
pankso@83 295 *)
pankso@83 296 d="$(gettext 'Forum Topics')"
pankso@83 297 count="20"
pankso@83 298 header
pankso@83 299 html_header
pankso@83 300 user_box
pankso@83 301 # Exit if plugin is disabled
pankso@83 302 if [ ! -d "$forum" ]; then
pankso@83 303 echo "<pre class='error box'>"
pankso@83 304 gettext "Forum plugin is not yet active."; echo
pankso@83 305 echo "Command: install -m 0777 -d $forum</pre>"
pankso@83 306 html_footer && exit 0
pankso@83 307 fi
pankso@83 308 echo $(GET topic)
pankso@83 309 # Forum tools for auth users
pankso@83 310 [ check_auth ] && forum_tools
pankso@83 311 echo "<h2>$d</h2>"
pankso@83 312 show_topics ${count} ;;
pankso@83 313 esac
pankso@83 314 html_footer && exit 0
pankso@83 315 fi
pankso@83 316