Go to the documentation of this file.00001 <?php
00010 class config {
00011
00012 const REQUIRED = 'REQUIRED';
00013
00019 private $vars;
00020
00026 public function __construct(array $prm=array()) {
00027 $this->vars = $prm;
00028 }
00029
00033 public function __toString() {
00034 return print_r($this->vars, true);
00035 }
00036
00044 public function checkCfg($throw=true) {
00045 foreach($this->vars as $k=>&$v) {
00046 $err = null;
00047 if (is_array($v)) {
00048 foreach($v as $kk=>&$vv)
00049 if ($vv === config::REQUIRED)
00050 $err = 'Config: Need '.$k.'->'.$kk.' Parameter.';
00051 } else if ($v === config::REQUIRED)
00052 $err = 'Config: Need '.$k.' Parameter.';
00053 if ($err) {
00054 if ($throw)
00055 throw new nException($err);
00056 else
00057 return false;
00058 }
00059 }
00060 return true;
00061 }
00062
00070 public function init(array $prm) {
00071 foreach($prm as $k=>$v) {
00072 if (is_null($v) && (!array_key_exists($k, $this->vars) || is_null($this->vars[$k])))
00073 throw new nException('Config: Need '.$k.' Parameter.');
00074
00075 if (array_key_exists($k, $this->vars)) {
00076 if (is_null($this->vars[$k]))
00077 $this->vars[$k] = $v;
00078 else if (is_array($this->vars[$k]) && is_array($v))
00079 config::initTab($this->vars[$k], $v);
00080 } else
00081 $this->vars[$k] = $v;
00082 }
00083 }
00084
00091 public function overInit(array $prm) {
00092 foreach($prm as $k=>$v) {
00093 if (!array_key_exists($k, $this->vars))
00094 $this->vars[$k] = array();
00095
00096 if (is_array($this->vars[$k]))
00097 if (is_array($v))
00098 foreach($v as $kk=>$vv) {
00099 if (is_int($kk))
00100 $this->vars[$k][] = $vv;
00101 else if (!array_key_exists($kk))
00102 $this->vars[$k][$kk] = $vv;
00103 }
00104 else
00105 $this->vars[$k][] = $v;
00106 }
00107 }
00108
00116 public function overload($className, $parent=false) {
00117 factory::mergeCfg($this->vars, factory::loadCfg($className, $parent));
00118 }
00119
00125 public function &getVars() {
00126 return $this->vars;
00127 }
00128
00136 public function get($name) {
00137 if ($this->check($name))
00138 return $this->vars[$name];
00139 else
00140 return null;
00141 }
00142
00150 public function getInArray($name, $key) {
00151 if ($this->check($name) && is_array($this->vars[$name]) && array_key_exists($key, $this->vars[$name]))
00152 return $this->vars[$name][$key];
00153 return null;
00154 }
00155
00163 public function __get($name) {
00164 return $this->get($name);
00165 }
00166
00174 public function &getRef($name) {
00175 if ($this->check($name))
00176 return $this->vars[$name];
00177 else {
00178 $null = null;
00179 return $null;
00180 }
00181 }
00182
00188 public function getAll() {
00189 return $this->vars;
00190 }
00191
00198 public function setA(array $vars) {
00199 foreach($vars as $k=>$v)
00200 $this->set($k, $v);
00201 }
00202
00209 public function setARef(array $vars) {
00210 foreach($vars as $k=>&$v)
00211 $this->setRef($k, $v);
00212 }
00213
00221 public function set($name, $val) {
00222 $this->vars[$name] = $val;
00223 }
00224
00233 public function setInArray($name, $key, $val) {
00234 $this->vars[$name][$key] = $val;
00235 }
00236
00244 public function setInArrayA($name, array $values) {
00245 $this->vars[$name] = array_merge($this->vars[$name], $values);
00246 }
00247
00255 public function setRef($name, &$val) {
00256 $this->vars[$name] = &$val;
00257 }
00258
00266 public function __set($name, $val) {
00267 $this->set($name, $val);
00268 }
00269
00276 public function check($name) {
00277 return array_key_exists($name, $this->vars);
00278 }
00279
00287 public function checkInArray($name, $key) {
00288 return array_key_exists($name, $this->vars) && is_array($this->vars[$name]) && array_key_exists($key, $this->vars[$name]);
00289 }
00290
00298 public function __isset($name) {
00299 return $this->check($name);
00300 }
00301
00307 public function del($name) {
00308 if ($this->check($name))
00309 unset($this->vars[$name]);
00310 }
00311
00318 public function delInArray($name, $key) {
00319 if ($this->check($name) && is_array($this->vars[$name]) && array_key_exists($key, $this->vars[$name]))
00320 unset($this->vars[$name][$key]);
00321 }
00322
00329 public function __unset($name) {
00330 $this->del($name);
00331 }
00332
00342 public static function initTab(array &$vars, array $init) {
00343 $ret = true;
00344 foreach($init as $k=>&$v) {
00345 if (!array_key_exists($k,$vars)) {
00346 if (is_null($v))
00347 $ret = false;
00348 $vars[$k] = $v;
00349 }
00350 }
00351 return $ret;
00352 }
00353
00362 public static function initTabNum(array &$vars, array $varsNum, $nameOther='other', $rtl=true) {
00363 if (!empty($vars) && !empty($varsNum)) {
00364 $nbvars = count($vars);
00365 $nbvarsNum = count($varsNum);
00366 if ($nbvars < $nbvarsNum)
00367 array_splice($varsNum, $nbvars);
00368 else if ($nbvars > $nbvarsNum) {
00369 $tmp = array();
00370 for($i=$nbvarsNum; $i<$nbvars; $i++)
00371 $tmp[] = $nameOther.round($i-$nbvarsNum+1);
00372 if ($rtl)
00373 $varsNum = array_merge($varsNum, $tmp);
00374 else
00375 $varsNum = array_merge($tmp, $varsNum);
00376 }
00377 $vars = array_combine($varsNum, $vars);
00378 }
00379 }
00380
00381 }