From 27559cd5080d304385662d469866bdf69c42a89c Mon Sep 17 00:00:00 2001
From: =?utf8?q?Paul=20H=C3=A4nsch?= <paul@plutz.net>
Date: Mon, 18 Jan 2021 18:03:42 +0100
Subject: [PATCH] enable set up of new course

---
 courses/index.cgi     |  2 +-
 courses/new_course.sh | 51 ++++++++++++++++++++++++-------------------
 2 files changed, 29 insertions(+), 24 deletions(-)

diff --git a/courses/index.cgi b/courses/index.cgi
index 446cc9f..56db2fa 100755
--- a/courses/index.cgi
+++ b/courses/index.cgi
@@ -22,7 +22,7 @@ edit="${edit##*/}"
 
 { w_sort_courses
   printf '
-  [form .newcourses action="/cards/new_course.sh" method="POST"
+  [form .newcourses action="/courses/new_course.sh" method="POST"
     [button type="submit" %s]
   ]' "$(l10n newcourse)"
 
diff --git a/courses/new_course.sh b/courses/new_course.sh
index 4f97d4a..c262b79 100755
--- a/courses/new_course.sh
+++ b/courses/new_course.sh
@@ -1,6 +1,6 @@
 #!/bin/zsh
 
-# Copyright 2014 Paul Hänsch
+# Copyright 2014, 2021 Paul Hänsch
 #
 # This file is part of Confetti.
 # 
@@ -17,30 +17,35 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with Confetti.  If not, see <http://www.gnu.org/licenses/>. 
 
-cgi_post
+locktimeout=900
+. "$_EXEC"/session_lock.sh
 
-uid=$(uuidgenerator)
+uid="$(timeid)$(randomid)"  # 32 Octets UID, starting with timestamp
 course="${uid}.ics"
 
-tzid=$(cat /etc/timezone)
-tstamp=$(TZ="$tzid" date +%Y%m%dT%H%M%S)
+tzid="$(cat /etc/timezone)"
+tstamp="$(TZ="$tzid" date +%Y%m%dT%H%M%S)"
 
-tempfile="$_DATA/temp/$course"
+coursefile="$_DATA/ical/$course"
 
-cat >"$tempfile" <<EOF
-BEGIN:VCALENDAR
-VERSION:2.0
-PRODID:Berlin RAW Confetti
-BEGIN:VEVENT
-UID:$uid
-DTSTAMP:TZID=${tzid}:${tstamp}
-DTSTART:
-DURATION:
-RRULE:
-SUMMARY:
-COMMENT:
-END:VEVENT
-END:VCARD
-EOF
-
-echo -n "Location: ?p=courses&edit=$course\n\n"
+if tempfile="$(SLOCK "$coursefile")"; then
+  cat >"$tempfile" <<-EOF
+	BEGIN:VCALENDAR
+	VERSION:2.0
+	PRODID:Berlin RAW Confetti
+	BEGIN:VEVENT
+	UID:$uid
+	DTSTAMP:TZID=${tzid}:${tstamp}
+	DTSTART:
+	DURATION:
+	RRULE:
+	SUMMARY:
+	COMMENT:
+	END:VEVENT
+	END:VCARD
+	EOF
+  REDIRECT "/courses/?e=${course}"
+else
+  SET_COOKIE session message="EDITLOCK"
+  REDIRECT "/courses/"
+fi
-- 
2.39.5