Merge remote-tracking branch 'origin/feature/60' into feature/60

This commit is contained in:
Simon Brooke 2021-05-21 10:14:04 +01:00
commit e0a310a7e5
No known key found for this signature in database
GPG key ID: A7A4F18D1D4DF987
8 changed files with 97 additions and 50 deletions

View file

@ -58,5 +58,22 @@
<attribute name="optional" value="true"/> <attribute name="optional" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="src" path="target/generated-sources/annotations">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="ignore_optional_problems" value="true"/>
<attribute name="m2e-apt" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="ignore_optional_problems" value="true"/>
<attribute name="m2e-apt" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/> <classpathentry kind="output" path="target/classes"/>
</classpath> </classpath>

View file

@ -26,4 +26,15 @@
<nature>org.eclipse.m2e.core.maven2Nature</nature> <nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>ccw.nature</nature> <nature>ccw.nature</nature>
</natures> </natures>
<filteredResources>
<filter>
<id>1621149723161</id>
<name></name>
<type>30</type>
<matcher>
<id>org.eclipse.core.resources.regexFilterMatcher</id>
<arguments>node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
</matcher>
</filter>
</filteredResources>
</projectDescription> </projectDescription>

View file

@ -1,6 +1,9 @@
eclipse.preferences.version=1 eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
org.eclipse.jdt.core.compiler.compliance=1.5 org.eclipse.jdt.core.compiler.compliance=1.5
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
org.eclipse.jdt.core.compiler.processAnnotations=disabled
org.eclipse.jdt.core.compiler.release=disabled org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=1.5 org.eclipse.jdt.core.compiler.source=1.5

View file

@ -29,7 +29,7 @@
<div id="nav"> <div id="nav">
<img id="nav-icon" src="{{servlet-context}}/img/threelines.png" alt="Menu"/> <img id="nav-icon" src="{{servlet-context}}/img/threelines.png" alt="Menu"/>
<menu id="nav-menu" class="nav"> <menu id="nav-menu" class="nav">
<li class=""><a href="{{servlet-context}}/home">Home</a></li> <li class=""><a href="{{servlet-context}}/">Home</a></li>
<li class=""><a href="https://library.projecthope.scot/">Library</a></li> <li class=""><a href="https://library.projecthope.scot/">Library</a></li>
{% if user %} {% if user %}
<li class=""><a href="{{servlet-context}}/roles">Roles</a></li> <li class=""><a href="{{servlet-context}}/roles">Roles</a></li>

View file

@ -1,17 +1,15 @@
(ns ^{:doc "Routes/pages available to unauthenticated users." (ns ^{:doc "Routes/pages available to unauthenticated users."
:author "Simon Brooke"} youyesyet.routes.home :author "Simon Brooke"} youyesyet.routes.home
(:require [adl-support.utils :refer [safe-name]] (:require [clojure.java.io :as io]
[clojure.java.io :as io]
[clojure.string :as s]
[clojure.tools.logging :as log] [clojure.tools.logging :as log]
[clojure.walk :refer [keywordize-keys]] [clojure.walk :refer [keywordize-keys]]
[markdown.core :refer [md-to-html-string]] [markdown.core :refer [md-to-html-string]]
[noir.util.route :as route]
[ring.util.http-response :as response] [ring.util.http-response :as response]
[youyesyet.config :refer [env]] [youyesyet.config :refer [env]]
[youyesyet.db.core :as db-core] [youyesyet.db.core :as db-core]
[youyesyet.layout :as layout] [youyesyet.layout :as layout]
[youyesyet.oauth :as oauth] [youyesyet.oauth :as oauth]
[youyesyet.routes.utils :refer [with-servlet-context]]
[compojure.core :refer [defroutes GET POST]])) [compojure.core :refer [defroutes GET POST]]))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -47,30 +45,41 @@
(if (.exists motd) (slurp motd) ""))) (if (.exists motd) (slurp motd) "")))
(defn about-page [request] (defn about-page
"Render a page describing the app and its purpose."
[request]
(layout/render "md.html" {:title (layout/render "md.html" {:title
(str "About " (:site-title env)) (str "About " (:site-title env))
:servlet-context (:servlet-context request) :servlet-context (:servlet-context request)
:content (md-to-html-string (slurp (io/resource "about.md")))})) :content (md-to-html-string (slurp (io/resource "about.md")))}))
(defn call-me-page [request] (defn call-me-page
"Render a page requesting a call to a particular elector from a member of the
telephone canvassing team."
[request]
(if (if
request request
(do (do
;; do something to store it in the database ;; do something to store it in the database
(layout/render "call-me-accepted.html" (:session request) (:params request))) (layout/render
"call-me-accepted.html"
(:session request)
(assoc (:params request) :servlet-context (:servlet-context request)))
(layout/render "call-me.html" (:session request) (layout/render "call-me.html" (:session request)
{:title "Please call me!" (with-servlet-context {:title "Please call me!"
:servlet-context (:servlet-context request)
;; TODO: Issues need to be fetched from the database ;; TODO: Issues need to be fetched from the database
:concerns (db-core/list-issues db-core/*db* {})}))) :concerns (db-core/list-issues db-core/*db* {})}
request)))))
(defn home-page [request] (defn home-page
(layout/render "home.html" {:title "You yes yet?" "Render the default page."
:servlet-context (:servlet-context request) [request]
:motd (md-to-html-string (motd))})) (layout/render "home.html" (with-servlet-context
{:title "You yes yet?"
:motd (md-to-html-string (motd))}
request)))
(defn login-page (defn login-page
@ -110,18 +119,20 @@
username username
(layout/render (layout/render
"login.html" "login.html"
(with-servlet-context
{:title (str "User " username " is unknown") {:title (str "User " username " is unknown")
:servlet-context (:servlet-context request)
:redirect-to redirect-to :redirect-to redirect-to
:warnings ["Your user name was not recognised or your password did not match"]}) :warnings ["Your user name was not recognised or your password did not match"]}
request))
;; if we've no username, just invite the user to log in ;; if we've no username, just invite the user to log in
:else :else
(layout/render (layout/render
"login.html" "login.html"
(with-servlet-context
{:title "Please log in" {:title "Please log in"
:servlet-context (:servlet-context request)
:redirect-to redirect-to :redirect-to redirect-to
:authorities (db-core/list-authorities db-core/*db*)})))) :authorities (db-core/list-authorities db-core/*db*)}
request)))))
(defroutes home-routes (defroutes home-routes
@ -132,9 +143,13 @@
(POST "/call-me" request (call-me-page request)) (POST "/call-me" request (call-me-page request))
(GET "/login" request (login-page request)) (GET "/login" request (login-page request))
(POST "/login" request (login-page request)) (POST "/login" request (login-page request))
(GET "/notyet" [request] (layout/render "notyet.html" (GET "/notyet" [request] (layout/render
{:title "Can we persuade you?" "notyet.html"
:servlet-context (:servlet-context request)})) (with-servlet-context
(GET "/supporter" [request] (layout/render "supporter.html" {:title "Can we persuade you?"}
{:title "Have you signed up as a canvasser yet?" request)))
:servlet-context (:servlet-context request)}))) (GET "/supporter" [request] (layout/render
"supporter.html"
(with-servlet-context
{:title "Have you signed up as a canvasser yet?"}
request))))

View file

@ -1,23 +1,15 @@
(ns ^{:doc "Manually maintained routes which handle data transfer to/from the canvasser app." (ns ^{:doc "Manually maintained routes which handle data transfer to/from the canvasser app."
:author "Simon Brooke"} youyesyet.routes.rest :author "Simon Brooke"} youyesyet.routes.rest
(:require [adl-support.rest-support :refer :all] (:require [adl-support.core :refer [massage-params]]
[adl-support.core :refer [massage-params do-or-log-error [adl-support.rest-support :refer [do-or-server-fail valid-user-or-forbid with-params-or-error]]
do-or-return-reason]]
[clojure.core.memoize :as memo] [clojure.core.memoize :as memo]
[clojure.data.json :as json] [clojure.data.json :as json]
[clojure.java.io :as io]
[clojure.string :as s]
[clojure.tools.logging :as log] [clojure.tools.logging :as log]
[clojure.walk :refer [keywordize-keys]] [compojure.core :refer [defroutes GET]]
[compojure.core :refer [defroutes GET POST]]
[java-time :as jt] [java-time :as jt]
[mount.core :as mount]
[noir.response :as nresponse]
[noir.util.route :as route] [noir.util.route :as route]
[ring.util.http-response :as response]
[youyesyet.locality :as l] [youyesyet.locality :as l]
[youyesyet.db.core :as db] [youyesyet.db.core :as db]
[youyesyet.utils :refer :all]
)) ))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View file

@ -3,16 +3,15 @@
(:require [adl-support.core :as support] (:require [adl-support.core :as support]
[adl-support.utils :refer [safe-name]] [adl-support.utils :refer [safe-name]]
[clojure.tools.logging :as log] [clojure.tools.logging :as log]
[clojure.walk :refer [keywordize-keys]]
[compojure.core :refer [defroutes GET POST]] [compojure.core :refer [defroutes GET POST]]
[noir.util.route :as route] [noir.util.route :as route]
[ring.util.http-response :as response] [ring.util.http-response :as response]
[youyesyet.config :refer [env]]
[youyesyet.db.core :as db-core] [youyesyet.db.core :as db-core]
[youyesyet.routes.issue-experts :as expert] [youyesyet.routes.issue-experts :as expert]
[youyesyet.layout :as layout] [youyesyet.layout :as layout]
[youyesyet.oauth :as oauth] [youyesyet.oauth :as oauth]
[youyesyet.routes.auto :as auto])) [youyesyet.routes.auto :as auto]
[youyesyet.routes.utils :refer [with-servlet-context]]))
(defn roles-page (defn roles-page
@ -40,8 +39,7 @@
[request] [request]
(layout/render (layout/render
(support/resolve-template "application-index.html") (support/resolve-template "application-index.html")
{:title "Administrative menu" (with-servlet-context {:title "Administrative menu"} request)))
:servlet-context (:servlet-context request)}))
(defn analysts-page (defn analysts-page
@ -51,22 +49,21 @@
[request] [request]
(layout/render (layout/render
(support/resolve-template "application-index.html") (support/resolve-template "application-index.html")
{:title "Administrative menu" (with-servlet-context {:title "Administrative menu"} request)))
:servlet-context (:servlet-context request)}))
(defn canvassers-page (defn canvassers-page
[request] [request]
(layout/render (layout/render
"roles/canvasser.html" "roles/canvasser.html"
{:servlet-context (:servlet-context request)})) (with-servlet-context {} request)))
(defn team-organisers-page (defn team-organisers-page
[request] [request]
(layout/render (layout/render
"roles/team-orgenisers.html" "roles/team-orgenisers.html"
{:servlet-context (:servlet-context request)})) (with-servlet-context {} request)))
(defroutes roles-routes (defroutes roles-routes

View file

@ -0,0 +1,12 @@
(ns youyesyet.routes.utils)
(defn with-servlet-context
"Returns a map like `m` into which the servlet context from `request`,
expected to be a request map, has been merged. When an app is served from
Tomcat, there will be a `:servlet-context` key in the map, and it matters;
when served from Jetty or other lightweight servlet containers, there won't
be. TODO: should probably be moved (or copied) to adl-support."
[m request]
(if (:servlet-context m)
(assoc m :servlet-context (:servlet-context request))
m))