/**
  * On s'assure que pour ces tâche ce soit bien un administrateur
  */
 public function beforeAction()
 {
     CopixAuth::getCurrentUser()->assertCredential('basic:admin');
     if (!CopixConfig::instance()->copixauth_isRegisteredCredentialHandler('auth|dbdynamiccredentialhandler')) {
         throw new CopixException(_i18n('auth.dynamicHandlerNotRegister'));
     }
 }
 public function testMain()
 {
     //compte le nombre de profils au départ
     $nbStart = count(CopixConfig::instance()->copixdb_getProfiles());
     //vérifie que l'on arrive bien à définir un profil
     CopixConfig::instance()->copixdb_defineProfile('test', 'pdo_mysql:host=localhost;dbname=copix_3_beta', 'root', '');
     $this->assertNotNull(CopixConfig::instance()->copixdb_getProfile('test'));
     $this->assertEquals($nbStart + 1, count(CopixConfig::instance()->copixdb_getProfiles()));
     $this->assertEquals(CopixConfig::instance()->copixdb_getProfile('test')->getName(), 'test');
     $parts = CopixConfig::instance()->copixdb_getProfile('test')->getConnectionStringParts();
     $this->assertEquals('localhost', $parts['host']);
     $this->assertEquals('copix_3_beta', $parts['dbname']);
     $this->assertEquals('pdo_mysql', CopixConfig::instance()->copixdb_getProfile('test')->getDriverName());
     $this->assertEquals(array(), CopixConfig::instance()->copixdb_getProfile('test')->getOptions());
     $this->assertEquals('mysql', CopixConfig::instance()->copixdb_getProfile('test')->getDatabase());
     CopixConfig::instance()->copixdb_getProfile('test')->setOptions(array('FOO' => 'FOOVALUE'));
     $this->assertEquals(array('FOO' => 'FOOVALUE'), CopixConfig::instance()->copixdb_getProfile('test')->getOptions());
     CopixConfig::instance()->copixdb_getProfile('test')->setOptions(array('FOO2' => 'FOOVALUE2'));
     $this->assertEquals(array('FOO' => 'FOOVALUE', 'FOO2' => 'FOOVALUE2'), CopixConfig::instance()->copixdb_getProfile('test')->getOptions());
     CopixConfig::instance()->copixdb_getProfile('test')->clearOptions();
     $this->assertEquals(array(), CopixConfig::instance()->copixdb_getProfile('test')->getOptions());
     //vérifie que l'on arrive à ajouter encore un 2ème profil
     CopixConfig::instance()->copixdb_defineProfile('test2', 'pdo_mysql:host=localhost;dbname=copix_3_beta', 'root', '');
     $this->assertNotNull(CopixConfig::instance()->copixdb_getProfile('test2'));
     $this->assertEquals($nbStart + 2, count(CopixConfig::instance()->copixdb_getProfiles()));
     $this->assertEquals(CopixConfig::instance()->copixdb_getProfile('test2')->getName(), 'test2');
 }
 /**
  * Accueil des stats
  *
  * @author Christophe Beyer <*****@*****.**>
  * @since 2007/03/19
  */
 public function home()
 {
     if (!Admin::canAdmin()) {
         return CopixActionGroup::process('genericTools|Messages::getError', array('message' => CopixI18N::get('kernel|kernel.error.noRights'), 'back' => CopixUrl::get()));
     }
     $tpl = new CopixTpl();
     $tpl->assign('TITLE_PAGE', CopixI18N::get('sysutils|admin.menu.stats'));
     $tpl->assign('MENU', Admin::getMenu('stats'));
     $tplStats = new CopixTpl();
     $modules = Kernel::getAllModules();
     $tab = array();
     foreach ($modules as $mod_val) {
         $arModulesPath = CopixConfig::instance()->arModulesPath;
         foreach ($arModulesPath as $modulePath) {
             $class_file = $modulePath . $mod_val . '/' . COPIX_CLASSES_DIR . 'kernel' . $mod_val . '.class.php';
             if (!file_exists($class_file)) {
                 continue;
             }
             $module_class =& CopixClassesFactory::Create($mod_val . '|Kernel' . $mod_val);
             //print_r($module_class);
             if (!is_callable(array($module_class, 'getStatsRoot'))) {
                 continue;
             }
             //$classeModule = CopixClassesFactory::create("$label|Kernel$label");
             $tab[$mod_val]['module_nom'] = Kernel::Code2Name('mod_' . $mod_val);
             $tab[$mod_val]['stats'] = $module_class->getStatsRoot();
         }
     }
     //print_r($tab);
     $tplStats->assign('tab', $tab);
     $tpl->assign('MAIN', $tplStats->fetch('sysutils|stats.modules.tpl'));
     return new CopixActionReturn(COPIX_AR_DISPLAY, $tpl);
 }
 /**
  * Demarrage de la session
  * @param	string	$pId	l'identifiant de la session,
  *    utile si vous avez plusieurs copix sur un même serveur
  * 	  et que vous ne souhaitez pas partager les sessions
  */
 public static function start($pId = null)
 {
     if ($pId === null) {
         $pId = CopixConfig::instance()->sessionName;
     }
     session_start($pId);
 }
 /**
  * Création du contenu de la page
  */
 public function _createContent(&$toReturn)
 {
     $tpl = new CopixTpl();
     $tpl->assign('arModulesPath', CopixConfig::instance()->arModulesPath);
     $tpl->assign('arModules', $this->_getModuleOrderByDescription());
     $toReturn = $tpl->fetch('modules.list.tpl');
 }
 public function processTest()
 {
     if (!Kernel::isAdmin()) {
         return $this->error('rssmix.noRight', true, '||');
     }
     try {
         $feed = $this->service->getRssFeed($this->request('url'), 2);
         echo '<p class="mesgSuccess">' . $this->i18n('rssmix.feedValid') . '</p>';
         foreach ($feed as $item) {
             echo '<h4>' . $item['title'] . '</h4>';
             echo '<p>' . $item['content'] . '</p>';
             echo '<hr />';
         }
     } catch (Exception $e) {
         $config = CopixConfig::instance();
         echo '<p class="mesgError">' . $this->i18n('rssmix.feedNoValid') . '</p>';
         if ($config->getMode() == CopixConfig::DEVEL) {
             echo '<div class="content-panel"><h3>Debug informations (only in devel)</h3>
                 <p> url : ' . $this->request('url') . '</p>
                 <p>' . $e->getMessage() . '</p>
                 <p><pre>' . $e->getFile() . ' : ' . $e->getLine() . '</pre></p>
                 <p><pre>' . $e->getTraceAsString() . '</pre></p>
                     </div>';
         }
     }
     return _arNone();
 }
 /**
  * It set many properties of the object, get all GET and POST parameters, and start session.
  * @param   string  $configFile     chemin du fichier de configuration du projet
  */
 function CopixCoordination($configFile)
 {
     // register itself in the global variable.
     $GLOBALS['COPIX']['COORD'] =& $this;
     // creating CopixConfig Object and includes the asked configuration file.
     $GLOBALS['COPIX']['CONFIG'] =& CopixConfig::instance();
     require $configFile;
     /**
      * EXPERIMENTAL : support des URLs significatifs
      */
     $scriptNameAndPath = $_SERVER['SCRIPT_NAME'];
     //condidering : http://mysite.com/subdir/index.php/mypath/myaction?myparams=myvalues
     //following is subdir/
     $GLOBALS['COPIX']['CONFIG']->significant_url_script_path = substr($scriptNameAndPath, 0, strrpos($scriptNameAndPath, '/')) . '/';
     //following is index.php
     $GLOBALS['COPIX']['CONFIG']->significant_url_script_name = substr($scriptNameAndPath, strrpos($scriptNameAndPath, '/') + 1);
     //following is mysite.com
     $GLOBALS['COPIX']['CONFIG']->significant_url_domain = $_SERVER['HTTP_HOST'];
     //following is http://mysite.com/subdir/
     $GLOBALS['COPIX']['CONFIG']->significant_url_basepath = 'http://' . $GLOBALS['COPIX']['CONFIG']->significant_url_domain . $GLOBALS['COPIX']['CONFIG']->significant_url_script_path;
     //following is index.php/mypath/myaction
     if (isset($_SERVER['PATH_INFO'])) {
         $pathinfo = $_SERVER['PATH_INFO'];
         $pos = strpos($_SERVER['PATH_INFO'], $GLOBALS['COPIX']['CONFIG']->significant_url_script_path . $GLOBALS['COPIX']['CONFIG']->significant_url_script_name);
         if ($pos !== false) {
             //under IIS, we may get as PATH_INFO /subdir/index.php/mypath/myaction (wich is incorrect)
             $pathinfo = substr($_SERVER['PATH_INFO'], strlen($GLOBALS['COPIX']['CONFIG']->significant_url_script_path . $GLOBALS['COPIX']['CONFIG']->significant_url_script_name));
         }
     } else {
         $pathinfo = substr($_SERVER["PHP_SELF"], strlen($_SERVER['SCRIPT_NAME']));
     }
     $GLOBALS['COPIX']['CONFIG']->significant_url_path_info = $pathinfo;
     /**
      * Fin de "en développement / Test"
      */
     if ($GLOBALS['COPIX']['CONFIG']->errorHandlerOn) {
         $ficEH = COPIX_CONFIG_PATH . $GLOBALS['COPIX']['CONFIG']->errorHandlerConfigFile;
         if (file_exists($ficEH)) {
             require_once COPIX_CORE_PATH . 'CopixErrorHandler.lib.php';
             $GLOBALS['COPIX']['CONFIG']->errorHandler = new CopixErrorHandlerConfig();
             require $ficEH;
             set_error_handler('CopixErrorHandler');
         }
     }
     // registering and creating plugins.
     foreach ($GLOBALS['COPIX']['CONFIG']->plugins as $name => $conf) {
         // pour create, on ne donne pas $conf, car le foreach fait une copie du tableau plugins pour le parcourir
         // et cela ne prend donc pas en compte les eventuelles modifs effectuées dans plugins par un plugin,
         // notament dans debug, si celui ci précise un fichier de conf spécifique
         if ($plug =& CopixPluginFactory::create($name, $GLOBALS['COPIX']['CONFIG']->plugins[$name])) {
             $this->plugins[strtolower($name)] =& $plug;
         }
     }
     $this->url =& new CopixUrl($_SERVER['SCRIPT_NAME'], $_GET, $GLOBALS['COPIX']['CONFIG']->significant_url_path_info);
     $this->vars = CopixUrl::parse($GLOBALS['COPIX']['CONFIG']->significant_url_path_info, false, true);
     // do what we need for each plugin before starting the session
     $this->_beforeSessionStart();
     session_start();
 }
 public function testCopixObject()
 {
     //on test que les objets autoloadés Copix ne soient pas pris en charge
     $element = new CopixSessionObject(CopixConfig::instance());
     $serialized = serialize($element);
     $elementBack = unserialize($serialized);
     //si ça ne génère pas d'erreurs, c'est ok
 }
 /**
  * On protège la page avec les droits d'administration
  */
 public function beforeAction()
 {
     //On souhaite, pour éviter tout problème, tester explicitement les droits.
     //Cette volontée de tester explicitement les droits est pour éviter tout problème
     //de conflits avec les écrans de modification des handlers
     CopixConfig::instance()->copixauth_cache = false;
     _currentUser()->assertCredential('basic:admin');
 }
 public function testParse()
 {
     $testUrl = "test.php?var=value";
     CopixConfig::instance()->significant_url_mode = 'default';
     $this->assertContains("value", CopixUrl::parse($testUrl, true));
     CopixConfig::instance()->significant_url_mode = 'prepend';
     $this->assertContains("value", CopixUrl::parse($testUrl, true));
 }
 public function _createContent(&$toReturn)
 {
     $tpl = new CopixTpl();
     $kernel = _class("kernel");
     $toReturn = "";
     $arModulesPath = CopixConfig::instance()->arModulesPath;
     $display = false;
     foreach ($arModulesPath as $modulePath) {
         if (file_exists(COPIX_PROJECT_PATH . "themes/" . $kernel->getTheme() . "/kernel/footer.tpl")) {
             $tpl_file = COPIX_PROJECT_PATH . "themes/" . $kernel->getTheme() . "/kernel/footer.tpl";
         } else {
             $tpl_file = $modulePath . 'kernel/templates/footer.tpl';
         }
         if (!file_exists($tpl_file)) {
             continue;
         }
         $display = true;
         // Récupération des infos de géolocalisation.
         $whereami = Kernel::whereAmI();
         if (isset($whereami['BU_GRVILLE'])) {
             $tpl->assign('grville_id', $whereami['BU_GRVILLE']['id']);
             $tpl->assign('grville_nom', $whereami['BU_GRVILLE']['nom']);
         }
         if (isset($whereami['BU_VILLE'])) {
             $tpl->assign('ville_id', $whereami['BU_VILLE']['id']);
             $tpl->assign('ville_nom', $whereami['BU_VILLE']['nom']);
         }
         if (isset($whereami['BU_ECOLE'])) {
             $tpl->assign('ecole_id', $whereami['BU_ECOLE']['id']);
             $tpl->assign('ecole_nom', $whereami['BU_ECOLE']['nom']);
         }
         if (isset($whereami['BU_CLASSE'])) {
             $tpl->assign('classe_id', $whereami['BU_CLASSE']['id']);
             $tpl->assign('classe_nom', $whereami['BU_CLASSE']['nom']);
         }
         // Récupération des valeurs d'URL.
         if ($module = CopixRequest::get('module')) {
             $tpl->assign('module', $module);
         }
         if ($action = CopixRequest::get('action')) {
             $tpl->assign('action', $action);
         }
         // Récupération des valeurs de sessions (personne).
         if (_currentUser()->getExtra('type')) {
             $tpl->assign('user_type', _currentUser()->getExtra('type'));
             $tpl->assign('user_id', _currentUser()->getExtra('id'));
         }
     }
     // Si le fichier de template n'existe pas, pas d'erreur.
     if ($display) {
         $toReturn = $tpl->fetch('kernel|footer.tpl');
     }
     return true;
 }
 public function beforeProcess(&$pExecParams)
 {
     if ($theme = $this->config->getThemeFor(CopixRequest::get('module'))) {
         CopixTpl::setTheme($theme);
     }
     //Ajout d'une gestion de tpl par thème
     $config = CopixConfig::instance();
     $theme = CopixTpl::getThemeInformations(CopixTpl::getTheme());
     if ($theme->tpl != null) {
         $config->mainTemplate = $theme->tpl;
     }
 }
 public function beforeProcess()
 {
     if (($theme = CopixAJAX::getSession()->get('currentTheme')) != null) {
         CopixTpl::setTheme($theme);
         //Ajout d'une gestion de tpl par thème
         $config = CopixConfig::instance();
         $theme = CopixTpl::getThemeInformations(CopixTpl::getTheme());
         if ($theme->tpl != null) {
             $config->mainTemplate = $theme->tpl;
         }
     }
 }
 /**
  * Test si une base par défaut est configuré
  *
  * @return boolean
  */
 public function isValidDefaultDatabase()
 {
     try {
         $profilName = CopixConfig::instance()->copixdb_getDefaultProfileName();
         if ($profilName === null) {
             return false;
         }
         $ct = CopixDb::getConnection($profilName);
     } catch (Exception $e) {
         return false;
     }
     return true;
 }
 /**
  * On va tester les connexions définies dans l'application
  */
 public function testConnection()
 {
     foreach (CopixConfig::instance()->copixdb_getProfiles() as $name) {
         try {
             CopixDB::getConnection($name);
             $this->assertTrue(true);
             //ok
         } catch (Exception $exception) {
             $this->assertTrue(false);
             //n'a pas fonctionné
         }
     }
 }
 /**
  * Get the instance
  *
  */
 function &instance()
 {
     if (!isset($GLOBALS['COPIX'])) {
         $GLOBALS['COPIX'] = array();
     }
     if (!isset($GLOBALS['COPIX']['CONFIG'])) {
         $GLOBALS['COPIX']['CONFIG'] =& CopixConfig::instance();
     }
     if (!isset($GLOBALS['COPIX']['CONFIG']->compile_resource)) {
         $GLOBALS['COPIX']['CONFIG']->compile_resource = null;
     }
     return $GLOBALS['COPIX']['CONFIG'];
 }
 /**
  * Supression d'un plugin de la liste des plugins enregistrés
  */
 public function processRemovePlugin()
 {
     //on regarde si le plugin fait parti des plugins déja enregistrés
     $arPluginsConfiguration = array();
     if (in_array($pluginName = CopixRequest::get('plugin'), $arPlugins = CopixConfig::instance()->plugin_getRegistered())) {
         foreach ($arPlugins as $plugin) {
             if ($plugin != $pluginName) {
                 $arPluginsConfiguration[] = $plugin;
             }
         }
         _class('PluginsConfigurationFile')->write($arPluginsConfiguration);
     }
     return _arRedirect(_url('plugin|'));
 }
 /**
  * Liste des utilisateurs avec un écran de recherche
  */
 public function processList()
 {
     $params = array();
     if (($filter = CopixRequest::get('filter', null)) !== null) {
         $params['login'] = $filter;
     }
     foreach (CopixConfig::instance()->copixauth_getRegisteredUserHandlers() as $handlerInformations) {
         $arUsers[$handlerInformations['name']] = CopixUserHandlerFactory::create($handlerInformations['name'])->find($params);
     }
     $ppo = new CopixPPO();
     $ppo->TITLE_PAGE = _i18n('auth.userList');
     $ppo->arUsers = $arUsers;
     $ppo->filter = $filter;
     return _arPPO($ppo, 'users.list.php');
 }
 /**
  * Préparation de l'installation
  */
 public function processInstallFramework()
 {
     // find the current connection type (defined in /plugins/copixDB/profils.definition.xml)
     $config = CopixConfig::instance();
     $driver = $config->copixdb_getProfile();
     $typeDB = $driver->getDriverName();
     // Search each module install file
     $scriptName = 'prepareinstall.' . $typeDB . '.sql';
     $file = CopixModule::getPath('admin') . COPIX_INSTALL_DIR . 'scripts/' . $scriptName;
     CopixDB::getConnection()->doSQLScript($file);
     //make sure that copixmodule is reset
     CopixModule::reset();
     $tpl = new CopixTpl();
     $tpl->assignZone('MAIN', 'admin|installmodulewithdep', array('arModule' => array('generictools', 'auth', 'default', 'admin'), 'url_return' => _url('admin|database|done'), 'messageConfirm' => false));
     return _arDisplay($tpl);
 }
 /**
  * Cette fonction récupère la suite de test à lancer.
  * @return PHPUnit_Framework_TestSuite
  */
 private function _getSuite()
 {
     $suite = new PHPUnit_Framework_TestSuite('Tests');
     // Charge la config (nécessaire pour CopixModule)
     $config = CopixConfig::instance();
     $config->copixerrorhandler_enabled = false;
     //On instancie un controlleur
     new ProjectController($this->_configFile);
     //----
     $subSuites = array();
     $arToTest = array();
     //on parcours l'ensemble des tests disponibles et on les ajoute
     //si on les trouve dans l'url.
     if ($_REQUEST['tests'] == 'all') {
         $arToTest = CopixTests::getAllTests();
     } else {
         foreach (CopixTests::getAllTests() as $moduleName => $arTestsForModule) {
             $arToTest[$moduleName] = array();
             if (in_array($moduleName . '|', $_REQUEST['tests'])) {
                 //Le module complet est demandé
                 $arToTest[$moduleName] = $arTestsForModule;
             } else {
                 //On test chacun des éléments de test
                 foreach ($arTestsForModule as $test) {
                     if (in_array($test, $_REQUEST['tests'])) {
                         $arToTest[$moduleName][] = $test;
                     }
                 }
             }
         }
     }
     //on parcours ensuite la lise des tests demandés et on crée la suite.
     foreach ($arToTest as $moduleName => $arTestsForModule) {
         if (count($arTestsForModule)) {
             $moduleSuite = new PHPUnit_Framework_TestSuite('Module ' . $moduleName);
             foreach ($arTestsForModule as $nameTest) {
                 $toTest = explode('|', $nameTest);
                 require_once CopixModule::getPath($toTest[0]) . 'tests/' . $toTest[1] . '.class.php';
                 $moduleSuite->addTestSuite($toTest[1]);
             }
             $suite->addTestSuite($moduleSuite);
         }
     }
     return $suite;
 }
 /**
  * Teste CopixTpl->getFilePath() sans l'internationalisation activée.
  *
  */
 public function testGetFilePathWithoutI18N()
 {
     $tpl = new CopixTpl();
     CopixConfig::instance()->i18n_path_enabled = false;
     $this->assertPathEquals($this->themeDir . 'copixtest/testtheme.tpl', $tpl->getFilePath('copixtest|testtheme.tpl'));
     $this->assertFalse($tpl->getFilePath('copixtest|testthemefr.tpl'));
     // N'existe pas
     $this->assertPathEquals($this->themeDir . 'copixtest/testthemefrfr.tpl', $tpl->getFilePath('copixtest|testthemefrfr.tpl'));
     $this->assertPathEquals($this->defaultDir . 'copixtest/testdefault.tpl', $tpl->getFilePath('copixtest|testdefault.tpl'));
     $this->assertFalse($tpl->getFilePath('copixtest|testdefaultfr.tpl'));
     // N'existe pas
     $this->assertPathEquals($this->defaultDir . 'copixtest/testdefaultfrfr.tpl', $tpl->getFilePath('copixtest|testdefaultfrfr.tpl'));
     $this->assertPathEquals($this->moduleDir . 'testmodule.tpl', $tpl->getFilePath('copixtest|testmodule.tpl'));
     $this->assertFalse($tpl->getFilePath('copixtest|testmodulefr.tpl'));
     // N'existe pas
     $this->assertFalse($tpl->getFilePath('copixtest|testmodulefrfr.tpl'));
     // N'existe pas
     $this->assertPathEquals($this->themeDir . 'copixtest/testmoduleoverload.tpl', $tpl->getFilePath('copixtest|testmoduleoverload.tpl'));
 }
 /**
  * It set many properties of the object, get all GET and POST parameters, and start session.
  * @param   string  $configFile     chemin du fichier de configuration du projet
  */
 function CopixCoordination($configFile)
 {
     //the very first.
     $old_error_handler = set_error_handler('CopixErrorHandler');
     $this->url =& new CopixUrl($_SERVER['PHP_SELF'], $_GET);
     $this->vars = array_merge($_POST, $_GET);
     // register itself in the global variable.
     $GLOBALS['COPIX']['COORD'] =& $this;
     // creating CopixConfig Object and includes the asked configuration file.
     $GLOBALS['COPIX']['CONFIG'] =& CopixConfig::instance();
     require $configFile;
     // registering and creating plugins.
     foreach ($GLOBALS['COPIX']['CONFIG']->plugins as $name) {
         if ($plug =& CopixPluginFactory::create($name)) {
             $this->plugins[strtolower($name)] =& $plug;
         }
     }
     // do what we need for each plugin before starting the session
     $this->_beforeSessionStart();
     session_start();
 }
 /**
  * Fonction permettant d'afficher une exception à l'écran.
  * Principalement destinée à l'utilisation interne, pas nécessairement à l'utilisation depuis l'url
  *
  */
 public function processException()
 {
     CopixRequest::assert('exception');
     $e = _request('exception');
     //Absolument impossible dans le contexte normal d'utilisation, $e est nécessairement une exception
     //catchée par le processus.
     if (!$e instanceof Exception) {
         return _arRedirect(_url('||'));
     }
     $ppo = new CopixPPO();
     $ppo->TITLE_PAGE = _request('TITLE_PAGE', get_class($e));
     switch (get_class($e)) {
         case 'CopixDAOCheckException':
             $ppo->message = sprintf('Une erreur de validation est survenue avec le message [%s]', implode(', ', $e->getErrors()));
             break;
         default:
             $ppo->message = $e->getMessage();
     }
     $ppo->type = get_class($e);
     $ppo->file = $e->getFile();
     $ppo->line = $e->getLine();
     $ppo->trace = $e->getTrace();
     $ppo->id = uniqid();
     $ppo->urlBack = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null;
     switch (CopixConfig::instance()->getMode()) {
         case CopixConfig::DEVEL:
             $ppo->mode = 'DEVEL';
             break;
         case CopixConfig::PRODUCTION:
             $ppo->mode = 'FORCE_INITIALISATION';
             break;
         case CopixConfig::FORCE_INITIALISATION:
             $ppo->mode = 'FORCE_INITIALISATION';
             break;
         default:
             $ppo->mode = 'UNKNOW';
             break;
     }
     return _arPpo($ppo, 'default|exception.tpl');
 }
 /**
  * Envoi le log par mail
  *
  * @param string $pProfil Profile qui renvoie ce log
  * @param string $pType Type de log
  * @param int $pLevel Niveau de log
  * @param int $pDate Date
  * @param string $pMessage Message à logger
  * @param array $pArExtra Tableaux de paramètres
  */
 public function log($pProfil, $pType, $pLevel, $pDate, $pMessage, $pArExtra)
 {
     $profile = CopixConfig::instance()->copixlog_getProfile($pProfil);
     $year = substr($pDate, 0, 4);
     $month = substr($pDate, 4, 2);
     $day = substr($pDate, 6, 2);
     $hour = substr($pDate, 8, 2);
     $min = substr($pDate, 10, 2);
     $sec = substr($pDate, 12, 2);
     $levels = CopixLog::getLevels();
     $level = $levels[$pLevel]->caption;
     $pattern = _i18n('copix:log.email.bodyHTML');
     $vars = array('MESSAGE' => $pMessage, 'PROFIL' => $pProfil, 'TYPE' => $pType, 'LEVEL' => $level, 'YEAR' => $year, 'MONTH' => $month, 'DAY' => $day, 'HOUR' => $hour, 'MIN' => $min, 'SEC' => $sec, 'EXTRAS' => print_r($pArExtra, true));
     $body = utf8_decode($this->_replaceVars($pattern, $vars));
     $subject = utf8_decode(_i18n('copix:log.email.subject') . ' ' . substr($pMessage, 0, 80));
     // envoi du / des mail(s)
     $destinataires = explode(';', $profile['email']);
     foreach ($destinataires as $destinataire) {
         $mail = new CopixHTMLEmail($destinataire, null, null, $subject, $body);
         $mail->send();
     }
 }
 /**
  * Regarde si une connexion à une base de données est disponible
  * @return boolean
  */
 private function _checkDBConnection()
 {
     static $dbOk = null;
     if ($dbOk === null) {
         try {
             CopixConfig::instance()->copixdb_getProfile();
             return $dbOk = true;
         } catch (Exception $e) {
             return $dbOk = false;
         }
     }
     return $dbOk;
 }
 /**
  * Test les droits en retournant true / false
  *
  * @param string $pString Chaine de droit à tester (ex : basic:admin@news)
  * @return bool
  */
 public function testCredential($pString)
 {
     if (isset($this->_asserted[$pString]) && CopixConfig::instance()->copixauth_cache == true) {
         return $this->_asserted[$pString];
     }
     $pStringType = substr($pString, 0, strpos($pString, ':'));
     $pStringString = substr($pString, strpos($pString, ':') + 1);
     $success = false;
     foreach (CopixConfig::instance()->copixauth_getRegisteredCredentialHandlers() as $handler) {
         if (is_array($handler['handle']) && in_array($pStringType, $handler['handle']) || $handler['handle'] === 'all') {
             if (!(is_array($handler['handleExcept']) && in_array($pStringType, $handler['handleExcept']) || $handler['handleExcept'] === $pStringType)) {
                 $result = CopixCredentialHandlerFactory::create($handler['name'])->assert($pStringType, $pStringString, $this);
                 if ($result === false) {
                     if ($handler['stopOnFailure']) {
                         return $this->_asserted[$pString] = false;
                     }
                     $success = $success || false;
                 } elseif ($result === true) {
                     if ($handler['stopOnSuccess']) {
                         return $this->_asserted[$pString] = true;
                     }
                     $success = true;
                 }
             }
         }
     }
     $this->_asserted[$pString] = $success;
     return $success;
 }
 /**
  * cette fonction determine si le type/level demandé est valide
  *
  * @param String $pType nom du profil configurer dans copixConfig
  * @return boolean correct ou non
  */
 private static function _enabled($pProfil = 'default')
 {
     if (isset(self::$_enabled[$pProfil])) {
         return self::$_enabled[$pProfil];
     }
     $config = CopixConfig::instance();
     //On regarde si le type est pris en charge
     self::$_enabled[$pProfil] = false;
     if (($typeInformations = $config->copixlog_getProfile($pProfil)) !== null) {
         if ($typeInformations['enabled']) {
             self::$_enabled[$pProfil] = true;
         }
     }
     return self::$_enabled[$pProfil];
 }
 /**
  * Loads the resources for a given lang/country.
  * will automatically loads the default (lang lang)
  * @param string $lang     the language
  * @param string $country the country
  */
 private function _loadLocales($lang, $country)
 {
     $this->_loadedCountries[] = $country;
     //file names for different cases.
     $bundleLang = $this->_fic->fileName . '_' . $lang . '.properties';
     $bundleCountry = $this->_fic->fileName . '_' . $lang . '_' . $country . '.properties';
     $path = $this->_fic->getPath(COPIX_RESOURCES_DIR);
     $toLoad[] = array('file' => $path . $this->_fic->fileName . '.properties', 'lang' => 'default', 'country' => 'DEFAULT');
     $toLoad[] = array('file' => $path . $bundleLang, 'lang' => $lang, 'country' => strtoupper($lang));
     $toLoad[] = array('file' => $path . $bundleCountry, 'lang' => $lang, 'country' => $country);
     // check if we have a compiled version of the ressources
     $_compileResourceId = $this->_getCompileId($lang, $country);
     if (($_compileResourceIdTime = @filemtime($_compileResourceId)) !== false) {
         $config = CopixConfig::instance();
         if ($config->compile_check || $config->force_compile) {
             if ($config->force_compile) {
                 //force compile, compiled files are never assumed to be ok.
                 $okcompile = false;
             } else {
                 // on verifie que les fichiers de ressources sont plus anciens que la version compilée
                 $compiledate = $_compileResourceIdTime;
                 $okcompile = true;
                 //Compiled files are assumed to be ok.
                 foreach ($toLoad as $infos) {
                     if (($fileTime = @filemtime($infos['file'])) !== false) {
                         if (!isset($fileTime) || $fileTime > $compiledate) {
                             $okcompile = false;
                             break;
                         }
                     }
                 }
             }
         } else {
             //no compile check, it's ok then
             $okcompile = true;
         }
         if ($okcompile) {
             $_loaded = array();
             include $_compileResourceId;
             //va charger _loaded
             $this->_messages[$country] = $_loaded;
             //everything was loaded.
             return;
         }
     }
     //loads the founded resources.
     foreach ($toLoad as $infos) {
         $this->_loadResources($infos['file'], $country);
     }
     //we want to use the PHP compilation of the resources.
     $generator = new CopixPHPGenerator();
     $_resources = $generator->getPHPTags($generator->getVariableDeclaration('$_loaded', isset($this->_messages[$country]) ? $this->_messages[$country] : array()));
     CopixFile::write($_compileResourceId, $_resources);
 }
 public static function getModNotifications(&$module)
 {
     if (!_currentUser()->getExtra("user_id")) {
         return $module;
     }
     // echo('-');
     $module_name = preg_replace('/^MOD_/', '', $module->module_type);
     $lastvisit = _dao('kernel|kernel_notifications_lastvisit')->findBy(_daoSp()->addCondition('user_id', '=', _currentUser()->getExtra("user_id"))->addCondition('node_type', '=', $module->node_type)->addCondition('node_id', '=', $module->node_id)->addCondition('module_type', '=', $module_name)->addCondition('module_id', '=', $module->module_id));
     if (count($lastvisit)) {
         // Déjà une visite -> On vérifie le cache
         // echo "XXX";
         if ($lastvisit[0]->last_check && $lastvisit[0]->last_check >= date('YmdHis', strtotime("-10 sec"))) {
             // Si le cache est encore valide -> On retourne les infos du cache
             // echo "cached($module_name/$module->module_id) ";
             $module->notification_number = $lastvisit[0]->last_number;
             $module->notification_message = $lastvisit[0]->last_message;
         } else {
             // S'il n'y a pas de cache ou qu'il est invalide -> On demande les infos au module
             // echo "not-cached($module_name/$module->module_id) ";
             $arModulesPath = CopixConfig::instance()->arModulesPath;
             foreach ($arModulesPath as $modulePath) {
                 $class_file = $modulePath . strtolower($module_name) . '/' . COPIX_CLASSES_DIR . 'kernel' . strtolower($module_name) . '.class.php';
                 if (!file_exists($class_file)) {
                     continue;
                 }
                 $module_class =& CopixClassesFactory::Create($module_name . '|Kernel' . $module_name);
                 if (is_callable(array($module_class, 'getNotifications'))) {
                     $module_class->getNotifications($module, $lastvisit[0]);
                     $lastvisit[0]->last_check = date('Y-m-d H:i:s');
                     $lastvisit[0]->last_number = $module->notification_number;
                     $lastvisit[0]->last_message = $module->notification_message;
                     _dao('kernel|kernel_notifications_lastvisit')->update($lastvisit[0]);
                     /*
                     echo "<pre>";
                     print_r($module);
                     print_r($lastvisit[0]);
                     die();
                     */
                 }
             }
         }
     } else {
         // Pas encore de visite -> Pas de notif pour l'instant
         // echo "NOT_visited ";
         $module->notification_number = 0;
         $module->notification_message = '';
         // Initialisation, même sans entrer dans le module
         $lastvisit = _record("kernel|kernel_notifications_lastvisit");
         $lastvisit->user_id = _currentUser()->getExtra("user_id");
         // id Copix
         $lastvisit->date = date('Y-m-d H:i:s');
         $lastvisit->node_type = $module->node_type;
         $lastvisit->node_id = $module->node_id;
         $lastvisit->module_type = $module_name;
         $lastvisit->module_id = $module->module_id;
         _dao("kernel|kernel_notifications_lastvisit")->insert($lastvisit);
     }
     // [module_nom] => Agenda
     // echo "<pre>"; print_r($module); die();
     return $module;
 }
 /**
  * Remet en place le profil par défaut.
  *
  */
 public function tearDown()
 {
     CopixConfig::instance()->copixdb_defineDefaultProfileName($this->_savedProfile);
     parent::tearDown();
 }