More detail work. An awful lot is working now.

This commit is contained in:
Simon Brooke 2018-06-29 23:33:23 +01:00
parent 635d1830d3
commit 78365f8c8b
12 changed files with 178 additions and 144 deletions

View file

@ -43,8 +43,6 @@
:start ((or (:init defaults) identity))
:stop ((or (:stop defaults) identity)))
;;(mount/start db/*db*)
(defn init
"init will be called once when
app is deployed as a servlet on

View file

@ -2,13 +2,15 @@
:author "Simon Brooke"}
youyesyet.layout
(:require [adl-support.tags :as tags]
[clojure.string :refer [lower-case]]
[clojure.tools.logging :as log]
[markdown.core :refer [md-to-html-string]]
[noir.session :as session]
[ring.util.http-response :refer [content-type ok]]
[ring.util.anti-forgery :refer [anti-forgery-field]]
[ring.middleware.anti-forgery :refer [*anti-forgery-token*]]
[selmer.parser :as parser]
[selmer.filters :as filters]
[youyesyet.db.core :as db]
))
@ -17,18 +19,25 @@
(parser/set-resource-path! (clojure.java.io/resource "templates"))
(parser/add-tag! :csrf-field (fn [_ _] (anti-forgery-field)))
(filters/add-filter! :markdown (fn [content] [:safe (md-to-html-string content)]))
(tags/add-tags)
(defn raw-get-user-roles [user]
"Return, as a set, the names of the roles of which this user is a member."
(if
user
(do
(log/debug (str "seeking roles for user " user))
(set (map #(lower-case (:name %)) (db/list-roles-by-canvasser db/*db* user))))))
(defn raw-get-user-roles [_]
#{"admin" "canvassers"})
;; role assignments change only rarely.
(def get-user-roles (memoize raw-get-user-roles))
(defn render
"renders the HTML template located relative to resources/templates"
[template & [params]]
(let [user (try session/get :user)]
[template session & [params]]
(let [user (:user session)]
(content-type
(ok
(parser/render-file

View file

@ -1,5 +1,4 @@
(ns ^{:doc "Plumbing, mainly boilerplate from Luminus."
:author "Simon Brooke"}
(ns ^{:doc "Plumbing, mainly boilerplate from Luminus."}
youyesyet.middleware
(:require [youyesyet.env :refer [defaults]]
[clojure.tools.logging :as log]

View file

@ -1,11 +0,0 @@
(ns ^{:doc "Routes/pages available to administrators, only."
:author "Simon Brooke"}
youyesyet.routes.administrator
(:require [clojure.java.io :as io]
[clojure.walk :refer [keywordize-keys]]
[compojure.core :refer [defroutes GET POST]]
[noir.response :as nresponse]
[noir.util.route :as route]
[ring.util.http-response :as response]
[youyesyet.layout :as layout]
[youyesyet.db.core :as db]))

View file

@ -54,6 +54,7 @@
))]
(layout/render
"canvasser.html"
(:session request)
{:title (if canvasser
(str
"Edit canvasser "
@ -66,10 +67,10 @@
(defn routing-page
"Render the routing page, which offers routes according to the user's roles"
[]
(layout/render "routing.html"))
[request]
(layout/render "routing.html" (:session request)))
(defroutes authenticated-routes
(GET "/edit-canvasser" request (canvasser-page request))
(POST "/edit-canvasser" request (canvasser-page request))
(GET "/routing" [] (routing-page)))
(GET "/routing" [request] (routing-page request)))

View file

@ -1,6 +1,6 @@
(ns
youyesyet.routes.auto
"User interface routes for Youyesyet auto-generated by [Application Description Language framework](https://github.com/simon-brooke/adl) at 20180629T141538.443Z"
"User interface routes for Youyesyet auto-generated by [Application Description Language framework](https://github.com/simon-brooke/adl) at 20180629T222155.170Z"
(:require
[adl-support.core :as support]
[clojure.java.io :as io]
@ -27,6 +27,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "list-addresses-Addresses.html")
(:session r)
{:title "Addresses",
:params p,
:records
@ -42,6 +43,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "form-addresses-Address.html")
(:session r)
{:title "Address",
:params p,
:record
@ -55,6 +57,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "list-authorities-Authorities.html")
(:session r)
{:title "Authorities",
:params p,
:records
@ -70,6 +73,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "form-authorities-Authority.html")
(:session r)
{:title "Authority",
:params p,
:record
@ -85,6 +89,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "list-canvassers-Canvassers.html")
(:session r)
{:title "Canvassers",
:params p,
:records
@ -100,6 +105,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "form-canvassers-Canvasser.html")
(:session r)
{:title "Canvasser",
:params p,
:record
@ -109,7 +115,8 @@
(db/get-canvasser db/*db* p)),
:electors (db/list-electors db/*db*),
:addresses (db/list-addresses db/*db*),
:authorities (db/list-authorities db/*db*)})))
:authorities (db/list-authorities db/*db*),
:roles (db/list-roles db/*db*)})))
(defn
list-districts-Districts
@ -118,6 +125,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "list-districts-Districts.html")
(:session r)
{:title "Districts",
:params p,
:records
@ -133,6 +141,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "form-districts-District.html")
(:session r)
{:title "District",
:params p,
:record
@ -148,6 +157,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "list-dwellings-Dwellings.html")
(:session r)
{:title "Dwellings",
:params p,
:records
@ -163,6 +173,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "form-dwellings-Dwelling.html")
(:session r)
{:title "Dwelling",
:params p,
:record
@ -179,6 +190,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "list-electors-Electors.html")
(:session r)
{:title "Electors",
:params p,
:records
@ -194,6 +206,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "form-electors-Elector.html")
(:session r)
{:title "Elector",
:params p,
:record
@ -209,6 +222,7 @@
(l/render
(support/resolve-template
"list-followupactions-Followupactions.html")
(:session r)
{:title "Followupactions",
:params p,
:records
@ -225,6 +239,7 @@
(l/render
(support/resolve-template
"form-followupactions-Followupaction.html")
(:session r)
{:title "Followupaction",
:params p,
:record
@ -243,6 +258,7 @@
(l/render
(support/resolve-template
"list-followupmethods-Followupmethods.html")
(:session r)
{:title "Followupmethods",
:params p,
:records
@ -259,6 +275,7 @@
(l/render
(support/resolve-template
"form-followupmethods-Followupmethod.html")
(:session r)
{:title "Followupmethod",
:params p,
:record
@ -275,6 +292,7 @@
(l/render
(support/resolve-template
"list-followuprequests-Followuprequests.html")
(:session r)
{:title "Followuprequests",
:params p,
:records
@ -291,6 +309,7 @@
(l/render
(support/resolve-template
"form-followuprequests-Followuprequest.html")
(:session r)
{:title "Followuprequest",
:params p,
:record
@ -310,6 +329,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "list-genders-Genders.html")
(:session r)
{:title "Genders",
:params p,
:records
@ -325,6 +345,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "form-genders-Gender.html")
(:session r)
{:title "Gender",
:params p,
:record
@ -340,6 +361,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "list-intentions-Intentions.html")
(:session r)
{:title "Intentions",
:params p,
:records
@ -355,6 +377,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "form-intentions-Intention.html")
(:session r)
{:title "Intention",
:params p,
:record
@ -373,6 +396,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "list-issues-Issues.html")
(:session r)
{:title "Issues",
:params p,
:records
@ -388,6 +412,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "form-issues-Issue.html")
(:session r)
{:title "Issue",
:params p,
:record
@ -400,6 +425,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "list-options-Options.html")
(:session r)
{:title "Options",
:params p,
:records
@ -415,6 +441,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "form-options-Option.html")
(:session r)
{:title "Option",
:params p,
:record
@ -430,6 +457,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "list-roles-Roles.html")
(:session r)
{:title "Roles",
:params p,
:records
@ -445,10 +473,12 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "form-roles-Role.html")
(:session r)
{:title "Role",
:params p,
:record
(if (empty? (remove nil? (vals p))) [] (db/get-role db/*db* p))})))
(if (empty? (remove nil? (vals p))) [] (db/get-role db/*db* p)),
:canvassers (db/list-canvassers db/*db*)})))
(defn
list-teams-Teams
@ -457,6 +487,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "list-teams-Teams.html")
(:session r)
{:title "Teams",
:params p,
:records
@ -472,11 +503,13 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "form-teams-Team.html")
(:session r)
{:title "Team",
:params p,
:record
(if (empty? (remove nil? (vals p))) [] (db/get-team db/*db* p)),
:districts (db/list-districts db/*db*)})))
:districts (db/list-districts db/*db*),
:canvassers (db/list-canvassers db/*db*)})))
(defn
list-visits-Visits
@ -485,6 +518,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "list-visits-Visits.html")
(:session r)
{:title "Visits",
:params p,
:records
@ -500,6 +534,7 @@
[p (support/massage-params (:params r))]
(l/render
(support/resolve-template "form-visits-Visit.html")
(:session r)
{:title "Visit",
:params p,
:record

View file

@ -37,11 +37,11 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn app-page []
(layout/render "app.html"))
(layout/render "app.html" {}))
(defn about-page []
(layout/render "about.html"))
(layout/render "about.html" {}))
(defn call-me-page [request]
@ -49,8 +49,8 @@
request
(do
;; do something to store it in the database
(layout/render "call-me-accepted.html" (:params request)))
(layout/render "call-me.html"
(layout/render "call-me-accepted.html" (:session request) (:params request)))
(layout/render "call-me.html" (:session request)
{:title "Please call me!"
;; TODO: Issues need to be fetched from the database
:concerns nil})))
@ -59,21 +59,20 @@
(defn roles-page [request]
(let
[session (:session request)
username (:user session)
user (if username (db-core/get-canvasser-by-username db-core/*db* {:username username}))
user (:user session)
roles (if user (db-core/list-roles-by-canvasser db-core/*db* {:id (:id user)}))]
(cond
roles (layout/render "roles.html"
(:session request)
{:title (str "Welcome " (:fullname user) ", what do you want to do?")
:user user
:roles roles})
(empty? roles)(response/found "/app")
true (assoc (response/found "/login") :session (dissoc session :user))
)))
true (assoc (response/found "/login") :session (dissoc session :user)))))
(defn home-page []
(layout/render "home.html" {:title "You Yes Yet?"}))
(layout/render "home.html" {} {:title "You Yes Yet?"}))
(defn login-page
@ -99,14 +98,18 @@
;; it-will-do-for-now security in place; instead, I want this to be test code only
;; until we have o-auth properly working.
(and user (= username password))
(assoc (response/found redirect-to) :session (assoc session :user username))
user
(assoc
(response/found redirect-to)
:session (assoc session :user user :roles (layout/get-user-roles user)))
username
(layout/render
"login.html"
session
{:title (str "User " username " is unknown") :redirect-to redirect-to})
true
(layout/render
"login.html"
session
{:title "Please log in"
:redirect-to redirect-to
:authorities (db-core/list-authorities db-core/*db*)}))))
@ -127,7 +130,7 @@
(POST "/call-me" request (call-me-page request))
(GET "/auth" request (login-page request))
(POST "/auth" request (login-page request))
(GET "/notyet" [] (layout/render "notyet.html"
(GET "/notyet" [] (layout/render "notyet.html" {}
{:title "Can we persuade you?"}))
(GET "/supporter" [] (layout/render "supporter.html"
(GET "/supporter" [] (layout/render "supporter.html" {}
{:title "Have you signed up as a canvasser yet?"})))

View file

@ -42,8 +42,8 @@
"Get current issues. No arguments expected."
[request])
(defroutes rest-routes
(GET "/rest/get-local-data" request (route/restricted (get-local-data request)))
(GET "/rest/get-issues" request (route/restricted (get-issues request)))
(GET "/rest/set-intention" request (route/restricted (set-intention request)))
(GET "/rest/request-followup" request (route/restricted (request-followup request))))
;; (defroutes rest-routes
;; (GET "/rest/get-local-data" request (route/restricted (get-local-data request)))
;; (GET "/rest/get-issues" request (route/restricted (get-issues request)))
;; (GET "/rest/set-intention" request (route/restricted (set-intention request)))
;; (GET "/rest/request-followup" request (route/restricted (request-followup request))))