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és dans le wiki du conseil
 
  12 d'administration. Elle est formée sous forme d'une série de pages, une par
 
  15 Cela donne l'aboresence suivante :
 
  26 Chaque page doit ressembler à :
 
  33     email: violette@example.org
 
  35     membership_fee_paid_on: 2013-05-25
 
  38     Violette sait programmer en Ruby, on peut lui demander si on a besoin de
 
  41 Le début de chaque page est un morceau de [YAML]. Il doit contenir les entrées
 
  45     Le nom (complet) du membre.
 
  47     L'adresse postale du membre.
 
  49     L'adresse email du membre. C'est à cette adresse que seront envoyés les
 
  50     messages de l'assemblée générale et les rappels de cotisation.
 
  52     Date d'adhésion à l'association.
 
  53 =`membership_fee_paid_on`=
 
  54     Date du paiement de la dernière cotisation.
 
  56 Le reste de la page peut servir à noter ce qu'on veut.
 
  58 [YAML]: http://yaml.org/
 
  63 Voici le détail des scripts utilisés. On peut se faire une idée de leurs
 
  64 fonctionalités respectives en lisant les cas d'utilisation dans les fichiers
 
  67 Le chemin vers la racine du clone du wiki du conseil d'amnisitration est
 
  68 spécifié par la variable d'environnement `NOS_OIGNONS_BOARD_WIKI_PATH`. Si
 
  69 cette dernière n'est pas spécifié, les scripts cherchent un répertoire
 
  70 `Membres` à la racine du Git courant, et si ce n'est pas le cas, dans
 
  71 le répertoire `wiki-ca` du répertoire parent du Git courant.
 
  76 Affiche sur la sortie standard les adresses emails des membres à jour de
 
  82 `pre-commit` hook pour Git. Ce dernier est avant tout là pour éviter de pouvoir
 
  83 enregistrer des informations invalides dans la base des membres depuis Ikiwiki.
 
  84 Il est nécessaire de le configurer à chaque fois qu'on clone le dépôt du wiki du
 
  85 C.A. (en faisant un lien symbolique dans `.git/hooks/pre-commit`).
 
  90 `pre-commit` hook pour Git. Ce dernier est là pour éviter de pouvoir enregistrer
 
  91 des informations invalides dans la base des membres. Il doit être configuré dans
 
  92 le dépôt central du wiki du C.A. (via un lien symbolique dans
 
  93 `.git/hooks/pre-receive`).
 
  95 `update-ag-subscribers`
 
  96 -----------------------
 
  98 Met à jour la liste des emails inscrites à la liste ag@ par rapport aux membres
 
  99 à jour de cotisation. À exécuter à travers un *cron*. A besoin de pouvoir
 
 100 lancer les commandes `list_members`, `add_members` et `remove_members` via
 
 101 `sudo` sur le compte `list`.
 
 103 `send-membership-reminders`
 
 104 ---------------------------
 
 106 Préviens les membres qu'il faut renouveller leur cotisation.
 
 108 Le fichier utiliser pour garder la liste des envois déjà effectués est soit
 
 109 celui indiqué par la variable d'environnement `NOS_OIGNONS_REMINDER_DB`, ou
 
 110 le fichier si elle est vide `var/reminders.yaml`.
 
 115 L'essentiel du code est en Ruby. Les dépendences sont gérés avec Bundler. Les
 
 116 tests d'intégrations sont fait avec Cucumber.
 
 118 Installer les paquets Debian qui vont bien (sur Wheezy) :
 
 120     apt-get install ruby1.9.1 bundler
 
 122 Pour récupérer les dépendences :
 
 124     ruby1.9.1 /usr/bin/bundle install --path=vendor/bundle
 
 129 Installer les paquets Debian qui vont bien (sur Wheezy) :
 
 131     apt-get install ruby1.9.1 bundler
 
 133 Installer les dépendences :
 
 135     ruby1.9.1 /usr/bin/bundle install --deployment \
 
 136                                       --without=development \
 
 138     chmod -R o+rX vendor/bundle
 
 140 Il faut donner les droits d'écriture à `wiki-ca` sur le répertoire `var`.
 
 142 Pour rendre facilement accessible `list-members-emails`, on peut ajouter dans
 
 143 `/usr/local/bin` un mini script tel que celui-ci :
 
 146     NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src \
 
 147         /srv/ikiwiki/wiki-ca/gestion-adh/bin/list-emails
 
 149 Ne pas oublier de le rendre exécutable.
 
 151 Pour permettre au script `update-ag-subscribers` de fonctionner, il est
 
 152 nécessaire de l'autoriser à exécuter certaines commandes de Mailman.
 
 153 Pour cela, on va créer un fichier dans `/etc/sudoers.d` :
 
 155     Defaults:wiki-ca !requiretty
 
 157     Cmnd_Alias AG_MANAGEMENT = /usr/sbin/list_members ag,\
 
 158                                /usr/sbin/add_members -r - ag,\
 
 159                                /usr/sbin/remove_members -f - ag
 
 161     wiki-ca ALL = (list) NOPASSWD: AG_MANAGEMENT
 
 163 Ensuite, pour exécuter régulièrement les scripts via le *crontab* du compte
 
 164 `wiki-ca`, il faut y ajouter :
 
 166     42 * * * * BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src ruby1.9.1 /srv/ikiwiki/wiki-ca/gestion-adh/bin/update-ag-subscribers
 
 167     42 6 * * * BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src ruby1.9.1 /srv/ikiwiki/wiki-ca/gestion-adh/bin/send-membership-reminders
 
 168     21 0 1 * * BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src ruby1.9.1 /srv/ikiwiki/wiki-ca/gestion-adh/bin/send-member-emails-to-advisors
 
 170 Pour installer le `pre-commit` *hook* sur le dépôt utilisé par
 
 171 Ikiwiki, on met dans `/srv/ikiwiki/wiki-ca/src/.git/hooks/pre-commit` :
 
 173     if ! BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile ruby1.9.1 /srv/ikiwiki/wiki-ca/gestion-adh/bin/pre-commit-hook; then
 
 174             # Reset changes that do not pass the pre-commit hook to prevent
 
 175             # wrong changes to lay in the Ikiwiki source directory.
 
 180 Ne pas oublier de le rendre exécutable.
 
 182 Pour installer le `pre-receive` *hook* sur le dépôt central, on met dans
 
 183 `/srv/git/.gitolite/hooks/wiki-ca/hooks/pre-receive` :
 
 186     BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile ruby1.9.1 /srv/ikiwiki/wiki-ca/gestion-adh/bin/pre-receive-hook
 
 188 Ne pas oublier de le rendre exécutable. Il faut ensuite faire un lien symbolique :
 
 190     ln -s ../../../.gitolite/hooks/wiki-ca/pre-receive /srv/git/repositories/wiki-ca.git/hooks/pre-receive