blob: fdc6243804f109a4cdaa5c36c8b71383bb4488f9 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
(ns bbbg.handlers.signup-form
(:require
[bbbg.attendee :as attendee]
[bbbg.db :as db]
[bbbg.db.attendee :as db.attendee]
[bbbg.db.event :as db.event]
[bbbg.event :as event]
[bbbg.handlers.core
:refer [*authenticated?* authenticated? page-response]]
[cheshire.core :as json]
[compojure.core :refer [context GET]]
[honeysql.helpers :refer [merge-where]]
[java-time :refer [local-date]]
[ring.util.response :refer [redirect]]))
(defn no-events-page [{:keys [authenticated?]}]
[:div.no-events
[:p
"There are no events for today"]
(when authenticated?
[:p
[:a {:href (str "/events/new?date=" (str (local-date)))} "Create Event"]
[:a {:href "/events"} "All Events"]])])
(defn signup-page [{:keys [event attendees]}]
[:div.signup-page
[:form#signup-form
{:method "POST"
:action "/event_attendees"
:disabled "disabled"}
[:input#name-autocomplete
{:type "search"
:title "Name"
:name "name"
:spellcheck "false"
:autocorrect "off"
:autocomplete "off"
:autocapitalize "off"
:maxlength "2048"}]
[:input#attendee-id {:type "hidden" :name "attendee_id"}]
[:input#event-id {:type "hidden" :name "event_id" :value (::event/id event)}]
[:input#submit-button.hidden
{:type "submit"
:value "Sign In"
:disabled "disabled"}]]
[:ul#attendees-list
(if (seq attendees)
(for [attendee attendees]
[:li {:data-attendee (json/generate-string attendee)
:role "button"}
(::attendee/meetup-name attendee)])
[:li.no-attendees
[:p
"Nobody has RSVPed to this event yet, or no attendee list has been
imported"]
(when *authenticated?*
[:p
[:a.button
{:href (str "/events/"
(::event/id event)
"/attendees/import")}
"Import Attendee List"]])])]])
(defn event-not-found []
[:div.event-not-found
[:p "Event not found"]
[:p [:a {:href (str "/events/new")} "Create a new event"]]])
;;;
(defn signup-form-routes [{:keys [db]}]
(context "/signup-forms" []
(GET "/" request
(if-let [event (db/fetch db (db.event/today))]
(redirect (str "/signup-forms/" (::event/id event)))
(page-response (no-events-page
{:authenticated? (authenticated? request)}))))
(GET "/:event-id" [event-id]
(if-let [event (db/get db :event event-id)]
(let [attendees (db/list db
(->
(db.attendee/for-event event-id)
(merge-where [:or
[:= :attended nil]
[:not :attended]])))]
(page-response
(signup-page {:event event
:attendees attendees})))
(event-not-found)))))
|