diff --git a/resources/sql/queries.auto.sql b/resources/sql/queries.auto.sql index b199ca0..0dd7351 100644 --- a/resources/sql/queries.auto.sql +++ b/resources/sql/queries.auto.sql @@ -1,6 +1,6 @@ -- File queries.sql -- autogenerated by adl.to-hugsql-queries at --- 2018-06-05T12:33:53.043Z +-- 2018-06-11T00:58:48.917Z -- See [Application Description Language](https://github.com/simon-brooke/adl). @@ -36,8 +36,7 @@ INSERT INTO canvassers (username, phone, email, authority_id, - authorised, - roles) + authorised) VALUES (:username, :fullname, :elector_id, @@ -45,8 +44,7 @@ VALUES (:username, :phone, :email, :authority_id, - :authorised, - :roles) + :authorised) returning id -- :name create-district! :! :n @@ -440,7 +438,7 @@ ORDER BY addresses.address, -- :name list-addresses-by-district :? :* -- :doc lists all existing address records related to a given district -SELECT * +SELECT * FROM addresses WHERE addresses.district_id = :id ORDER BY addresses.address, @@ -465,7 +463,7 @@ ORDER BY canvassers.username, -- :name list-canvassers-by-address :? :* -- :doc lists all existing canvasser records related to a given address -SELECT * +SELECT * FROM canvassers WHERE canvassers.address_id = :id ORDER BY canvassers.username, @@ -475,7 +473,7 @@ ORDER BY canvassers.username, -- :name list-canvassers-by-authority :? :* -- :doc lists all existing canvasser records related to a given authority -SELECT * +SELECT * FROM canvassers WHERE canvassers.authority_id = :id ORDER BY canvassers.username, @@ -485,7 +483,7 @@ ORDER BY canvassers.username, -- :name list-canvassers-by-elector :? :* -- :doc lists all existing canvasser records related to a given elector -SELECT * +SELECT * FROM canvassers WHERE canvassers.elector_id = :id ORDER BY canvassers.username, @@ -494,10 +492,11 @@ ORDER BY canvassers.username, canvassers.id -- :name list-canvassers-by-role :? :* --- :doc lists all existing canvasser records related to a given role -SELECT * +-- :doc links all existing canvasser records related to a given role +SELECT * FROM canvassers -WHERE canvassers.roles = :id +WHERE canvassers.roles = link_canvassers_roles.canvasser_id + AND link_canvassers_roles.role_id = :id ORDER BY canvassers.username, canvassers.fullname, canvassers.email, @@ -519,7 +518,7 @@ SELECT * FROM dwellings -- :name list-dwellings-by-address :? :* -- :doc lists all existing dwelling records related to a given address -SELECT * +SELECT * FROM dwellings WHERE dwellings.address_id = :id @@ -535,7 +534,7 @@ ORDER BY electors.name, -- :name list-electors-by-dwelling :? :* -- :doc lists all existing elector records related to a given dwelling -SELECT * +SELECT * FROM electors WHERE electors.dwelling_id = :id ORDER BY electors.name, @@ -545,7 +544,7 @@ ORDER BY electors.name, -- :name list-electors-by-gender :? :* -- :doc lists all existing elector records related to a given gender -SELECT * +SELECT * FROM electors WHERE electors.gender = :id ORDER BY electors.name, @@ -561,13 +560,13 @@ SELECT * FROM followupactions -- :name list-followupactions-by-canvasser :? :* -- :doc lists all existing followupaction records related to a given canvasser -SELECT * +SELECT * FROM followupactions WHERE followupactions.actor = :id -- :name list-followupactions-by-followuprequest :? :* -- :doc lists all existing followupaction records related to a given followuprequest -SELECT * +SELECT * FROM followupactions WHERE followupactions.request_id = :id @@ -585,25 +584,25 @@ SELECT * FROM followuprequests -- :name list-followuprequests-by-elector :? :* -- :doc lists all existing followuprequest records related to a given elector -SELECT * +SELECT * FROM followuprequests WHERE followuprequests.elector_id = :id -- :name list-followuprequests-by-followupmethod :? :* -- :doc lists all existing followuprequest records related to a given followupmethod -SELECT * +SELECT * FROM followuprequests WHERE followuprequests.method_id = :id -- :name list-followuprequests-by-issue :? :* -- :doc lists all existing followuprequest records related to a given issue -SELECT * +SELECT * FROM followuprequests WHERE followuprequests.issue_id = :id -- :name list-followuprequests-by-visit :? :* -- :doc lists all existing followuprequest records related to a given visit -SELECT * +SELECT * FROM followuprequests WHERE followuprequests.visit_id = :id @@ -621,19 +620,19 @@ SELECT * FROM intentions -- :name list-intentions-by-elector :? :* -- :doc lists all existing intention records related to a given elector -SELECT * +SELECT * FROM intentions WHERE intentions.elector_id = :id -- :name list-intentions-by-option :? :* -- :doc lists all existing intention records related to a given option -SELECT * +SELECT * FROM intentions WHERE intentions.option_id = :id -- :name list-intentions-by-visit :? :* -- :doc lists all existing intention records related to a given visit -SELECT * +SELECT * FROM intentions WHERE intentions.visit_id = :id @@ -645,19 +644,19 @@ SELECT * FROM issueexpertise -- :name list-issueexpertise-by-canvasser :? :* -- :doc lists all existing issueexpertise records related to a given canvasser -SELECT * +SELECT * FROM issueexpertise WHERE issueexpertise.canvasser_id = :id -- :name list-issueexpertise-by-followupmethod :? :* -- :doc lists all existing issueexpertise records related to a given followupmethod -SELECT * +SELECT * FROM issueexpertise WHERE issueexpertise.method_id = :id -- :name list-issueexpertise-by-issue :? :* -- :doc lists all existing issueexpertise records related to a given issue -SELECT * +SELECT * FROM issueexpertise WHERE issueexpertise.issue_id = :id @@ -681,13 +680,13 @@ SELECT * FROM rolememberships -- :name list-rolememberships-by-canvasser :? :* -- :doc lists all existing rolemembership records related to a given canvasser -SELECT * +SELECT * FROM rolememberships WHERE rolememberships.canvasser_id = :id -- :name list-rolememberships-by-role :? :* -- :doc lists all existing rolemembership records related to a given role -SELECT * +SELECT * FROM rolememberships WHERE rolememberships.role_id = :id @@ -699,6 +698,15 @@ ORDER BY roles.name, --~ (if (:offset params) "OFFSET :offset ") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100") +-- :name list-roles-by-canvasser :? :* +-- :doc links all existing role records related to a given canvasser +SELECT * +FROM roles +WHERE roles.members = link_roles_canvassers.role_id + AND link_roles_canvassers.canvasser_id = :id +ORDER BY roles.name, + roles.id + -- :name list-teammemberships :? :* -- :doc lists all existing teammembership records SELECT * FROM teammemberships @@ -707,13 +715,13 @@ SELECT * FROM teammemberships -- :name list-teammemberships-by-canvasser :? :* -- :doc lists all existing teammembership records related to a given canvasser -SELECT * +SELECT * FROM teammemberships WHERE teammemberships.canvasser_id = :id -- :name list-teammemberships-by-team :? :* -- :doc lists all existing teammembership records related to a given team -SELECT * +SELECT * FROM teammemberships WHERE teammemberships.team_id = :id @@ -725,13 +733,13 @@ SELECT * FROM teamorganiserships -- :name list-teamorganiserships-by-canvasser :? :* -- :doc lists all existing teamorganisership records related to a given canvasser -SELECT * +SELECT * FROM teamorganiserships WHERE teamorganiserships.canvasser_id = :id -- :name list-teamorganiserships-by-team :? :* -- :doc lists all existing teamorganisership records related to a given team -SELECT * +SELECT * FROM teamorganiserships WHERE teamorganiserships.team_id = :id @@ -743,9 +751,18 @@ ORDER BY teams.name, --~ (if (:offset params) "OFFSET :offset ") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100") +-- :name list-teams-by-canvasser :? :* +-- :doc links all existing team records related to a given canvasser +SELECT * +FROM teams +WHERE teams.members = link_teams_canvassers.team_id + AND link_teams_canvassers.canvasser_id = :id +ORDER BY teams.name, + teams.id + -- :name list-teams-by-district :? :* -- :doc lists all existing team records related to a given district -SELECT * +SELECT * FROM teams WHERE teams.district_id = :id ORDER BY teams.name, @@ -759,20 +776,20 @@ SELECT * FROM visits -- :name list-visits-by-address :? :* -- :doc lists all existing visit records related to a given address -SELECT * +SELECT * FROM visits WHERE visits.address_id = :id -- :name list-visits-by-canvasser :? :* -- :doc lists all existing visit records related to a given canvasser -SELECT * +SELECT * FROM visits WHERE visits.canvasser_id = :id -- :name search-strings-address :? :1 -- :doc selects existing address records having any string field matching `:pattern` by substring match SELECT * FROM addresses -WHERE +WHERE address LIKE '%:pattern%' OR phone LIKE '%:pattern%' ORDER BY addresses.address, @@ -784,7 +801,7 @@ ORDER BY addresses.address, -- :name search-strings-authority :? :1 -- :doc selects existing authority records having any string field matching `:pattern` by substring match SELECT * FROM authorities -WHERE +WHERE id LIKE '%:pattern%' --~ (if (:offset params) "OFFSET :offset ") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100") @@ -792,7 +809,7 @@ id LIKE '%:pattern%' -- :name search-strings-canvasser :? :1 -- :doc selects existing canvasser records having any string field matching `:pattern` by substring match SELECT * FROM canvassers -WHERE +WHERE username LIKE '%:pattern%' OR fullname LIKE '%:pattern%' OR phone LIKE '%:pattern%' @@ -807,7 +824,7 @@ ORDER BY canvassers.username, -- :name search-strings-district :? :1 -- :doc selects existing district records having any string field matching `:pattern` by substring match SELECT * FROM districts -WHERE +WHERE name LIKE '%:pattern%' ORDER BY districts.name, districts.id @@ -817,7 +834,7 @@ ORDER BY districts.name, -- :name search-strings-dwelling :? :1 -- :doc selects existing dwelling records having any string field matching `:pattern` by substring match SELECT * FROM dwellings -WHERE +WHERE sub-address LIKE '%:pattern%' --~ (if (:offset params) "OFFSET :offset ") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100") @@ -825,7 +842,7 @@ sub-address LIKE '%:pattern%' -- :name search-strings-elector :? :1 -- :doc selects existing elector records having any string field matching `:pattern` by substring match SELECT * FROM electors -WHERE +WHERE name LIKE '%:pattern%' OR phone LIKE '%:pattern%' OR email LIKE '%:pattern%' @@ -839,7 +856,7 @@ ORDER BY electors.name, -- :name search-strings-followupaction :? :1 -- :doc selects existing followupaction records having any string field matching `:pattern` by substring match SELECT * FROM followupactions -WHERE +WHERE notes LIKE '%:pattern%' --~ (if (:offset params) "OFFSET :offset ") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100") @@ -847,7 +864,7 @@ notes LIKE '%:pattern%' -- :name search-strings-followupmethod :? :1 -- :doc selects existing followupmethod records having any string field matching `:pattern` by substring match SELECT * FROM followupmethods -WHERE +WHERE id LIKE '%:pattern%' --~ (if (:offset params) "OFFSET :offset ") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100") @@ -855,14 +872,14 @@ id LIKE '%:pattern%' -- :name search-strings-followuprequest :? :1 -- :doc selects existing followuprequest records having any string field matching `:pattern` by substring match SELECT * FROM followuprequests -WHERE +WHERE --~ (if (:offset params) "OFFSET :offset ") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100") -- :name search-strings-gender :? :1 -- :doc selects existing gender records having any string field matching `:pattern` by substring match SELECT * FROM genders -WHERE +WHERE id LIKE '%:pattern%' --~ (if (:offset params) "OFFSET :offset ") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100") @@ -870,14 +887,14 @@ id LIKE '%:pattern%' -- :name search-strings-intention :? :1 -- :doc selects existing intention records having any string field matching `:pattern` by substring match SELECT * FROM intentions -WHERE +WHERE --~ (if (:offset params) "OFFSET :offset ") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100") -- :name search-strings-issue :? :1 -- :doc selects existing issue records having any string field matching `:pattern` by substring match SELECT * FROM issues -WHERE +WHERE url LIKE '%:pattern%' OR id LIKE '%:pattern%' --~ (if (:offset params) "OFFSET :offset ") @@ -886,14 +903,14 @@ url LIKE '%:pattern%' -- :name search-strings-issueexpertise :? :1 -- :doc selects existing issueexpertise records having any string field matching `:pattern` by substring match SELECT * FROM issueexpertise -WHERE +WHERE --~ (if (:offset params) "OFFSET :offset ") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100") -- :name search-strings-option :? :1 -- :doc selects existing option records having any string field matching `:pattern` by substring match SELECT * FROM options -WHERE +WHERE id LIKE '%:pattern%' --~ (if (:offset params) "OFFSET :offset ") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100") @@ -901,7 +918,7 @@ id LIKE '%:pattern%' -- :name search-strings-role :? :1 -- :doc selects existing role records having any string field matching `:pattern` by substring match SELECT * FROM roles -WHERE +WHERE name LIKE '%:pattern%' ORDER BY roles.name, roles.id @@ -911,14 +928,14 @@ ORDER BY roles.name, -- :name search-strings-rolemembership :? :1 -- :doc selects existing rolemembership records having any string field matching `:pattern` by substring match SELECT * FROM rolememberships -WHERE +WHERE --~ (if (:offset params) "OFFSET :offset ") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100") -- :name search-strings-team :? :1 -- :doc selects existing team records having any string field matching `:pattern` by substring match SELECT * FROM teams -WHERE +WHERE name LIKE '%:pattern%' ORDER BY teams.name, teams.id @@ -928,21 +945,21 @@ ORDER BY teams.name, -- :name search-strings-teammembership :? :1 -- :doc selects existing teammembership records having any string field matching `:pattern` by substring match SELECT * FROM teammemberships -WHERE +WHERE --~ (if (:offset params) "OFFSET :offset ") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100") -- :name search-strings-teamorganisership :? :1 -- :doc selects existing teamorganisership records having any string field matching `:pattern` by substring match SELECT * FROM teamorganiserships -WHERE +WHERE --~ (if (:offset params) "OFFSET :offset ") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100") -- :name search-strings-visit :? :1 -- :doc selects existing visit records having any string field matching `:pattern` by substring match SELECT * FROM visits -WHERE +WHERE --~ (if (:offset params) "OFFSET :offset ") --~ (if (:limit params) "LIMIT :limit" "LIMIT 100") @@ -967,8 +984,7 @@ SET username = :username, phone = :phone, email = :email, authority_id = :authority_id, - authorised = :authorised, - roles = :roles + authorised = :authorised WHERE canvassers.id = :id -- :name update-district! :! :n @@ -1079,4 +1095,4 @@ UPDATE visits SET address_id = :address_id, canvasser_id = :canvasser_id, date = :date -WHERE visits.id = :id +WHERE visits.id = :id \ No newline at end of file diff --git a/resources/templates/base-authenticated.html b/resources/templates/base-authenticated.html index 7da389b..22af08a 100644 --- a/resources/templates/base-authenticated.html +++ b/resources/templates/base-authenticated.html @@ -1,8 +1,8 @@ <!DOCTYPE html> <html> <head> - <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> + <meta name="viewport" content="width=device-width, initial-scale=1"/> <link rel="stylesheet" type="text/css" href="css/yyy-common.css" /> <link rel="stylesheet" type="text/css" href="css/yyy-site.css" /> <link rel="stylesheet" type="text/css" href="css/spinner.css" /> @@ -11,6 +11,7 @@ </head> <body> {% block whole-page %} + {% block top %} <header> <div id="nav"> <img id="nav-icon" src="img/threelines.png" alt="Menu"/> @@ -31,7 +32,7 @@ {{title}} </h1> </header> - + {% endblock %} <div id="main-container" class="container"> <div id="big-links"> {% block big-links %} @@ -45,6 +46,7 @@ <a href="javascript:history.back()" id="back-link">Back</a> </div> </div> + {% block foot %} <footer> <div id="credits"> <div> @@ -62,6 +64,7 @@ </div> </footer> {% endblock %} + {% endblock %} <script type="text/javascript"> var context = "{{servlet-context}}"; var csrfToken = "{{csrf-token}}"; diff --git a/src/clj/youyesyet/routes/auto_json_routes.clj b/src/clj/youyesyet/routes/auto_json_routes.clj index c9732cd..64efb8f 100644 --- a/src/clj/youyesyet/routes/auto_json_routes.clj +++ b/src/clj/youyesyet/routes/auto_json_routes.clj @@ -56,7 +56,7 @@ list-addresses-by-district list-authorities list-canvassers - list-canvassers-by-addresse + list-canvassers-by-address list-canvassers-by-authoritie list-canvassers-by-elector list-districts @@ -110,7 +110,7 @@ (defroutes auto-rest-routes - (POST "/json/auto/create-addresse" request (create-address request)) + (POST "/json/auto/create-address" request (create-address request)) (POST "/json/auto/create-authority" request @@ -162,7 +162,7 @@ request (create-teamorganisership request)) (POST "/json/auto/create-visit" request (create-visit request)) - (POST "/json/auto/delete-addresse" request (delete-address request)) + (POST "/json/auto/delete-address" request (delete-address request)) (POST "/json/auto/delete-authority" request @@ -188,7 +188,7 @@ (POST "/json/auto/delete-issue" request (delete-issue request)) (POST "/json/auto/delete-option" request (delete-option request)) (POST "/json/auto/delete-visit" request (delete-visit request)) - (POST "/json/auto/get-addresse" request (get-addresse request)) + (POST "/json/auto/get-address" request (get-address request)) (POST "/json/auto/get-authority" request (get-authority request)) (POST "/json/auto/get-canvasser" request (get-canvasser request)) (POST "/json/auto/get-district" request (get-district request)) @@ -216,9 +216,9 @@ (GET "/json/auto/list-authorities" request (list-authorities request)) (GET "/json/auto/list-canvassers" request (list-canvassers request)) (GET - "/json/auto/list-canvassers-by-addresse" + "/json/auto/list-canvassers-by-address" request - (list-canvassers-by-addresse request)) + (list-canvassers-by-address request)) (GET "/json/auto/list-canvassers-by-authoritie" request @@ -230,9 +230,9 @@ (GET "/json/auto/list-districts" request (list-districts request)) (GET "/json/auto/list-electors" request (list-electors request)) (GET - "/json/auto/list-electors-by-addresse" + "/json/auto/list-electors-by-address" request - (list-electors-by-addresse request)) + (list-electors-by-address request)) (GET "/json/auto/list-followupactions" request @@ -355,14 +355,14 @@ (list-teams-by-district request)) (GET "/json/auto/list-visits" request (list-visits request)) (GET - "/json/auto/list-visits-by-addresse" + "/json/auto/list-visits-by-address" request - (list-visits-by-addresse request)) + (list-visits-by-address request)) (GET "/json/auto/list-visits-by-canvasser" request (list-visits-by-canvasser request)) - (POST "/json/auto/update-addresse" request (update-addresse request)) + (POST "/json/auto/update-address" request (update-address request)) (POST "/json/auto/update-canvasser" request @@ -603,10 +603,10 @@ (defn - get-addresse + get-address "Auto-generated method to select one record from the addresses table. Expects the following key(s) to be present in `params`: (:id). Returns a map containing the following keys: (:address :district_id :id :latitude :longitude :phone :postcode)." [{:keys [params]}] - (do (db/get-addresse params))) + (do (db/get-address params))) (defn @@ -707,9 +707,9 @@ (defn - list-canvassers-by-addresse + list-canvassers-by-address [{:keys [params]}] - (do (db/list-canvassers-by-addresse params))) + (do (db/list-canvassers-by-address params))) (defn @@ -739,9 +739,9 @@ (defn - list-electors-by-addresse + list-electors-by-address [{:keys [params]}] - (do (db/list-electors-by-addresse params))) + (do (db/list-electors-by-address params))) (defn @@ -958,9 +958,9 @@ (defn - list-visits-by-addresse + list-visits-by-address [{:keys [params]}] - (do (db/list-visits-by-addresse params))) + (do (db/list-visits-by-address params))) (defn diff --git a/src/clj/youyesyet/routes/home.clj b/src/clj/youyesyet/routes/home.clj index 9fbc094..eeb3722 100644 --- a/src/clj/youyesyet/routes/home.clj +++ b/src/clj/youyesyet/routes/home.clj @@ -57,7 +57,7 @@ [session (:session request) username (:user session) user (if username (db-core/get-canvasser-by-username db-core/*db* {:username username})) - roles (if user (db-core/get-roles-by-canvasser db-core/*db* {:canvasser (:id user)}))] + roles (if user (db-core/list-roles-by-canvasser db-core/*db* {:id (:id user)}))] (cond roles (layout/render "roles.html" {:title (str "Welcome " (:fullname user) ", what do you want to do?") diff --git a/youyesyet.adl.xml b/youyesyet.adl.xml index 98b0593..de657b5 100644 --- a/youyesyet.adl.xml +++ b/youyesyet.adl.xml @@ -3,6 +3,7 @@ "http://www.journeyman.cc/adl/stable/adl/schemas/adl-1.4.1.dtd" --> <application name="youyesyet" version="0.1.1" xmlns="http://bowyer.journeyman.cc/adl/1.4.1/" + xmlns:html="http://www.w3.org/1999/xhtml" xmlns:adl="http://bowyer.journeyman.cc/adl/1.4.1/"> <documentation> A web-app intended to be used by canvassers campaigning for a 'Yes' vote in the second independence referendum. @@ -12,9 +13,34 @@ There must also be an administrative interface through which privileged users can set the system up and authorise canvassers, and a 'followup' interface through which issue-expert specialist canvassers can address particular electors' queries. </documentation> <content> - <head> </head> + <head> + <html:meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> + <html:meta name="viewport" content="width=device-width, initial-scale=1"/> + <html:link rel="stylesheet" type="text/css" href="css/yyy-common.css" /> + <html:link rel="stylesheet" type="text/css" href="css/yyy-site.css" /> + <html:link rel="stylesheet" type="text/css" href="css/spinner.css" /> + <html:link href="https://fonts.googleapis.com/css?family=Archivo+Black|Archivo+Narrow" rel="stylesheet"/> + <html:title>{{site-title}}: {{title}}</html:title> + </head> <top> </top> - <foot> </foot> + <foot> + <html:footer> + <html:div id="credits"> + <html:div> + <html:img src="img/credits/ric-logo.png" width="24" height="24"/> + A project of the + <html:a href="https://radical.scot/">Radical Independence Campaign</html:a> || + Version {{version}} + </html:div> + <html:div> + <html:img height="16" width="16" alt="Clojure" src="img/credits/luminus-logo.png"/>Built with <html:a href="http://www.luminusweb.net/">LuminusWeb</html:a> || + <html:img height="16" width="16" alt="Clojure" src="img/credits/clojure-icon.gif"/> Powered by <html:a href="http://clojure.org">Clojure</html:a> || + <html:img height="16" width="16" alt="GitHub" src="img/credits/github-logo-transparent.png"/>Find me/fork me on <html:a href="https://github.com/simon-brooke/smeagol">Github</html:a> || + <html:img height="16" width="16" alt="Free Software Foundation" src="img/credits/gnu.small.png"/>Licensed under the <html:a href="http://www.gnu.org/licenses/gpl-2.0.html">GNU General Public License version 2.0</html:a> + </html:div> + </html:div> + </html:footer> + </foot> </content> <typedef name="postcode" type="string" pattern="^([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})$" size="16"> @@ -143,7 +169,7 @@ <prompt prompt="id" locale="en-GB"/> </property> </key> - <property required="true" type="integer" name="address_id" column="address_id" + <property required="true" type="entity" name="address_id" column="address_id" entity="addresses" farkey="id"> <prompt prompt="address_id" locale="en-GB"/> </property> @@ -218,7 +244,7 @@ <property type="entity" name="elector_id" column="elector_id" entity="electors" farkey="id"> <prompt prompt="elector_id" locale="en-GB"/> </property> - <property required="true" type="integer" name="address_id" column="address_id" + <property required="true" type="entity" name="address_id" column="address_id" entity="addresses" farkey="id"> <prompt prompt="address_id" locale="en-GB"/> </property> @@ -369,7 +395,7 @@ entity="followuprequests" farkey="id"> <prompt prompt="request_id" locale="en-GB"/> </property> - <property required="true" type="integer" name="actor" column="actor" entity="canvassers" + <property required="true" type="entity" name="actor" column="actor" entity="canvassers" farkey="id"> <prompt prompt="actor" locale="en-GB"/> </property> @@ -392,7 +418,7 @@ </entity> <entity name="issueexpertise" magnitude="5"> <documentation>Link table</documentation> - <property required="true" type="integer" name="canvasser_id" column="canvasser_id" + <property required="true" type="entity" name="canvasser_id" column="canvasser_id" entity="canvassers" farkey="id"> <prompt prompt="canvasser_id" locale="en-GB"/> </property> diff --git a/youyesyet.canonical.adl.xml b/youyesyet.canonical.adl.xml index 18a2de3..8fb571f 100644 --- a/youyesyet.canonical.adl.xml +++ b/youyesyet.canonical.adl.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- DOCTYPE application PUBLIC "-//JOURNEYMAN//DTD ADL 1.4.1//EN" "http://www.journeyman.cc/adl/stable/adl/schemas/adl-1.4.1.dtd" --> -<application xmlns="http://bowyer.journeyman.cc/adl/1.4.1/" xmlns:adl="http://bowyer.journeyman.cc/adl/1.4.1/" name="youyesyet" version="0.1.1"> +<application xmlns="http://bowyer.journeyman.cc/adl/1.4.1/" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:adl="http://bowyer.journeyman.cc/adl/1.4.1/" name="youyesyet" version="0.1.1"> <!-- *************************************************************************** * @@ -22,9 +22,34 @@ There must also be an administrative interface through which privileged users can set the system up and authorise canvassers, and a 'followup' interface through which issue-expert specialist canvassers can address particular electors' queries. </documentation> <content> - <head> </head> + <head> + <html:meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> + <html:meta name="viewport" content="width=device-width, initial-scale=1"/> + <html:link rel="stylesheet" type="text/css" href="css/yyy-common.css"/> + <html:link rel="stylesheet" type="text/css" href="css/yyy-site.css"/> + <html:link rel="stylesheet" type="text/css" href="css/spinner.css"/> + <html:link href="https://fonts.googleapis.com/css?family=Archivo+Black|Archivo+Narrow" rel="stylesheet"/> + <html:title>{{site-title}}: {{title}}</html:title> + </head> <top> </top> - <foot> </foot> + <foot> + <html:footer> + <html:div id="credits"> + <html:div> + <html:img src="img/credits/ric-logo.png" width="24" height="24"/> + A project of the + <html:a href="https://radical.scot/">Radical Independence Campaign</html:a> || + Version {{version}} + </html:div> + <html:div> + <html:img height="16" width="16" alt="Clojure" src="img/credits/luminus-logo.png"/>Built with <html:a href="http://www.luminusweb.net/">LuminusWeb</html:a> || + <html:img height="16" width="16" alt="Clojure" src="img/credits/clojure-icon.gif"/> Powered by <html:a href="http://clojure.org">Clojure</html:a> || + <html:img height="16" width="16" alt="GitHub" src="img/credits/github-logo-transparent.png"/>Find me/fork me on <html:a href="https://github.com/simon-brooke/smeagol">Github</html:a> || + <html:img height="16" width="16" alt="Free Software Foundation" src="img/credits/gnu.small.png"/>Licensed under the <html:a href="http://www.gnu.org/licenses/gpl-2.0.html">GNU General Public License version 2.0</html:a> + </html:div> + </html:div> + </html:footer> + </foot> </content> <typedef name="postcode" type="string" pattern="^([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})$" size="16"> <documentation>See @@ -177,7 +202,7 @@ <prompt prompt="id" locale="en-GB"/> </property> </key> - <property required="true" type="integer" name="address_id" column="address_id" entity="addresses" farkey="id"> + <property required="true" type="entity" name="address_id" column="address_id" entity="addresses" farkey="id"> <prompt prompt="address_id" locale="en-GB"/> </property> <property required="true" type="entity" name="canvasser_id" column="canvasser_id" entity="canvassers" farkey="id"> @@ -294,7 +319,7 @@ <property type="entity" name="elector_id" column="elector_id" entity="electors" farkey="id"> <prompt prompt="elector_id" locale="en-GB"/> </property> - <property required="true" type="integer" name="address_id" column="address_id" entity="addresses" farkey="id"> + <property required="true" type="entity" name="address_id" column="address_id" entity="addresses" farkey="id"> <prompt prompt="address_id" locale="en-GB"/> </property> <property type="string" name="phone" column="phone" size="16"> @@ -484,7 +509,7 @@ <property required="true" type="entity" name="request_id" column="request_id" entity="followuprequests" farkey="id"> <prompt prompt="request_id" locale="en-GB"/> </property> - <property required="true" type="integer" name="actor" column="actor" entity="canvassers" farkey="id"> + <property required="true" type="entity" name="actor" column="actor" entity="canvassers" farkey="id"> <prompt prompt="actor" locale="en-GB"/> </property> <property required="true" default="" type="timestamp" name="date" column="date"> @@ -517,7 +542,7 @@ </documentation> </property> </key> - <property required="true" type="integer" name="canvasser_id" column="canvasser_id" entity="canvassers" farkey="id"> + <property required="true" type="entity" name="canvasser_id" column="canvasser_id" entity="canvassers" farkey="id"> <prompt prompt="canvasser_id" locale="en-GB"/> </property> <property required="true" type="entity" name="issue_id" column="issue_id" entity="issues" farkey="id">