/** * Création d'une instance d'un objet service * @param Object $pServiceDescription un objet qui décrit les composantes du service (avec les propriétés module, service, methode) */ private static function _create($pServiceDescription, $pParams = array()) { $serviceID = $pServiceDescription->module . '|' . $pServiceDescription->service; $execPath = CopixModule::getPath($pServiceDescription->module); $fileName = $execPath . COPIX_CLASSES_DIR . strtolower(strtolower($pServiceDescription->service)) . '.services.php'; if (!Copix::RequireOnce($fileName)) { throw new CopixServicesException('Cannot load service from ' . $fileName); } //Nom des objets/méthodes à utiliser. $objName = 'Services' . $pServiceDescription->service; return new $objName($pParams); }
/** * Récupération de la liste des DAO d'un module donné * @param $pModuleName le nom du module */ public function _getAllDAOForModule($pModuleName) { //on va rechercher l'ensemble des fichiers DAO pour le module donné. $toReturn = array(); $filePath = CopixModule::getPath($pModuleName) . 'resources/*.dao.xml'; //$filePath = str_replace ('/', '\\', $filePath); if (($files = glob($filePath)) !== false) { foreach ($files as $fileName) { $className = basename($fileName, '.dao.xml'); $toReturn[] = $pModuleName . '|' . $className; } } return $toReturn; }
public function process($pParams) { static $_init = false; static $htmlPath = ''; extract($pParams); //check the initialisation if (!$_init) { $path = CopixModule::getPath('htmleditor') . COPIX_CLASSES_DIR; $htmlPath = CopixUrl::get() . 'js/FCKeditor/'; require_once $path . 'fckeditor.php'; $_init = true; } if (empty($content)) { $content = ' '; } //name of the textarea. if (empty($name)) { throw new CopixTemplateTagException('htmleditor: missing name parameter'); } else { if (!isset($width)) { $width = CopixConfig::get('htmleditor|width'); //$width = '100%'; } if (!isset($height)) { $height = CopixConfig::get('htmleditor|height'); //$height = '450px'; } /* * ATTENTION les éléments de config viewPhototèque etc font doublon avec la sélection de la toolbarset, mais sont nécessaire à Copix * Par contre si on ne les load pas, on a une erreur de FCKeditor, il faut donc supprimer ce gestionnaire d'erreur sinon on se prend un alert javascript * le gestionnaire en question se trouve dans "FCKToolbarItems.GetItem" (chercher cette chaîne pour le trouver) et désactiver "alert( FCKLang.UnknownToolbarItem.replace( /%1/g, itemName ) ) ; */ $oFCKeditor = new FCKeditor($name); $oFCKeditor->BasePath = $htmlPath; $oFCKeditor->Value = $content; $oFCKeditor->ToolbarSet = 'Copix'; $oFCKeditor->Width = $width; $oFCKeditor->Height = $height; $oFCKeditor->Config['viewPhototheque'] = CopixModule::isEnabled('pictures') ? 'true' : 'false'; $oFCKeditor->Config['viewCmsLink'] = CopixModule::isEnabled('cms') ? 'true' : 'false'; $oFCKeditor->Config['viewLinkPopup'] = CopixModule::isEnabled('cms') ? 'true' : 'false'; $oFCKeditor->Config['viewDocument'] = CopixModule::isEnabled('document') ? 'true' : 'false'; $oFCKeditor->Config['viewMailto'] = 'true'; // Configuration de la feuille de style à utiliser. //$oFCKeditor->Config['EditorAreaCSS'] = CopixUrl::get ().'styles/themes/hivers/hivers.css'; $out = $oFCKeditor->CreateHtml(); } return $out; }
public function _createContent(&$toReturn) { $moduleName = CopixZone::getParam('moduleName'); $infos = CopixModule::getInformations($moduleName); $tpl = new CopixTpl(); if (in_array($moduleName, CopixModule::getList())) { $arModule = CopixModule::getDependenciesForDelete($moduleName); $template = 'detailmoduledelete.tpl'; $record = _dao('Copix:copixmodule')->get($moduleName); $tpl->assign('version', $record->version_cpm); } else { $arDependencies = CopixModule::getDependenciesForInstall($moduleName); $arModule = array(); $arExtension = array(); $install = true; foreach ($arDependencies as $key => $dependency) { if ($dependency->kind === 'module') { if (CopixModule::testDependency($dependency)) { $dependency->exists = true; $dependency->isInabled = CopixModule::isEnabled($dependency->name); $arModule[] = $dependency; } else { $dependency->exists = false; $install = false; $arModule[] = $dependency; } } else { if (CopixModule::testDependency($dependency)) { $dependency->exists = true; $arExtension[] = $dependency; } else { $dependency->exists = false; $install = false; $arExtension[] = $dependency; } } } $tpl->assign('arExtension', $arExtension); $tpl->assign('install', $install); $template = 'detailmoduleinstall.tpl'; } $tpl->assign('path', CopixModule::getPath($moduleName)); $tpl->assign('arModule', $arModule); $tpl->assign('info', $infos); $tpl->assign('moduleName', $moduleName); $toReturn = $tpl->fetch($template); return true; }
/** * 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); }
/** * Récupération de l'ensemble des éléments testables pour un module * @param $pModuleName le nom du module dont on veut connaitre l'ensemble des classes de test. * @return tableau de clef => libelle */ private function getTestableForModule($pModuleName) { $toReturn = array(); $filePath = CopixModule::getPath($pModuleName) . 'tests/*.class.php'; $filePath = str_replace('\\', '/', $filePath); if (($files = glob($filePath)) !== false) { foreach ($files as $fileName) { $className = basename($fileName, '.class.php'); if (!isset($toReturn[$pModuleName])) { $toReturn[$pModuleName] = array(); } $toReturn[$pModuleName][] = $pModuleName . '|' . $className; } } return $toReturn; }
/** * Récupération des modules dans l'ordre de leur description * */ public function _getModuleOrderByDescription() { $arReturn = array(); foreach (CopixModule::getList(true) as $module) { $temp = CopixModule::getInformations($module); $modulePath = CopixModule::getPath($module); if (is_dir($modulePath . COPIX_CLASSES_DIR)) { $servicesDir = opendir($modulePath . COPIX_CLASSES_DIR); while ($file = readdir($servicesDir)) { if (preg_match("/class.php\$/", $file)) { $temp->services[] = $file; } } } if (isset($temp->services)) { $arReturn[] = $temp; } } return $arReturn; }
/** * Vérifie que l'on est bien authentifié (A voir). */ public function beforeAction() { $pServiceName = CopixRequest::get('wsname'); $this->_path = CopixModule::getPath('wsserver'); if (isset($pServiceName)) { $this->_wsname = $pServiceName; $arRes = _ioDAO('wsservices')->findBy(_daoSP()->addCondition('name_wsservices', '=', $pServiceName)); if (count($arRes) == 0) { throw new CopixException('Service introuvable ' . htmlentities($pServiceName)); } $wsServiceInfo = $arRes[0]; $this->_exportModule = $wsServiceInfo->module_wsservices; $this->_exportClass = $wsServiceInfo->class_wsservices; $this->_exportClassFilename = CopixModule::getPath($this->_exportModule) . COPIX_CLASSES_DIR . strtolower($wsServiceInfo->file_wsservices); } else { $this->_exportModule = CopixConfig::get('wsserver|exportedModule'); $this->_exportClass = CopixConfig::get('wsserver|exportedClass'); $this->_exportClassFilename = CopixModule::getPath($this->_exportModule) . COPIX_CLASSES_DIR . strtolower(CopixConfig::get('wsserver|exportedClassFile')); } }
/** * Create code highlights * @param _wikielement codeelement */ private function _treatCode($code) { //syntaxe highlight $code->data = preg_replace('/\\[code(.*?)\\]/', "", $code->data); $code->data = preg_replace('/\\[\\/code(.*?)\\]/', "", $code->data); require_once CopixModule::getPath('geshi') . 'lib/geshi/geshi.php'; $lang = $code->other; $code = $code->data; $geshi = new GeSHi($code, $lang); $geshi->set_header_type(GESHI_HEADER_DIV); $code = $geshi->parse_code(); $code = "\n" . '<div class="wiki_code">' . $code . '</div>' . "\n"; return $code; }
public function afterInstall() { // 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 = 'afterinstall.' . $typeDB . '.sql'; $file = CopixModule::getPath('admin') . COPIX_INSTALL_DIR . 'scripts/' . $scriptName; CopixDB::getConnection()->doSQLScript($file); }
/** * Permet d'exporter les classes des modukes * * @return CopixActionReturn */ public function processExportClass() { $pModuleName = CopixRequest::get('moduleName'); $pClassFileName = CopixRequest::get('classFileName'); // si on a confirmé l'ajout if (CopixRequest::get('confirm')) { $pServiceName = trim(CopixRequest::get('serviceName')); $pClassName = CopixRequest::get('className'); $pClassFileName = _request('classFileName'); $pModuleName = _request('moduleName'); // nom de service vide if ($pServiceName == '') { return _arRedirect(_url('admin|ExportClass', array('error' => 'serviceEmpty', 'moduleName' => $pModuleName, 'classFileName' => $pClassFileName))); } // verification si on n'a pas déja un service de ce nom $wsservices = _ioDao('wsservices')->findBy(_daoSP()->addCondition('name_wsservices', '=', $pServiceName)); if (count($wsservices) > 0) { return _arRedirect(_url('admin|ExportClass', array('error' => 'serviceExists', 'moduleName' => $pModuleName, 'classFileName' => $pClassFileName))); } CopixDB::getConnection()->doQuery("insert into wsservices (name_wsservices, module_wsservices, file_wsservices, class_wsservices) values ('" . $pServiceName . "','" . $pModuleName . "','" . $pClassFileName . "', '" . $pClassName . "')"); $res = 'Url du Webservice : <a href="' . _url('wsserver||', array('wsname' => $pServiceName)) . '">' . _url('wsserver||', array('wsname' => $pServiceName)) . '</a><br/>' . "\n"; $res .= 'Url du fichier wsdl : <a href="' . _url('wsserver|default|wsdl', array('wsname' => $pServiceName)) . '">' . _url('wsserver|default|wsdl', array('wsname' => $pServiceName)) . '</a><br/>' . "\n"; $res .= '<br />'; $res .= '<input type="button" value="' . _i18n('wsserver.back') . '" onclick="javascript: document.location=\'' . _url('admin|manageWebServices') . '\';" />'; $tpl = new CopixTpl(); $tpl->assign('MAIN', $res); return new CopixActionReturn(CopixActionReturn::DISPLAY, $tpl); // si on doit afficher le formulaire d'ajout } else { $ppo = new CopixPPO(); $ppo->TITLE_PAGE = _i18n('wsserver.title.manageWebServices'); $ppo->classFileName = $pClassFileName; $ppo->arErrors = array(); // erreur "service existant" passée en paramètre if (_request('error') !== null) { $ppo->arErrors[] = _i18n('wsserver.error.' . _request('error')); } $ppo->ModuleName = $pModuleName; $arBefore = get_declared_classes(); include CopixModule::getPath($pModuleName) . COPIX_CLASSES_DIR . $pClassFileName; $arAfter = get_declared_classes(); $arClass = array_diff($arAfter, $arBefore); sort($arClass); if (count($arClass) == 0) { throw new Exception('Pas de classe à exporter'); } $ppo->arClass = $arClass; return _arPPO($ppo, 'wsservices.add.php'); } }
/** * 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)); }
public function testObject() { $element = new CopixSessionObject($object = _ioClass('fooclass'), CopixModule::getPath('copixtest') . 'classes/fooclass.class.php'); $this->assertEquals($element->getSessionObject(), $object); $serialized = serialize($element); $elementBack = unserialize($serialized); $this->assertEquals(strtolower(get_class($elementBack->getSessionObject())), 'fooclass'); $this->assertEquals(1, $elementBack->getParam(1)); $this->assertEquals(array(1, 2), $elementBack->getArrayWith(1, 2)); $elementBack->test = 2; $this->assertEquals($elementBack->test, 2); $this->assertEquals($elementBack->getSessionObject()->test, 2); $elementBack->notExists = 3; $this->assertEquals($elementBack->notExists, 3); $this->assertEquals($elementBack->getSessionObject()->notExists, 3); $elementBack->setPublicPropertyTest(4); $this->assertEquals($elementBack->test, 4); $this->assertEquals($elementBack->getSessionObject()->test, 4); $this->assertEquals($elementBack->getPublicPropertyTest(), 4); $this->assertEquals($elementBack->getSessionObject()->getPublicPropertyTest(), 4); $elementBack->setPrivatePropertyTest(5); $this->assertEquals($elementBack->getPrivatePropertyTest(), 5); $this->assertEquals($elementBack->getSessionObject()->getPrivatePropertyTest(), 5); $elementBack->setUnknownProperty('notexists', 6); $this->assertEquals($elementBack->getUnknownProperty('notexists'), 6); $this->assertEquals($elementBack->getSessionObject()->getUnknownProperty('notexists'), 6); $this->assertEquals($elementBack->notexists, 6); $this->assertEquals($elementBack->getSessionObject()->notexists, 6); }
/** * Fonction principale du coordinateur à appeler dans le index.php pour démarrer le framework. * gère la cinématique globale du fonctionnement du site. */ public function process() { $action = null; $fromDesc = true; //Choix des couples actions pour la tache a réaliser. $execParams = $this->_extractExecParam(); //trio desc, action, module CopixContext::push($execParams->module); //détermine le chemin d'exécution. $path = CopixModule::getPath($execParams->module); // On regarde s'il existe un fichier desc. if (file_exists($fileName = $path . COPIX_DESC_DIR . strtolower($execParams->desc) . '.desc.php')) { include $fileName; //LAISSER INCLUDE (PAS ONCE). Php n'arrive pas a rafraichir sans cela. //Dans l'idée: inclusion une première fois, les variables sont connues de la fonction. //La deuxième fois, ne réinclus pas le fichier, et du coups les variables sont connues mais comme globales. // on verifie si la variable correspondante à l'action existe if (isset(${$execParams->action})) { $action = ${$execParams->action}; } } if ($action === null) { $fileToRead = $path . COPIX_ACTIONGROUP_DIR . strtolower($execParams->desc) . '.actiongroup.php'; // verification de l'existence du fichier $fromDesc = false; if (file_exists($fileToRead)) { $action = new CopixAction($execParams->module . '|' . $execParams->desc, $execParams->action); } } //Traitement de l'objet reçu. if ($action === null) { $this->_doNotExistsAction(_i18n('copix:copix.error.load.desc', $execParams->desc)); } else { CopixContext::clear(); foreach (CopixPluginRegistry::getRegistered() as $name => $plugin) { $plugin->beforeProcess($action); } CopixContext::push($action->file->module); $this->_doAction($action, $fromDesc); } }
/** * Retourne la liste des plugins que l'on peut enregistrer * @return array */ public static function getAvailable() { $conf = CopixConfig::instance(); $toReturn = array(); /* TODO: arPluginsPath désactivé jusqu'à ce qu'on l'implémente vraiment, cf #151. //recherche des plugins dans les répertoires configurés à cet effet. foreach ($conf->arPluginsPath as $path){ if (substr ($path, -1) != '/') { $path .= '/'; } foreach (self::_findPluginsIn ($path) as $pluginName){ $toReturn[] = $pluginName; } } */ //recherche des plugins configurés dans les répertoires de modules foreach (CopixModule::getList() as $moduleName) { foreach (self::_findPluginsIn(CopixModule::getPath($moduleName) . 'plugins/', $moduleName) as $pluginName) { $toReturn[] = $pluginName; } } return $toReturn; }
/** * _getDeleteFile * * Return delete.DBType.sql file for the modulePath * @param string $pModuleName le nom du module * @return le chemin du fichier sql * @access private */ private static function _getDeleteFile($pModuleName) { if (self::_dbConfigured()) { // 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 = 'delete.' . $typeDB . '.sql'; $SQLScriptFile = CopixModule::getPath($pModuleName) . COPIX_INSTALL_DIR . 'scripts/' . $scriptName; // chemin et nom du fichier de script d'install return is_readable($SQLScriptFile) ? $SQLScriptFile : null; } return null; }
/** * Création d'un listener * @param string $pModule le nom du module auquel appartient le listener que l'on souhaite créer * @param string $pListenerName le nom du listener * @return CopixListener */ private function _create($pModule, $pListenerName) { if (!isset($this->_listenersSingleton[$pModule][$pListenerName])) { Copix::RequireOnce(CopixModule::getPath($pModule) . '/' . COPIX_CLASSES_DIR . strtolower($pListenerName) . '.listener.php'); $className = 'Listener' . $pListenerName; $this->_listenersSingleton[$pModule][$pListenerName] = new $className(); } return $this->_listenersSingleton[$pModule][$pListenerName]; }
/** * gets the path relative to the selector */ protected function _getPath($directory) { return CopixModule::getPath($this->module) . COPIX_PLUGINS_DIR . $this->pluginName . '/'; }
public function testModuleContext() { $modulePrefix = CopixModule::getPath('copixtest') . 'www/'; // Attention ici on teste getResourcePath $this->assertEquals($modulePrefix . 'img/fr_FR/module_fr_FR.jpg', CopixUrl::getResourcePath('|img/module_fr_FR.jpg')); $this->assertEquals($modulePrefix . 'img/fr/module_fr.jpg', CopixUrl::getResourcePath('|img/module_fr.jpg')); $this->assertEquals($modulePrefix . 'img/module.jpg', CopixUrl::getResourcePath('|img/module.jpg')); $this->assertEquals(CopixUrl::get() . 'img/notFound.jpg', CopixUrl::getResource('|img/notFound.jpg')); }
/** * Recherche de templates dans un module et d'extension donnée. * * Cette fonction va rechercher les templates dans le répertoire module template par défaut * et également dans le répertoire de surcharge dans le thème default * (project/modules/module_name/templates/* & project/themes/default/module_name/*) * * <code> * $arTemplates = CopixTpl::find ('module_name', '.dyn.tpl'); * //recherche de plusieurs types de templates * $arTemplates = CopixTpl::find ('module_name', array ('.dyn.tpl', '.dyn.ptpl')); * //recherche avec masques * $arTemplates = CopixTpl::find ('module_name', '.dyn.*'); * </code> * * @param string $pModuleName le nom du module dans lequel on va chercher le template * @param mixed $pExtension l'extension que l'on recherche (ou un tableau d'extensions) * * @return array Retourne un tableau contenant en clé 'modules|fichier_trouvé' et en valeur le nom dans (tpl){*@name NOM} (ptpl)/*@name NOM si aucun nom n'est trouvé, on mets la clé */ public static function find($pModuleName, $pExtension) { if (!is_array($pExtension)) { $pExtension = array($pExtension); } $files = array(); foreach ($pExtension as $extension) { $files = array_merge($files, CopixFile::search('*' . $extension, COPIX_PROJECT_PATH . 'themes/default/' . $pModuleName . '/', false)); $files = array_merge($files, CopixFile::search('*' . $extension, CopixModule::getPath($pModuleName) . 'templates/', false)); } $arFiles = array(); /*TODO Ajouter la gestion des ptpl*/ foreach ($files as $key => $file) { $name = $pModuleName . '|' . basename($file); $tpl = CopixFile::read($file); if (substr($file, strlen($file) - 4) == 'ptpl') { $nom = ereg_replace('.*\\/*@name ([^\\*]+[^/]+)\\*/.*', '\\1', $tpl); } else { $nom = ereg_replace('.*{*@name ([^\\*]+[^}]+)\\*\\}.*', '\\1', $tpl); } if (strlen($nom) == strlen($tpl)) { $nom = $name; } $arFiles[$name] = $nom; } return $arFiles; }
/** * Récupère l'instance de l'actiongroup donné. * * @param object $pActionGroupDescription Description de l'actiongroup dont on souhaite récupérer l'instance. Doit avoir 2 propriétés : module et actiongroup * @return CopixActionGroup * @throws Exception */ public static function instance($pActionGroupDescription) { $actionGroupID = $pActionGroupDescription->module . '|' . $pActionGroupDescription->actiongroup; if (!isset(self::$_instances[$actionGroupID])) { $execPath = CopixModule::getPath($pActionGroupDescription->module); $fileName = $execPath . COPIX_ACTIONGROUP_DIR . strtolower(strtolower($pActionGroupDescription->actiongroup)) . '.actiongroup.php'; if (!Copix::RequireOnce($fileName)) { throw new Exception(_i18n('copix:copix.error.load.actiongroup', $fileName)); } // nom des objets/méthodes à utiliser. $objName = 'ActionGroup' . $pActionGroupDescription->actiongroup; self::$_instances[$actionGroupID] = new $objName(); } return self::$_instances[$actionGroupID]; }