Code source de Galette

Galette est un logiciel libre sous license GPL version 3, écrit en PHP. Galette est compatible avec PHP 7.1 et plus récent.

Note

Lors du développement, vous pourriez trouver utile un peu de déboguage

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

Système de fichiers

Voici un plan des dossiers utilisés par Galette et queqlues explications sur ces derniers :

  • config: fichiers de configuration
  • data : répertoire de stockage des données
    • attachments : fichiers attachés aux emailings
    • cache : dossier du cache
    • exports : où les exports CSV sont stockés
    • files : fichiers attachés aux adhérents via des champs dynamiques de type fichier
    • imports : emplacement pour les fichiers CSV que vous osuhatez importer
    • logs : fichiers de log
    • photos : photos des adhérents et logos
    • tempimages : images temporaires de captcha
    • templates_c : utilisé pour stocker les gabarits compilés de Smarty
  • docs
  • includes : bibliothèques, fonctions et instanciation de Galette
    • fields_def : définition des champs de certains objets. Une définition des champs trop importante peut causer des problèmes de performances…
    • routes : configuration des routes de Slim
    • smarty_plugins : plugin Smarty spécifique pour la traduction
    • dependencies.php : dépendences pour Slim. Intègre tous les droits des routes
    • galette.inc.php : un des fichiers principaux d’instanciation de Galette
  • install : scripts d’installation
  • lang : fichiers et scripts de traduction
  • lib : framework interne
    • Galette : framework Galette
      • Common : classes Galette\Commons
      • Core : classes Galette\Core
        • Authentication.php
        • CheckModules.php
  • plugins : dossier d’installation des plugins
  • templates : code source des gabarits Smarty
    • default : thème par défaut de Galette

Conventions d’écriture

L code source de Galette doit respecter les conventions d’écriture PSR2. Respecter une convention de codage rend le code source plus aisé à lire, la syntaxe étant identique d’un fichier à l’autre.

Vous pouvez utiliser PHP Code Sniffer sur le code modifié pour vous assurer que les conventions sont respectées. Certains avertissements peuvent être ignorés, mais les erreurs doivent toutes être corrigées. Un exemple de 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 sous licence GPL version 3. Chaque fichier PHP doit contenir les mentions suivantes (cet exemple provint 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 (https://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 <https://www.gnu.org/licenses/>.
 *
 * @category  Authentication
 * @package   Galette
 *
 * @author    Johan Cwiklinski <[email protected]>
 * @copyright 2009-2011 The Galette Team
 * @license   https://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or later
 * @version   SVN: $Id$
 * @link      https://galette.eu
 * @since     Available since 0.7dev - 2009-02-28
 */

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

Si le fichier PHP n’est pas une classe, utilisez le même modèle, mais supprimez la partie concernant la classe.

Pour aider les autres développeurs à comprendre le code, nous essayons de le documenter autant que possible.

Créer une release

Les releases sont crées à partir de tags du dépôt GIT. Par exemple, pour obtenir une archive de Galette 0.9 :

$ 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, …); vous devrez les ajouter au fichier galette-0.9.tar.bz2.

Voici le script utilisé pour l’archive quotidienne de Galette :

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 (pour vérifier l’intégrité du téléchargement) :

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