item; foreach($config_xml as $item){ $this->modules["$item[id]"] = $item; } }else{ echo 'Impossible de trouver le fichier de configuration.'; } } /** * * Initialise les modules activés uniquement */ function getModules(){ foreach($this->modules as $module=>$moduleConf){ if(file_exists('modules/'.$module.'/'.ucfirst($module).'.php') && $moduleConf->visibility == "true"){ $params = array(); foreach($moduleConf as $confParam){ $params[$confParam->getName()] = "$confParam"; } $module = new $module($params); if(is_subclass_of($module,'Module')) $module->build(); // require 'modules/'.$module.'/'.ucfirst($module).'.php'; // call_user_func(array($module, "start"), $module, $params); } } } /** * * @return le module donné avec ses paramètres actuellement présent en conf */ public static function getModule($module){ if($config = simplexml_load_file('../'.self::CONFIG_FILE)){ $config_xml = $config->item; foreach($config_xml as $item){ if($item["id"] == $module){ $params = array(); foreach($item as $confParam){ $params[$confParam->getName()] = "$confParam"; } //require '../modules/'.$module.'/'.ucfirst($module).'.php'; return new $module($params); } } echo "object not found"; return; }else{ echo "bad persistance"; return; } } /** * * Construit et insère le menu de changement de config */ function buildConfigMenu(){ echo '

Modules configuration


'; foreach($this->modules as $module=>$moduleConf){ echo $module.' module : visibility == "true") echo " checked"; echo '/>activé  visibility == "false") echo " checked"; echo '/>desactivé

'; } echo 'Enregistrer


Ajout d\'un module

'; echo ''; } public static function retrieveModuleParams($module){ $temp = new $module; return $temp->getParamsList(); } /** * * Fonction d'ajout de module dans le fichier de config */ public static function addModule($file, $name) { if($config = simplexml_load_file('../'.self::CONFIG_FILE)){ foreach($config->item as $item){ if($item['id'] == $name) exit ('module déjà présent !'); } } if(class_exists('ZipArchive')){ $zip = new ZipArchive; $res = $zip->open($file); if ($res === TRUE) { $zip->extractTo('../modules/'); $zip->close(); if(!file_exists('../modules/'.$name.'/'.ucfirst($name).'.php')) exit ('L\'extraction n\'a pas fonctionné...'); else{ unlink ($file); require '../modules/'.$name.'/'.ucfirst($name).'.php'; if($config = simplexml_load_file('../'.self::CONFIG_FILE)){ $newItem = $config->addChild('item'); $newItem->addAttribute('id', $name); //$params = call_user_func(array($name, 'getParamList')); $params = self::retrieveModuleParams($name); foreach($params as $param){ if($param == 'visibility') $newItem->AddChild($param, 'true'); else $newItem->AddChild($param, '0'); } $config->asXML('../'.self::CONFIG_FILE); echo 'Module enregistré. Vous pouvez revenir à la page d\'accueil'; }else{ exit ('L\'enregistrement dans le menu a échoué...'); } } } else { exit ('failed, code:' . $res); } }else{ exit ('Votre serveur ne peut installer les modules automatiquement. Merci de passer par votre client FTP habituel ou d\'ajouter la classe ZipArchive à votre serveur PHP'); } } }