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&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&t=${t}">$(gettext "Edit it!")</a> |
pankso@83 | 28 || <a href="$script?forum=rm&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&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&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&t=$t&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&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&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&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 |