Tactical commit before moving to Fletcher
I *think* I'm on the right lines with this, but illuminator is too slow and the REPL server is timing out...
This commit is contained in:
parent
d53c633527
commit
5ad384745f
|
@ -54,7 +54,7 @@
|
|||
:main ^:skip-aot youyesyet.core
|
||||
:migratus {:store :database :db ~(get (System/getenv) "DATABASE_URL")}
|
||||
|
||||
:plugins [[lein-adl ["0.1.1"]]
|
||||
:plugins [;;[lein-adl ["0.1.1"]]
|
||||
[lein-cljsbuild "1.1.4"]
|
||||
[lein-codox "0.10.3"]
|
||||
[lein-cprop "1.0.1"]
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
--
|
||||
-- auto-generated by [Application Description Language framework]
|
||||
--
|
||||
-- (https://github.com/simon-brooke/adl) at 20180721T111020.637Z
|
||||
-- (https://github.com/simon-brooke/adl) at 20180721T133846.002Z
|
||||
--
|
||||
-- A web-app intended to be used by canvassers
|
||||
-- campaigning for a 'Yes' vote in the second independence
|
||||
|
@ -72,7 +72,7 @@ CREATE TABLE addresses
|
|||
(
|
||||
id SERIAL NOT NULL PRIMARY KEY,
|
||||
address VARCHAR(256) NOT NULL,
|
||||
postcode VARCHAR(16) CONSTRAINT pattern_7470 CHECK (postcode ~* '^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z]))))[0-9][A-Za-z]{2})$'),
|
||||
postcode VARCHAR(16) CONSTRAINT pattern_1 CHECK (postcode ~* '^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z]))))[0-9][A-Za-z]{2})$'),
|
||||
phone VARCHAR(16),
|
||||
district_id INTEGER,
|
||||
latitude DOUBLE PRECISION,
|
||||
|
@ -985,31 +985,33 @@ ALTER TABLE ln_roles_canvassers_roles ADD CONSTRAINT ri_ln_roles_canvassers_role
|
|||
ON DELETE NO ACTION ;
|
||||
|
||||
------------------------------------------------------------------------
|
||||
-- link table joining roles with canvassers
|
||||
-- link table joining events with teams
|
||||
------------------------------------------------------------------------
|
||||
CREATE TABLE ln_members_roles_canvassers
|
||||
CREATE TABLE ln_teams_events_teams
|
||||
(
|
||||
role_id INTEGER,
|
||||
canvasser_id INTEGER
|
||||
event_id INTEGER,
|
||||
team_id INTEGER
|
||||
);
|
||||
GRANT SELECT ON ln_members_roles_canvassers TO admin,
|
||||
GRANT SELECT ON ln_teams_events_teams TO admin,
|
||||
analysts,
|
||||
canvassers,
|
||||
issueeditors,
|
||||
issueexperts,
|
||||
teamorganisers ;
|
||||
GRANT INSERT ON ln_members_roles_canvassers TO admin ;
|
||||
GRANT UPDATE ON ln_members_roles_canvassers TO admin ;
|
||||
GRANT DELETE ON ln_members_roles_canvassers TO admin ;
|
||||
GRANT INSERT ON ln_teams_events_teams TO admin,
|
||||
teamorganisers ;
|
||||
GRANT UPDATE ON ln_teams_events_teams TO admin,
|
||||
teamorganisers ;
|
||||
GRANT DELETE ON ln_teams_events_teams TO admin ;
|
||||
|
||||
ALTER TABLE ln_members_roles_canvassers ADD CONSTRAINT ri_ln_members_roles_canvassers_canvassers_canvasser_id
|
||||
FOREIGN KEY( canvasser_id )
|
||||
REFERENCES canvassers(id)
|
||||
ALTER TABLE ln_teams_events_teams ADD CONSTRAINT ri_ln_teams_events_teams_events_event_id
|
||||
FOREIGN KEY( event_id )
|
||||
REFERENCES events(id)
|
||||
ON DELETE NO ACTION ;
|
||||
|
||||
ALTER TABLE ln_members_roles_canvassers ADD CONSTRAINT ri_ln_members_roles_canvassers_roles_role_id
|
||||
FOREIGN KEY( role_id )
|
||||
REFERENCES roles(id)
|
||||
ALTER TABLE ln_teams_events_teams ADD CONSTRAINT ri_ln_teams_events_teams_teams_team_id
|
||||
FOREIGN KEY( team_id )
|
||||
REFERENCES teams(id)
|
||||
ON DELETE NO ACTION ;
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
|
|
@ -63,6 +63,9 @@
|
|||
<!-- content: put your main page content into this block -->
|
||||
{% endblock %}
|
||||
</div>
|
||||
<p>
|
||||
User: {{user}}
|
||||
</p>
|
||||
<br clear="both"/>
|
||||
</div>
|
||||
{% block foot %}
|
||||
|
|
|
@ -39,28 +39,29 @@
|
|||
|
||||
|
||||
(declare ^:dynamic *app-context*)
|
||||
(def ^:dynamic *user* nil)
|
||||
|
||||
(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))
|
||||
(let [roles
|
||||
(set (map #(lower-case (:name %)) (db/list-roles-by-canvasser db/*db* user)))]
|
||||
(log/debug (str "found roles " roles " for user " user))
|
||||
roles))))
|
||||
|
||||
|
||||
;; role assignments change only rarely.
|
||||
(def get-user-roles (memoize raw-get-user-roles))
|
||||
(def get-user-roles
|
||||
"Return, as a set, the names of the roles of which this `user` is a member."
|
||||
(memoize
|
||||
(fn [user]
|
||||
(if
|
||||
user
|
||||
(do
|
||||
(log/debug (str "seeking roles for user " user))
|
||||
(let [roles
|
||||
(set (map #(lower-case (:name %)) (db/list-roles-by-canvasser db/*db* user)))]
|
||||
(log/debug (str "found roles " roles " for user " user))
|
||||
roles))))))
|
||||
|
||||
|
||||
(defn render
|
||||
(defn render-with-session
|
||||
"renders the HTML `template` located relative to resources/templates in
|
||||
the context of this session and with these parameters."
|
||||
;; TODO: I'm passing `session` through into render. The default luminus
|
||||
|
@ -68,7 +69,7 @@
|
|||
;; than me so there's almost certainly a reason it doesn't.
|
||||
[template session & [params]]
|
||||
(let [user (:user session)]
|
||||
(log/debug (str "layout/render: template: '" template "'"))
|
||||
(log/debug (str "layout/render-with-session: template: '" template "'"))
|
||||
(content-type
|
||||
(ok
|
||||
(parser/render-file
|
||||
|
@ -83,6 +84,26 @@
|
|||
"text/html; charset=utf-8")))
|
||||
|
||||
|
||||
(defn render
|
||||
"renders the HTML `template` located relative to resources/templates in
|
||||
the context of this session and with these parameters."
|
||||
[template & [params]]
|
||||
(log/debug (str "layout/render: template: '" template "'"))
|
||||
(content-type
|
||||
(ok
|
||||
(parser/render-file
|
||||
template
|
||||
(merge params
|
||||
{:page template
|
||||
:csrf-token *anti-forgery-token*
|
||||
:user *user*
|
||||
:user-roles (get-user-roles *user*)
|
||||
:site-title (:site-title env)
|
||||
:version (System/getProperty "youyesyet.version")})))
|
||||
"text/html; charset=utf-8"))
|
||||
|
||||
|
||||
|
||||
(defn error-page
|
||||
"error-details should be a map containing the following keys:
|
||||
:status - error status
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
[ring-ttl-session.core :refer [ttl-memory-store]]
|
||||
[youyesyet.env :refer [defaults]]
|
||||
[youyesyet.config :refer [env]]
|
||||
[youyesyet.layout :refer [*app-context* error-page]])
|
||||
[youyesyet.layout :refer [*app-context* *user* error-page]])
|
||||
(:import [javax.servlet ServletContext]))
|
||||
|
||||
|
||||
|
@ -63,6 +63,17 @@
|
|||
((if (:websocket? request) handler wrapped) request))))
|
||||
|
||||
|
||||
(defn wrap-user
|
||||
"Dynamically bind *user* to the user in the session, if any, so that it
|
||||
is available in layout/render, q.v."
|
||||
[handler]
|
||||
(fn [request]
|
||||
(if-let [user (-> request :session :user)]
|
||||
(binding [*user* user]
|
||||
(handler request))
|
||||
(handler request))))
|
||||
|
||||
|
||||
(defn wrap-base [handler]
|
||||
(-> ((:middleware defaults) handler)
|
||||
wrap-webjars
|
||||
|
@ -71,4 +82,6 @@
|
|||
(assoc-in [:security :anti-forgery] false)
|
||||
(assoc-in [:session :store] (ttl-memory-store (* 60 30)))))
|
||||
wrap-context
|
||||
wrap-internal-error))
|
||||
wrap-internal-error
|
||||
wrap-user))
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@
|
|||
|
||||
|
||||
(defn about-page []
|
||||
(layout/render "about.html" {} {:title
|
||||
(layout/render "about.html" {:title
|
||||
(str "About " (:site-title env))
|
||||
:motd (md-to-html-string (slurp (io/resource "about.md")))}))
|
||||
|
||||
|
@ -67,7 +67,7 @@
|
|||
|
||||
|
||||
(defn home-page []
|
||||
(layout/render "home.html" {} {:title "You yes yet?"
|
||||
(layout/render "home.html" {:title "You yes yet?"
|
||||
:motd (md-to-html-string (motd))}))
|
||||
|
||||
|
||||
|
@ -100,13 +100,12 @@
|
|||
(assoc
|
||||
(response/found redirect-to)
|
||||
:session
|
||||
(assoc session :user user :roles roles)))
|
||||
(assoc session :user (assoc user :roles roles))))
|
||||
;; if we've got a username but either no user object or else
|
||||
;; the password doesn't match
|
||||
username
|
||||
(layout/render
|
||||
"login.html"
|
||||
session
|
||||
{:title (str "User " username " is unknown")
|
||||
:redirect-to redirect-to
|
||||
:warnings ["Your user name was not recognised or your password did not match"]})
|
||||
|
@ -114,7 +113,6 @@
|
|||
true
|
||||
(layout/render
|
||||
"login.html"
|
||||
session
|
||||
{:title "Please log in"
|
||||
:redirect-to redirect-to
|
||||
:authorities (db-core/list-authorities db-core/*db*)}))))
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
(defn list-page [request]
|
||||
(layout/render
|
||||
"issue-expert/list.html"
|
||||
(:session request)
|
||||
;; (:session request)
|
||||
(let [user (:user (:session request))]
|
||||
{:title "Open requests"
|
||||
:user user
|
||||
|
@ -69,7 +69,7 @@
|
|||
db/*db* {:id (:visit_id record)})))]
|
||||
(layout/render
|
||||
"issue-expert/request.html"
|
||||
(:session request)
|
||||
;; (:session request)
|
||||
{:title (str "Request from " (:name elector) " at " (:date visit))
|
||||
:user (:user (:session request))
|
||||
:visit visit
|
||||
|
|
|
@ -42,7 +42,6 @@
|
|||
|
||||
(defn app-page [request]
|
||||
(layout/render "app.html"
|
||||
(:session request)
|
||||
{:title "Canvasser app"}))
|
||||
|
||||
|
||||
|
@ -51,7 +50,7 @@
|
|||
(let [record (-> request :session :user)]
|
||||
(layout/render
|
||||
"auto/form-canvassers-Canvasser.html"
|
||||
(:session request)
|
||||
;; (:session request)
|
||||
{:title (str "Profile for " (-> request :session :user :fullname))
|
||||
:record record
|
||||
:elector_id
|
||||
|
|
|
@ -19,14 +19,14 @@
|
|||
"Render the routing page for the roles the currently logged in user is member of."
|
||||
(let
|
||||
[session (:session request)
|
||||
user (:user session)
|
||||
user (-> request :session :user)
|
||||
roles (if
|
||||
user
|
||||
(db-core/list-roles-by-canvasser db-core/*db* {:id (:id user)}))]
|
||||
(log/info (str "Roles routing page; user is " user "; roles are " roles))
|
||||
(cond
|
||||
roles (layout/render "roles.html"
|
||||
(:session request)
|
||||
;; ;; (:session request)
|
||||
{:title (str "Welcome " (:fullname user) ", what do you want to do?")
|
||||
:user user
|
||||
:roles (map #(assoc % :link (safe-name (:name %) :sql)) roles)})
|
||||
|
@ -38,7 +38,7 @@
|
|||
[request]
|
||||
(layout/render
|
||||
(support/resolve-template "application-index.html")
|
||||
(:session request)
|
||||
;; (:session request)
|
||||
{:title "Administrative menu"}))
|
||||
|
||||
|
||||
|
@ -49,18 +49,24 @@
|
|||
[request]
|
||||
(layout/render
|
||||
(support/resolve-template "application-index.html")
|
||||
(:session request)
|
||||
;; (:session request)
|
||||
{:title "Administrative menu"}))
|
||||
|
||||
|
||||
(defn canvassers-page
|
||||
[request]
|
||||
(layout/render "roles/canvasser.html" (:session request) {}))
|
||||
(layout/render
|
||||
"roles/canvasser.html"
|
||||
;; (:session request)
|
||||
{}))
|
||||
|
||||
|
||||
(defn team-organisers-page
|
||||
[request]
|
||||
(layout/render "roles/team-orgenisers.html" request {}))
|
||||
(layout/render
|
||||
"roles/team-orgenisers.html"
|
||||
;; request
|
||||
{}))
|
||||
|
||||
|
||||
(defroutes roles-routes
|
||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue