1 ====================================
2 Gestion des adhésions de Nos oignons
3 ====================================
5 Voici une collection de scripts et de bouts de code qui permettent de gérer les
6 adhésions de Nos oignons conformément aux statuts de l'association.
11 La base des membres est pensée pour être stockée dans le wiki du conseil
12 d'administration. Elle est formée d'une série de pages, une par membre.
14 Cela donne l'aboresence suivante :
25 Chaque page doit ressembler à :
32 email: violette@example.org
34 membership_fee_paid_on: 2013-05-25
37 Violette sait programmer en Ruby, on peut lui demander si on a besoin de
40 Le début de chaque page est un morceau de [YAML]. Il doit contenir les entrées
44 Le nom (complet) du membre.
47 L'adresse postale du membre.
50 L'adresse email du membre. C'est à cette adresse que seront envoyés les
51 messages de l'assemblée générale et les rappels de cotisation.
54 Date d'adhésion à l'association.
56 =`membership_fee_paid_on`=
57 Date du paiement de la dernière cotisation.
59 Le reste de la page peut servir à noter ce qu'on veut.
61 [YAML]: http://yaml.org/
66 Voici le détail des scripts utilisés. On peut se faire une idée de leurs
67 fonctionalités respectives en lisant les cas d'utilisation dans les fichiers
70 Le chemin vers la racine du clone du wiki du conseil d'amnisitration est
71 spécifié par la variable d'environnement `NOS_OIGNONS_BOARD_WIKI_PATH`. Si
72 cette dernière n'est pas spécifiée, les scripts cherchent un répertoire
73 `Membres` à la racine du Git courant, et si ce n'est pas le cas, dans
74 le répertoire `wiki-ca` du répertoire parent du Git courant.
79 Affiche sur la sortie standard les adresses emails des membres à jour de
85 `pre-commit` hook pour Git. Ce dernier est avant tout là pour éviter de pouvoir
86 enregistrer des informations invalides dans la base des membres depuis Ikiwiki.
87 Il est nécessaire de le configurer à chaque fois qu'on clone le dépôt du wiki du
88 C.A. (en faisant un lien symbolique dans `.git/hooks/pre-commit`).
93 `pre-receive` hook pour Git. Ce dernier est là pour éviter de pouvoir enregistrer
94 des informations invalides dans la base des membres. Il doit être configuré dans
95 le dépôt central du wiki du C.A. (via un lien symbolique dans
96 `.git/hooks/pre-receive`).
98 `update-ag-subscribers`
99 -----------------------
101 Met à jour la liste des adresses email inscrites à la liste *ag@* par rapport
102 aux membres à jour de cotisation. À exécuter à travers un *cron*. A besoin de
103 pouvoir se connecter à l’API REST de Mailman 3.
105 La variable d’environnement suivante doit être
106 définie `NOS_OIGNONS_MAILMAN_REST_API_URL` avec par exemple :
107 `https://user:password@mailman.example.org`
109 À défaut, cette dernière sera lue depuis le fichier `mailman-rest-url`
110 dans le dossier indiqué par la variable d’environnemnet `CREDENTIALS_DIRECTORY`
111 (voir [System and Service Credentials](https://systemd.io/CREDENTIALS/) et
112 la procédure de déploiement indiqué plus bas).
114 `send-membership-reminders`
115 ---------------------------
117 Préviens les membres qu'il faut renouveler leur cotisation.
119 Le fichier utilisé pour garder la liste des envois déjà effectués est soit
120 celui indiqué par la variable d'environnement `NOS_OIGNONS_REMINDER_DB`, soit
121 le fichier `var/reminders.yaml` si la variable est vide.
123 `send-member-emails-to-advisors`
124 --------------------------------
126 Envoie la liste des emails des membres à jour de cotisation au comité
129 Ce script a vocation a être executé tous les mois afin que le comité
130 puisse convoquer une assemblée générale extraordinaire, même en cas de
131 défaillance du conseil d'administration.
133 `create-membership-fee-receipt`
134 -------------------------------
136 Permet de créer un reçu de cotisation pour les membres en faisant
139 Exemple d'utilisation :
141 bin/create-membership-fee-receipt 000042 10,00
143 Cela crééra un reçu pour le membre 000042 pour une cotisation d'un montant
144 de 10,00€. Le reçu est généré sous forme d'un fichier PDF dans le répertoire
145 spécifié par la variable d'environnement NOS_OIGNONS_RECEIPTS_DIR (ou le
146 répertoire `receipts` dans le répertoire courant).
148 **Il faut créer le répertoire avant utilisation s'il n'existe pas déjà.**
153 L'essentiel du code est en Ruby. Les dépendances sont gérées avec Bundler. Les
154 tests d'intégrations sont faits avec Cucumber.
156 Installer les paquets Debian qui vont bien (sur Jessie) :
158 apt-get install bundler
160 Pour récupérer les dépendances :
162 bundle install --path=vendor/bundle
167 Installer les paquets Debian qui vont bien (sur Wheezy) :
169 apt-get install bundler
171 Installer les dépendances :
173 bundle install --deployment --without=development --path=vendor/bundle
174 chmod -R o+rX vendor/bundle
176 Il faut donner les droits d'écriture à `wiki-ca` sur le répertoire `var`.
178 Pour rendre facilement accessible `list-members-emails`, on peut ajouter dans
179 `/usr/local/bin` un mini script tel que celui-ci :
182 NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src \
183 /srv/ikiwiki/wiki-ca/gestion-adh/bin/list-emails
185 Ne pas oublier de le rendre exécutable.
188 [services](https://www.freedesktop.org/software/systemd/man/systemd.service.html)
189 et des [timers](https://www.freedesktop.org/software/systemd/man/systemd.timer.html)
190 systemd pour les scripts à utiliser régulièrement.
192 Dans `/etc/systemd/system/gestion-adh-update-ag-subscribers.service` :
195 Description=Update subscribers of the `ag` mailing list according to memberships
199 WorkingDirectory=/srv/ikiwiki/wiki-ca/gestion-adh
201 ExecStart=/srv/ikiwiki/wiki-ca/gestion-adh/bin/update-ag-subscribers
202 Environment=BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src
203 SyslogIdentifier=update-ag-subscribers
209 Dans `/etc/systemd/system/gestion-adh-update-ag-subscribers.timer` :
212 Description=Run update-ag-subscribers every hour
215 RandomizedDelaySec=30min
219 WantedBy=timers.target
221 Il est également nécessaire de configurer le *credential* avec les informations
222 de connexion à Mailman :
224 echo -n 'https://USER:SECRET_PASSWORD@localhost:8001' | sudo systemd-creds encrypt --name=mailman-rest-url -p - - | sudo tee -a /etc/systemd/system/gestion-adh-update-subscribers.service.d/overrides.conf
226 Dans `/etc/systemd/system/gestion-adh-send-membership-reminders.service` :
229 Description=Send reminders to renew membership
233 WorkingDirectory=/srv/ikiwiki/wiki-ca/gestion-adh
235 ExecStart=/srv/ikiwiki/wiki-ca/gestion-adh/bin/send-membership-reminders
236 Environment=BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src
237 SyslogIdentifier=send-membership-reminders
242 ReadWritePaths=/srv/ikiwiki/wiki-ca/gestion-adh/var
244 Dans `/etc/systemd/system/gestion-adh-send-membership-reminders.timer` :
247 Description=Run send-membership-reminders every day
253 WantedBy=timers.target
255 Dans `/etc/systemd/system/gestion-adh-send-member-emails-to-advisors.service` :
258 Description=Send member emails to the advisory board
262 WorkingDirectory=/srv/ikiwiki/wiki-ca/gestion-adh
264 ExecStart=/srv/ikiwiki/wiki-ca/gestion-adh/bin/send-member-emails-to-advisors
265 Environment=BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src
266 SyslogIdentifier=send-member-emails-to-advisors
272 Dans `/etc/systemd/system/gestion-adh-send-member-emails-to-advisors.timer` :
275 Description=Run send-member-emails-to-advisors monthly
281 WantedBy=timers.target
283 Pour installer le `pre-commit` *hook* sur le dépôt utilisé par
284 Ikiwiki, on met dans `/srv/ikiwiki/wiki-ca/src/.git/hooks/pre-commit` :
286 if ! BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile /srv/ikiwiki/wiki-ca/gestion-adh/bin/pre-commit-hook; then
287 # Reset changes that do not pass the pre-commit hook to prevent
288 # wrong changes to lay in the Ikiwiki source directory.
293 Ne pas oublier de le rendre exécutable.
295 Pour installer le `pre-receive` *hook* sur le dépôt central, on met dans
296 `/srv/git/.gitolite/hooks/wiki-ca/hooks/pre-receive` :
299 BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile /srv/ikiwiki/wiki-ca/gestion-adh/bin/pre-receive-hook
301 Ne pas oublier de le rendre exécutable. Il faut ensuite faire un lien symbolique :
303 ln -s ../../../.gitolite/hooks/wiki-ca/pre-receive /srv/git/repositories/wiki-ca.git/hooks/pre-receive
308 Système de gestion des adhésions de Nos oignons
309 Copyright © 2013-2014 Nos oignons <contact@nos-oignons.net>
310 Licence : GNU AGPLv3 ou ultérieur, voir `LICENCE`
313 Copyright © 2010-2011, Google Corporation
314 Licence : Apache 2.0, voir `share/fonts/OpenSans/Apache-2.0`
317 Copyright © 2013 lutopiquant
318 Licence : CC BY-SA 3.0 FR, voir <https://creativecommons.org/licenses/by-sa/3.0/fr/deed.fr>