tinycm annotate plugins/blog/blog.cgi @ rev 121

Remove ashism ==
author Pascal Bellard <pascal.bellard@slitaz.org>
date Tue Feb 26 12:26:25 2019 +0100 (2019-02-26)
parents 798212b3ce40
children
rev   line source
pankso@27 1 #!/bin/sh
pankso@27 2 #
pankso@27 3 # TinyCM Plugin - Blog
pankso@27 4 #
pankso@27 5
pankso@27 6 blog="$tiny/$content/blog"
pankso@27 7
pankso@62 8 # # Blog tools for admin users only
pankso@27 9 blog_tools() {
pankso@62 10 if check_auth && admin_user; then
pankso@62 11 cat << EOT
pankso@27 12 <div id="tools">
pankso@62 13 <a href="$script?blog">$(gettext "Blog")</a>
pankso@62 14 <a href="$script?blog=edit&amp;p=new">$(gettext "New post")</a>
pankso@72 15 <a href="$script?blog=archives">$(gettext "Archives")</a>
pankso@27 16 <a href="$script?dashboard">Dashboard</a>
pascal@121 17 $([ "$index" = "blog" ] && echo "<a href='$script?d=index'>Index</a>")
pascal@121 18 $([ "$HG" = "yes" ] && echo "<a href='$script?hg'>Hg Log</a>")
pankso@27 19 </div>
pankso@27 20 EOT
pankso@62 21 fi
pankso@27 22 }
pankso@27 23
pankso@27 24 # Post tools
pankso@27 25 post_tools() {
pankso@27 26 cat << EOT
pankso@62 27 - <a href="$script?blog=edit&amp;p=${p}">$(gettext "Edit it!")</a>
pankso@62 28 || <a href="$script?blog=rm&amp;p=${p}">$(gettext "Remove")</a>
pankso@27 29 EOT
pankso@62 30 }
pankso@62 31
pankso@62 32 # Create a XML feed for a new post
pankso@62 33 gen_rss() {
pankso@62 34 pubdate=$(date "+%a, %d %b %Y %X")
pankso@62 35 desc="$(cat ${blog}/${p}/post.txt | grep ^[A-Za-z] | head -n 4)"
pankso@62 36 . ${blog}/${p}/post.conf
pankso@62 37 cat > ${blog}/${p}/post.xml << EOT
pankso@62 38 <item>
pankso@62 39 <title>$TITLE</title>
pankso@62 40 <link>http://${SERVER_NAME}?blog&amp;p=$p</link>
pankso@62 41 <guid>blog-$p</guid>
pankso@62 42 <pubDate>$pubdate</pubDate>
pankso@62 43 <description>$desc</description>
pankso@62 44 </item>
pankso@62 45 EOT
pankso@62 46 }
pankso@62 47
pankso@62 48 # RSS Feed
pankso@62 49 rss() {
pankso@62 50 pubdate=$(date "+%a, %d %b %Y %X")
pankso@62 51 cat << EOT
pankso@62 52 Content-Type: text/xml
pankso@62 53
pankso@62 54 <?xml version="1.0" encoding="utf-8" ?>
pankso@62 55 <rss version="2.0">
pankso@62 56 <channel>
pankso@62 57 <title>TinyCM RSS</title>
pankso@62 58 <description>The Blog feed</description>
pankso@62 59 <link>http://${SERVER_NAME}</link>
pankso@62 60 <lastBuildDate>$pubdate GMT</lastBuildDate>
pankso@62 61 <pubDate>$pubdate GMT</pubDate>
pankso@62 62 EOT
pankso@62 63 for p in $(ls $blog | sort -r -n | head -n 8)
pankso@62 64 do
pankso@62 65 cat $blog/$p/post.xml
pankso@62 66 done
pankso@62 67 cat << EOT
pankso@62 68 </channel>
pankso@62 69 </rss>
pankso@62 70 EOT
pankso@27 71 }
pankso@27 72
pankso@27 73 # Display blog post: show_posts nb
pankso@28 74 show_post() {
pankso@62 75 [ -f "$blog/$1/post.conf" ] || return 1
pankso@62 76 p="$1"
pankso@62 77 . ${blog}/${p}/post.conf
pankso@62 78 d="$TITLE"
pankso@120 79
pankso@62 80 # Author info
pankso@62 81 if [ -f "${PEOPLE}/${AUTHOR}/account.conf" ]; then
pankso@62 82 . ${PEOPLE}/${AUTHOR}/account.conf
pankso@28 83 else
pankso@62 84 echo "ERROR: ${PEOPLE}/${AUTHOR}/account.conf"
pankso@28 85 fi
pankso@120 86
pankso@62 87 echo "<h2>$TITLE</h2>"
pankso@62 88 echo "<div class='blogpost'>"
pankso@62 89 cat ${blog}/${p}/post.txt | wiki_parser
pankso@28 90 cat << EOT
pankso@28 91 <div class="post-tools">
pankso@28 92 <a href="$script?user=$USER">$(get_gravatar $MAIL 24)</a>
pankso@62 93 <span class="date">$DATE</span>
pankso@28 94 EOT
pankso@48 95 # Post tools for admin users
pankso@48 96 if check_auth && admin_user; then
pankso@28 97 post_tools
pankso@28 98 echo "</div>"
pankso@28 99 else
pankso@28 100 echo "</div>"
pankso@28 101 fi
pankso@28 102 echo "</div>"
pankso@28 103 }
pankso@28 104
pankso@28 105 # Display blog post: show_posts count
pankso@27 106 show_posts() {
pankso@49 107 for p in $(ls $blog | sort -r -n | head -n $1)
pankso@27 108 do
pankso@28 109 show_post ${p}
pankso@27 110 done
pankso@27 111 }
pankso@27 112
pankso@120 113 # RSS feed requested
pascal@121 114 if [ "$(GET blog)" = "rss" ]; then
pankso@120 115 rss && exit 0
pankso@120 116 fi
pankso@120 117
pankso@27 118 #
paul@64 119 # Index main page can display the latest Blog posts
pankso@27 120 #
pankso@27 121 if fgrep -q '[BLOG]' $tiny/$wiki/index.txt && [ ! "$(GET)" ]; then
pankso@28 122 d="Blog posts"
pankso@27 123 index="blog"
pankso@27 124 header
pankso@27 125 html_header
pankso@27 126 user_box
pankso@27 127 # Post tools for auth users
pankso@30 128 if admin_user; then
pankso@27 129 blog_tools
pankso@27 130 fi
pankso@27 131 show_posts 5
pankso@27 132 echo "<p><a href='$script?blog'>$(gettext "More blog posts")</a></p>"
pankso@27 133 html_footer && exit 0
pankso@27 134 fi
pankso@27 135
pankso@60 136 #
pankso@60 137 # Handle GET requests
pankso@60 138 #
pankso@60 139
pankso@111 140
pankso@111 141 case " $(GET blog) " in
pankso@111 142 *\ edit\ *)
pankso@111 143 d="Editing: $(GET p)"
pankso@111 144 p="$(GET p)"
pankso@111 145 header
pankso@111 146 html_header
pankso@111 147 user_box
pankso@111 148 if ! check_auth && admin_user; then
pankso@111 149 gettext "You must be admin to create a new Blog post"
pankso@111 150 html_footer && exit 0
pankso@111 151 fi
pankso@111 152 blog_tools
pankso@111 153 # New post
pascal@121 154 if [ "$p" = "new" ]; then
pankso@111 155 last=$(ls $blog | sort -r -n | head -n 1)
pankso@111 156 p=$(($last + 1))
pankso@111 157 AUTHOR="$user"
pankso@111 158 DATE=$(date '+%Y-%m-%d')
pankso@111 159 else
pankso@111 160 . ${blog}/${p}/post.conf
pankso@120 161 fi
pankso@111 162 cat << EOT
pankso@62 163 <h2>$(gettext "Blog post"): $p</h2>
pankso@27 164
pankso@27 165 <div id="edit">
pankso@60 166 <form method="get" action="$script?" name="editor">
pankso@62 167 <input type="text" name="title" value="$TITLE" placeholder="Title" />
pankso@60 168 <input type="hidden" name="blog" value="save" />
pankso@62 169 <input type="hidden" name="p" value="$p" />
pankso@62 170 <textarea name="content">$(cat "$blog/$p/post.txt")</textarea>
pankso@62 171 <div>
pankso@62 172 <input type="submit" value="$(gettext "Post content")" />
pankso@120 173 <input style="width: 20%;" type="text"
pankso@62 174 name="author" value="$AUTHOR" />
pankso@62 175 <input style="width: 20%; display: inline;" type="text"
pankso@62 176 name="date" value="$DATE" />
pankso@62 177 </div>
pankso@120 178
pankso@62 179 <p>
pankso@27 180 $(gettext "Code Helper:")
pankso@27 181 $(cat lib/jseditor.html)
pankso@62 182 </p>
pankso@27 183 </form>
pankso@27 184 </div>
pankso@27 185 EOT
pankso@111 186 html_footer && exit 0 ;;
pankso@111 187
pankso@111 188 *\ save\ *)
pankso@111 189 p="$(GET p)"
pankso@111 190 if check_auth && admin_user; then
pankso@111 191 [ -d "$blog/$p" ] || mkdir -p ${blog}/${p}
pankso@111 192 # New post ?
pankso@111 193 if [ ! -f "${blog}/${p}/post.txt" ]; then
pankso@111 194 echo "New Blog post: <a href='$script?blog&amp;p=$p'>Read it!</a>" \
pankso@111 195 | log_activity
pankso@111 196 fi
pankso@111 197 # Write config file
pankso@111 198 cat > ${blog}/${p}/post.conf << EOT
pankso@62 199 # TinyCM Blog post configuration
pankso@62 200 AUTHOR="$(GET author)"
pankso@62 201 DATE="$(GET date)"
pankso@62 202 TITLE="$(GET title)"
pankso@62 203 EOT
pankso@111 204 # Write content to file
pankso@111 205 sed "s/$(echo -en '\r') /\n/g" > ${blog}/${p}/post.txt << EOT
pankso@27 206 $(GET content)
pankso@27 207 EOT
pankso@111 208 fi
pankso@111 209 [ -f "${blog}/${p}/post.xml" ] || gen_rss
pankso@111 210 header "Location: $script?blog&p=$p" ;;
pankso@120 211
pankso@111 212 *\ rm\ *)
pankso@111 213 if check_auth && admin_user; then
pankso@111 214 rm -rf ${blog}/"$(GET p)"
pankso@111 215 fi
pankso@111 216 header "Location: $script?blog" ;;
pankso@120 217
pankso@111 218 *\ archives\ *)
pankso@111 219 # List all posts with title only
pankso@111 220 d="Blog archives"
pankso@111 221 header
pankso@111 222 html_header
pankso@111 223 user_box
pankso@111 224 blog_tools
pankso@120 225 cat << EOT
pankso@120 226 <h2>Blog archives</h2>
pankso@120 227 <div id="plugins">
pankso@120 228 <table>
pankso@120 229 <thead>
pankso@120 230 <td>$(gettext "Date")</td>
pankso@120 231 <td>$(gettext "Title")</td>
pankso@120 232 </thead>
pankso@120 233 EOT
pankso@111 234 for p in $(ls $blog | sort -nr)
pankso@111 235 do
pankso@111 236 . ${blog}/${p}/post.conf
pankso@120 237 cat << EOT
pankso@120 238 <tr>
pankso@120 239 <td>$DATE</td>
pankso@120 240 <td><a href='$script?blog&amp;p=$p'>$TITLE</a></td>
pankso@120 241 </tr>
pankso@120 242 EOT
pankso@120 243 done
pankso@120 244 echo "</table></div>"
pankso@111 245 html_footer && exit 0 ;;
pankso@120 246
pankso@112 247 *\ blog\ *)
pankso@111 248 d="Blog posts"
pankso@111 249 count="10"
pankso@111 250 header
pankso@111 251 html_header
pankso@111 252 user_box
pankso@111 253 blog_tools
pankso@120 254
pankso@111 255 # Exit if plugin is disabled
pankso@111 256 if [ ! -d "$blog" ]; then
pankso@111 257 echo "<p class='error box'>"
pankso@111 258 gettext "Blog plugin is not yet active."; echo "</p>"
pankso@111 259 html_footer && exit 0
pankso@111 260 fi
pankso@120 261
pankso@111 262 # Single post
pankso@111 263 if [ "$(GET p)" ]; then
pankso@111 264 show_post "$(GET p)"
pankso@111 265 else
pankso@111 266 show_posts ${count}
pankso@111 267 echo "<p><a href='$script?blog=archives'>$(gettext "Blog archives")</a></p>"
pankso@120 268 fi
pankso@120 269
pankso@111 270 html_footer && exit 0 ;;
pankso@111 271 esac
pankso@111 272
pankso@120 273