Le code source de Galette

Galette est un logiciel libre sous licence GPL version 3, écrit en PHP. Galette n’est compatible qu’avec PHP en version 5.6 ou plus récente.

Nomenclature des fichiers

Les fichiers de galette sont répartis dans différents dossiers, dont voici un bref aperçu :

  • cache : dossier de cache utilisé par Smarty et TCPDF
  • config : les fichiers de configuration
  • data : conteneur global pour les données
    • attachments : systfichiers attachés aux e-mailings
    • cache : système de cache
    • exports : dossier dans lequel seront stockés les exports CSV
    • files : stockage des fichiers joints via les champs dynamiques
    • imports : dossier dans lequel seront stockés les fichiers CSV à importer
    • logs : fichiers logs produits par Analog
    • photos : dossier de stockage des photos des membres
    • tempimages : dossier de stockage des imagestemporaires du captcha
    • templates_c : dossier de compilation des templates Smarty
  • docs
  • includes : bibliothèques, fonctions et initialisation de Galette
  • install : scripts d’installation
  • lang : fichiers de traduction gettext (.mo), scripts d’extraction des chaînes depuis le code source, fichiers de langue compilés
  • lib : les bibliothèques internes
    • Galette : la bibliothèque Galette
      • Common : classes Galette\Commons
      • Core : classes Galette\Core
        • Authentication.php
        • CheckModules.php
  • plugins : dossier de stockage des plugins
  • public : pages publiques
  • templates : ensembles de templates Smarty
    • default : thème par défaut de Galette

Conventions d’écriture

Note

Le standard pour les conventions d’écriture est passé de PEAR à PSR2 depuis Galette 0.9.

Le code source de Galette se doit de suivre les conventions d’écriture PSR2. Respecter une convention d’écriture permet d’obtenir un code plus lisible ; la syntaxe étant invariable d’un fichier à l’autre.

Vous pourrez utiliser PHP Code Sniffer sur le code produit pour vous assurer du respect des règles de codage. Certains avertissements peuvent être ignorés, mais les potentielles erreurs doivent toutes être corrigées. Pour lancer une vérification automatique, utilisez la commande phpcs :

$ phpcs --standard=PSR2 lib/Galette/Core/Authentication.php

FILE: .../galette/lib/Galette/Core/Authentication.php
----------------------------------------------------------------------
FOUND 4 ERRORS AFFECTING 2 LINES
----------------------------------------------------------------------
 225 | ERROR | [x] Expected 0 spaces after opening bracket; 1 found
 225 | ERROR | [x] Expected 0 spaces before closing bracket; 1 found
 252 | ERROR | [x] Incorrect spacing between argument "$only_name"
     |       |     and equals sign; expected 1 but found 0
 252 | ERROR | [x] Incorrect spacing between default value and equals
     |       |     sign for argument "$only_name"; expected 1 but
     |       |     found 0
----------------------------------------------------------------------
PHPCBF CAN FIX THE 4 MARKED SNIFF VIOLATIONS AUTOMATICALLY
----------------------------------------------------------------------

Time: 105ms; Memory: 6.75Mb

Galette est à partir de la version 0.7 sous licence GPL version 3 (ou supérieure). L’ensemble des fichiers source PHP doit en contenir la mention ; selon le modèle suivant (issu de la classe Authentication de Galette) :

<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * Abstract authentication class for galette
 *
 * PHP version 5
 *
 * Copyright © 2009-2011 The Galette Team
 *
 * This file is part of Galette (http://galette.eu).
 *
 * Galette is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Galette is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Galette. If not, see <http://www.gnu.org/licenses/>.
 *
 * @category  Authentication
 * @package   Galette
 *
 * @author    Johan Cwiklinski <johan@x-tnd.be>
 * @copyright 2009-2011 The Galette Team
 * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or later
 * @version   SVN: $Id$
 * @link      http://galette.eu
 * @since     Available since 0.7dev - 2009-02-28
 */

/**
 * Abstract authentication class for galette
 *
 * @category  Classes
 * @name      Authentication
 * @package   Galette
 * @author    Johan Cwiklinski <johan@x-tnd.be>
 * @copyright 2009-2011 The Galette Team
 * @license   http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or later
 * @link      http://galette.eu
 * @since     Available since 0.7dev - 2009-02-28
*/
abstract class Authentication()
{
   /**
    * Main constructor
    */
   public function __construct()
   {
      //do something :)
   }
}

Ce modèle s’applique également aux autres fichiers PHP (qui ne sont pas des classes donc), il conviendrait en ce cas de ne pas conserver la délcaration de la classe et le bloc de documentation qui la précède.

Pour une meilleure compréhension du code pour l’ensemble des intervenants, on essaiera de documenter au maximum le code produit.

Créer une release

Les releases sont créées à partir de tags dans le dépôt Git. Pour obtenir une archive de Galette 0.9, il faut effectuer :

$ git archive --prefix=galette-0.9/ 0.9 | bzip2 > galette-0.9.tar.bz2

Notez que cette archive ne contiendra pas les bibliothèques externes (Smarty, Zend, tcpdf, …); il vous faudra les ajouter au fichier galetee-0.9.tar.bz2 obtenu.

A toutes fins utiles, voici une partie du script utilisé pour construire l’archive de la nightly :

cd /path/to/galette/clone
git archive --prefix=galette-dev/ develop galette | bzip2 > /tmp/galette-dev.tar.bz2
cd /tmp
tar xjf galette-dev.tar.bz2 && rm -f galette-dev.tar.bz2
cd galette-dev/galette
echo -n "Installing deps..."
composer install --no-dev -o --quiet
echo " Done"
pushd vendor > /dev/null
# Cleanup vendors
echo -n "Cleaning deps..."
find ./ -name test -or -name tests -type d -exec rm -rf {} \; 2>1 > /dev/null
find ./ -name doc -or -name docs -type d -exec rm -rf {} \; 2>1 > /dev/null
find ./ -name example -or -name examples -type d -exec rm -rf {} \; 2>1 > /dev/null
pushd tecnickcom/tcpdf > /dev/null
cp -a fonts fonts.orig
rm -rf fonts/*
cp -a fonts.orig/dejavusans.* fonts/
cp -a fonts.orig/dejavusansb.* fonts/
cp -a fonts.orig/dejavusansbi.* fonts/
cp -a fonts.orig/dejavusansi.* fonts/
cp -a fonts.orig/dejavu-fonts-ttf-2.34 fonts/
cp -a fonts.orig/helvetica.php fonts/
cp -a fonts.orig/zapfdingbats.php fonts/
rm -rf fonts.orig
popd > /dev/null
echo " Done"
popd > /dev/null
echo -n "Compressing..."
tar cjf galette-dev.tar.bz2 galette-dev
echo " Done"

Finalement, l’archive peut être signée, avant sa mise en ligne (pour vérification ultérieure de l’intégrité de l’archive) :

$ gpg --detach-sign --armor ./galette-0.9.tar.bz2

Note

Durant les phases de développement, un peu de déboguage sera peut-être nécéssaire…

Il vous sera possible de modifier certains comportements de Galette (niveau de verbosité, mode de l’application, …).