146 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			146 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php 
 | 
						|
require 'Module.php';
 | 
						|
class AccueilModules {
 | 
						|
	const CONFIG_FILE = 'db/config.xml';
 | 
						|
	private $modules = array();
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Constructeur
 | 
						|
	 * Initialise le XML de conf générale
 | 
						|
	 * Active les modules
 | 
						|
	 * Construit le menu
 | 
						|
	 */
 | 
						|
	function __construct(){
 | 
						|
		if($config = simplexml_load_file(self::CONFIG_FILE)){
 | 
						|
			$config_xml = $config->item;
 | 
						|
			foreach($config_xml as $item){
 | 
						|
				$this->modules["$item[id]"] = $item;
 | 
						|
			}
 | 
						|
			$this->getModules();
 | 
						|
			$this->buildConfigMenu();
 | 
						|
		}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";
 | 
						|
				}
 | 
						|
				require 'modules/'.$module.'/'.ucfirst($module).'.php';
 | 
						|
				call_user_func(array($module, "start"), $params);
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * 
 | 
						|
	 * Construit et insère le menu de changement de config
 | 
						|
	 */
 | 
						|
	function buildConfigMenu(){
 | 
						|
		echo '<a href="#config" id="config-menu"><img src="images/interface/config.png" /></a>
 | 
						|
				<div style="display:none;">
 | 
						|
				<div id="config">
 | 
						|
				<form id="config_form" action="" method="post">
 | 
						|
				<h3>Modules configuration</h3><br/>';
 | 
						|
		foreach($this->modules as $module=>$moduleConf){
 | 
						|
			echo $module.' module : <input type="radio" name="'.$module.'_group" value="true"';
 | 
						|
			if ($moduleConf->visibility == "true") echo " checked";
 | 
						|
			echo '/>activé  <input type="radio" name="'.$module.'_group" value="false"';
 | 
						|
			if ($moduleConf->visibility == "false") echo " checked";
 | 
						|
			echo '/>desactivé<br/><br/>';
 | 
						|
		}
 | 
						|
		echo '<span id="config-submit" class="green-button">Enregistrer</span>
 | 
						|
				</form><br/><br/>
 | 
						|
				<h3>Ajout d\'un module</h3>
 | 
						|
				<form action="includes/addModule.php" method="POST" enctype="multipart/form-data">
 | 
						|
				<input type="file" name="newModuleFile" id="newModuleFile"/>
 | 
						|
				<input type="submit" value="Envoyer"/>
 | 
						|
				</form>
 | 
						|
				</div>
 | 
						|
				</div>';
 | 
						|
		echo '<script>$(document).ready(function(){
 | 
						|
					$(\'#config-submit\').live(\'click\',function(e){
 | 
						|
						$(this).replaceWith(\'<img src="images/interface/ajax_load.gif" style="margin:30px auto;display:block" />\');
 | 
						|
						var data3 = {';
 | 
						|
		$temp = '';
 | 
						|
		foreach($this->modules as $module=>$moduleConf){
 | 
						|
			$temp .= '\''.$module.'\'	: $(\'input[type=radio][name='.$module.'_group]:checked\').attr(\'value\'),';
 | 
						|
		}
 | 
						|
		echo substr($temp, 0, -1);
 | 
						|
		echo '};
 | 
						|
				$.post(\'ajax/post-config.php\',data3,function(msg3){
 | 
						|
					location.reload();		
 | 
						|
				});
 | 
						|
				e.preventDefault();
 | 
						|
				});
 | 
						|
			});
 | 
						|
			</script>';
 | 
						|
	}
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * 
 | 
						|
	 * @property Chaque module possède la fonction updateModule en static qui permet de changer un ou plusieurs de ses attributs
 | 
						|
	 * @param $module String Nom du module à modifier
 | 
						|
	 * @param $things2change Array du ou des attributs à modifier avec sa ou ses nouvelles valeurs
 | 
						|
	 * @return "ok" String si c'est bon, ou le message d'erreur
 | 
						|
	 */
 | 
						|
	public static function updateModule($module, $things2change){
 | 
						|
		require '../modules/'.$module.'/'.ucfirst($module).'.php';
 | 
						|
		return call_user_func(array($module, "updateConfig"), $things2change);
 | 
						|
	}
 | 
						|
	
 | 
						|
	/**
 | 
						|
	*
 | 
						|
	* 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')); 
 | 
						|
						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');
 | 
						|
		}
 | 
						|
	}
 | 
						|
} |