diff options
Diffstat (limited to 'users/grfn/bbbg/src/bbbg/handlers/events.clj')
-rw-r--r-- | users/grfn/bbbg/src/bbbg/handlers/events.clj | 121 |
1 files changed, 82 insertions, 39 deletions
diff --git a/users/grfn/bbbg/src/bbbg/handlers/events.clj b/users/grfn/bbbg/src/bbbg/handlers/events.clj index 6fe5b8727b..ff34d7f9e6 100644 --- a/users/grfn/bbbg/src/bbbg/handlers/events.clj +++ b/users/grfn/bbbg/src/bbbg/handlers/events.clj @@ -3,26 +3,64 @@ [bbbg.db :as db] [bbbg.db.event :as db.event] [bbbg.event :as event] - [bbbg.handlers.core :refer [authenticated? page-response]] + [bbbg.handlers.core :refer [*authenticated?* page-response]] [bbbg.meetup.import :refer [import-attendees!]] - [bbbg.util.display :refer [format-date]] + [bbbg.util.display :refer [format-date pluralize]] [bbbg.util.time :as t] [bbbg.views.flash :as flash] [compojure.coercions :refer [as-uuid]] [compojure.core :refer [context GET POST]] [java-time :refer [local-date]] - [ring.util.response :refer [not-found redirect]])) + [ring.util.response :refer [not-found redirect]]) + (:import + java.time.format.FormatStyle)) -(defn events-index [{:keys [events authenticated?]}] - [:div - (when authenticated? - [:a {:href "/events/new"} +(defn- num-attendees [event] + (str + (:num-attendees event) + (if (= (t/->LocalDate (::event/date event)) + (local-date)) + " Signed In" + (str " Attendee" (when-not (= 1 (:num-attendees event)) "s"))))) + +(def index-type->label + {:upcoming "Upcoming" + :past "Past"}) +(def other-index-type + {:upcoming :past + :past :upcoming}) + +(defn events-index + [{:keys [events num-events type]}] + [:div.page + [:div.page-header + [:h1 + (pluralize + num-events + (str (index-type->label type) " Event"))] + [:a {:href (str "/events" + (when (= :upcoming type) + "/past"))} + "View " + (index-type->label (other-index-type type)) + " Events"]] + (when *authenticated?* + [:a.button {:href "/events/new"} "Create New Event"]) [:ul.events-list - (for [event events] + (for [event (sort-by + ::event/date + (comp - compare) + events)] [:li - [:a {:href (str "/events/" (::event/id event))} - (format-date (::event/date event))]])]]) + [:p + [:a {:href (str "/events/" (::event/id event))} + (format-date (::event/date event) + FormatStyle/FULL)]] + [:p + (pluralize (:num-rsvps event) "RSVP") + ", " + (num-attendees event)]])]]) (defn- import-attendee-list-form-group [] [:div.form-group @@ -41,19 +79,15 @@ :value "Import"}]]]) (defn event-page [{:keys [event]}] - [:div.event-page - [:h1 (format-date (::event/date event))] - [:div.stats - [:p (:num-rsvps event) " RSVP" - (when-not (= 1 (:num-rsvps event)) "s")] - [:p (:num-attendees event) - (if (= (t/->LocalDate (::event/date event)) - (local-date)) - " Signed In" - (str " Attendee" (when-not (= 1 (:num-attendees event)) "s")))]] - [:div + [:div.page + [:div.page-header + [:h1 (format-date (::event/date event) + FormatStyle/FULL)] [:a {:href (str "/signup-forms/" (::event/id event) )} "Go to Signup Form"]] + [:div.stats + [:p (pluralize (:num-rsvps event) "RSVP")] + [:p (num-attendees event)]] [:div (import-attendees-form event)]]) @@ -65,27 +99,36 @@ (defn event-form ([] (event-form {})) ([event] - [:form {:method "POST" - :action "/events" - :enctype "multipart/form-data"} - [:div.form-group - [:label "Date" - [:input {:type "date" - :id "date" - :name "date" - :value (str (::event/date event))}]]] - (import-attendee-list-form-group) - [:div.form-group - [:input {:type "submit" - :value "Create Event"}]]])) + [:div.page + [:form {:method "POST" + :action "/events" + :enctype "multipart/form-data"} + [:div.form-group + [:label "Date" + [:input {:type "date" + :id "date" + :name "date" + :value (str (::event/date event))}]]] + (import-attendee-list-form-group) + [:div.form-group + [:input {:type "submit" + :value "Create Event"}]]]])) + +(defn- events-list-handler [db query type] + (let [events (db/list db (db.event/with-stats query)) + num-events (db/count db query)] + (page-response + (events-index {:events events + :num-events num-events + :type type})))) (defn events-routes [{:keys [db]}] (context "/events" [] - (GET "/" request - (let [events (db/list db :event)] - (page-response - (events-index {:events events - :authenticated? (authenticated? request)})))) + (GET "/" [] + (events-list-handler db (db.event/upcoming) :upcoming)) + + (GET "/past" [] + (events-list-handler db (db.event/past) :past)) (GET "/new" [date] (page-response |