Phalcon Framework 2.0.13

PDOException: SQLSTATE[HY000] [2006] MySQL server has gone away

/opt/rh/httpd24/root/var/www/html/gss-sports/app/config/Services.php (169)
#0PDO->__construct(mysql:adapter=Mysql;host=maria-gsssports.ile.mtl.qc.ca;dbname=gss_sports;charset=utf8, SecServ-MariaPrd-gss_sports, KtNtEnGaFaKl!McCkVxCdQnNpLjJeBp, Array([1002] => SET NAMES utf8, [3] => 2))
#1Phalcon\Db\Adapter\Pdo->connect(Array([adapter] => Mysql, [host] => maria-gsssports.ile.mtl.qc.ca, [username] => SecServ-MariaPrd-gss_sports, [password] => KtNtEnGaFaKl!McCkVxCdQnNpLjJeBp, [dbname] => gss_sports, [charset] => utf8, [options] => Array([1002] => SET NAMES utf8)))
#2Phalcon\Db\Adapter\Pdo->__construct(Array([adapter] => Mysql, [host] => maria-gsssports.ile.mtl.qc.ca, [username] => SecServ-MariaPrd-gss_sports, [password] => KtNtEnGaFaKl!McCkVxCdQnNpLjJeBp, [dbname] => gss_sports, [charset] => utf8, [options] => Array([1002] => SET NAMES utf8)))
/opt/rh/httpd24/root/var/www/html/gss-sports/app/config/Services.php (169)
<?php
 
namespace GSS\Config;
 
// Phalcon defaults
use Phalcon\DI\FactoryDefault;
use Phalcon\Security;
use Phalcon\Mvc\Url;
use Phalcon\Mvc\Dispatcher;
use Phalcon\Mailer\Manager as MailerManager;
use Phalcon\Db\Adapter\Pdo\Mysql as DbAdapter;
use Phalcon\Session\Adapter\Files as SessionAdapter;
use Phalcon\Translate\Adapter\Database as TranslationAdapter;
 
// GSS Plugins & configs
use GSS\Models\Traduction;
use GSS\Plugins\Assets\Manager as AssetsManager;
use GSS\Plugins\Mvc\View;
use GSS\Plugins\Mvc\View\Error as ViewError;
use GSS\Plugins\Mvc\Dispatcher\Error as DispatchError;
use GSS\Plugins\Mvc\Dispatcher\Security as DispatchSecurity;
use GSS\Plugins\Mvc\Dispatcher\Camelize as DispatchCamelize;
use GSS\Plugins\Mvc\Dispatcher\Rest as DispatchRest;
use GSS\Plugins\Db\Profiler as DbProfiler;
use GSS\Plugins\Db\Logger as DbLogger;
use GSS\Plugins\Filter;
use GSS\Plugins\Tag;
use GSS\Plugins\GSS;
 
// Libs
use SwiftMailer\Loader as SwiftLoader;
 
class Services
{
    
    public function __construct(FactoryDefault $di, Config $config = null)
    {
        /**
         * Configuration objet pour récupérer certaines configuration
         * @var \Phalcon\Config
         */
        $di->setShared('config', $config);
        
        /**
         * Enregistre le service de route
         * @var \GSS\Config\Router;
         */
        $di->setShared('router', function() {
            $router = new Router();
            return $router;
        });
        
        /**
         * URL component utilisé pour générer les URL dans l'application
         * - Configuration du baseUri par défaut
         * (au cas ou l'application serait dans un path spécifique /gss/sports/)
         * @var \Phalcon\Mvc\Url
         */
        $di->setShared('url', function() use ($config) {
            $url = new Url();
            $url->setBaseUri($config->application->baseUri);
            return $url;
        });
        
        /**
         * View component utilisé pour générer les vues dans l'application avec un engin spécifique
         * @var \Phalcon\Mvc\View
         */
        $di->setShared('view', function() use ($di, $config) {
            // Get the events manager
            $eventsManager = $di->getShared('eventsManager');
            
            $error = new ViewError($di);
            $eventsManager->attach('view', $error);
            
            $view = new View();
            $view->setMinify($config->minify);
            $view->setViewsDir($config->application->viewsDir);
            $view->registerEngines(array(
                '.phtml' => 'Phalcon\Mvc\View\Engine\Php',
            ));
            
            $view->setEventsManager($eventsManager);
            
            return $view;
        });
        
        /**
         * Enregistrement du dispatcher
         * - Camelize l'action
         * - Gestion de la Securité
         * - Gestion des erreurs
         * - Valeurs par défaut
         *
         * @var \Phalcon\Mvc\Dispatcher
         */
        $di->setShared('dispatcher', function() use ($di, $config) {
            
            // Get the events manager
            $eventsManager = $di->getShared('eventsManager');
    
            /**
             * Camelize dispatcher
             */
            $camelize = new DispatchCamelize($di);
            $eventsManager->attach('dispatch', $camelize);
            
            /**
             * Security dispatcher
             */
            $security = new DispatchSecurity($di);
            $eventsManager->attach('dispatch', $security);
            
            /**
             * Rest dispatcher
             */
            $rest = new DispatchRest($di);
            $eventsManager->attach('dispatch', $rest);
            
            /**
             * Error dispatcher
             */
            $error = new DispatchError($di);
            $eventsManager->attach('dispatch', $error);
            
            // Setup the dispatcher
            $dispatcher = new Dispatcher();
            
            // Attach the events manager
            $dispatcher->setEventsManager($eventsManager);
            
            // Setup the default namespace
            $dispatcher->setDefaultNamespace('GSS\\Controllers');
            
            return $dispatcher;
        });
        
        /**
         * Profilage de certaines requêtes (SQL et APIs Google dans notre cas)
         * @var \Phalcon\Db\Profiler
         */
        $di->setShared('profiler', function() {
            return new \Phalcon\Db\Profiler();
        });
        
        /**
         * Enregistrement de l'adapteur de base de données
         * @var Phalcon\Db\Adapter\Pdo\Mysql
         */
        $di->setShared('db', function() use ($config, $di) {
            
            // Récupère le gestionnaire d'évennement
            $eventsManager = $di->getShared('eventsManager');
            
            /**
             * DB Profiler
             */
//            $profiler = new DbProfiler();
//            $eventsManager->attach('db', $profiler);
            
            /**
             * DB Logger
             */
//            $logger = new DbLogger();
//            $eventsManager->attach('db', $logger);
            
            
            // Configure l'adapteur de la BD
            $connection = new DbAdapter($config->database->toArray());
            
            // Attache le gestionnaire d'évennement à l'adapteur de la BD
            $connection->setEventsManager($eventsManager);
            
            return $connection;
        });
        
        /**
         * Session component pour gérer les sessions à partir de l'adapteur de session par fichier
         * @var \Phalcon\Session\Adapter\Files
         */
        $di->setShared('session', function() {
            $session = new SessionAdapter();
            if (!$session->isStarted()) {
                $session->start();
            }
            return $session;
        });
        
        /**
         * Enregistrer le service de filtres
         * @var \GSS\Plugins\FilterBase
         */
        $di->setShared('filter', function() {
            return new Filter();
        });
        
        /**
         * Enregistrer le service de tags
         * @var \GSS\Plugins\Tag
         */
        $di->setShared('tag', function() {
            return new Tag();
        });
        
        /**
         * Enregistre le service d'assets
         * @var \GSS\Plugins\Assets\Manager
         */
        $di->setShared('assets', function() {
            return new AssetsManager();
        });
        
        /**
         * Swift Mailer Manager
         * @link http://swiftmailer.org/
         */
        $di->setShared('mail', function() use ($config) {
            new SwiftLoader();
            return new MailerManager((array)$config->mail);;
        });
        
        /**
         * Security service
         */
        $di->setShared('security', function() use ($config) {
            $security = new Security();
            if (!empty($config->security->workfactor)) {
                $security->setWorkFactor($config->security->workfactor);
            }
            return $security;
        });
        
        /**
         * Translation service
         */
        $di->setShared('translation', function() use ($di, $config) {
            $translation = new TranslationAdapter(array(
                'db' => $di->get('db'),
                'table' => 'traduction',
                'language' => $di->get('gss')->getLanguage(),
                'useIcuMessageFormatter' => true,
            ));
            return $translation;
        });
        
        /**
         * GSS service
         */
        $di->setShared('gss', function() {
            $gss = new GSS();
            return $gss;
        });
    }
}
#3GSS\Config\Services->GSS\Config\{closure}()
#4Phalcon\Di\Service->resolve(null, Object(Phalcon\Di\FactoryDefault))
#5Phalcon\Di->get(db)
/opt/rh/httpd24/root/var/www/html/gss-sports/app/config/Services.php (238)
<?php
 
namespace GSS\Config;
 
// Phalcon defaults
use Phalcon\DI\FactoryDefault;
use Phalcon\Security;
use Phalcon\Mvc\Url;
use Phalcon\Mvc\Dispatcher;
use Phalcon\Mailer\Manager as MailerManager;
use Phalcon\Db\Adapter\Pdo\Mysql as DbAdapter;
use Phalcon\Session\Adapter\Files as SessionAdapter;
use Phalcon\Translate\Adapter\Database as TranslationAdapter;
 
// GSS Plugins & configs
use GSS\Models\Traduction;
use GSS\Plugins\Assets\Manager as AssetsManager;
use GSS\Plugins\Mvc\View;
use GSS\Plugins\Mvc\View\Error as ViewError;
use GSS\Plugins\Mvc\Dispatcher\Error as DispatchError;
use GSS\Plugins\Mvc\Dispatcher\Security as DispatchSecurity;
use GSS\Plugins\Mvc\Dispatcher\Camelize as DispatchCamelize;
use GSS\Plugins\Mvc\Dispatcher\Rest as DispatchRest;
use GSS\Plugins\Db\Profiler as DbProfiler;
use GSS\Plugins\Db\Logger as DbLogger;
use GSS\Plugins\Filter;
use GSS\Plugins\Tag;
use GSS\Plugins\GSS;
 
// Libs
use SwiftMailer\Loader as SwiftLoader;
 
class Services
{
    
    public function __construct(FactoryDefault $di, Config $config = null)
    {
        /**
         * Configuration objet pour récupérer certaines configuration
         * @var \Phalcon\Config
         */
        $di->setShared('config', $config);
        
        /**
         * Enregistre le service de route
         * @var \GSS\Config\Router;
         */
        $di->setShared('router', function() {
            $router = new Router();
            return $router;
        });
        
        /**
         * URL component utilisé pour générer les URL dans l'application
         * - Configuration du baseUri par défaut
         * (au cas ou l'application serait dans un path spécifique /gss/sports/)
         * @var \Phalcon\Mvc\Url
         */
        $di->setShared('url', function() use ($config) {
            $url = new Url();
            $url->setBaseUri($config->application->baseUri);
            return $url;
        });
        
        /**
         * View component utilisé pour générer les vues dans l'application avec un engin spécifique
         * @var \Phalcon\Mvc\View
         */
        $di->setShared('view', function() use ($di, $config) {
            // Get the events manager
            $eventsManager = $di->getShared('eventsManager');
            
            $error = new ViewError($di);
            $eventsManager->attach('view', $error);
            
            $view = new View();
            $view->setMinify($config->minify);
            $view->setViewsDir($config->application->viewsDir);
            $view->registerEngines(array(
                '.phtml' => 'Phalcon\Mvc\View\Engine\Php',
            ));
            
            $view->setEventsManager($eventsManager);
            
            return $view;
        });
        
        /**
         * Enregistrement du dispatcher
         * - Camelize l'action
         * - Gestion de la Securité
         * - Gestion des erreurs
         * - Valeurs par défaut
         *
         * @var \Phalcon\Mvc\Dispatcher
         */
        $di->setShared('dispatcher', function() use ($di, $config) {
            
            // Get the events manager
            $eventsManager = $di->getShared('eventsManager');
    
            /**
             * Camelize dispatcher
             */
            $camelize = new DispatchCamelize($di);
            $eventsManager->attach('dispatch', $camelize);
            
            /**
             * Security dispatcher
             */
            $security = new DispatchSecurity($di);
            $eventsManager->attach('dispatch', $security);
            
            /**
             * Rest dispatcher
             */
            $rest = new DispatchRest($di);
            $eventsManager->attach('dispatch', $rest);
            
            /**
             * Error dispatcher
             */
            $error = new DispatchError($di);
            $eventsManager->attach('dispatch', $error);
            
            // Setup the dispatcher
            $dispatcher = new Dispatcher();
            
            // Attach the events manager
            $dispatcher->setEventsManager($eventsManager);
            
            // Setup the default namespace
            $dispatcher->setDefaultNamespace('GSS\\Controllers');
            
            return $dispatcher;
        });
        
        /**
         * Profilage de certaines requêtes (SQL et APIs Google dans notre cas)
         * @var \Phalcon\Db\Profiler
         */
        $di->setShared('profiler', function() {
            return new \Phalcon\Db\Profiler();
        });
        
        /**
         * Enregistrement de l'adapteur de base de données
         * @var Phalcon\Db\Adapter\Pdo\Mysql
         */
        $di->setShared('db', function() use ($config, $di) {
            
            // Récupère le gestionnaire d'évennement
            $eventsManager = $di->getShared('eventsManager');
            
            /**
             * DB Profiler
             */
//            $profiler = new DbProfiler();
//            $eventsManager->attach('db', $profiler);
            
            /**
             * DB Logger
             */
//            $logger = new DbLogger();
//            $eventsManager->attach('db', $logger);
            
            
            // Configure l'adapteur de la BD
            $connection = new DbAdapter($config->database->toArray());
            
            // Attache le gestionnaire d'évennement à l'adapteur de la BD
            $connection->setEventsManager($eventsManager);
            
            return $connection;
        });
        
        /**
         * Session component pour gérer les sessions à partir de l'adapteur de session par fichier
         * @var \Phalcon\Session\Adapter\Files
         */
        $di->setShared('session', function() {
            $session = new SessionAdapter();
            if (!$session->isStarted()) {
                $session->start();
            }
            return $session;
        });
        
        /**
         * Enregistrer le service de filtres
         * @var \GSS\Plugins\FilterBase
         */
        $di->setShared('filter', function() {
            return new Filter();
        });
        
        /**
         * Enregistrer le service de tags
         * @var \GSS\Plugins\Tag
         */
        $di->setShared('tag', function() {
            return new Tag();
        });
        
        /**
         * Enregistre le service d'assets
         * @var \GSS\Plugins\Assets\Manager
         */
        $di->setShared('assets', function() {
            return new AssetsManager();
        });
        
        /**
         * Swift Mailer Manager
         * @link http://swiftmailer.org/
         */
        $di->setShared('mail', function() use ($config) {
            new SwiftLoader();
            return new MailerManager((array)$config->mail);;
        });
        
        /**
         * Security service
         */
        $di->setShared('security', function() use ($config) {
            $security = new Security();
            if (!empty($config->security->workfactor)) {
                $security->setWorkFactor($config->security->workfactor);
            }
            return $security;
        });
        
        /**
         * Translation service
         */
        $di->setShared('translation', function() use ($di, $config) {
            $translation = new TranslationAdapter(array(
                'db' => $di->get('db'),
                'table' => 'traduction',
                'language' => $di->get('gss')->getLanguage(),
                'useIcuMessageFormatter' => true,
            ));
            return $translation;
        });
        
        /**
         * GSS service
         */
        $di->setShared('gss', function() {
            $gss = new GSS();
            return $gss;
        });
    }
}
#6GSS\Config\Services->GSS\Config\{closure}()
#7Phalcon\Di\Service->resolve(null, Object(Phalcon\Di\FactoryDefault))
#8Phalcon\Di->get(translation)
/opt/rh/httpd24/root/var/www/html/gss-sports/app/controllers/AbstractController.php (369)
<?php
 
namespace GSS\Controllers;
 
use GSS\Models\AbstractModel;
use GSS\Models\Acteur;
use GSS\Models\Demandeur;
use GSS\Models\Erreur;
use GSS\Models\Liste;
use GSS\Models\Projet;
use GSS\Models\Traduction;
use Phalcon\Mvc\Controller;
use Phalcon\Tag;
use GSS\Models\Configuration;
use Phalcon\Assets\Filters\Cssmin;
use Phalcon\Assets\Filters\Jsmin;
 
/**
 * Contrôleur parent de tous les contrôleur dans ce namespace
 * GSS\Controllers
 * @author Julien Turbide <jturbide@nuagerie.com>
 * @version 1.0.0
 * @abstract
 */
class AbstractController extends Controller {
    
    public static $initialized = false;
    public static $GSS;
    public static $enum = array(
        'deleted' => array(
            AbstractModel::DELETED => 'Supprimé',
            AbstractModel::NOT_DELETED => 'Actif',
        ),
        'typeErreur' => array(
            Erreur::TYPE_PHP => 'Php',
            Erreur::TYPE_JS => 'JavaScript',
        ),
        'typeDemandeur' => array(
            Demandeur::TYPE_ARRONDISSEMENT => 'Arrondissement',
            Demandeur::TYPE_ORGANISME => 'Organisme',
        ),
        'typeProjet' => array(
            Projet::TYPE_PSES_OBNL => 'OBNL - Programme de soutien aux événements sportifs internationaux, nationaux et métropolitaine (PSES)',
            Projet::TYPE_PIL_OBNL => 'OBNL - Programme de soutien aux initiatives locales d\'activités de plein air liées au Plan de l\'eau (PIL)',
            Projet::TYPE_PIL_ARRONDISSEMENT => 'Arrondissement - Programme de soutien aux initiatives locales d\'activités de plein air liées au Plan de l\'eau (PIL)',
        ),
        'typeListe' => array(
            Liste::TYPE_BASSIN_ACTIVITE => 'Bassins d\'activité',
            Liste::TYPE_VOLET_PROGRAMME => 'Volets de programme',
            Liste::TYPE_DATE_LIMITE_DEPOT => 'Date limite de dépôt',
            Liste::TYPE_DESCRIPTION_ACTIVITE => 'Description de l\'événement / des activités',
            Liste::TYPE_CONTRIBUTION_GLOBALE => 'Contribution globale de l\'Administration montréalaises',
            Liste::TYPE_DOCUMENT => 'Document à remettre à la Ville de Montréal',
            Liste::TYPE_DOCUMENT_AVANT => 'Document à remettre à la Ville de Montréal (Avant)',
            Liste::TYPE_RECURRENCE_EVENEMENT =>'Récurrence de l\'événement',
            Liste::TYPE_NIVEAU_SANCTION => 'Niveau de sanction',
            Liste::TYPE_CALIBRE_ATHLETES => 'Calibre des athlètes',
            Liste::TYPE_CALIBRE_COMPETITION => 'Calibre de la compétition',
            Liste::TYPE_OBJECTIFS => 'Objectifs du Programme',
            Liste::TYPE_TYPE_EVENEMENT => 'Type d\'événement',
            Liste::TYPE_PAYS => 'Pays',
            Liste::TYPE_ARRONDISSEMENT => 'Arrondissement',
            Liste::TYPE_VILLE_LIEE => 'Ville liée',
            Liste::TYPE_PROVINCE_TERRITOIRE => 'Province et territoire',
            Liste::TYPE_OBJECTIF_SPECIFIQUE_MESURABLE => 'Objectifs spécifiques mesurables',
            Liste::TYPE_STADE => 'Stade',
            Liste::TYPE_ENGAGEMENT_ORGANISME => 'Engagement de l\'organisme',
            Liste::TYPE_OBLIGATIONS_ENGAGEMENTS => 'Obligations et engagements',
            Liste::TYPE_RESEIGNEMENTS => 'Renseignments',
            Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE => 'Contributions anticipées',
            Liste::TYPE_REVENU_AUTONOME => 'Revenus autonomes',
            Liste::TYPE_DEPENSE_ADMISSIBLE => 'dddDépenses admissibles',
            Liste::TYPE_DEPENSE_NON_ADMISSIBLE => 'Dépenses non admissibles',
            Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_FEDERAL => 'Contributions anticipées fédéral',
            Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_PROVINCIAL => 'Contributions anticipées provincial',
            Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_MUNICIPAL  => 'Contributions anticipées municipal',
            Liste::TYPE_DOCUMENT_TITRE => 'Titre : Document à remettre à la Ville de Montréal',
            Liste::TYPE_DOCUMENT_AVANT_TITRE => 'Titre : Document à remettre à la Ville de Montréal (Avant)',
            Liste::TYPE_BUDGET_PREVISIONNEL => 'Budget prévisionnel',
            Liste::TYPE_BUDGET_REGULIER => 'Budget',
        ),
        'typesContributionsAnticipees' => array(
            Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_FEDERAL => 'Fédéral',
            Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_PROVINCIAL => 'Provincial',
            Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_MUNICIPAL  => 'Municipal',
        ),        
        'statutProjet' => array(
            Projet::STATUT_NOUVEAU => 'Nouveau',
            Projet::STATUT_SOUMIS => 'Soumis',
            Projet::STATUT_ACCEPTE => 'Accepté',
            Projet::STATUT_REFUSE => 'Refusé',
            Projet::STATUT_NONADMISSIBLE => 'Non-admissible',
         
        ),
        'langues' => array(
            Traduction::LANGUE_EN => 'Anglais',
            Traduction::LANGUE_FR => 'Français',
        )
    );
 
    /**
     * Initialisation du contrôleur
     * - Configure le titre
     * - Configure les vues
     * - Configure l'objet GSS
     * - Configure les assets (JS / CSS)
     */
    public function initialize() {
        if (!self::$initialized) {
            self::$initialized = true;
            
            self::$enum = array(
                'deleted' => array(
                    AbstractModel::DELETED => $this->_('supprime'),
                    AbstractModel::NOT_DELETED => $this->_('actif'),
                ),
                'typeErreur' => array(
                    Erreur::TYPE_PHP => 'Php',
                    Erreur::TYPE_JS => 'JavaScript',
                ),
                'typeDemandeur' => array(
                    Demandeur::TYPE_ARRONDISSEMENT => $this->_('arrondissement'),
                    Demandeur::TYPE_ORGANISME => $this->_('organisme'),
                ),
                'typeProjet' => array(
                    Projet::TYPE_PSES_OBNL => $this->_('type_pses_obnl'), // garder à cette position du array
                    Projet::TYPE_PIL_OBNL => 'OBNL - Programme de soutien aux initiatives locales d\'activités de plein air liées au Plan de l\'eau (PIL)',
                    Projet::TYPE_PIL_ARRONDISSEMENT => 'Arrondissement - Programme de soutien aux initiatives locales d\'activités de plein air liées au Plan de l\'eau (PIL)',
                ),
                'typeListe' => array(
                    Liste::TYPE_BASSIN_ACTIVITE => $this->_('bassins_activite'),
                    Liste::TYPE_VOLET_PROGRAMME => $this->_('volets_programme'),
                    Liste::TYPE_DATE_LIMITE_DEPOT => $this->_('date_limite_depot'),
                    Liste::TYPE_DESCRIPTION_ACTIVITE => $this->_('desc_evenement_acitvites'),
                    Liste::TYPE_CONTRIBUTION_GLOBALE => $this->_('contribution_global_mtl'),
                    Liste::TYPE_DOCUMENT => $this->_('documents_a_remettre'),
                    Liste::TYPE_DOCUMENT_AVANT => $this->_('documents_a_remettre_avant'),
                    Liste::TYPE_RECURRENCE_EVENEMENT => $this->_('recurrence_evenement'),
                    Liste::TYPE_NIVEAU_SANCTION => $this->_('niveau_sanction'),
                    Liste::TYPE_CALIBRE_ATHLETES => $this->_('calibre_athletes'),
                    Liste::TYPE_CALIBRE_COMPETITION => $this->_('calibre_competition'),
                    Liste::TYPE_OBJECTIFS => $this->_('objectifs_programme'),
                    Liste::TYPE_TYPE_EVENEMENT => $this->_('type_evenement'),
                    Liste::TYPE_PAYS => $this->_('pays'),
                    Liste::TYPE_ARRONDISSEMENT => $this->_('arrondissements'),
                    Liste::TYPE_VILLE_LIEE => $this->_('villes_liees'),
                    Liste::TYPE_PROVINCE_TERRITOIRE => $this->_('province_territoire'),
                    Liste::TYPE_OBJECTIF_SPECIFIQUE_MESURABLE => $this->_('objectifs_specifiques_mesurables'),
                    Liste::TYPE_STADE => $this->_('stade'),
                    Liste::TYPE_ENGAGEMENT_ORGANISME => $this->_('engagement_organisme'),
                    Liste::TYPE_OBLIGATIONS_ENGAGEMENTS => $this->_('obligaton_organisme'),
                    Liste::TYPE_RESEIGNEMENTS => $this->_('renseignements'),
                    Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE => $this->_('contributions_anticipees'),
                    Liste::TYPE_REVENU_AUTONOME => $this->_('revenus_autonomes'),
                    Liste::TYPE_DEPENSE_ADMISSIBLE => $this->_('depenses_admissibles'),
                    Liste::TYPE_DEPENSE_NON_ADMISSIBLE => $this->_('depenses_non_admissibles'),
                    Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_FEDERAL => $this->_('contributions_anticipees_federal'),
                    Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_PROVINCIAL => $this->_('contributions_anticipees_provincial'),
                    Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_MUNICIPAL => $this->_('contributions_anticipees_municipal'),
                    Liste::TYPE_DOCUMENT_TITRE => $this->_('titre_documents_a_remettre'),
                    Liste::TYPE_DOCUMENT_AVANT_TITRE =>  $this->_('titre_documents_a_remettre_avant'),
                    Liste::TYPE_BUDGET_PREVISIONNEL =>  $this->_('budget_previsionnel'),
                    Liste::TYPE_BUDGET_REGULIER => $this->_('budget_regulier')
                ),
                'typesContributionsAnticipees' => array(
                    Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_FEDERAL => $this->_('federal'),
                    Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_PROVINCIAL => 'Provincial',
                    Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_MUNICIPAL  => 'Municipal',
                ),        
                'statutProjet' => array(
                    Projet::STATUT_NOUVEAU => $this->_('nouveau'),
                    Projet::STATUT_SOUMIS => $this->_('soumis'),
                    Projet::STATUT_ACCEPTE => $this->_('accepte'),
                    Projet::STATUT_REFUSE => $this->_('refuse'),
                    Projet::STATUT_NONADMISSIBLE => $this->_('Non-admissible'),
                ),
                'langues' => array(
                    Traduction::LANGUE_EN => $this->_('anglais'),
                    Traduction::LANGUE_FR => $this->_('français'),
                )
            );
            
            Tag::setTitleSeparator(' | ');
            Tag::setTitle('GSS Sports');
            Tag::prependTitle($this->_('ville_montreal'));
    
            // default page content
            $this->tag->setPageContent('layout/page');
            $this->tag->setBodyClass('page-header-fixed page-sidebar-closed-hide-logo page-content-white');
    
            // Prépare les assets JS & CSS
            $this->_setupAssets();
            $this->gss->setStaticBaseUri();
            $this->gss->setEnum(self::$enum);
    
            self::$GSS = new \stdClass();
            self::$GSS->enum = self::$enum;
            self::$GSS->language = $this->gss->getLanguage();
            $this->config->frontend->language = self::$GSS->language;
            $this->view->setVar('gss', self::$GSS);
            $this->view->setVar('currentDemandeur', $this->gss->getDemandeur());
            $this->view->setVar('currentActeur', $this->gss->getActeur());
        }
    }
 
    /**
     * Configure les assets pour le front-end (JS / CSS)
     * @access protected
     * @TODO fix relative path in minified CSS & JS with a super awesome .htaccess rule (maybe..)
     * @TODO cache CSS with the current version
     * @TODO remove remote static google content...
     */
    protected function _setupAssets() {
        // CSS Header Core
        $cssHeaderCore = $this->assets->collection('css-header-core');
//        $cssHeaderCore->addFilter(new Cssmin());
        $cssHeaderCore->setTargetPath('minified/css-header-core.css');
        $cssHeaderCore->setTargetUri('minified/css-header-core.css');
        $cssHeaderCore->addCss('https://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700&subset=all', false);
        $cssHeaderCore->addCss('assets/global/plugins/font-awesome/css/font-awesome.min.css');
        $cssHeaderCore->addCss('assets/global/plugins/simple-line-icons/simple-line-icons.min.css');
        $cssHeaderCore->addCss('assets/global/plugins/bootstrap/css/bootstrap.min.css');
        $cssHeaderCore->addCss('assets/global/plugins/uniform/css/uniform.default.css');
        $cssHeaderCore->addCss('assets/global/plugins/bootstrap-switch/css/bootstrap-switch.min.css');
        $cssHeaderCore->addCss('assets/global/plugins/pace/themes/pace-theme-flash.css');
        
        
        // CSS Header Theme
        $theme = empty($this->config->theme)? 'default' : $this->config->theme;
        $cssHeaderTheme = $this->assets->collection('css-header-theme');
//        $cssHeaderTheme->addFilter(new Cssmin());
        $cssHeaderTheme->setTargetPath('minified/css-header-theme.css');
        $cssHeaderTheme->setTargetUri('minified/css-header-theme.css');
        $cssHeaderTheme->addCss('assets/global/css/components.min.css');
        $cssHeaderTheme->addCss('assets/global/css/plugins.min.css');
        $cssHeaderTheme->addCss('assets/layouts/layout/css/layout.min.css');
        $cssHeaderTheme->addCss('assets/layouts/layout/css/themes/' . $theme . '.min.css');
        $cssHeaderTheme->addCss('assets/layouts/layout/css/custom.min.css');
        $cssHeaderTheme->addCss('css/theme-overrides.css');
        
        
        // JS Header Core
        $jsHeaderCore = $this->assets->collection('js-header-core');
//        $jsHeaderCore->addFilter(new Jsmin());
        $jsHeaderCore->setTargetPath('minified/js-header-core.js');
        $jsHeaderCore->setTargetUri('minified/js-header-core.js');
        $jsHeaderCore->addJs('assets/global/plugins/pace/pace.min.js');
        $jsHeaderCore->addJs('assets/global/plugins/jquery.min.js');
        $jsHeaderCore->addJs('assets/global/plugins/jquery-migrate.min.js');
        $jsHeaderCore->addJs('assets/global/plugins/jquery-ui/jquery-ui.min.js');
        $jsHeaderCore->addJs('assets/global/plugins/bootstrap/js/bootstrap.min.js');
      
 
        // JS Footer Core (IE fixes)
        $jsFooterCoreIE = $this->assets->collection('js-footer-core-ie');
//        $jsFooterCoreIE->addFilter(new Jsmin());
        $jsFooterCoreIE->setTargetPath('minified/js-footer-core-ie.js');
        $jsFooterCoreIE->setTargetUri('minified/js-footer-core-ie.js');
        $jsFooterCoreIE->addJs('assets/global/plugins/respond.min.js');
        $jsFooterCoreIE->addJs('assets/global/plugins/excanvas.min.js');
        $jsFooterCoreIE->addJs('assets/global/plugins/ie8.fix.min.js');
        
 
        // JS Footer Core
        $jsFooterCore = $this->assets->collection('js-footer-core');
//        $jsFooterCore->addFilter(new Jsmin());
        $jsFooterCore->setTargetPath('minified/js-footer-core.js');
        $jsFooterCore->setTargetUri('minified/js-footer-core.js');
        $jsFooterCore->addJs('assets/global/plugins/jquery-cookiebar/jquery.cookieBar.min.js');
        $jsFooterCore->addJs('assets/global/plugins/js.cookie.min.js');
        $jsFooterCore->addJs('assets/global/plugins/jquery-slimscroll/jquery.slimscroll.min.js');
        $jsFooterCore->addJs('assets/global/plugins/jquery.blockui.min.js');
        $jsFooterCore->addJs('assets/global/plugins/uniform/jquery.uniform.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-switch/js/bootstrap-switch.min.js');
        $jsFooterCore->addJs('assets/global/plugins/select2/js/select2.full.min.js');
        $jsFooterCore->addJs('assets/global/plugins/select2/js/i18n/fr.js');
        $jsFooterCore->addJs('assets/global/plugins/select2/js/i18n/en.js');
        //@TODO checker si on utilise tout les lib
        $jsFooterCore->addJs('assets/global/scripts/datatable.js');
        $jsFooterCore->addJs('assets/global/plugins/datatables/datatables.min.js');
        $jsFooterCore->addJs('assets/global/plugins/datatables/plugins/bootstrap/datatables.bootstrap.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-toastr/toastr.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-sweetalert/sweetalert.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-summernote/summernote.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-summernote/lang/summernote-fr-FR.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-modal/js/bootstrap-modalmanager.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-modal/js/bootstrap-modal.js');
        $jsFooterCore->addJs('assets/global/plugins/jquery-repeater/jquery.repeater.js');
        $jsFooterCore->addJs('assets/global/plugins/jquery-inputmask/jquery.inputmask.bundle.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-wizard/jquery.bootstrap.wizard.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-fileinput/bootstrap-fileinput.js');
        $jsFooterCore->addJs('assets/global/plugins/moment.min.js');
        $jsFooterCore->addJs('assets/global/plugins/lodash.min.js');
        $jsFooterCore->addJs('assets/global/plugins/simpleupload.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-daterangepicker/daterangepicker.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-datepicker/js/bootstrap-datepicker.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-timepicker/js/bootstrap-timepicker.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-editable/bootstrap-editable/js/bootstrap-editable.min.js');
        
        // page
        $jsFooterCore->addJs('assets/global/scripts/app.js');
        
        // layout
        $jsFooterCore->addJs('assets/layouts/layout/scripts/layout.min.js');
        $jsFooterCore->addJs('assets/layouts/global/scripts/quick-sidebar.min.js');
        $jsFooterCore->addJs('assets/layouts/global/scripts/quick-nav.min.js');
        
        // Prépare la collection pour le CSS dans le header
        $cssHeaderPage = $this->assets->collection('css-header-page');
        $cssHeaderPage->setTargetPath('minified/css-header-page.css');
        $cssHeaderPage->setTargetUri('minified/css-header-page.css');
        //@TODO checker si on utilise tout les lib
        $cssHeaderPage->addCss('assets/global/plugins/datatables/datatables.min.css');
        $cssHeaderPage->addCss('assets/global/plugins/datatables/plugins/bootstrap/datatables.bootstrap.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-datepicker/css/bootstrap-datepicker3.min.css');
        $cssHeaderPage->addCss('assets/global/plugins/select2/css/select2.min.css');
        $cssHeaderPage->addCss('assets/global/plugins/select2/css/select2-bootstrap.min.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-toastr/toastr.min.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-sweetalert/sweetalert.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-summernote/summernote.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-modal/css/bootstrap-modal-bs3patch.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-modal/css/bootstrap-modal.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-fileinput/bootstrap-fileinput.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-daterangepicker/daterangepicker.min.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-datepicker/css/bootstrap-datepicker3.min.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-timepicker/css/bootstrap-timepicker.min.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-editable/bootstrap-editable/css/bootstrap-editable.css');
        
        // Prépare la collection pour le JS dans le footer
        $jsFooterPage = $this->assets->collection('js-footer-page');
        $jsFooterPage->setTargetPath('minified/js-footer-page.js');
        $jsFooterPage->setTargetUri('minified/js-footer-page.js');
        $jsFooterPage->addJs('js/error.js');
        $jsFooterPage->addJs('js/cookie.js');
        $jsFooterPage->addJs('js/toastr.js');
        $jsFooterPage->addJs('js/modal.js');
        $jsFooterPage->addJs('js/summernote.js');
        $jsFooterPage->addJs('js/datatable.js');
        $jsFooterPage->addJs('js/select2.js');
        $jsFooterPage->addJs('js/datepicker.js');
        $jsFooterPage->addJs('js/inputmask.js');
        $jsFooterPage->addJs('js/custom.js');
        $jsFooterPage->addJs('js/file.js');
        $jsFooterPage->addJs('js/ajax.js');
        $jsFooterPage->addJs('js/condition.js');
        $jsFooterPage->addJs('js/precision.js');
        $jsFooterPage->addJs('js/repeater.js');
    
        // Timeout feature
        if (!in_array($this->dispatcher->getControllerName(), array('errors', 'connexion', 'legal'))) {
            $jsFooterCore->addJs('assets/global/plugins/jquery-idle-timeout/jquery.idletimeout.js');
            $jsFooterCore->addJs('assets/global/plugins/jquery-idle-timeout/jquery.idletimer.js');
            $jsFooterCore->addJs('assets/global/plugins/bootstrap-sessiontimeout/bootstrap-session-timeout.min.js');
            $jsFooterPage->addJs('js/idle-timeout.js');
            $jsFooterPage->addJs('js/session-timeout.js');
        }
    }
    
    /**
     * Permet de passer une étiquette afin de récupérer la traduction
     *
     * @param string $etiquette
     *
     * @return string
     */
    public function _($etiquette) {
        return $this->getDI()->get('translation')->t($etiquette);
    }
}
#9GSS\Controllers\AbstractController->_(supprime)
/opt/rh/httpd24/root/var/www/html/gss-sports/app/controllers/AbstractController.php (114)
<?php
 
namespace GSS\Controllers;
 
use GSS\Models\AbstractModel;
use GSS\Models\Acteur;
use GSS\Models\Demandeur;
use GSS\Models\Erreur;
use GSS\Models\Liste;
use GSS\Models\Projet;
use GSS\Models\Traduction;
use Phalcon\Mvc\Controller;
use Phalcon\Tag;
use GSS\Models\Configuration;
use Phalcon\Assets\Filters\Cssmin;
use Phalcon\Assets\Filters\Jsmin;
 
/**
 * Contrôleur parent de tous les contrôleur dans ce namespace
 * GSS\Controllers
 * @author Julien Turbide <jturbide@nuagerie.com>
 * @version 1.0.0
 * @abstract
 */
class AbstractController extends Controller {
    
    public static $initialized = false;
    public static $GSS;
    public static $enum = array(
        'deleted' => array(
            AbstractModel::DELETED => 'Supprimé',
            AbstractModel::NOT_DELETED => 'Actif',
        ),
        'typeErreur' => array(
            Erreur::TYPE_PHP => 'Php',
            Erreur::TYPE_JS => 'JavaScript',
        ),
        'typeDemandeur' => array(
            Demandeur::TYPE_ARRONDISSEMENT => 'Arrondissement',
            Demandeur::TYPE_ORGANISME => 'Organisme',
        ),
        'typeProjet' => array(
            Projet::TYPE_PSES_OBNL => 'OBNL - Programme de soutien aux événements sportifs internationaux, nationaux et métropolitaine (PSES)',
            Projet::TYPE_PIL_OBNL => 'OBNL - Programme de soutien aux initiatives locales d\'activités de plein air liées au Plan de l\'eau (PIL)',
            Projet::TYPE_PIL_ARRONDISSEMENT => 'Arrondissement - Programme de soutien aux initiatives locales d\'activités de plein air liées au Plan de l\'eau (PIL)',
        ),
        'typeListe' => array(
            Liste::TYPE_BASSIN_ACTIVITE => 'Bassins d\'activité',
            Liste::TYPE_VOLET_PROGRAMME => 'Volets de programme',
            Liste::TYPE_DATE_LIMITE_DEPOT => 'Date limite de dépôt',
            Liste::TYPE_DESCRIPTION_ACTIVITE => 'Description de l\'événement / des activités',
            Liste::TYPE_CONTRIBUTION_GLOBALE => 'Contribution globale de l\'Administration montréalaises',
            Liste::TYPE_DOCUMENT => 'Document à remettre à la Ville de Montréal',
            Liste::TYPE_DOCUMENT_AVANT => 'Document à remettre à la Ville de Montréal (Avant)',
            Liste::TYPE_RECURRENCE_EVENEMENT =>'Récurrence de l\'événement',
            Liste::TYPE_NIVEAU_SANCTION => 'Niveau de sanction',
            Liste::TYPE_CALIBRE_ATHLETES => 'Calibre des athlètes',
            Liste::TYPE_CALIBRE_COMPETITION => 'Calibre de la compétition',
            Liste::TYPE_OBJECTIFS => 'Objectifs du Programme',
            Liste::TYPE_TYPE_EVENEMENT => 'Type d\'événement',
            Liste::TYPE_PAYS => 'Pays',
            Liste::TYPE_ARRONDISSEMENT => 'Arrondissement',
            Liste::TYPE_VILLE_LIEE => 'Ville liée',
            Liste::TYPE_PROVINCE_TERRITOIRE => 'Province et territoire',
            Liste::TYPE_OBJECTIF_SPECIFIQUE_MESURABLE => 'Objectifs spécifiques mesurables',
            Liste::TYPE_STADE => 'Stade',
            Liste::TYPE_ENGAGEMENT_ORGANISME => 'Engagement de l\'organisme',
            Liste::TYPE_OBLIGATIONS_ENGAGEMENTS => 'Obligations et engagements',
            Liste::TYPE_RESEIGNEMENTS => 'Renseignments',
            Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE => 'Contributions anticipées',
            Liste::TYPE_REVENU_AUTONOME => 'Revenus autonomes',
            Liste::TYPE_DEPENSE_ADMISSIBLE => 'dddDépenses admissibles',
            Liste::TYPE_DEPENSE_NON_ADMISSIBLE => 'Dépenses non admissibles',
            Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_FEDERAL => 'Contributions anticipées fédéral',
            Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_PROVINCIAL => 'Contributions anticipées provincial',
            Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_MUNICIPAL  => 'Contributions anticipées municipal',
            Liste::TYPE_DOCUMENT_TITRE => 'Titre : Document à remettre à la Ville de Montréal',
            Liste::TYPE_DOCUMENT_AVANT_TITRE => 'Titre : Document à remettre à la Ville de Montréal (Avant)',
            Liste::TYPE_BUDGET_PREVISIONNEL => 'Budget prévisionnel',
            Liste::TYPE_BUDGET_REGULIER => 'Budget',
        ),
        'typesContributionsAnticipees' => array(
            Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_FEDERAL => 'Fédéral',
            Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_PROVINCIAL => 'Provincial',
            Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_MUNICIPAL  => 'Municipal',
        ),        
        'statutProjet' => array(
            Projet::STATUT_NOUVEAU => 'Nouveau',
            Projet::STATUT_SOUMIS => 'Soumis',
            Projet::STATUT_ACCEPTE => 'Accepté',
            Projet::STATUT_REFUSE => 'Refusé',
            Projet::STATUT_NONADMISSIBLE => 'Non-admissible',
         
        ),
        'langues' => array(
            Traduction::LANGUE_EN => 'Anglais',
            Traduction::LANGUE_FR => 'Français',
        )
    );
 
    /**
     * Initialisation du contrôleur
     * - Configure le titre
     * - Configure les vues
     * - Configure l'objet GSS
     * - Configure les assets (JS / CSS)
     */
    public function initialize() {
        if (!self::$initialized) {
            self::$initialized = true;
            
            self::$enum = array(
                'deleted' => array(
                    AbstractModel::DELETED => $this->_('supprime'),
                    AbstractModel::NOT_DELETED => $this->_('actif'),
                ),
                'typeErreur' => array(
                    Erreur::TYPE_PHP => 'Php',
                    Erreur::TYPE_JS => 'JavaScript',
                ),
                'typeDemandeur' => array(
                    Demandeur::TYPE_ARRONDISSEMENT => $this->_('arrondissement'),
                    Demandeur::TYPE_ORGANISME => $this->_('organisme'),
                ),
                'typeProjet' => array(
                    Projet::TYPE_PSES_OBNL => $this->_('type_pses_obnl'), // garder à cette position du array
                    Projet::TYPE_PIL_OBNL => 'OBNL - Programme de soutien aux initiatives locales d\'activités de plein air liées au Plan de l\'eau (PIL)',
                    Projet::TYPE_PIL_ARRONDISSEMENT => 'Arrondissement - Programme de soutien aux initiatives locales d\'activités de plein air liées au Plan de l\'eau (PIL)',
                ),
                'typeListe' => array(
                    Liste::TYPE_BASSIN_ACTIVITE => $this->_('bassins_activite'),
                    Liste::TYPE_VOLET_PROGRAMME => $this->_('volets_programme'),
                    Liste::TYPE_DATE_LIMITE_DEPOT => $this->_('date_limite_depot'),
                    Liste::TYPE_DESCRIPTION_ACTIVITE => $this->_('desc_evenement_acitvites'),
                    Liste::TYPE_CONTRIBUTION_GLOBALE => $this->_('contribution_global_mtl'),
                    Liste::TYPE_DOCUMENT => $this->_('documents_a_remettre'),
                    Liste::TYPE_DOCUMENT_AVANT => $this->_('documents_a_remettre_avant'),
                    Liste::TYPE_RECURRENCE_EVENEMENT => $this->_('recurrence_evenement'),
                    Liste::TYPE_NIVEAU_SANCTION => $this->_('niveau_sanction'),
                    Liste::TYPE_CALIBRE_ATHLETES => $this->_('calibre_athletes'),
                    Liste::TYPE_CALIBRE_COMPETITION => $this->_('calibre_competition'),
                    Liste::TYPE_OBJECTIFS => $this->_('objectifs_programme'),
                    Liste::TYPE_TYPE_EVENEMENT => $this->_('type_evenement'),
                    Liste::TYPE_PAYS => $this->_('pays'),
                    Liste::TYPE_ARRONDISSEMENT => $this->_('arrondissements'),
                    Liste::TYPE_VILLE_LIEE => $this->_('villes_liees'),
                    Liste::TYPE_PROVINCE_TERRITOIRE => $this->_('province_territoire'),
                    Liste::TYPE_OBJECTIF_SPECIFIQUE_MESURABLE => $this->_('objectifs_specifiques_mesurables'),
                    Liste::TYPE_STADE => $this->_('stade'),
                    Liste::TYPE_ENGAGEMENT_ORGANISME => $this->_('engagement_organisme'),
                    Liste::TYPE_OBLIGATIONS_ENGAGEMENTS => $this->_('obligaton_organisme'),
                    Liste::TYPE_RESEIGNEMENTS => $this->_('renseignements'),
                    Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE => $this->_('contributions_anticipees'),
                    Liste::TYPE_REVENU_AUTONOME => $this->_('revenus_autonomes'),
                    Liste::TYPE_DEPENSE_ADMISSIBLE => $this->_('depenses_admissibles'),
                    Liste::TYPE_DEPENSE_NON_ADMISSIBLE => $this->_('depenses_non_admissibles'),
                    Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_FEDERAL => $this->_('contributions_anticipees_federal'),
                    Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_PROVINCIAL => $this->_('contributions_anticipees_provincial'),
                    Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_MUNICIPAL => $this->_('contributions_anticipees_municipal'),
                    Liste::TYPE_DOCUMENT_TITRE => $this->_('titre_documents_a_remettre'),
                    Liste::TYPE_DOCUMENT_AVANT_TITRE =>  $this->_('titre_documents_a_remettre_avant'),
                    Liste::TYPE_BUDGET_PREVISIONNEL =>  $this->_('budget_previsionnel'),
                    Liste::TYPE_BUDGET_REGULIER => $this->_('budget_regulier')
                ),
                'typesContributionsAnticipees' => array(
                    Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_FEDERAL => $this->_('federal'),
                    Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_PROVINCIAL => 'Provincial',
                    Liste::TYPE_REVENU_CONTRIBUTION_ANTICIPEE_MUNICIPAL  => 'Municipal',
                ),        
                'statutProjet' => array(
                    Projet::STATUT_NOUVEAU => $this->_('nouveau'),
                    Projet::STATUT_SOUMIS => $this->_('soumis'),
                    Projet::STATUT_ACCEPTE => $this->_('accepte'),
                    Projet::STATUT_REFUSE => $this->_('refuse'),
                    Projet::STATUT_NONADMISSIBLE => $this->_('Non-admissible'),
                ),
                'langues' => array(
                    Traduction::LANGUE_EN => $this->_('anglais'),
                    Traduction::LANGUE_FR => $this->_('français'),
                )
            );
            
            Tag::setTitleSeparator(' | ');
            Tag::setTitle('GSS Sports');
            Tag::prependTitle($this->_('ville_montreal'));
    
            // default page content
            $this->tag->setPageContent('layout/page');
            $this->tag->setBodyClass('page-header-fixed page-sidebar-closed-hide-logo page-content-white');
    
            // Prépare les assets JS & CSS
            $this->_setupAssets();
            $this->gss->setStaticBaseUri();
            $this->gss->setEnum(self::$enum);
    
            self::$GSS = new \stdClass();
            self::$GSS->enum = self::$enum;
            self::$GSS->language = $this->gss->getLanguage();
            $this->config->frontend->language = self::$GSS->language;
            $this->view->setVar('gss', self::$GSS);
            $this->view->setVar('currentDemandeur', $this->gss->getDemandeur());
            $this->view->setVar('currentActeur', $this->gss->getActeur());
        }
    }
 
    /**
     * Configure les assets pour le front-end (JS / CSS)
     * @access protected
     * @TODO fix relative path in minified CSS & JS with a super awesome .htaccess rule (maybe..)
     * @TODO cache CSS with the current version
     * @TODO remove remote static google content...
     */
    protected function _setupAssets() {
        // CSS Header Core
        $cssHeaderCore = $this->assets->collection('css-header-core');
//        $cssHeaderCore->addFilter(new Cssmin());
        $cssHeaderCore->setTargetPath('minified/css-header-core.css');
        $cssHeaderCore->setTargetUri('minified/css-header-core.css');
        $cssHeaderCore->addCss('https://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700&subset=all', false);
        $cssHeaderCore->addCss('assets/global/plugins/font-awesome/css/font-awesome.min.css');
        $cssHeaderCore->addCss('assets/global/plugins/simple-line-icons/simple-line-icons.min.css');
        $cssHeaderCore->addCss('assets/global/plugins/bootstrap/css/bootstrap.min.css');
        $cssHeaderCore->addCss('assets/global/plugins/uniform/css/uniform.default.css');
        $cssHeaderCore->addCss('assets/global/plugins/bootstrap-switch/css/bootstrap-switch.min.css');
        $cssHeaderCore->addCss('assets/global/plugins/pace/themes/pace-theme-flash.css');
        
        
        // CSS Header Theme
        $theme = empty($this->config->theme)? 'default' : $this->config->theme;
        $cssHeaderTheme = $this->assets->collection('css-header-theme');
//        $cssHeaderTheme->addFilter(new Cssmin());
        $cssHeaderTheme->setTargetPath('minified/css-header-theme.css');
        $cssHeaderTheme->setTargetUri('minified/css-header-theme.css');
        $cssHeaderTheme->addCss('assets/global/css/components.min.css');
        $cssHeaderTheme->addCss('assets/global/css/plugins.min.css');
        $cssHeaderTheme->addCss('assets/layouts/layout/css/layout.min.css');
        $cssHeaderTheme->addCss('assets/layouts/layout/css/themes/' . $theme . '.min.css');
        $cssHeaderTheme->addCss('assets/layouts/layout/css/custom.min.css');
        $cssHeaderTheme->addCss('css/theme-overrides.css');
        
        
        // JS Header Core
        $jsHeaderCore = $this->assets->collection('js-header-core');
//        $jsHeaderCore->addFilter(new Jsmin());
        $jsHeaderCore->setTargetPath('minified/js-header-core.js');
        $jsHeaderCore->setTargetUri('minified/js-header-core.js');
        $jsHeaderCore->addJs('assets/global/plugins/pace/pace.min.js');
        $jsHeaderCore->addJs('assets/global/plugins/jquery.min.js');
        $jsHeaderCore->addJs('assets/global/plugins/jquery-migrate.min.js');
        $jsHeaderCore->addJs('assets/global/plugins/jquery-ui/jquery-ui.min.js');
        $jsHeaderCore->addJs('assets/global/plugins/bootstrap/js/bootstrap.min.js');
      
 
        // JS Footer Core (IE fixes)
        $jsFooterCoreIE = $this->assets->collection('js-footer-core-ie');
//        $jsFooterCoreIE->addFilter(new Jsmin());
        $jsFooterCoreIE->setTargetPath('minified/js-footer-core-ie.js');
        $jsFooterCoreIE->setTargetUri('minified/js-footer-core-ie.js');
        $jsFooterCoreIE->addJs('assets/global/plugins/respond.min.js');
        $jsFooterCoreIE->addJs('assets/global/plugins/excanvas.min.js');
        $jsFooterCoreIE->addJs('assets/global/plugins/ie8.fix.min.js');
        
 
        // JS Footer Core
        $jsFooterCore = $this->assets->collection('js-footer-core');
//        $jsFooterCore->addFilter(new Jsmin());
        $jsFooterCore->setTargetPath('minified/js-footer-core.js');
        $jsFooterCore->setTargetUri('minified/js-footer-core.js');
        $jsFooterCore->addJs('assets/global/plugins/jquery-cookiebar/jquery.cookieBar.min.js');
        $jsFooterCore->addJs('assets/global/plugins/js.cookie.min.js');
        $jsFooterCore->addJs('assets/global/plugins/jquery-slimscroll/jquery.slimscroll.min.js');
        $jsFooterCore->addJs('assets/global/plugins/jquery.blockui.min.js');
        $jsFooterCore->addJs('assets/global/plugins/uniform/jquery.uniform.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-switch/js/bootstrap-switch.min.js');
        $jsFooterCore->addJs('assets/global/plugins/select2/js/select2.full.min.js');
        $jsFooterCore->addJs('assets/global/plugins/select2/js/i18n/fr.js');
        $jsFooterCore->addJs('assets/global/plugins/select2/js/i18n/en.js');
        //@TODO checker si on utilise tout les lib
        $jsFooterCore->addJs('assets/global/scripts/datatable.js');
        $jsFooterCore->addJs('assets/global/plugins/datatables/datatables.min.js');
        $jsFooterCore->addJs('assets/global/plugins/datatables/plugins/bootstrap/datatables.bootstrap.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-toastr/toastr.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-sweetalert/sweetalert.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-summernote/summernote.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-summernote/lang/summernote-fr-FR.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-modal/js/bootstrap-modalmanager.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-modal/js/bootstrap-modal.js');
        $jsFooterCore->addJs('assets/global/plugins/jquery-repeater/jquery.repeater.js');
        $jsFooterCore->addJs('assets/global/plugins/jquery-inputmask/jquery.inputmask.bundle.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-wizard/jquery.bootstrap.wizard.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-fileinput/bootstrap-fileinput.js');
        $jsFooterCore->addJs('assets/global/plugins/moment.min.js');
        $jsFooterCore->addJs('assets/global/plugins/lodash.min.js');
        $jsFooterCore->addJs('assets/global/plugins/simpleupload.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-daterangepicker/daterangepicker.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-datepicker/js/bootstrap-datepicker.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-timepicker/js/bootstrap-timepicker.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js');
        $jsFooterCore->addJs('assets/global/plugins/bootstrap-editable/bootstrap-editable/js/bootstrap-editable.min.js');
        
        // page
        $jsFooterCore->addJs('assets/global/scripts/app.js');
        
        // layout
        $jsFooterCore->addJs('assets/layouts/layout/scripts/layout.min.js');
        $jsFooterCore->addJs('assets/layouts/global/scripts/quick-sidebar.min.js');
        $jsFooterCore->addJs('assets/layouts/global/scripts/quick-nav.min.js');
        
        // Prépare la collection pour le CSS dans le header
        $cssHeaderPage = $this->assets->collection('css-header-page');
        $cssHeaderPage->setTargetPath('minified/css-header-page.css');
        $cssHeaderPage->setTargetUri('minified/css-header-page.css');
        //@TODO checker si on utilise tout les lib
        $cssHeaderPage->addCss('assets/global/plugins/datatables/datatables.min.css');
        $cssHeaderPage->addCss('assets/global/plugins/datatables/plugins/bootstrap/datatables.bootstrap.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-datepicker/css/bootstrap-datepicker3.min.css');
        $cssHeaderPage->addCss('assets/global/plugins/select2/css/select2.min.css');
        $cssHeaderPage->addCss('assets/global/plugins/select2/css/select2-bootstrap.min.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-toastr/toastr.min.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-sweetalert/sweetalert.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-summernote/summernote.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-modal/css/bootstrap-modal-bs3patch.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-modal/css/bootstrap-modal.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-fileinput/bootstrap-fileinput.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-daterangepicker/daterangepicker.min.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-datepicker/css/bootstrap-datepicker3.min.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-timepicker/css/bootstrap-timepicker.min.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css');
        $cssHeaderPage->addCss('assets/global/plugins/bootstrap-editable/bootstrap-editable/css/bootstrap-editable.css');
        
        // Prépare la collection pour le JS dans le footer
        $jsFooterPage = $this->assets->collection('js-footer-page');
        $jsFooterPage->setTargetPath('minified/js-footer-page.js');
        $jsFooterPage->setTargetUri('minified/js-footer-page.js');
        $jsFooterPage->addJs('js/error.js');
        $jsFooterPage->addJs('js/cookie.js');
        $jsFooterPage->addJs('js/toastr.js');
        $jsFooterPage->addJs('js/modal.js');
        $jsFooterPage->addJs('js/summernote.js');
        $jsFooterPage->addJs('js/datatable.js');
        $jsFooterPage->addJs('js/select2.js');
        $jsFooterPage->addJs('js/datepicker.js');
        $jsFooterPage->addJs('js/inputmask.js');
        $jsFooterPage->addJs('js/custom.js');
        $jsFooterPage->addJs('js/file.js');
        $jsFooterPage->addJs('js/ajax.js');
        $jsFooterPage->addJs('js/condition.js');
        $jsFooterPage->addJs('js/precision.js');
        $jsFooterPage->addJs('js/repeater.js');
    
        // Timeout feature
        if (!in_array($this->dispatcher->getControllerName(), array('errors', 'connexion', 'legal'))) {
            $jsFooterCore->addJs('assets/global/plugins/jquery-idle-timeout/jquery.idletimeout.js');
            $jsFooterCore->addJs('assets/global/plugins/jquery-idle-timeout/jquery.idletimer.js');
            $jsFooterCore->addJs('assets/global/plugins/bootstrap-sessiontimeout/bootstrap-session-timeout.min.js');
            $jsFooterPage->addJs('js/idle-timeout.js');
            $jsFooterPage->addJs('js/session-timeout.js');
        }
    }
    
    /**
     * Permet de passer une étiquette afin de récupérer la traduction
     *
     * @param string $etiquette
     *
     * @return string
     */
    public function _($etiquette) {
        return $this->getDI()->get('translation')->t($etiquette);
    }
}
#10GSS\Controllers\AbstractController->initialize()
/opt/rh/httpd24/root/var/www/html/gss-sports/app/controllers/ConnexionController.php (22)
<?php
 
namespace GSS\Controllers;
 
use GSS\Models\Demandeur;
use GSS\Models\Acteur;
use GSS\Models\Courriel;
use Phalcon\Db\Column;
use Phalcon\Validation\Message;
use Phalcon\Validation;
 
/**
 * Contrôleur pour les pages de connexion, inscription, réinitialisation
 * @author Julien Turbide <jturbide@nuagerie.com>
 * @version 1.0.0
 */
class ConnexionController extends AbstractController
{
    
    public function initialize()
    {
        parent::initialize();
        $this->assets
            ->collection('css-header-theme')
            ->addCss('assets/pages/css/login.min.css');
        $this->tag->setBodyClass('login');
        $this->tag->setPageContent('layout/login');
        
        $acteur = $this->gss->getActeur();
        $demandeur = $this->gss->getDemandeur();
        if ($acteur || $demandeur) {
            $this->response->redirect('/');
        }
    }
    
    /**
     * Page de connexion
     */
    public function indexAction()
    {
        $validation = new Validation();
        
        if ($this->request->isPost()) {
            
            $login = false;
            $courriel = $this->request->getPost('courriel', 'string');
            $password = $this->request->getPost('password');
            
            $validation->add('courriel', new Validation\Validator\PresenceOf(array(
                'message' => $this->gss->_('courriel_obligatoire'),
            )));
            
            $validation->add('password', new Validation\Validator\PresenceOf(array(
                'message' => $this->gss->_('mot_de_passe_obligatoire'),
            )));
            
            $messages = $validation->validate($this->request->getPost());
            
            if (!count($messages)) {
                $demandeur = Demandeur::findFirst(array(
                    'courriel = :courriel:',
                    'bind' => array(
                        'courriel' => $this->filter->sanitize($courriel, 'string'),
                    ),
                    'bindTypes' => array(
                        'courriel' => Column::BIND_PARAM_STR
                    )
                ));
                if ($demandeur && !$demandeur->confirmation) {
                    $validation->appendMessage(
                        new Message(
                            $this->gss->_('confirmation_courriel_obligatoire'),
                            'courriel',
                            'Unauthorized',
                            401
                        )
                    );
                } else if ($demandeur && $this->security->checkHash($this->config->security->salt . $password, $demandeur->password)) {
                    $login = true;
                    $this->session->set('demandeur', $demandeur);
                }
                
                $acteur = Acteur::findFirst(array(
                    'courriel = :courriel:',
                    'bind' => array(
                        'courriel' => $this->filter->sanitize($courriel, 'string'),
                    ),
                    'bindTypes' => array(
                        'courriel' => Column::BIND_PARAM_STR
                    )
                ));
                if ($acteur && $this->security->checkHash($this->config->security->salt . $password, $acteur->password)) {
                    $login = true;
                    $this->session->set('acteur', $acteur);
                }
                
                if (empty($acteur) && empty($demandeur)) {
                    $validation->appendMessage(
                        new Message(
                            $this->gss->_('courriel_inexistant'),
                            'courriel',
                            'NotFound',
                            404
                        )
                    );
                }
            }
            
            if ($login) {
                $redirect = $this->request->get('redirect');
                $path = parse_url($redirect, PHP_URL_PATH);
                $query = parse_url($redirect, PHP_URL_QUERY);
                $path = empty($path) ? null : $path;
                return $this->response->redirect($path . (empty($query) ? null : '?' . $query));
//                return $this->response->redirect(
//                    $this->url->get(trim($path, '/') . '/' //fix pour env de la ville
//                        . (empty($query)? null : '?' . $query))
//                    );
            } else {
                $validation->appendMessage(
                    new Message(
                        $this->gss->_('authentification_echouee'),
                        'connexion',
                        'BadRequest',
                        400
                    )
                );
            }
        }
        
        $this->view->setVar('validation', $validation);
    }
    
    /**
     * Page d'inscription
     * - Si inscription avec succès,
     * -- Envois du courriel de confirmation,
     * -- Redirection vers la page de confirmation
     */
    public function inscriptionAction()
    {
        $demandeur = new Demandeur();
        
        // Si tentative d'inscription
        if ($this->request->isPost()) {
            
            // Tentative d'inscription
            $token = $demandeur->prepareToken();
            
            if ($demandeur->save($this->request->getPost())) {
                
                // Envois un courriel de confirmation
                $courriel = new Courriel();
                $courriel->save(array(
                    'gabarit' => 'courriel_confirmation_demandeur',
                    'meta' => array(
                        'demandeur' => $demandeur,
                        'lien' => $this->url->getStatic(array(
                            'for' => 'controller-action',
                            'controller' => 'connexion',
                            'action' => 'confirmation',
                            'params' =>
                                '?courriel=' . rawurlencode($demandeur->courriel)
                                . '&token=' . rawurlencode($token)
                        )),
                        'courriel' => $demandeur->courriel,
                        'token' => $token
                    ),
                ));
                
                // Inscription avec succès, redirection vers la page de confirmation
                return $this->response->redirect(array(
                    'for' => 'controller-action',
                    'controller' => 'connexion',
                    'action' => 'confirmation',
                    'params' => '?courriel=' . rawurlencode($this->filter->sanitize($demandeur->courriel, 'string'))
                ));
            }
        }
        
        // Met l'objet du demandeur par défaut ou l'objet de la tentative d'inscription
        $this->view->setVar('demandeur', $demandeur);
    }
    
    /**
     * Page de confirmation
     * Si le courriel est récupéré, envois du courriel de confirmation
     */
    public function confirmationAction()
    {
        $demandeur = new Demandeur();
        $validation = new Validation();
        
        $confirmationCourriel = $this->request->get('courriel', 'string');
        $confirmationToken = $this->request->get('token', 'string');
        
        if ($this->request->isPost() || (!empty($confirmationCourriel) && !empty($confirmationToken))) {
            
            $validation->add('token', new Validation\Validator\PresenceOf(array(
                'message' => $this->gss->_('jeton_confirmation_obligatoire'),
            )));
            
            $validation->add('courriel', new Validation\Validator\PresenceOf(array(
                'message' => $this->gss->_('courriel_confirmation_obligatoire'),
            )));
            
            $messages = $validation->validate($this->request->get());
            
            if (!count($messages)) {
                
                $demandeur = Demandeur::findFirstByCourriel($confirmationCourriel);
                
                if (!$demandeur) {
                    $validation->appendMessage(
                        new Message(
                            $this->gss->_('courriel_confirmation_introuvable'),
                            'courriel',
                            'notFound',
                            404
                        )
                    );
                    
                } else if (!$demandeur->confirmation) {
                    $this->_validationToken($demandeur, $confirmationToken, $validation, 'confirmation');
                } else {
                    // no u, lil troll script kiddie
                    $validation->appendMessage(
                        new Message(
                             $this->gss->_('compte_demandeur_deja_confirme'),
                            'courriel',
                            'confirmed',
                            400
                        )
                    );
                }
            }
        }
        
        // Met l'objet du demandeur par défaut ou l'objet de la tentative d'inscription
        $this->view->setVar('validation', $validation);
        $this->view->setVar('demandeur', $demandeur);
    }
    
    /**
     * Page de réinitialisation
     */
    public function reinitialisationAction()
    {
        $courriel = new Courriel();
        $demandeur = new Demandeur();
        $validation = new Validation();
        
        $validation->validate();
        
        if ($this->request->isPost()) {
            $reinitialisationCourriel = $this->request->getPost('courriel', 'string');
            $reinitialisationToken = $this->request->getPost('token', 'string');
            
            $validation->add('courriel', new Validation\Validator\PresenceOf(array(
                'message' => $this->gss->_('courriel_obligatoire'),
            )));
            
            $messages = $validation->validate($this->request->getPost());
            
            if (!count($messages)) {
                
                $demandeur = Demandeur::findFirstByCourriel($reinitialisationCourriel);
                
                if ($demandeur) {
                    if (empty($reinitialisationToken)) {
                        
                        // reset token
                        $token = $demandeur->prepareToken();
                        
                        if ($demandeur->save()) {
                            
                            // Envois un courriel de confirmation
                            $courriel->save(array(
                                'gabarit' => 'courriel_reinitialisation',
                                'meta' => array(
                                    'demandeur' => $demandeur,
                                    'lien' => $this->url->getStatic(array(
                                        'for' => 'controller-action',
                                        'controller' => 'connexion',
                                        'action' => 'reinitialisation',
                                        'params' =>
                                            '?courriel=' . rawurlencode($demandeur->courriel)
                                            . '&token=' . rawurlencode($token)
                                    )),
                                    'courriel' => $demandeur->courriel,
                                    'token' => $token
                                )
                            ));
                            
                            // Courriel de réinitialisation envoyé
                            return $this->response->redirect(array(
                                'for' => 'controller-action',
                                'controller' => 'connexion',
                                'action' => 'reinitialisation',
                                'params' =>
                                    '?courriel=' . rawurlencode($demandeur->courriel)
                                    . '&envoye=1'
                            ));
                        }
                        
                    } else {
                        $this->_validationToken($demandeur, $reinitialisationToken, $validation, 'reinitialisation');
                    }
                } else {
                    // Courriel inexistant
                    $validation->appendMessage(
                        new Message(
                            $this->gss->_('courriel_inexistant'),
                            'courriel',
                            'NotFound',
                            404
                        )
                    );
                }
            }
        }
        
        // Met l'objet du demandeur par défaut ou l'objet de la tentative d'inscription
        $this->view->setVar('courriel', $courriel);
        $this->view->setVar('demandeur', $demandeur);
        $this->view->setVar('validation', $validation);
    }
    
    public function deconnexionAction()
    {
    
    }
    
    private function _validationToken($demandeur, $token, $validation, $type)
    {
        // Vérification du token du demandeur
        if ($demandeur->checkToken($token)) {
            
            // Expiration du token
            $demandeur->confirmation = true;
            $demandeur->token_hash = null;
            
            // Le token est bon, permet les modifications au demandeur
            if ($demandeur->save($this->request->get())) {
                return $this->response->redirect(array(
                    'for' => 'controller',
                    'controller' => 'connexion',
                    'params' => '?' . $type . '=1'
                ));
            }
        } else {
            // Mauvais token
            
            if (empty($demandeur->token_hash)) {
                
                // Token expiré car inexistant
                $validation->appendMessage(
                    new Message(
                        $this->gss->_('jeton_expire'),
                        'token',
                        'Expired',
                        403
                    )
                );
            } else {
                
                // Token invalide car ne concorde pas
                $validation->appendMessage(
                    new Message(
                        $this->gss->_('jeton_invalide'),
                        'token',
                        'Invalid',
                        401
                    )
                );
            }
        }
    }
}
#11GSS\Controllers\ConnexionController->initialize()
#12Phalcon\Dispatcher->dispatch()
#13Phalcon\Mvc\Application->handle()
/opt/rh/httpd24/root/var/www/html/gss-sports/public/index.php (43)
<?php
 
use Phalcon\Mvc\Application;
use Phalcon\DI\FactoryDefault;
use GSS\Config\App;
use GSS\Config\Config;
use GSS\Config\Loader;
use GSS\Config\Services;
 
class Bootstrap
{
    public $app;
    public $config;
    public $loader;
    public $di;
    public $services;
    
    public function __construct()
    {
        $appPath = realpath('../app/');
        $appPath = empty($appPath) ? __DIR__ . '/../' : $appPath . '/';
        $configPath = $appPath . 'config/';
 
        require_once $configPath . 'App.php';
        require_once $configPath . 'Config.php';
        require_once $configPath . 'Loader.php';
        require_once $configPath . 'Services.php';
    
        $this->di = new FactoryDefault();
        $this->app = new App();
        $this->config = new Config();
        $this->config->mergeEnvConfig();
        $this->config->mergeFrontendConfig();
        if (!$this->config->debug) {
            ini_set('display_errors', 0);
        }
        $this->loader = new Loader($this->config);
        $this->di->setShared('loader', $this->loader);
        $this->services = new Services($this->di, $this->config);
    }
    
    public function run() {
        echo (new Application($this->di))->handle()->getContent();
    }
}
 
$bootstrap = new Bootstrap();
$bootstrap->run();
#14Bootstrap->run()
/opt/rh/httpd24/root/var/www/html/gss-sports/public/index.php (48)
<?php
 
use Phalcon\Mvc\Application;
use Phalcon\DI\FactoryDefault;
use GSS\Config\App;
use GSS\Config\Config;
use GSS\Config\Loader;
use GSS\Config\Services;
 
class Bootstrap
{
    public $app;
    public $config;
    public $loader;
    public $di;
    public $services;
    
    public function __construct()
    {
        $appPath = realpath('../app/');
        $appPath = empty($appPath) ? __DIR__ . '/../' : $appPath . '/';
        $configPath = $appPath . 'config/';
 
        require_once $configPath . 'App.php';
        require_once $configPath . 'Config.php';
        require_once $configPath . 'Loader.php';
        require_once $configPath . 'Services.php';
    
        $this->di = new FactoryDefault();
        $this->app = new App();
        $this->config = new Config();
        $this->config->mergeEnvConfig();
        $this->config->mergeFrontendConfig();
        if (!$this->config->debug) {
            ini_set('display_errors', 0);
        }
        $this->loader = new Loader($this->config);
        $this->di->setShared('loader', $this->loader);
        $this->services = new Services($this->di, $this->config);
    }
    
    public function run() {
        echo (new Application($this->di))->handle()->getContent();
    }
}
 
$bootstrap = new Bootstrap();
$bootstrap->run();
KeyValue
_url/connexion/inscription
KeyValue
REDIRECT_UNIQUE_IDaXr7h6qB18X7yk3MlEJe6wAAAAY
REDIRECT_APPLICATION_ENVvdm_production
REDIRECT_STATUS200
UNIQUE_IDaXr7h6qB18X7yk3MlEJe6wAAAAY
APPLICATION_ENVvdm_production
HTTP_X_REAL_IP216.73.216.33
HTTP_X_FORWARDED_FOR216.73.216.33, 216.73.216.33
HTTP_HOSTservicesenligne2.ville.montreal.qc.ca
HTTP_WL_PROXY_SSLtrue
HTTP_X_FORWARDED_PROTOhttps
HTTP_CONNECTIONclose
HTTP_CF_RAY9c569baecacc4af4-CMH
HTTP_ACCEPT*/*
HTTP_ACCEPT_ENCODINGgzip
HTTP_USER_AGENTMozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
HTTP_CDN_LOOPcloudflare; loops=1
HTTP_CF_CONNECTING_IP216.73.216.33
HTTP_CF_IPCOUNTRYUS
HTTP_CF_VISITOR{"scheme":"https"}
PATH/opt/rh/httpd24/root/usr/bin:/opt/rh/httpd24/root/usr/sbin:/sbin:/usr/sbin:/bin:/usr/bin
SERVER_SIGNATURE
SERVER_SOFTWAREApache/2.4.6 (Oracle) PHP/5.5.21
SERVER_NAMEservicesenligne2.ville.montreal.qc.ca
SERVER_ADDR10.145.1.76
SERVER_PORT80
REMOTE_ADDR10.17.1.133
DOCUMENT_ROOT/opt/rh/httpd24/root/var/www/html
REQUEST_SCHEMEhttp
CONTEXT_PREFIX
CONTEXT_DOCUMENT_ROOT/opt/rh/httpd24/root/var/www/html
SERVER_ADMINroot@localhost
SCRIPT_FILENAME/opt/rh/httpd24/root/var/www/html/gss-sports/public/index.php
REMOTE_PORT38290
REDIRECT_QUERY_STRING_url=/connexion/inscription
REDIRECT_URL/gss/sports/connexion/inscription
GATEWAY_INTERFACECGI/1.1
SERVER_PROTOCOLHTTP/1.0
REQUEST_METHODGET
QUERY_STRING_url=/connexion/inscription
REQUEST_URI/gss/sports/connexion/inscription
SCRIPT_NAME/gss-sports/public/index.php
PHP_SELF/gss-sports/public/index.php
REQUEST_TIME_FLOAT1769667463,509
REQUEST_TIME1769667463
HTTPSon
#Path
0/opt/rh/httpd24/root/var/www/html/gss-sports/public/index.php
1/opt/rh/httpd24/root/var/www/html/gss-sports/app/config/App.php
2/opt/rh/httpd24/root/var/www/html/gss-sports/app/config/Config.php
3/opt/rh/httpd24/root/var/www/html/gss-sports/app/config/Loader.php
4/opt/rh/httpd24/root/var/www/html/gss-sports/app/config/Services.php
5/opt/rh/httpd24/root/var/www/html/gss-sports/app/config/env/config.vdm_production.php
6/opt/rh/httpd24/root/var/www/html/gss-sports/app/config/Router.php
7/opt/rh/httpd24/root/var/www/html/gss-sports/app/library/Phalcon/Utils/Slug.php
8/opt/rh/httpd24/root/var/www/html/gss-sports/app/plugins/Mvc/View/Error.php
9/opt/rh/httpd24/root/var/www/html/gss-sports/app/plugins/Mvc/View.php
10/opt/rh/httpd24/root/var/www/html/gss-sports/app/plugins/Mvc/Dispatcher/Camelize.php
11/opt/rh/httpd24/root/var/www/html/gss-sports/app/plugins/Mvc/Dispatcher/Security.php
12/opt/rh/httpd24/root/var/www/html/gss-sports/app/plugins/Mvc/Dispatcher/Rest.php
13/opt/rh/httpd24/root/var/www/html/gss-sports/app/plugins/Mvc/Dispatcher/Error.php
14/opt/rh/httpd24/root/var/www/html/gss-sports/app/plugins/GSS.php
15/opt/rh/httpd24/root/var/www/html/gss-sports/app/controllers/ConnexionController.php
16/opt/rh/httpd24/root/var/www/html/gss-sports/app/controllers/AbstractController.php
17/opt/rh/httpd24/root/var/www/html/gss-sports/app/models/AbstractModel.php
18/opt/rh/httpd24/root/var/www/html/gss-sports/app/library/jTurbide/Mvc/Model/Snapshots.php
19/opt/rh/httpd24/root/var/www/html/gss-sports/app/library/jTurbide/Mvc/Model/SoftDelete.php
20/opt/rh/httpd24/root/var/www/html/gss-sports/app/library/jTurbide/Mvc/Model/RawValue.php
21/opt/rh/httpd24/root/var/www/html/gss-sports/app/library/jTurbide/Mvc/Model/CreatedDate.php
22/opt/rh/httpd24/root/var/www/html/gss-sports/app/library/jTurbide/Mvc/Model/UpdatedDate.php
23/opt/rh/httpd24/root/var/www/html/gss-sports/app/library/jTurbide/Mvc/Model/Log.php
24/opt/rh/httpd24/root/var/www/html/gss-sports/app/library/jTurbide/Mvc/Model/User.php
25/opt/rh/httpd24/root/var/www/html/gss-sports/app/library/jTurbide/Mvc/Model/Relationship.php
26/opt/rh/httpd24/root/var/www/html/gss-sports/app/library/jTurbide/Mvc/Model/Eagerload.php
27/opt/rh/httpd24/root/var/www/html/gss-sports/app/library/Phalcon/Mvc/Model/EagerLoadingTrait.php
28/opt/rh/httpd24/root/var/www/html/gss-sports/app/library/jTurbide/Mvc/Model/Expose/Expose.php
29/opt/rh/httpd24/root/var/www/html/gss-sports/app/library/jTurbide/Mvc/Model/FindIn.php
30/opt/rh/httpd24/root/var/www/html/gss-sports/app/library/jTurbide/Mvc/Model/Utils.php
31/opt/rh/httpd24/root/var/www/html/gss-sports/app/library/jTurbide/Mvc/Model/Cache.php
32/opt/rh/httpd24/root/var/www/html/gss-sports/app/library/jTurbide/Mvc/Model/Slug.php
33/opt/rh/httpd24/root/var/www/html/gss-sports/app/models/Erreur.php
34/opt/rh/httpd24/root/var/www/html/gss-sports/app/models/Demandeur.php
35/opt/rh/httpd24/root/var/www/html/gss-sports/app/models/Projet.php
36/opt/rh/httpd24/root/var/www/html/gss-sports/app/models/Liste.php
37/opt/rh/httpd24/root/var/www/html/gss-sports/app/models/Traduction.php
38/opt/rh/httpd24/root/var/www/html/gss-sports/app/library/Phalcon/Translate/Adapter/Database.php
39/opt/rh/httpd24/root/var/www/html/gss-sports/app/library/Phalcon/Translate/Adapter/Base.php
Memory
Usage1572864