Commit graph

1439 commits

Author SHA1 Message Date
Paul Chavard
15b1499e5d Use state change methods on dossier in dossier controller 2018-11-27 12:49:40 +01:00
Paul Chavard
febf625dd9 Make difference between error and empty geo json 2018-11-27 12:36:10 +01:00
Paul Chavard
f2e7feec1d Do not send error json to backend - it doesn’t need it and it creates bad data 2018-11-27 11:45:24 +01:00
gregoirenovel
e8c24c27e5 [Fix #110] Remove any reference left to facades 2018-11-22 11:25:55 +01:00
gregoirenovel
dc89c7f530 [Fix #3027] Redirect to the demarches index after a demarche deletion 2018-11-22 02:06:48 +01:00
gregoirenovel
d0ec53a494 Move accessibilite to the root controller 2018-11-22 02:00:54 +01:00
gregoirenovel
82d764e340 Move tour_de_france to the root controller 2018-11-22 02:00:54 +01:00
Chaïb Martinez
0e8d235800 Add some params to track forms submissions 2018-11-21 18:25:47 +01:00
Mathieu Magnin
3ce9dd39af [Fix #3008] Soft delete demarche button in manager 2018-11-21 14:29:42 +01:00
Paul Chavard
c99ef811b6 Do not save error json in database 2018-11-21 13:03:01 +01:00
Paul Chavard
49c872fb97 Fail fast if passed champ_id is invalid 2018-11-21 13:03:01 +01:00
Paul Chavard
d43068ace5 Disable carto for new procedures 2018-11-20 12:14:10 +01:00
Paul Chavard
2462e42b53 Stop using legacy api carto after migration 2018-11-20 10:53:14 +01:00
Frederic Merizen
101e8e2588 [#2999] Rediriger vers la bonne page apres login
(ne corrige pas le cas ou l'utilisateur est passe par le mail de confirmation)
2018-11-16 15:44:20 +01:00
Paul Chavard
2eb61bd6ed Move dossier invites handler to invites controller 2018-11-14 15:16:49 +01:00
simon lehericey
fb76197404 SessionController: flipflop trusted device 2018-11-13 10:41:45 +01:00
simon lehericey
36621bffeb FlipFlop: enable for gestionnaire 2018-11-13 10:41:45 +01:00
simon lehericey
457bc13c75 SessionController: do not display 'Connecté' when a login_link is required 2018-11-13 10:41:45 +01:00
simon lehericey
87967568b7 SessionController: if a admin is login in, redirect to admin page 2018-11-13 10:41:45 +01:00
simon lehericey
0d8d2de5a6 Session: add trusted_device cookie 2018-11-13 10:41:45 +01:00
simon lehericey
5690599289 Session: send a mail to confirm gestionnaire login 2018-11-13 10:41:45 +01:00
Pierre de La Morinerie
c7ac43cfe7 confirmation: add a dedicated page with confirmation instructions
Fix #2586
2018-11-08 16:20:05 +01:00
Paul Chavard
624b442cd7 Remove “Outil de changement d'état d'un dossier” 2018-11-08 14:56:45 +01:00
Paul Chavard
80189def98 Remove n+1 calls from API queries 2018-11-08 14:45:09 +01:00
Chaïb Martinez
8d02b4dbdf Add Matomo Suivi page 2018-11-08 14:25:37 +01:00
Paul Chavard
a7de2e68ed Refactor types_de_champ views to use service instead of facade 2018-11-07 11:36:10 +01:00
Mathieu Magnin
62c01706df [Fix #2867] fix default sort for administrate 2018-11-06 19:22:01 +01:00
Pierre de La Morinerie
b0541fba79 users: sign-in after confirming an account within a short time 2018-11-06 18:24:34 +01:00
Frederic Merizen
d564eb1225 [#835] Report failed and successful invitations 2018-11-06 16:40:42 +01:00
Frederic Merizen
8cf235f2fd [#835] Enable html5 validation of multiple mails 2018-11-06 15:44:43 +01:00
Frederic Merizen
c7358a8f53 [Fix #835] Enable asking for multiple avis at the same time 2018-11-06 15:44:43 +01:00
Frederic Merizen
31ca0552ab [#835] Extract avis creation into concern 2018-11-06 15:44:43 +01:00
gregoirenovel
19a6391dc8 [#835] Use the create_avis_params method instead of the params hash 2018-11-06 15:44:43 +01:00
Paul Chavard
cfd1950e17 Migrate commencer to new_user 2018-11-01 13:10:41 +01:00
Paul Chavard
e391fe6bec Clarify procedure path availability code 2018-10-30 15:59:37 +01:00
Paul Chavard
6e4d111e09 Refactor and fix procedure update error handling 2018-10-30 15:59:37 +01:00
Mathieu Magnin
e90c541ab4 [Fix #2276] When service creation fails form is not cleared 2018-10-30 15:49:18 +01:00
gregoirenovel
6bc1a8cb71 Remove the confirmation button from the manager 2018-10-30 15:24:30 +01:00
Paul Chavard
725e88a89a Rename :procedure_path -> :path 2018-10-30 12:01:45 +01:00
Paul Chavard
f1fd1b38ec Refactor procedures_controller 2018-10-30 12:01:45 +01:00
Paul Chavard
641831864b Refactor commencer actions 2018-10-30 12:01:45 +01:00
simon lehericey
2238e5bd9f Time.now => Time.zone.now 2018-10-26 10:10:20 +00:00
simon lehericey
13ffa61435 DateTime.now => Time.zone.now 2018-10-26 10:10:20 +00:00
Paul Chavard
fba0fad22e Show warning on dossier pages when procedure is brouillon 2018-10-25 18:05:47 +02:00
Paul Chavard
72db9084a8 Fix old carto exception when no selection is passed 2018-10-24 13:16:50 +02:00
Paul Chavard
c0344fc30e Fix procedures with multiple dossier link champs 2018-10-24 10:44:28 +02:00
Paul Chavard
5a8a4b393f Add RPG carte source 2018-10-23 18:13:44 +02:00
Frederic Merizen
7baa239095 [#2604] Introduce errors when retrieving ProcedurePresentation 2018-10-23 16:34:38 +02:00
Frederic Merizen
dd80cc280a [#2604] Extract method in ProceduresController 2018-10-23 16:34:19 +02:00
Paul Chavard
c8c75fc254 Better handle empty user selection layers 2018-10-23 09:35:25 +02:00
Paul Chavard
99e1a20d98 Add champ carte endpoint 2018-10-23 09:35:25 +02:00
Paul Chavard
53a261f424 Don’t rely on a decorator for ProcedureSerializer#geographic_information 2018-10-22 23:28:16 +02:00
Paul Chavard
4ebc0b7f4c Refactor link attribute generation on ProcedureSerializer 2018-10-22 23:28:16 +02:00
Paul Chavard
e5d8d351ba Fix sentry errors in old carto module 2018-10-22 15:40:19 +02:00
Frederic Merizen
4b2a06acb5 [#2874] Show archived / followed status of dossier in search result 2018-10-18 16:05:19 +02:00
Pierre de La Morinerie
65bdfacd8c dossier: remove old SIRET code, controllers and views 2018-10-18 15:46:00 +02:00
simon lehericey
fd9bdbf31d StatsController: avoid doing useless queries 2018-10-18 11:50:43 +02:00
Pierre de La Morinerie
93f1a53dfc dossier: add page for etablissement 2018-10-17 10:37:06 +02:00
Pierre de La Morinerie
310f4b92d1 dossier: add action to save SIRET number 2018-10-17 10:37:06 +02:00
Pierre de La Morinerie
54ba0f8e50 dossier: add new page for SIRET identification 2018-10-17 10:37:06 +02:00
simon lehericey
aff085bb6b StatsController: avoid division by nil 2018-10-16 18:02:00 +02:00
gregoirenovel
99894961a5 AddressController#get → #suggestions 2018-10-16 09:38:53 +02:00
gregoirenovel
43f9fc93de AddressController#get_address_point → #geocode 2018-10-16 09:38:53 +02:00
gregoirenovel
79ebdc3443 Ban::SearchController → AddressController 2018-10-16 09:38:53 +02:00
gregoirenovel
22088b167d Remove ApiAdresse::Geocodeur 2018-10-16 09:33:16 +02:00
gregoirenovel
7af41b35a2 ApiAdresse::AddressAdapter#list → #get_suggestions 2018-10-16 09:33:16 +02:00
gregoirenovel
517c0ad3fc ApiAdresse::AddressRetriever → ApiAdresse::AddressAdapter 2018-10-16 09:33:16 +02:00
gregoirenovel
5e9e913dce Carto::Geocodeur → ApiAdresse::Geocodeur 2018-10-15 20:55:46 +02:00
gregoirenovel
dac2019675 Carto::Bano → ApiAdresse 2018-10-15 20:55:46 +02:00
gregoirenovel
22beb41240 Unify #generate_qp with #generate_cadastre 2018-10-15 16:45:30 +02:00
gregoirenovel
2ed4c1da1c Use round brackets 2018-10-15 16:45:30 +02:00
simon lehericey
3d51b7f4a3 so crazy right now 2018-10-15 14:55:07 +02:00
simon lehericey
21e3dc1498 Let the stats be great again 2018-10-15 14:55:07 +02:00
simon lehericey
17b100b4e9 ControllerStat: renaming 2018-10-15 14:55:07 +02:00
Paul Chavard
c6a28d1444 Cleanup carto save 2018-10-14 12:34:44 +02:00
Paul Chavard
dff4f2116a Move geographical zones list to a partial 2018-10-14 12:34:43 +02:00
Paul Chavard
b5a3fc76fb Remove legacy carto routes 2018-10-14 12:34:43 +02:00
Paul Chavard
59c1b24f3c Change demarche modifee message
fix #2821
2018-10-13 11:06:31 +02:00
simon lehericey
888bbee097 [fix #2818] DossierController: ensure save_draft is authorized 2018-10-12 12:14:49 +02:00
gregoirenovel
c8f872c566 InviteUser → Invite 2018-10-10 12:07:10 +02:00
gregoirenovel
46d02d3e2b Remove a return 2018-10-10 10:38:57 +02:00
gregoirenovel
89dec3d363 Add a variable to ease code reading 2018-10-10 10:38:57 +02:00
gregoirenovel
4e2964aec3 Unify code in Users::Dossiers::InvitesController#show 2018-10-10 10:38:57 +02:00
gregoirenovel
662349c8bb Remove InviteDossierFacades 2018-10-10 09:36:05 +02:00
Frederic Merizen
fc157c3e4c [#2750] Move sorted_ids to ProcedurePresentation 2018-10-10 09:07:57 +02:00
Frederic Merizen
2e9dafb4c3 [#2750] Move filtered_ids to ProcedurePresentation 2018-10-10 09:07:57 +02:00
Frederic Merizen
0e9b40ccf6 [#2750] Move fields from Procedure to ProcedurePresentation 2018-10-10 09:07:57 +02:00
Frederic Merizen
efcac5192a [#2750] Move fields_for_select to ProcedurePresentation 2018-10-10 09:07:57 +02:00
gregoirenovel
f3caa8ef7f Remove apipie (and maruku) 2018-10-09 17:23:07 +02:00
gregoirenovel
98d348aab1 Remove the delete demarche feature for admins 2018-10-09 16:42:32 +02:00
Paul Chavard
bcbfc370b2 Add button in manager to transition démarche in brouillon state
fix #2565
2018-10-09 16:14:18 +02:00
Paul Chavard
cc96723475 Allow users to fill dossiers on démarches en brouillon 2018-10-09 15:05:08 +02:00
Frederic Merizen
eafd0e8348 Evite de cacher la whitelist trop longtemps 2018-10-04 18:09:39 +02:00
gregoirenovel
12f0c99b5a Remove FC fields from instructeur table customisation 2018-10-04 13:54:07 +02:00
gregoirenovel
5f8e8caeb5 Stop auto copying the FC infos to the dossier identity 2018-10-04 13:54:07 +02:00
Paul Chavard
44511acfed Do not reload page when instructeur change dossier state
fix #2425
2018-10-04 11:12:43 +02:00
Pierre de La Morinerie
627df7a1f3 session: migrate the password pages to the new design 2018-10-03 15:10:02 +02:00
Pierre de La Morinerie
bfd106ba30 session: migrate the "token confirmation" page to the new design 2018-10-03 15:09:30 +02:00
gregoirenovel
c91a1cf474 Enable Style/SymbolArray 2018-10-03 12:15:48 +02:00
gregoirenovel
d9d4f6fe20 Enable Style/SymbolProc 2018-10-03 12:15:48 +02:00
gregoirenovel
a171186dd8 Enable Style/TrailingCommaInHashLiteral 2018-10-03 12:03:21 +02:00
gregoirenovel
d1439f8a52 Enable Style/YodaCondition 2018-10-03 12:00:17 +02:00
Paul Chavard
941c529b2c Remove CGU checkbox
fix #2725
2018-10-03 08:59:02 +02:00
Mathieu Magnin
a029aa62b1 [Fix #2674] Add Services to manager 2018-10-02 16:17:17 +02:00
Pierre de La Morinerie
36c1aa118d dossier: remove RecapitulatifController
And add a redirection to the new URLs.
2018-10-02 15:42:29 +02:00
Pierre de La Morinerie
bf9f427299 dossier: remove DescriptionController 2018-10-02 14:40:47 +02:00
Pierre de La Morinerie
3392df0029 dossier: remove CommentairesController 2018-10-02 14:40:38 +02:00
Pierre de La Morinerie
758ccff984 dossier: remove feature flag 2018-10-02 12:25:44 +02:00
gregoirenovel
cf69c28979 Fix scope for logo/notice/deliberation deletion 2018-10-02 11:03:48 +02:00
gregoirenovel
b994fa4206 Do one thing per line 2018-10-01 16:15:46 +02:00
Pierre de La Morinerie
5f1ce48d2e invites: update link to dossier 2018-09-27 17:22:59 +02:00
Pierre de La Morinerie
08dfe7d13a support: update link to messagerie 2018-09-27 17:22:59 +02:00
Paul Chavard
3c66fceba5 Replace password strength js with ujs 2018-09-27 16:00:14 +02:00
simon lehericey
16566b46c0 DossierController: private some methods 2018-09-27 10:24:56 +02:00
simon lehericey
912371fbd6 DossierController: use new token validation 2018-09-27 10:24:56 +02:00
simon lehericey
8dd4a1ca4e ProcedureController: remove useless logger call 2018-09-27 10:24:56 +02:00
simon lehericey
3c95273d6f ProcedureController: use new token validation 2018-09-27 10:24:56 +02:00
simon lehericey
0b2a98cdce ApiController: private some methods 2018-09-27 10:24:56 +02:00
simon lehericey
f7c23bb435 ApiController: remove ensure_token_is_present
An admin without token answer false to admin.api_token_valid?(api_token) with api_token=*
2018-09-27 10:24:56 +02:00
simon lehericey
4a04f2e59f ApiController: check token validity for a given admin 2018-09-27 10:24:56 +02:00
simon lehericey
d576d426f4 ApiController: remove old authenticate logic
The old logic cannot work anymore as we cannot `find_by api_token`
2018-09-27 10:24:56 +02:00
simon lehericey
8c4f8347ca Api Token: store token in an encrypted form 2018-09-27 10:14:32 +02:00
simon lehericey
1997f45d7e Api Token: do not generate one token by default 2018-09-27 10:14:32 +02:00
simon lehericey
17285b0368 Profil: display token only once 2018-09-27 10:14:32 +02:00
simon lehericey
bd04972f65 Profile: move to new design 2018-09-27 10:14:32 +02:00
Paul Chavard
f94a24d7ce Add path field to procedure information form 2018-09-26 10:53:45 +02:00
Mathieu Magnin
2507f963b1 [Fix #1285] Create an endpoint to check password strength 2018-09-26 09:03:04 +02:00
Frederic Merizen
b521095010 [#2258] Notify administrator of problems saving the types de champs 2018-09-25 20:31:42 +02:00
Frederic Merizen
7d382837d9 [Fix #2622] Change filters to proper JSONB 2018-09-24 19:39:01 +02:00
Frederic Merizen
1419e9b73f [#2622] Change sort to proper JSONB 2018-09-24 19:39:01 +02:00
Frederic Merizen
68608307ad [#2622] Change displayed_fields to proper JSONB 2018-09-24 19:39:01 +02:00
gregoirenovel
5b011fef59 [Fix #2652] Add the /tour-de-france page 2018-09-24 18:07:29 +02:00
Pierre de La Morinerie
682e29a211 dossier: refactor the pages permissions
Fixes the invites not being able to create a commentaire.
2018-09-24 17:05:27 +02:00
Pierre de La Morinerie
a5419b2f08 dossier: fix redirection to dossiers/invite 2018-09-24 17:05:27 +02:00
gregoirenovel
7b3a7d2336 [Fix #187] Allow an admin to delete their demarche logo 2018-09-24 13:29:35 +02:00
gregoirenovel
94378e3663 [Fix #2332] Allow the notice deletion 2018-09-24 12:25:10 +02:00
gregoirenovel
535f9004bf Admins can delete the attestation template's logo 2018-09-24 10:15:22 +02:00
gregoirenovel
d649e29bb0 [Fix #1979] Admins can delete the attestation template's signature 2018-09-24 10:15:02 +02:00
gregoirenovel
0c9628c180 Fix some files according the the .editorconfig rules 2018-09-20 16:23:09 +02:00
Paul Chavard
905a715e16 Fix dossier link 2018-09-20 16:05:40 +02:00
gregoirenovel
b317b49b3d Confirmation → activation 2018-09-20 10:43:07 +02:00
Pierre de La Morinerie
e5f4056fe2 invite: fix prefilling the invited user email 2018-09-19 12:41:09 +02:00
Pierre de La Morinerie
bc55afba51 invite: clarify logic of sign-up redirection 2018-09-19 12:41:09 +02:00
Pierre de La Morinerie
082ef92a99 invite: move invites link to the after_confirmation callback
Refactored from 6a69d958da

The `after_confirmation_path_for` isn't really made to be a callbback.
For instance, it is not executed during tests.

Moving the invitations linking to a proper documented callback allows
the linking to work in a testing environment, when invoking `user.confirm`.
2018-09-19 12:08:28 +02:00
Pierre de La Morinerie
38f6d11c57 dossier: finish feature-switch for enabled new dossier details 2018-09-18 16:48:27 +02:00
Frederic Merizen
63fc0b3bc3 [Fix #2584] Move Field related code to a service 2018-09-18 13:49:34 +02:00
Paul Chavard
18922122b4 Fix SQL ambiguous name error 2018-09-18 13:21:29 +02:00
Paul Chavard
e2f13a8b73 Use helpers rather then view_context 2018-09-18 12:06:27 +02:00
gregoirenovel
f696560a14 Affichage du service dans la liste des démarches 2018-09-18 10:44:49 +02:00
gregoirenovel
cac202342a Remove a new useless helper 2018-09-13 16:27:46 +02:00
gregoirenovel
aba0c1dcd6 Add links to the most popular demarches 2018-09-13 16:27:46 +02:00
gregoirenovel
9fe9f9b616 Add a new demarches page, showing the demarches already done 2018-09-13 16:27:46 +02:00
Frederic Merizen
a94397a70c [Fix #2562] Make dossier filters case insensitive 2018-09-13 10:29:22 +02:00
Paul Chavard
55a9b31b93 Cleanup SIRET champ 2018-09-12 15:53:02 +02:00
Paul Chavard
3f6cc668a7 Implement check_availability route 2018-09-12 12:37:15 +02:00
gregoirenovel
f8a6765367 [Fix #2540] Allow an instructeur to send a dossier to several instructeurs 2018-09-11 18:00:24 +02:00
Paul Chavard
5a794cbb08 Use Procedure#publish_or_reopen! 2018-09-11 10:38:31 +02:00
Paul Chavard
e6485603c4 Add ProcedurePath#valid? 2018-09-11 10:38:31 +02:00
Paul Chavard
de908ef4be Extract ProcedurePath#find_by_path 2018-09-11 10:38:31 +02:00
gregoirenovel
50019e5317 Show user satisfaction in percentages 2018-09-11 10:17:40 +02:00
gregoirenovel
26e0ada3d4 Improve the ratings stats
Make sure that for each data point, we have do not
have any partial data (e.g. a week that hasn’t
finished yet)
2018-09-11 10:17:40 +02:00
gregoirenovel
05d2988f61 Format FeedbackController like the other controllers 2018-09-11 10:10:43 +02:00
gregoirenovel
d504af3216 FeedbacksController should inherit from UserController 2018-09-11 10:10:43 +02:00
Paul Chavard
f3333595a0 Drop text_summary endpoint 2018-09-07 19:41:34 +01:00
Paul Chavard
c49db4b5a4 Add a champs/dossier_link endpoint and use it to fetch dossier info 2018-09-07 19:41:33 +01:00
Paul Chavard
e2a2748e79 Expose authenticated_logged_user! method 2018-09-07 17:11:19 +01:00
Paul Chavard
7e94f7778a Disable csrf forgery protection in test environement 2018-09-07 17:11:19 +01:00
Pierre de La Morinerie
21dc9f8109 messagerie: improve success message 2018-09-07 12:02:26 +02:00
gregoirenovel
23405efd3a Mutualize some code in #update_dossier_and_compute_errors 2018-09-07 10:19:10 +02:00
gregoirenovel
6fe1f912c8 Refactor DossiersController#update
Nested ifs are heavier but easier to understand
as related conditions are visually grouped
2018-09-07 10:19:10 +02:00
gregoirenovel
230bf22b77 Redactor DossierController#update_brouillon 2018-09-07 10:19:10 +02:00
gregoirenovel
f5debfef46 DossierController#draft? → #save_draft? 2018-09-07 10:19:10 +02:00
gregoirenovel
87e59e2bfb Streamline DossierController#update_brouillon and #update 2018-09-07 10:19:10 +02:00
gregoirenovel
1341074325 Add DossierController#update 2018-09-07 10:19:10 +02:00
gregoirenovel
cd46ee06e1 Add DossierController#modifier 2018-09-07 10:19:10 +02:00
gregoirenovel
338ffb8b50 DossierController#update → #update_brouillon 2018-09-07 10:19:10 +02:00
gregoirenovel
5ac8117c69 DossierController#modifier → #brouillon 2018-09-07 10:19:10 +02:00
gregoirenovel
00ecae5f93 Procédure → Démarche 2018-09-05 15:46:24 +02:00
Pierre de La Morinerie
af5df2d661 dossier: add "Messagerie" tab 2018-09-05 14:02:12 +02:00
Pierre de La Morinerie
5cfb200417 dossier: cache the dossier value 2018-09-05 13:56:12 +02:00
gregoirenovel
6b88968889 Formulaire → demande, when not editable 2018-09-05 11:07:11 +02:00
Pierre de La Morinerie
750e1e0c83 gestionnaire: move commentaire creation into a service 2018-09-04 18:52:43 +02:00
gregoirenovel
d05209d28f Make the stats code more robust to empty databases 2018-09-03 17:35:14 +02:00
Paul Chavard
0c582197da Do not send messages to brouillon dossier 2018-08-30 15:12:50 +01:00
Paul Chavard
ea5248dde1 Flatten tags list, cast to array and remove blank elements 2018-08-30 15:12:50 +01:00
Paul Chavard
b60805a54c Use mailto in error message 2018-08-30 15:12:50 +01:00
Paul Chavard
441e123e8a Do not lose form content on errors 2018-08-30 15:12:50 +01:00
gregoirenovel
6a33c30812 Rename the last “Gestionnaire” occurence in the UI to “Instructeur” 2018-08-30 14:42:09 +02:00
Frederic Merizen
37c45f0d29 [#2486] Always order champs
to help activerecord cache the champs collection
2018-08-30 14:13:32 +02:00
gregoirenovel
e60aa0c37b Use scopes when possible 2018-08-30 13:16:14 +02:00
gregoirenovel
47962ef795 Simplify route_authorization 2018-08-30 13:16:14 +02:00
gregoirenovel
bf9f3b40df Remove useless .to_s 2018-08-30 13:16:14 +02:00
gregoirenovel
de48dab031 Alignment 2018-08-30 13:16:14 +02:00
gregoirenovel
15d1b01a90 Code simplification 2018-08-30 13:16:14 +02:00
gregoirenovel
3662b82039 accompagnateur → instructeur 2018-08-29 23:09:08 +02:00
Paul Chavard
5f12ea43a7 Add helpscout webhook 2018-08-29 21:41:14 +01:00
gregoirenovel
4b071ecf06 Use enum to the fullest with Dossier.states 2018-08-29 17:31:08 +02:00
gregoirenovel
2d3b553e4d Use enum to the fullest with TypeDeChamp.type_champs 2018-08-29 17:31:08 +02:00
gregoirenovel
16a719922b Use enum to the fullest with User.loged_in_with_france_connects 2018-08-29 17:31:08 +02:00
Paul Chavard
509613afe6 Use contact_link helper instead of mailto 2018-08-29 16:08:01 +01:00