X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;f=poll.sh;h=8e55600ed85ecabf7b766e88f6e930cbd415c64a;hb=HEAD;hp=d7c0defa4b0cc896a24965327d2e2a6e7b8081e6;hpb=5238c404a50861cf1dbbe610d2c4977c048d3b12;p=webpoll
diff --git a/poll.sh b/poll.sh
index d7c0def..8e55600 100644
--- a/poll.sh
+++ b/poll.sh
@@ -1,10 +1,25 @@
#!/bin/sh
+. "${_EXEC}/comments.sh"
+. "${_EXEC}/languages.sh"
+
id="$(checkid "${PATH_INFO#/}")"
file="${_DATA}/${id}"
#cancel if poll is invalid
-[ "$id" -a -f "$file" ] || REDIRECT "$_BASE/"
+if [ ! "$id" -o ! -f "$file" ]; then
+ page_home;
+ return 0
+fi
+
+if expr match "$bookmarks" ".*${id}.*" >/dev/null; then
+ :
+elif [ "$bookmarks" ]; then
+ SET_COOKIE +$((182 * 86400)) bookmarks="${bookmarks} ${id}" Path="${_BASE}/"
+fi
+
+admin="$(expr match "$bookmarks" ".*$id/\([a-zA-Z0-9:=]\{16\}\).*")"
+admin="$(DBM "$file" get adminkey |grep -xF "$admin")"
tkey() {
# convert time stamps for use in POST keys
@@ -60,6 +75,8 @@ table_poll() {
local edit="$(GET edit)"
local time date span name yes no maybe yc nc mc
+ table_date="${table_date:-"%A
%B %_d, %Y"}"
+
[ "$timelist" ] || return 1
printf '[table .poll [thead\n'
@@ -70,7 +87,7 @@ table_poll() {
span=0; for time in $timelist; do case $time in
${date}*) span=$((span + 1));;
esac; done
- date -d "$date" +"[th colspan=\"${span}\" . %A
%B %_d, %Y]";
+ date -d "$date" +"[th colspan=\"${span}\" . ${table_date}]";
done
printf '[th]]\n'
fi
@@ -79,8 +96,12 @@ table_poll() {
if [ "$splittimes" = yes -o "$todall" ]; then
printf '[tr .tod [th]'
for time in $timelist; do
- [ "${time#*_}" = "${time}" ] && time="${time}_"
- printf '[th . %s]' "${time#*_}"
+ case $time in
+ *-*-*_*:*) time="${time#*_}";;
+ *-*-*) time="";;
+ *:*);; # time="${time}"
+ esac
+ printf '[th . %s]' "${time}"
done
printf '[th]]\n'
fi
@@ -196,6 +217,10 @@ if [ "$REQUEST_METHOD" = POST ]; then
DBM "$file" delete "reply_yes_${delete}"
DBM "$file" delete "reply_no_${delete}"
DBM "$file" delete "reply_maybe_${delete}"
+
+ elif [ "$(POST bookmark)" -a ! "$bookmarks" ]; then
+ SET_COOKIE +$((182 * 86400)) bookmarks="${id}" Path="${_BASE}/"
+
fi
REDIRECT "${_BASE}${PATH_INFO}"
@@ -203,12 +228,24 @@ else
pagename="$(pagename "$id")"
yield_page "$pagename" poll <<-EOF
- [form method=POST
+ [main
[section .description
[h1 .title $(HTML "$pagename")]
$(DBM "$file" get description |markdown)
]
- $(table_poll || printf '[p Poll parameters are invalid]')
+ [form method=POST
+ $(table_poll || printf '[p Poll parameters are invalid]')
+
+ $(if [ "$admin" ]; then
+ printf '[section .bookmark You have bookmarked the admin page of this poll: [a href="./%s" modify poll]]' "$(URL ${id}/${admin})"
+ elif [ "$bookmarks" ]; then
+ printf '[section .bookmark This poll has been bookmarked and is accessible via a link on the front page.]'
+ else
+ printf '[section .bookmark Polls are accessible only via their URL. You can set a Cookie to bookmark all polls you visit. Bookmarked polls will be listed on the frontpage.
[submit "bookmark" "add" Set Cookie]]'
+ fi)
+ ]
+
+ $(w_comments)
]
EOF
fi