]> git.plutz.net Git - rawnet/blob - page_channel.sh
159c865e66ad1705128b1b3099bc01418024956b
[rawnet] / page_channel.sh
1 #!/bin/sh
2
3 chan_db="$_DATA/channels.db"
4
5 channel='' video='' action=''
6 path_info="$PATH_INFO"
7 path_info="${path_info#/channel/}"
8 if [ "$(checkid "${path_info%%/*}")" ]; then
9   channel="${path_info%%/*}"
10   path_info="${path_info#*/}"
11 fi
12 if [ "$(checkid "${path_info%%/*}")" ]; then
13   video="${path_info%%/*}"
14   path_info="${path_info#*/}"
15 fi
16 action="${path_info}"
17 unset path_info
18
19 # Channel
20 # ID    NAME    DESCRIPTION     LOGO    THEME   AUTHORS DESCR_CACHE FUTUREUSE
21
22 if [ "$channel" -a -f "$chan_db" -a -r "$chan_db" ]; then
23   read -r CHANNEL_ID CHANNEL_NAME CHANNEL_DESCRIPTION CHANNEL_LOGO \
24           CHANNEL_THEME CHANNEL_AUTHORS CHANNEL_DESCR_CACHE \
25           CHANNEL_FUTUREUSE <<-EOF
26         $(grep "^${channel}     " "${chan_db}")
27         EOF
28   if [ "$CHANNEL_ID" ]; then
29            CHANNEL_NAME="$(UNSTRING "${CHANNEL_NAME}")"
30     CHANNEL_DESCRIPTION="$(UNSTRING "$CHANNEL_DESCRIPTION")"
31         CHANNEL_AUTHORS="$(UNSTRING "$CHANNEL_AUTHORS")"
32     CHANNEL_DESCR_CACHE="$(UNSTRING "$CHANNEL_DESCR_CACHE")"
33     vid_db="${_DATA}/${CHANNEL_ID}/videos.db"
34   else
35     channel=''
36   fi
37 fi
38
39 update_channel(){
40   local id="${1}" name="${2}" description="${3}" logo="${4}" theme="${5}" \
41         authors="${6}" descr_cache="${7}" futureuse="${8}"
42   local ID INFO
43   if LOCK "$chan_db"; then
44     while read -r ID INFO; do
45       if [ "$id" = "$ID" ]; then
46         printf '%s      %s      %s      %s      %s      %s      %s      %s\n' \
47                "$id" "$(STRING "$name")" "$(STRING "$description")" \
48                "${logo:-\\}" "${theme:-\\}" "$(STRING "$authors")" \
49                "$(printf %s "$description" |markdown |STRING)" \
50                "${futureuse:-\\}"
51       else
52         printf '%s      %s\n' "$ID" "$INFO"
53       fi
54     done <"$chan_db" >"${chan_db}.$$"
55     mv -- "${chan_db}.$$" "${chan_db}"
56     RELEASE "$chan_db"
57   else
58     return 1
59   fi
60 }
61
62 # Video
63 # ID    NAME    DESCRIPTION     RESX    RESY    LENGTH  COVER   STATUS  UPLOADER        HITS
64
65 [ "$REQUEST_METHOD" = POST ] && case "$(POST action)" in
66   newchannel)
67     channel="$(POST channel |checkid)"
68     if [ ! "$USER_ID" ]; then
69       REDIRECT "${_BASE}/channel/#ERROR_NEWCHANNEL_NOTALLOWED"
70     elif LOCK "$chan_db"; then
71       if grep -q '^${channel}   ' "$chan_db"; then
72         RELEASE "$chan_db"
73         REDIRECT "${_BASE}/channel/#ERROR_NEWCHANNEL_EXISTS"
74       else
75         printf '%s      \\      \\      \\      \\      %s      \\      \\\n' \
76                "$channel" "$(STRING "$USER_ID")" \
77                >>"$chan_db"
78         RELEASE "$chan_db"
79         REDIRECT "${_BASE}/channel/${channel}/edit"
80       fi
81     else
82       REDIRECT "${_BASE}/channel/#ERROR_NEWCHANNEL_NOLOCK"
83     fi
84     ;;
85   update_channel)
86     if [ ! "$channel" ]; then
87       REDIRECT "${_BASE}/channel/#ERROR_NOCHANNEL"
88     elif [ ! "$USER_ID" ]; then
89       REDIRECT "${_BASE}/channel/${channel}/#ERROR_NOTLOGGEDIN"
90     elif [ "${CHANNEL_AUTHORS##*${USER_ID}*}" ]; then
91       REDIRECT "${_BASE}/channel/${channel}/#ERROR_UPDATE_NOTALLOWED"
92     elif update_channel "$channel" "$(POST name)" "$(POST description)" \
93                         "" "" "$USER_ID" "" ""; then
94       REDIRECT "${_BASE}/channel/${channel}/"
95     else
96       REDIRECT "${_BASE}/channel/${channel}/#ERROR_UPDATE_NOLOCK"
97     fi
98     ;;
99   update_channel_cancel)
100     REDIRECT "${_BASE}/channel/${channel}/"
101     ;;
102   newvideo)
103     video="$(POST video |checkid)"
104     # database video create
105     REDIRECT "${_BASE}/channel/${channel}/${video}/"
106     ;;
107 esac
108
109 w_video(){
110   local CID="$1" thumb
111   local ID NAME DESCRIPTION RESX RESY LENGTH COVER STATUS UPLOADER HITS FUTUREUSE
112   if read -r ID NAME DESCRIPTION RESX RESY LENGTH COVER STATUS UPLOADER HITS FUTUREUSE; then
113     thumb="${_BASE}/${CID}/thumb_${ID}.jpg"
114     cat <<-EOF
115         [div .video
116           [h3 . $(UNSTRING "$NAME" |HTML)]
117           [img href="${thumb}" alt="$(UNSTRING "$DESCRIPTION" |HTML)"]
118         ]
119         EOF
120   else
121     return 1
122   fi
123 }
124
125 w_channel(){
126   local vid_db
127   local ID NAME DESCRIPTION LOGO THEME AUTHORS DESCR_CACHE FUTUREUSE
128   if read -r ID NAME DESCRIPTION LOGO THEME AUTHORS DESCR_CACHE FUTUREUSE; then
129     vid_db="${_DATA}/${ID}/videos.db"
130     [ "$NAME" = \\ ] && NAME="(UNNAMED CHANNEL)"
131     cat <<-EOF
132         [div .channel
133           [h2 [a href="${_BASE}/channel/${ID}/" $(UNSTRING "${NAME}" |HTML)]]
134           [div .description . $(UNSTRING "$DESCR_CACHE")]
135           $( [ -f "$vid_db" -a -r "$vid_db" ] \
136              && while w_video "$ID"; do :; done <"$vid_db"
137           )
138         ]
139         EOF
140   else
141     return 1
142   fi
143 }
144
145 w_channel_list(){
146   if [ $USER_ID ]; then
147     printf '
148     [form .channel .newchannel method=POST
149       [hidden "channel" "%s"]
150       [submit "action" "newchannel" New Channel]
151     ]' "$(timeid)"
152   fi
153   [ -f "$chan_db" -a -r "$chan_db" ] \
154   && while w_channel; do :; done <"$chan_db"
155 }
156
157 if [ "$channel" -a "$video" ]; then
158   . ${_EXEC}/page_video.sh
159 elif [ "$channel" -a "$action" = edit ]; then
160   [ "$USER_ID" -a ! "${CHANNEL_AUTHORS##*${USER_ID}*}" ] \
161   || REDIRECT "${_BASE}/${channel}/#ERROR_EDIT_NOTALLOWED"
162   yield_page "$CHANNEL_NAME - Edit" "channel edit" <<-EOF
163         [form .channel .edit method=POST
164           [input name="name" value="$(HTML "$CHANNEL_NAME")" placeholder="Channel Name"]
165           [textarea name="description" placeholder="Description" . $(HTML "$CHANNEL_DESCRIPTION")]
166           [submit "action" "update_channel" . Update]
167           [submit "action" "update_channel_cancel" . Cancel]
168         ]
169         EOF
170 elif [ "$channel" ]; then
171   yield_page "$CHANNEL_NAME" "channel" <<-EOF
172         [nav [a href="../" Channels] - [span $(HTML "${CHANNEL_NAME:-(Unnamed Channel)}")]
173           $( [ "$USER_ID" -a ! "${CHANNEL_AUTHORS##*${USER_ID}*}" ] \
174              && printf ' - [a href="edit" edit]'
175           )
176         ]
177         [h1 .name $(HTML "$CHANNEL_NAME")]
178         [div .description . ${CHANNEL_DESCR_CACHE}]
179         [div .videos
180           $( [ -f "$vid_db" -a -r "$vid_db" ] \
181              && while w_video "$ID"; do :; done <"$vid_db"
182           )
183         ]
184         EOF
185 else
186   yield_page "Channels" "channels" <<-EOF
187         $(w_channel_list)
188         EOF
189 fi