/**
  * extract path information from a string
  * the string is like module|ag|methName
  * if module is not given (ag|methName) then we consider the current context
  */
 function extractPath($path)
 {
     $extract = explode('|', $path);
     if (count($extract) == 1) {
         return CopixActionGroup::extractPath(CopixContext::get() . '|' . $path);
     }
     $extractMethod = explode('::', $extract[1]);
     if (count($extractMethod) !== 2) {
         trigger_error(CopixI18N::get('copix:copix.error.wrongActionGroupPath', $path), E_USER_ERROR);
     }
     $extracted->module = $extract[0] === '' ? null : $extract[0];
     $extracted->actiongroup = $extractMethod[0];
     $extracted->method = $extractMethod[1];
     return $extracted;
 }
 function CopixModuleFileSelector($selector)
 {
     $this->type = 'module';
     $match = null;
     if (preg_match("/^(([_0-9a-zA-Z-]*)\\|)?(.*)\$/", $selector, $match)) {
         if ($match[1] != '') {
             $this->module = $match[2];
         }
         $this->fileName = $match[3];
         //le nom correspond à tout ce qui suit l'éventuel séparateur
         if ($this->module === null) {
             $this->module = CopixContext::get();
         }
         $this->isValid = true;
     }
 }
 /**
  * extrait le nom du module de la chaine, utilise le contexte pour retourner
  *   un résultat.
  * @param    string  $from   le nom formaté du fichier
  * @return   string  le nom du module, null si projet
  */
 function getModuleUsingContext($from)
 {
     //vérifie que le nom soit sur.
     if (!CopixNamingConvention::isSafe($from)) {
         trigger_error('Invalid ' . $from . '', E_USER_ERROR);
     }
     //récupération des deux éléments.
     $into = explode('|', $from);
     //Si un élément module est demandé, retour.
     if (count($into) > 1) {
         return $into[0] !== '' ? $into[0] : null;
     } else {
         //Pas d'élément trouvé, retourne le contexte courant.
         return CopixContext::get();
     }
 }
 /**
  * Extraction du chemin à partir de l'identifiant donné(de la forme module|service::nomMethode)
  * Si aucun module n'est donné, on utilise le contexte courant.
  * @param string $pServiceIf L'identifiant du service
  */
 protected static function _extractPath($pServiceId)
 {
     $extract = explode('|', $pServiceId);
     if (count($extract) == 1) {
         return self::_extractPath(CopixContext::get() . '|' . $pServiceId);
     }
     $extractMethod = explode('::', $extract[1]);
     if (count($extractMethod) !== 2) {
         throw new CopixServicesException('Wrong Service ID ' . $pServiceId);
     }
     $extracted = new StdClass();
     $extracted->module = $extract[0] === '' ? CopixContext::get() : $extract[0];
     $extracted->service = $extractMethod[0];
     $extracted->method = $extractMethod[1];
     return $extracted;
 }
 /**
  * Tests sur les contextes
  */
 public function testContext()
 {
     //En premier lieu, le Contexte doit être default
     $this->assertEquals(CopixContext::get(), 'default');
     //On vérifie que l'on arrive à placer des Contextes
     CopixContext::push('module1');
     $this->assertEquals(CopixContext::get(), 'module1');
     //On vérifie que l'on pop correctement le contexte
     $lastContext = CopixContext::pop();
     $this->assertEquals($lastContext, 'module1');
     //On vérifie que le contexte est revenu à default
     $this->assertEquals('default', CopixContext::get());
     //on vérifie que même si l'utilisateur fait n'importe quoi et pop de trop,
     //on indique default comme dernier contexte (ce qui est le cas)
     $lastContext = CopixContext::pop();
     $this->assertEquals($lastContext, 'default');
     //On vérifie que l'on peut poser plusieurs éléments
     $push = array('push1', 'push2', 'push3', 'push4');
     foreach ($push as $pushMe) {
         CopixContext::push($pushMe);
         $this->assertEquals($pushMe, CopixContext::get());
     }
     //et on vérifie que ces éléments reviennent dans le bon ordre
     for ($i = 0; $i < count($push); $i++) {
         $poped = CopixContext::pop();
         $this->assertEquals($push[count($push) - ($i + 1)], $poped);
     }
     //on vérifie que l'on est bien retourné en default
     $this->assertEquals(CopixContext::get(), 'default');
     //on repousse le tableau pour contrôler la méthode clear.
     foreach ($push as $pushMe) {
         CopixContext::push($pushMe);
         $this->assertEquals($pushMe, CopixContext::get());
     }
     // On efface les contextes
     CopixContext::clear();
     $this->assertEquals(CopixContext::get(), 'default');
 }
 /**
  * Méthode qui efface le cache de la zone
  * @param array  $Params les paramètres de contexte pour la zone.
  * @return   boolean  si tout s'est bien passé
  * @access public
  */
 function clearZone($params = array())
 {
     $this->params = $params;
     //if (count ($this->_cacheParams) > 0){
     if ($this->_useCache) {
         $module = CopixContext::get();
         if ($module .= '') {
             $module .= '_';
         }
         $cache =& new CopixCache($this->_makeId(), 'zones|' . $module . get_class($this));
         $cache->remove();
     }
     return true;
 }
 /**
  * Instancie l'objet ActionGroup correspondant au CopixAction, et éxecute la methode adéquate.
  *
  * @param CopixAction $ObjAction décrivant la classe ActionGroup et la méthode à utiliser
  * @todo  contrôler le fontionnement avec un type File, puis prévoir les fichiers inexistants.
  * @see CopixAction
  * @see CopixActionGroup
  * @see CopixActionReturn
  * @access private
  */
 function _doAction($action)
 {
     //action en fonction du type de la demande.
     if ($action->type === COPIX_ACTION_TYPE_OBJ || $action->type === COPIX_ACTION_TYPE_MODULE) {
         //recherche le fichier correspondant à l'objet ActionGroup à utiliser.
         if ($action->file->module === null) {
             $action->file->module = CopixContext::get();
         }
         $execPath = $action->file->getPath();
         $nomFichier = $execPath . COPIX_ACTIONGROUP_DIR . strtolower($action->file->fileName) . COPIX_ACTIONGROUP_EXT;
         if (is_readable($nomFichier)) {
             require_once $nomFichier;
         } else {
             trigger_error(CopixI18N::get('copix:copix.error.load.actiongroup', $action->file->fileName), E_USER_ERROR);
             return;
         }
         //Nom des objets/méthodes à utiliser.
         $objName = COPIX_ACTIONGROUP_CLASSNAME . $action->file->fileName;
         $methName = $action->useMeth;
         //instance de l'objet, qui s'enregistre dans GLOBALS['COPIX']['ACTIONGROUP']
         $obj =& new $objName();
         //Exécution du traitement.
         $this->_processResult($obj->{$methName}());
     } elseif ($action->type === COPIX_ACTION_TYPE_FILE) {
         //demande d'inclusion d'un fichier "extérieur" au framework.
         //UTILISER UNIQUEMENT EN CAS DE NECESSITE BIEN PARTICULIERE ET EXCEPTIONNELLE.
         //inclusion du fichier.
         require_once $action->useFile;
     } elseif ($action->type === COPIX_ACTION_TYPE_REDIRECT) {
         //redirection automatique.
         $this->_processResult(new CopixActionReturn(COPIX_AR_REDIRECT, $action->url));
     } elseif ($action->type === COPIX_ACTION_TYPE_STATIC) {
         //page statiques.
         $this->_processResult(new CopixActionReturn(COPIX_AR_STATIC, $action->useFile, $action->more));
     } elseif ($action->type === COPIX_ACTION_TYPE_ZONE) {
         //implémenter l'action zone.
         $tpl =& new CopixTpl();
         $tpl->assign('TITLE_PAGE', $action->titlePage);
         $tpl->assign('TITLE_BAR', $action->titleBar);
         $tpl->assign('MAIN', CopixZone::process($action->zoneId, $action->zoneParams));
         $this->_processResult(new CopixActionReturn(COPIX_AR_DISPLAY, $tpl));
     }
 }
 /**
  * sets the value of a parameter
  */
 function set($id, $value)
 {
     if (($pos = strpos($id, '|')) === false) {
         $id = CopixContext::get() . '|' . $id;
         $group = CopixContext::get() . '|';
     } else {
         $group = substr($id, 0, $pos) . '|';
     }
     $me =& CopixConfig::instance();
     $group =& $me->_getGroupConfig($group);
     return $group->set($id, $value);
 }
 /**
  * Constructeur
  * @param string $selector le sélecteur Copix "module|element"
  */
 public function __construct($selector)
 {
     $this->type = 'module';
     //ok, I don't use regexp here cause it's 0,40 ms slower :-)
     $tab = explode('|', $selector);
     if (($counted = count($tab)) > 1) {
         $this->module = $tab[0] == '' ? "default" : $tab[0];
         $this->fileName = $tab[1];
     } else {
         if ($counted == 1) {
             $this->module = CopixContext::get();
             $this->fileName = $tab[0];
         } else {
             throw new Exception(_i18n('copix:copix.error.fileselector.invalidSelector', $selector));
         }
     }
     $this->module = strtolower($this->module);
 }
 /**
  * Retourne un objet contenant des infos sur la paramètre (propriétés : name, id
  *
  * @param string $pId Nom du paramètre, sous la forme [module|]name
  * @return object
  */
 private static function _getParamInfos($pId)
 {
     if (($pos = strpos($pId, '|')) === false) {
         $module = CopixContext::get() . '|';
         $pId = $module . $pId;
     } else {
         $module = substr($pId, 0, $pos) . '|';
     }
     if ($module == '|') {
         $module = 'default|';
         $pId = 'default' . $pId;
     }
     $toReturn = new StdClass();
     $toReturn->module = $module;
     $toReturn->id = $pId;
     return $toReturn;
 }
 /**
  * @param CopixUrl    $urlorigin    url à transformer
  */
 function transformUrl($urlorigin)
 {
     $url = $urlorigin;
     // Attention, il faut une copie ici, pas une référence ! (PHP5 -> clone !)
     /*
     a) recupere module|desc|action -> obtient les infos pour la creation de l'url
     b) récupère un à un les parametres indiqués dans params à partir de CopixUrl
     c) remplace la valeur récupérée dans le result et supprime le paramètre de l'url
     d) remplace scriptname de CopixUrl par le resultat
     */
     $module = $url->get('module');
     if ($module === null) {
         $module = CopixContext::get();
     }
     $desc = $url->get('desc');
     if ($desc === null) {
         $desc = COPIX_DEFAULT_VALUE_DESC;
     }
     $action = $url->get('action');
     if ($action === null) {
         $action = COPIX_DEFAULT_VALUE_ACTION;
     }
     $id = $module . '|' . $desc . '|' . $action;
     //if ($module !== null && isset ($this->scriptnameList[$module])){
     //    $url->scriptName = $this->scriptnameList[$module];
     //}
     /*$_compile_createUrl = array('test1|default|default'=>
       array('test',true, array('annee','mois','id'), '/%1/%2/%3',''));
       */
     if (isset($this->dataCreateUrl[$id])) {
         $urlinfo =& $this->dataCreateUrl[$id];
         if ($urlinfo[1]) {
             $dturl =& $urlinfo[2];
             $result = $urlinfo[3];
             foreach ($dturl as $k => $param) {
                 $result = str_replace('%' . ($k + 1), $url->get($param), $result);
                 $url->del($param);
             }
             $url->pathInfo = $result;
         } else {
             $class = $urlinfo[2];
             $method = $urlinfo[3];
             $file = CopixCoordination::extractFilePath($module . '|' . $class, 'classes', '.url.php');
             if ($file) {
                 include_once $file;
                 $obj = new $class();
                 $url = $obj->{$method}($url);
             } else {
             }
         }
         // rajouter le suffixe
         if ($urlinfo[0] != '') {
             $url->pathInfo .= '.' . $urlinfo[0];
         }
         // indiquer l'entrypoint
         if ($urlinfo[4] != '') {
             $url->scriptName = $urlinfo[4];
         }
     }
     $url->del('module');
     $url->del('desc');
     $url->del('action');
     // vraiment supprimer ?
     return $url;
 }
 /**
  * Demande le chargement de Mootools.
  *
  * @param array $pPlugins Liste de plugins à charger.
  */
 public static function addJSFramework($pPlugins = null)
 {
     // Charge le noyau
     if (!isset(self::$_JSFrameworkAdded['*core*'])) {
         self::$_JSFrameworkAdded['*core*'] = true;
         // Initialise Mootools et l'identifiant de session
         if (!CopixAJAX::isAJAXRequest()) {
             // Ajoute MooTools et FirebugLite
             if (CopixConfig::instance()->getMode() == CopixConfig::DEVEL) {
                 // MooTools non compressé et FirebugLite normal
                 self::addJSLink(_resource('js/firebuglite/firebug.js'), array('id' => 'firebug_js'));
                 self::addJSLink(_resource('js/mootools/mootools-devel.js'), array('id' => 'mootools_core_js'));
             } else {
                 // MooTools compressé et FirebugLite qui ne fait rien.
                 self::addJSLink(_resource('js/firebuglite/firebugx.js'), array('id' => 'firebug_js'));
                 self::addJSLink(_resource('js/mootools/mootools.js'), array('id' => 'mootools_core_js'));
             }
             // Ajoute le framework JS spécifique de Copix
             self::addJSLink(_resource('js/copix.js'), array('id' => 'copix_js', 'charset' => 'UTF-8'));
             // Ajoute le code d'initialisation
             $urlBase = CopixUrl::get();
             self::addJSCode(sprintf('Copix = new CopixClass(%s);', CopixJSON::encode(array('ajaxSessionId' => CopixAJAX::getSessionId(), 'module' => CopixContext::get(), 'urlBase' => $urlBase, 'resourceUrlBase' => CopixResource::getResourceBaseUrl($urlBase, CopixTpl::getTheme(), CopixI18N::getLang(), CopixI18N::getCountry())))), 'copixajax_init', CopixHTMLHeader::DOMREADY_ALWAYS);
         }
     }
     // Charge les plugins
     if (is_array($pPlugins)) {
         foreach ($pPlugins as $pluginName) {
             if (!isset(self::$_JSFrameworkAdded[$pluginName])) {
                 self::$_JSFrameworkAdded[$pluginName] = true;
                 $pluginId = 'mootools_plugin_' . $pluginName;
                 $scriptId = $pluginId . '_js';
                 $stylesheetId = $pluginId . '_css';
                 if (file_exists(CopixUrl::getResourcePath($path = 'js/mootools/plugins/' . $pluginName . '.js'))) {
                     self::addJSLink(_resource($path), array("id" => $scriptId));
                 } elseif (file_exists(CopixUrl::getResourcePath($path = 'js/mootools/plugins/' . $pluginName . '.js.php'))) {
                     self::addJSLink(_resource($path), array("id" => $scriptId));
                 } else {
                     throw new CopixException('[Mootools] Plugin ' . $pluginName . ' not found in ' . $pluginPath);
                 }
                 if (file_exists(CopixUrl::getResourcePath($path = 'js/mootools/css/' . $pluginName . '.css'))) {
                     self::addCssLink(_resource($path), array("id" => $stylesheetId));
                 }
             }
         }
     }
 }
 /**
  * Extraction du chemin à partir de l'identifiant donné, de la forme module|ag::methName
  * Si aucun module n'est donné, on utilise le contexte courant.
  *
  * @param string $pAGId Identifiant d'action que l'on souhaite exécuter
  * @return object Objet avec 3 propriétés : module, actiongroup et method
  * @throws Exception
  */
 private static function _extractPath($pAGId)
 {
     $extract = explode('|', $pAGId);
     if (count($extract) == 1) {
         return CopixActionGroup::_extractPath(CopixContext::get() . '|' . $pAGId);
     }
     $extractMethod = explode('::', $extract[1]);
     if (count($extractMethod) !== 2) {
         throw new Exception(_i18n('copix:copix.error.wrongActionGroupPath', $pAGId));
     }
     $extracted = new StdClass();
     $extracted->module = strtolower($extract[0] === '' ? null : $extract[0]);
     $extracted->actiongroup = $extractMethod[0];
     $extracted->method = $extractMethod[1];
     return $extracted;
 }
Ejemplo n.º 14
0
 /**
  * gets the module/desc/action parameters from the destination string.
  *   dest is described as modules|desc|action where module & desc are optionnal.
  * @param string $dest the destination to parse
  * @see function.copixurl.php
  * @return assocative array where keys are module, desc and action
  */
 function _getDest($dest)
 {
     $tabUrl = explode('|', $dest);
     $urlParams = array();
     switch (count($tabUrl)) {
         case 1:
             $urlParams = array('module' => CopixContext::get(), 'desc' => 'default', 'action' => $tabUrl[0]);
             break;
         case 2:
             $urlParams = array('module' => CopixContext::get(), 'desc' => $tabUrl[0], 'action' => $tabUrl[1]);
             break;
         case 3:
             $urlParams = array('module' => $tabUrl[0], 'desc' => $tabUrl[1], 'action' => $tabUrl[2]);
             break;
         default:
             $urlParams = array();
     }
     if ($urlParams['module'] == '' || $urlParams['module'] == null) {
         $urlParams['module'] = '_';
     }
     if ($urlParams['desc'] == '' || $urlParams['desc'] == null) {
         $urlParams['desc'] = 'default';
     }
     if ($urlParams['action'] == '' || $urlParams['action'] == null) {
         $urlParams['action'] = 'default';
     }
     return $urlParams;
 }
 /**
  * Analyse et découpe une sélecteur de ressource.
  *
  * Accepte les deux formes suivantes :
  * - chemin/vers/ressource.txt
  * - module|chemin/vers/ressource.txt
  *
  * Le '/' initial du chemin est supprimé.
  *
  * @param unknown_type $pResourcePath Sélecteur de la ressource.
  * @return array Tableau de la forme (chemin, nom_du_module ou null, chemin_du_module ou null)
  */
 private static function _parseResourcePath($pResourcePath)
 {
     if (!preg_match('@^((\\w+)?\\|)?/?(.+)$@', $pResourcePath, $parts)) {
         throw new CopixException(_i18n("copix:copix.error.resource.invalidResource", $pResourcePath));
     }
     list(, $modulePrefix, $moduleName, $resourcePath) = $parts;
     if (!empty($modulePrefix) && empty($moduleName)) {
         $moduleName = CopixContext::get();
     }
     return array($resourcePath, $moduleName, empty($moduleName) ? null : CopixModule::getPath($moduleName));
 }
 function CopixModuleFileSelector($selector)
 {
     $this->type = 'module';
     //ok, I don't use regexp here cause it's 0,40 ms slower :-)
     $tab = explode('|', $selector);
     if (($counted = count($tab)) > 1) {
         $this->module = $tab[0] == '' ? null : $tab[0];
         $this->fileName = $tab[1];
         $this->isValid = true;
     } else {
         if ($counted == 1) {
             $this->module = CopixContext::get();
             $this->fileName = $tab[0];
             $this->isValid = true;
         } else {
             $this->isValid = false;
         }
     }
     //we wants to check if the module name is valid, in case we got a non project demand.
     if ($this->isValid && $this->module !== null) {
         $this->isValid = CopixModule::isValid($this->module);
     }
 }
 /**
  * gets the bundle for a given language.
  * @param string $bundleKey la clef du bundle
  * @param string $lang la langue dans laquelle on veut récupérer le bundle
  * @return CopixI18NBundle
  */
 public static function getBundle($pBundleKey, $pLang)
 {
     $context = CopixContext::get();
     if (isset(self::$_bundles[$context][$pBundleKey][$pLang])) {
         return self::$_bundles[$context][$pBundleKey][$pLang];
     }
     $fileSelector = CopixSelectorFactory::create($pBundleKey);
     $s = $fileSelector->getSelector();
     if (!isset(self::$_bundles[$context][$s][$pLang])) {
         self::$_bundles[$context][$s][$pLang] = new CopixI18NBundle($fileSelector, $pLang);
         self::$_bundles[$context][$pBundleKey][$pLang] = self::$_bundles[$context][$s][$pLang];
     }
     return self::$_bundles[$context][$s][$pLang];
 }
 /**
  * Méthode qui efface le cache de la zone
  * @param array  $pParams les paramètres de contexte pour la zone.
  * @return   boolean  si tout s'est bien passé
  * @access private
  */
 protected function _clear($pParams)
 {
     $this->_params = $pParams;
     if ($this->_useCache) {
         $module = CopixContext::get();
         CopixCache::clear($this->_makeId(), 'zones|' . $module . get_class($this));
     }
     return true;
 }