Subversion Repositories ALCASAR

Compare Revisions

Ignore whitespace Rev 775 → Rev 776

/web/acc/admin/lib/alcasar/freeradius/configreader.php
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();
}