From: Paul Hänsch Date: Sun, 25 Jul 2021 13:25:44 +0000 (+0200) Subject: split newdate page into separate file X-Git-Url: https://git.plutz.net/?p=webpoll;a=commitdiff_plain;h=3fdd2a599459588ed9054c16ce20b79d27faa353 split newdate page into separate file --- diff --git a/index.cgi b/index.cgi index 37fb901..efae974 100755 --- a/index.cgi +++ b/index.cgi @@ -44,8 +44,8 @@ pagename() { fi } -[ "$REQUEST_METHOD" = POST ] && case ${PATH_INFO} in - /) +page_home() { + if [ "$REQUEST_METHOD" = POST ]; then case $(POST start) in date) id="$(randomid)" @@ -58,55 +58,10 @@ pagename() { REDIRECT "$_BASE/$id/newoptions" ;; *) REDIRECT "$_BASE/";; - esac - ;; - /*/newdate) - id="${PATH_INFO%/newdate}"; id="${id#/}" - file="$_DATA/$id" - month="$(POST month |grep -m 1 -xE '[0-9]{4}-(0[1-9]|1[012])')" - todremove="$(POST todremove |grep -m 1 -xE '[0-9]+')" - DBM "$file" set title "$(POST title)" - DBM "$file" set description "$(POST description)" - DBM "$file" set dates "$( - for date in $(seq 1 $(POST_COUNT date)); do - POST date "$date" - printf \\n - done \ - | grep -xE '^[0-9]{4}-((01|03|05|07|08|10|12)-([012][0-9]|3[01])|(04|06|09|11)-([012][0-9]|30)|02-[012][0-9])$' \ - | sort -u - )" - DBM "$file" set todall "$( - for todcount in $(seq 1 $(POST_COUNT todstart)); do - [ "$todremove" -eq "$todcount" ] 2>&- && continue; - todstart="$(POST todstart "$todcount")" - todend="$(POST todend "$todcount")" - [ "${todstart%:??}" -lt "${todend%:??}" -o "${todstart%:??}" -eq "${todend%:??}" -a "${todstart#*:}" -lt "${todend#*:}" ] \ - 2>&- \ - && { printf '%02i:%02i-%02i:%02i\n' "${todstart%:??}" "${todstart#*:}" "${todend%:??}" "${todend#*:}"; }\ - || { [ "${todstart%:??}" -ge 0 -a "${todstart#*:}" -ge 0 ] 2>&- && printf '%02i:%02i-\n' "${todstart%:??}" "${todstart#*:}"; } - done |grep -xE '^([01][0-9]|2[0-3]):([0-5][0-9])-(([01][0-9]|2[0-3]):([0-5][0-9]))?$' |sort -u - )" - if [ "$(POST cancel)" = cancel ]; then - rm -- "$file" - REDIRECT "$_BASE/" - elif [ "$(POST addtime)" = global ]; then - DBM "$file" append todall "${BR}-" - REDIRECT "$_BASE$PATH_INFO${month:+?month=}${month}" - elif [ "$month" ]; then - REDIRECT "$_BASE$PATH_INFO?month=$month" - else - REDIRECT "$_BASE$PATH_INFO" - fi - ;; -esac - - -case ${PATH_INFO} in - /favicon.ico) printf '%s\r\n' 'Content-Length: 0' '';; - /common.css) FILE "$_EXEC/cgilite/common.css";; - /widgets.css|/webpoll.css) FILE "${_EXEC}/${PATH_INFO}";; - /) recent="$(COOKIE pages)" - yield_page "Start a Poll" "home" <<-EOF + esac + else + recent="$(COOKIE pages)" + yield_page "Start a Poll" "home" <<-EOF [form method=post [submit "start" "date" Start a new poll] $(if [ "$recent" ]; then @@ -119,53 +74,16 @@ case ${PATH_INFO} in fi) ] EOF - ;; - /*/newdate) - id="${PATH_INFO%/newdate}"; id="${id#/}" - file="$_DATA/$id" - month="$(GET month |grep -m1 -xE '[0-9]{4}-(0[1-9]|1[012])' || date +%Y-%m)" - Y="${month%-*}"; m="${month#*-}"; Y=${Y#0}; m=${m#0}; - [ "$m" = 1 ] && prev=$(printf '%04i-%02i' $((Y - 1)) 12) || prev=$(printf '%04i-%02i' $Y $((m - 1))) - [ "$m" = 12 ] && next=$(printf '%04i-%02i' $((Y + 1)) 01) || next=$(printf '%04i-%02i' $Y $((m + 1))) - dates="$(DBM "$file" get dates)" - days="$(printf %s "$dates" |sed -E "/^${month}-/!d; s;^.*-([0-9]{2})$;\1;g")" - additional="$(printf %s "$dates" |sed -E "/^${month}-/d;")" - todall="$(DBM "$file" get todall)" + fi +} +page_newdate() { . $_EXEC/newdate.sh; } - yield_page "$(pagename "$id")" "newdate" <<-EOF - $(dlist_timeofday) - [form method=post - [input name=title value="$(DBM "$file" get title |HTML)" placeholder="Title"] - [textarea name=description placeholder="Description" . $(DBM "$file" get description |HTML)] - [fieldset .date - $(printf '[hidden "date" "%s"]' $additional) - [submit "month" "$prev" Previous Month] - $(w_month multiple date "$month" $days) - [submit "month" "$next" Next Month] - [hidden "month" "$month"] - ] - [fieldset .timeofday - [label .todstart Start Time (optional): - ] - [label .todend End Time (optional): - ] - $(c=0; for time in ${todall:--}; do - c=$((c + 1)) - printf ' - - - [submit "todremove" "%i" -] - ' "${time%-*}" "${time#*-}" "${c}" - done) - [submit "addtime" "global" + Add time option] - ] - [submit "cancel" "cancel" Cancel] - [submit "post" "post" Post Event] - ] - EOF - ;; +case ${PATH_INFO} in + /favicon.ico) printf '%s\r\n' 'Content-Length: 0' '';; + /common.css) FILE "$_EXEC/cgilite/common.css";; + /widgets.css|/webpoll.css) FILE "${_EXEC}/${PATH_INFO}";; + /) page_home;; + /*/newdate) page_newdate;; /*/newoptions);; *);; esac diff --git a/newdate.sh b/newdate.sh new file mode 100755 index 0000000..f486ebb --- /dev/null +++ b/newdate.sh @@ -0,0 +1,85 @@ +#!/bin/sh + +if [ "$REQUEST_METHOD" = POST ]; then + id="${PATH_INFO%/newdate}"; id="${id#/}" + file="$_DATA/$id" + month="$(POST month |grep -m 1 -xE '[0-9]{4}-(0[1-9]|1[012])')" + todremove="$(POST todremove |grep -m 1 -xE '[0-9]+')" + DBM "$file" set title "$(POST title)" + DBM "$file" set description "$(POST description)" + DBM "$file" set dates "$( + for date in $(seq 1 $(POST_COUNT date)); do + POST date "$date" + printf \\n + done \ + | grep -xE '^[0-9]{4}-((01|03|05|07|08|10|12)-([012][0-9]|3[01])|(04|06|09|11)-([012][0-9]|30)|02-[012][0-9])$' \ + | sort -u + )" + DBM "$file" set todall "$( + for todcount in $(seq 1 $(POST_COUNT todstart)); do + [ "$todremove" -eq "$todcount" ] 2>&- && continue; + todstart="$(POST todstart "$todcount")" + todend="$(POST todend "$todcount")" + [ "${todstart%:??}" -lt "${todend%:??}" -o "${todstart%:??}" -eq "${todend%:??}" -a "${todstart#*:}" -lt "${todend#*:}" ] \ + 2>&- \ + && { printf '%02i:%02i-%02i:%02i\n' "${todstart%:??}" "${todstart#*:}" "${todend%:??}" "${todend#*:}"; }\ + || { [ "${todstart%:??}" -ge 0 -a "${todstart#*:}" -ge 0 ] 2>&- && printf '%02i:%02i-\n' "${todstart%:??}" "${todstart#*:}"; } + done |grep -xE '^([01][0-9]|2[0-3]):([0-5][0-9])-(([01][0-9]|2[0-3]):([0-5][0-9]))?$' |sort -u + )" + if [ "$(POST cancel)" = cancel ]; then + rm -- "$file" + REDIRECT "$_BASE/" + elif [ "$(POST addtime)" = global ]; then + DBM "$file" append todall "${BR}-" + REDIRECT "$_BASE$PATH_INFO${month:+?month=}${month}" + elif [ "$month" ]; then + REDIRECT "$_BASE$PATH_INFO?month=$month" + else + REDIRECT "$_BASE$PATH_INFO" + fi +else + id="${PATH_INFO%/newdate}"; id="${id#/}" + file="$_DATA/$id" + month="$(GET month |grep -m1 -xE '[0-9]{4}-(0[1-9]|1[012])' || date +%Y-%m)" + Y="${month%-*}"; m="${month#*-}"; Y=${Y#0}; m=${m#0}; + [ "$m" = 1 ] && prev=$(printf '%04i-%02i' $((Y - 1)) 12) || prev=$(printf '%04i-%02i' $Y $((m - 1))) + [ "$m" = 12 ] && next=$(printf '%04i-%02i' $((Y + 1)) 01) || next=$(printf '%04i-%02i' $Y $((m + 1))) + dates="$(DBM "$file" get dates)" + days="$(printf %s "$dates" |sed -E "/^${month}-/!d; s;^.*-([0-9]{2})$;\1;g")" + additional="$(printf %s "$dates" |sed -E "/^${month}-/d;")" + todall="$(DBM "$file" get todall)" + + yield_page "$(pagename "$id")" "newdate" <<-EOF + $(dlist_timeofday) + [form method=post + [input name=title value="$(DBM "$file" get title |HTML)" placeholder="Title"] + [textarea name=description placeholder="Description" . $(DBM "$file" get description |HTML)] + [fieldset .date + $(printf '[hidden "date" "%s"]' $additional) + [submit "month" "$prev" Previous Month] + $(w_month multiple date "$month" $days) + [submit "month" "$next" Next Month] + [hidden "month" "$month"] + ] + [fieldset .timeofday + [label .todstart Start Time (optional): + ] + [label .todend End Time (optional): + ] + $(c=0; for time in ${todall:--}; do + c=$((c + 1)) + printf ' + + + [submit "todremove" "%i" -] + ' "${time%-*}" "${time#*-}" "${c}" + done) + [submit "addtime" "global" + Add time option] + ] + [submit "cancel" "cancel" Cancel] + [submit "post" "post" Post Event] + ] + EOF +fi