Subversion Repositories Applications.framework

Rev

Rev 117 | Rev 122 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 117 Rev 120
Line 7... Line 7...
7
 *
7
 *
8
 * PHP Version 5
8
 * PHP Version 5
9
 *
9
 *
10
 * @category  PHP
10
 * @category  PHP
11
 * @package   Framework
11
 * @package   Framework
12
 * @author    Jean-Pascal MILCENT <jpm@tela-botanica.org>
12
 * @author	Jean-Pascal MILCENT <jpm@tela-botanica.org>
13
 * @copyright 2009 Tela-Botanica
13
 * @copyright 2009 Tela-Botanica
14
 * @license   GPL-v3 et CECILL-v2
14
 * @license   GPL-v3 et CECILL-v2
15
 * @version   SVN: <svn_id>
15
 * @version   SVN: <svn_id>
16
 * @link      /doc/framework/
16
 * @link	  /doc/framework/
17
 */
17
 */
Line 18... Line 18...
18
 
18
 
Line 19... Line 19...
19
class Config {
19
class Config {
Line 71... Line 71...
71
		$chemin_config_appli_contextuel .= sprintf(self::$parametres['fw_fichier_config'], '_'.$contexte);
71
		$chemin_config_appli_contextuel .= sprintf(self::$parametres['fw_fichier_config'], '_'.$contexte);
72
		self::parserFichierIni($chemin_config_appli_contextuel);
72
		self::parserFichierIni($chemin_config_appli_contextuel);
73
	}
73
	}
Line 74... Line 74...
74
 
74
 
75
	private static function parserFichierIni($fichier_ini) {
75
	private static function parserFichierIni($fichier_ini) {
76
    	$retour = false;
76
		$retour = false;
77
		if (file_exists($fichier_ini)) {
77
		if (file_exists($fichier_ini)) {
78
			$ini = parse_ini_file($fichier_ini, true);
78
			$ini = parse_ini_file($fichier_ini, true);
79
			$ini = self::analyserTableauIni($ini);
79
			$ini = self::analyserTableauIni($ini);
80
			self::fusionner($ini);
80
			self::fusionner($ini);
81
	    	$retour = true;
81
			$retour = true;
82
    	}
82
		}
83
    	return $retour;
83
		return $retour;
Line 84... Line 84...
84
	}
84
	}
85
 
85
 
86
	private static function fusionner(array $ini) {
86
	private static function fusionner(array $ini) {
Line 91... Line 91...
91
		if ($param === null) {
91
		if ($param === null) {
92
			return null;
92
			return null;
93
		} else {
93
		} else {
94
			if (strpos($param, '.') !== false) {
94
			if (strpos($param, '.') !== false) {
95
				$pieces = explode('.', $param, 2);
95
				$pieces = explode('.', $param, 2);
96
	            if (strlen($pieces[0]) && strlen($pieces[1])) {
96
				if (strlen($pieces[0]) && strlen($pieces[1])) {
97
	            	if (isset($config[$pieces[0]])) {
97
					if (isset($config[$pieces[0]])) {
98
	                   if (is_array($config[$pieces[0]])) {
98
					   if (is_array($config[$pieces[0]])) {
99
	                   		return self::getValeur($pieces[1], $config[$pieces[0]]);
99
					   		return self::getValeur($pieces[1], $config[$pieces[0]]);
100
	                   }
100
					   }
101
	                }
101
					}
102
	            }
102
				}
103
	    	} else {
103
			} else {
104
	    		if (isset($config[$param])) {
104
				if (isset($config[$param])) {
105
	    			return $config[$param];
105
					return $config[$param];
106
	    		}
106
				}
107
	    	}
107
			}
108
	    	return null;
108
			return null;
109
		}
109
		}
110
	}
110
	}
Line 111... Line 111...
111
	
111
	
112
	private static function existeValeur($param, $config) {
112
	private static function existeValeur($param, $config) {
Line 123... Line 123...
123
		}
123
		}
124
	}
124
	}
Line 125... Line 125...
125
 
125
 
126
	private static function analyserTableauIni($config = array()) {
126
	private static function analyserTableauIni($config = array()) {
127
		foreach ($config as $cle => $valeur) {
127
		foreach ($config as $cle => $valeur) {
128
    		if (is_array($valeur)) {
128
			if (is_array($valeur)) {
129
    			$config[$cle] = self::analyserTableauIni($valeur);
129
				$config[$cle] = self::analyserTableauIni($valeur);
130
    		} else {
130
			} else {
131
				self::evaluerReferences($config, $cle);
131
				self::evaluerReferences($config, $cle);
132
    			self::evaluerPhp($config, $cle);
132
				self::evaluerPhp($config, $cle);
133
    			self::evaluerCle($config, $cle, $config[$cle]);
133
				self::evaluerCle($config, $cle, $config[$cle]);
134
    		}
134
			}
135
    	}
135
		}
136
		return $config;
136
		return $config;
Line 137... Line 137...
137
	}
137
	}
138
 
138
 
139
	private static function evaluerCle(&$config, $cle, $valeur) {
139
	private static function evaluerCle(&$config, $cle, $valeur) {
140
		if (strpos($cle, '.') !== false) {
140
		if (strpos($cle, '.') !== false) {
141
			unset($config[$cle]);
141
			unset($config[$cle]);
142
			$pieces = explode('.', $cle, 2);
142
			$pieces = explode('.', $cle, 2);
143
            if (strlen($pieces[0]) && strlen($pieces[1])) {
143
			if (strlen($pieces[0]) && strlen($pieces[1])) {
144
                if (!isset($config[$pieces[0]])) {
144
				if (!isset($config[$pieces[0]])) {
145
                    if ($pieces[0] === '0' && !empty($config)) {
145
					if ($pieces[0] === '0' && !empty($config)) {
146
                        // convert the current values in $config into an array
146
						// convert the current values in $config into an array
147
                        $config = array($pieces[0] => $config);
147
						$config = array($pieces[0] => $config);
148
                    } else {
148
					} else {
149
                        $config[$pieces[0]] = array();
149
						$config[$pieces[0]] = array();
150
                    }
150
					}
151
                } elseif (!is_array($config[$pieces[0]])) {
151
				} elseif (!is_array($config[$pieces[0]])) {
152
                    throw new ErrorException("Ne peut pas créer de sous-clé pour '{$pieces[0]}' car la clé existe déjà");
152
					throw new ErrorException("Ne peut pas créer de sous-clé pour '{$pieces[0]}' car la clé existe déjà");
153
                }
153
				}
154
                $config[$pieces[0]] = self::evaluerCle($config[$pieces[0]], $pieces[1], $valeur);
154
				$config[$pieces[0]] = self::evaluerCle($config[$pieces[0]], $pieces[1], $valeur);
155
            } else {
155
			} else {
156
                throw new ErrorException("Clé invalide '$cle'");
156
				throw new ErrorException("Clé invalide '$cle'");
157
            }
157
			}
158
    	} else {
158
		} else {
159
    		$config[$cle] = $valeur;
159
			$config[$cle] = $valeur;
160
    	}
160
		}
Line 161... Line 161...
161
    	return $config;
161
		return $config;
162
	}
162
	}
163
 
163
 
164
	private static function evaluerReferences(&$config, $cle) {
164
	private static function evaluerReferences(&$config, $cle) {
165
		if (preg_match_all('/{ref:([A-Za-z0-9_-]+)}/', $config[$cle], $correspondances,  PREG_SET_ORDER)) {
165
		if (preg_match_all('/{ref:([A-Za-z0-9_-]+)}/', $config[$cle], $correspondances,  PREG_SET_ORDER)) {
166
    		foreach ($correspondances as $ref) {
166
			foreach ($correspondances as $ref) {
167
    			$config[$cle] = str_replace($ref[0], self::getValeur($ref[1], $config), $config[$cle]);
167
				$config[$cle] = str_replace($ref[0], self::getValeur($ref[1], $config), $config[$cle]);
Line 168... Line 168...
168
    		}
168
			}
169
    	}
169
		}
170
	}
170
	}
171
 
171
 
172
	private static function evaluerPhp(&$config, $cle) {
172
	private static function evaluerPhp(&$config, $cle) {
Line 173... Line 173...
173
		if (preg_match('/^php:(.+)$/', $config[$cle], $correspondances)) {
173
		if (preg_match('/^php:(.+)$/', $config[$cle], $correspondances)) {
174
    		eval('$config["'.$cle.'"] = '.$correspondances[1].';');
174
			eval('$config["'.$cle.'"] = '.$correspondances[1].';');
175
    	}
175
		}