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>