1,16 → 1,13 |
<?php |
/* |
TODO : |
- reprendre toutes les expressions régulières [ à contrôler] |
- prise en compte de tous les types de commentaires |
- prise en compte d'une valeurs multiligne |
- suppressions plus rigoureuse des quote et double cote. (FAIT) |
- correction de quelques bugs |
- prise en charge de la lecture de section "nommée" (etc: ldap toto {...} )[fait à tester] |
- contrôler et tester les expressions régulières |
- prise en compte de tous les types de commentaires "# et *" |
- prise en compte d'une valeurs multi-lignes |
|
-> pas de setter pour le configreader |
*/ |
|
*/ |
/** |
* Page contenant les classes <b>confItem</b>, <b>pairItem</b>, <b>sectionItem</b> et <b>configReader</b>. |
* Ces classes permettent de parser des fichiers de configuration du même format |
17,16 → 14,12 |
* que ceux utilisés par freeradius. |
*/ |
|
/* |
The file consists of configuration items (variable = value pairs), sections, and comments. |
*/ |
|
/** |
* Classe abstraite <b>confItem</b>. |
* |
* @name confItem |
* @author steweb57 |
* @version 0.1.0 |
* @version 0.2.0 |
*/ |
Abstract class confItem |
{ |
41,15 → 34,14 |
*/ |
protected $_name = null; |
/** |
* Variable contenant le nom de la section |
* Variable contenant le nom de l'instance de l'item (section uniquement) |
* @var string |
*/ |
protected $_instanceName = null; |
/** |
* Variable contenant le nom de l'instance de l'item |
* Variable contenant le lien vers la section parente (section uniquement???) |
* @var string |
*/ |
protected $_instanceName = null; |
/** |
protected $_parent = null; |
/** |
* Tableau contenant les parametres (items) |
74,12 → 66,15 |
public function getType(){ |
return $this->_type; |
} |
|
/** |
* return all items |
* |
* @name getAll() |
* @return array() |
*/ |
public function getAll(){ |
return $this->_items; |
} |
|
|
/** |
* return the name of the confItem |
* |
118,7 → 113,9 |
$resp[] = $this->_items[$attr]; |
} |
} |
if (count($resp)===1){ |
if (count($resp)===0){ |
return false; |
}elseif (count($resp)===1){ |
return $resp[0]; |
} else { |
return $resp;// si vide, on répond par un array vide ou par false? |
140,13 → 137,10 |
* |
* @name pairItem |
* @author steweb57 |
* @version 0.1.0 |
* @version 0.2.0 |
*/ |
class pairItem extends confItem |
{ |
protected $_type = 'pair'; |
protected $_name = ''; |
|
/** |
* Constructeur |
* |
153,12 → 147,13 |
* <p>création de l'instance de la classe</p> |
* |
* @name pairItem::__construct() |
* @param string $attr, $value |
* @param string $pairName, $value |
* @return void |
*/ |
public function __construct($attr,$value) { |
$this->_items[$attr] = $value; |
$this->_name = $attr; |
public function __construct($pairName,$value) { |
$this->_type = 'pair'; |
$this->_items[$pairName] = $value; |
$this->_name = $pairName; |
} |
/** |
* Converte the object to a string |
167,7 → 162,7 |
* @return string |
*/ |
public function __toString() { |
return $this->_items[$this->_name];// ? afficher le nom de la variable ou sa valeur? |
return $this->_items[$this->_name];// on retourne la valeur |
} |
/** |
* Get a pair value |
174,43 → 169,100 |
* |
* @name getPair() |
* @param string $pairName |
* @return string |
* @return mixed (string or array) |
*/ |
public function getPair($pairName = null){ |
if ($pairName!==null){ |
if (array_key_exists($pairName, $this->_items)) |
return $this->_items[$pairName]; |
if (array_key_exists($pairName, $this->_items)){ |
return $this->_items[$pairName]; // on renvoie une valeur |
} else { |
return false; |
} |
} else { |
return $this->_items; |
return $this->_items; //on renvoie un tableau |
} |
} |
public function __get($pairName){ |
return $this->getPair($pairName); |
} |
/** |
* Set a pair value |
* |
* @name getPair() |
* @param string $pairName |
* @param string $value |
* @return bool |
*/ |
public function setPair($pairName, $value){ |
if (array_key_exists($pairName, $this->_items)){ |
$this->_items[$pairName] = $value; |
return true; |
} else { |
return false; |
} |
} |
public function __set($pairName, $value){ |
return $this->setPair($pairName, $value); |
} |
} |
|
class sectionItem extends confItem |
/** |
* Classe <b>sectionItem</b>. |
* |
* @name sectionItem |
* @author steweb57 |
* @version 0.3.6 |
*/ |
class sectionItem extends confItem //extends pairItems????? |
{ |
protected $_type = 'section'; |
protected $_name = ''; |
|
public function __construct($name, sectionItem &$parent=null, $instanceName = "") { |
/** |
* Constructeur |
* |
* <p>création de l'instance de la classe</p> |
* |
* @name sectionItem::__construct() |
* @param string $name |
* @param string $instanceName |
* @param sectionItem $parent |
* @return void |
*/ |
public function __construct($name, $instanceName = "", sectionItem &$parent=null) { |
$this->_type = 'section'; |
$this->_parent = $parent; |
$this->_name = $name; |
$this->_instanceName = $instanceName; |
} |
/** |
* add a new child sectionItem |
* |
* @name addSection() |
* @param string $name |
* @param string $instanceName |
* @return sectionItem object |
*/ |
public function addSection($name, $instanceName = "") { |
$this->_items[] = new sectionItem($name, $this, $instanceName); |
$this->_items[] = new sectionItem($name, $instanceName, $this); |
return end($this->_items); |
} |
public function addPair($name, $value) { |
$this->_items[] = new pairItem($name, $value); |
/** |
* add a new child pairItem |
* |
* @name addPair() |
* @param string $pairName |
* @param string $value |
* @return pairItem Object |
*/ |
public function addPair($pairName, $value) { |
$this->_items[] = new pairItem($pairName, $value); |
return end($this->_items); |
} |
/** |
* return the child instance of the confSection |
* return the child instance of the confSection by instanceName |
* |
* @name getInstance() |
* @return string |
* @param string $instanceName |
* @return mixed (sectionItem object or array()) |
*/ |
public function getInstance($instanceName=nill){ |
public function getInstance($instanceName=null){ |
if ($instanceName === null) |
return false; |
$resp = array(); |
222,18 → 274,26 |
$resp[] = $item; |
} |
} |
if (count($resp)===1){ |
if (count($resp)===0){ |
return false; |
}elseif (count($resp)===1){ |
return $resp[0]; |
} else { |
return $resp; |
} |
} |
/** |
* return the child instance of the confSection by instanceName and sectionName |
* |
* @name getSectionInstance() |
* @param string $sectionName |
* @param string $instanceName |
* @return mixed (sectionItem object or array()) |
*/ |
public function getSectionInstance($sectionName = null, $instanceName=null){ |
|
if (($sectionName === null)||($instanceName === null)) |
return false; |
$resp = array(); |
|
foreach ($this->_items as $item){ |
if ($item->getType() !== 'section'){ |
continue; |
240,15 → 300,24 |
} |
if (($item->getName() === $sectionName)&&($item->getInstanceName() === $instanceName)){ |
$resp[] = $item; |
|
} |
} |
if (count($resp)===1){ |
if (count($resp)===0){ |
return false; |
}elseif (count($resp)===1){ |
return $resp[0]; |
} else { |
return $resp; |
} |
} |
|
/** |
* return child sectionItems of the sectionItem |
* |
* @name getSection() |
* @param string $sectionName |
* @return mixed (sectionItem object or array()) |
*/ |
public function getSection($sectionName = null){ |
$resp = array(); |
foreach ($this->_items as $item){ |
263,12 → 332,21 |
} |
} |
} |
if (count($resp)===1){ |
if (count($resp)===0){ |
return false; |
}elseif (count($resp)===1){ |
return $resp[0]; |
} else { |
return $resp; |
} |
} |
/** |
* return child pairItems of the sectionItem |
* |
* @name getPair() |
* @param string $pairName |
* @return mixed (pairItem object or array()) |
*/ |
public function getPair($pairName = null){ |
$resp = array(); |
foreach ($this->_items as $item){ |
279,17 → 357,75 |
$resp[] = $item; |
} else { |
if ($item->getName() === $pairName){ |
//return $item; //only the first answer |
$resp[] = $item; |
} |
} |
} |
if (count($resp)===1){ |
if (count($resp)===0){ |
return false; |
}elseif (count($resp)===1){ |
return $resp[0]; |
} else { |
return $resp; |
} |
} |
|
public function __get($name){ |
if ($this->getSection($name)!==false){ |
return $this->getSection($name); |
} elseif ($this->getPair($name)!==false) { |
return $this->getPair($name); |
} elseif ($this->getInstance($name)!==false) { |
return $this->getInstance($name); |
} else { |
return false; |
} |
} |
public function setSection($sectionName, sectionItem $sectionItem){ |
$t = false; |
foreach ($this->_items as $key => $item){ |
if ($item->getType() !== 'section'){ |
continue; |
} |
if ($item->getName() === $sectionName){ |
$this->_items[$key] = $sectionItem; |
$t = true; |
} |
} |
return $t; |
} |
|
public function setInstance($instanceName, $value){ |
foreach ($this->_items as $key => $item){ |
if ($item->getType() !== 'section'){ |
continue; |
} |
if ($item->getInstanceName() === $instanceName){ |
$this->_items[$key] = $value; |
} |
} |
// test pour valeur de retour ? |
} |
|
|
public function setSectionInstance($sectionName, $instanceName, $value){ |
foreach ($this->_items as $key => $item){ |
if ($item->getType() !== 'section'){ |
continue; |
} |
if (($item->getName() === $sectionName)&&($item->getInstanceName() === $instanceName)){ |
$this->_items[$key] = $value; |
} |
} |
// test pour valeur de retour ? |
} |
|
public function __set($name, $value){ |
return $this->setSection($name, $value); |
// use others methode width instance ? |
// create section if not existe? |
} |
|
} |
/** |
* Classe <b>configReader</b>. |
296,7 → 432,7 |
* |
* @name configReader |
* @author steweb57 |
* @version 0.1.0 |
* @version 0.4.0 |
*/ |
class configReader extends sectionItem |
{ |
309,7 → 445,7 |
* |
* <p>création de l'instance de la classe</p> |
* |
* @name config_file::__construct() |
* @name configReader::__construct() |
* @param string $filename |
* @return void |
*/ |
325,9 → 461,22 |
public function __destruct() { |
$this->_file = NULL; |
} |
/** |
* |
* @name configReader::_deleteComment() |
* @param string $line |
* @return void |
*/ |
private function _deleteComment($line){ |
return $line; |
} |
/** |
* parse the configFile |
* |
* @name config_file::parse() |
* @param file $filename |
* @return void |
*/ |
public function parse($filename=null){ |
if ($filename !== null){ |
// test is_file et file_exist à faire |
345,14 → 494,8 |
continue; |
|
//test d'entrée dans une section |
//if (preg_match('`^([\s[:print:]]*{[\s[:print:]]*)$`',$line)){//test section |
if (preg_match('`^([\sa-zA-Z0-9_-]*{[\s[:print:]]*)$`',$line)){//test section |
|
/* |
BUG : filter = "(uid=%{Stripped-User-Name:-%{User-Name}})" |
|
*/ |
|
|
// Nétoyage des commentaires et espaces |
$tmp = explode("{", $line, 2); |
$line = trim($tmp[0]); |
374,7 → 517,6 |
} |
} |
//recherche fin de section |
//elseif (preg_match('`^([\s]*}[\s]*)$`',$line)){//test fin de section |
elseif (preg_match('`^([\s]*}[\s[:print:]]*)$`',$line)){//test fin de section |
$this->_pt = $this->_pt->getParent(); |
} |