<?php
/**
* Created on 16.11.2008
*
* @author: Gorazd Veselic
*/
class enkaParameters
{
/** @var object */
var $_params = null;
/**
* Constructor
* @param string The raw parms text
*/
function __construct($text)
{
$this->_params = $this->parse($text);
}
/**
* Parsa tekstovni string
* @param mixed The ini string or array of lines
* @param boolean add an associative index for each section [in brackets]
* @return object
*/
function parse($txt, $process_sections = false, $asArray = false)
{
if (is_string($txt))
{
$lines = explode("\n", $txt);
}
else
if (is_array($txt))
{
$lines = $txt;
}
else
{
$lines = array ();
}
$obj = $asArray ? array () : new stdClass();
$sec_name = '';
$unparsed = 0;
if (!$lines)
{
return $obj;
}
foreach ($lines as $line)
{
// ignore comments
if ($line && $line[0] == ';')
{
continue;
}
$line = trim($line);
if ($line == '')
{
continue;
}
if ($line && $line[0] == '[' && $line[strlen($line) - 1] == ']')
{
$sec_name = substr($line, 1, strlen($line) - 2);
if ($process_sections)
{
if ($asArray)
{
$obj[$sec_name] = array ();
}
else
{
$obj-> $sec_name = new stdClass();
}
}
}
else
{
if ($pos = strpos($line, '='))
{
$property = trim(substr($line, 0, $pos));
if (substr($property, 0, 1) == '"' && substr($property, -1) == '"')
{
$property = stripcslashes(substr($property, 1, count($property) - 2));
}
$value = trim(substr($line, $pos +1));
if ($value == 'false')
{
$value = false;
}
if ($value == 'true')
{
$value = true;
}
if (substr($value, 0, 1) == '"' && substr($value, -1) == '"')
{
$value = stripcslashes(substr($value, 1, count($value) - 2));
}
if ($process_sections)
{
$value = str_replace('\n', "\n", $value);
if ($sec_name != '')
{
if ($asArray)
{
$obj[$sec_name][$property] = $value;
}
else
{
$obj-> $sec_name-> $property = $value;
}
}
else
{
if ($asArray)
{
$obj[$property] = $value;
}
else
{
$obj-> $property = $value;
}
}
}
else
{
$value = str_replace('\n', "\n", $value);
if ($asArray)
{
$obj[$property] = $value;
}
else
{
$obj-> $property = $value;
}
}
}
else
{
if ($line && trim($line[0]) == ';')
{
continue;
}
if ($process_sections)
{
$property = '__invalid' . $unparsed++ . '__';
if ($process_sections)
{
if ($sec_name != '')
{
if ($asArray)
{
$obj[$sec_name][$property] = trim($line);
}
else
{
$obj-> $sec_name-> $property = trim($line);
}
}
else
{
if ($asArray)
{
$obj[$property] = trim($line);
}
else
{
$obj-> $property = trim($line);
}
}
}
else
{
if ($asArray)
{
$obj[$property] = trim($line);
}
else
{
$obj-> $property = trim($line);
}
}
}
}
}
}
return $obj;
}
/**
* Vrne params array
* @return object
*/
function toObject()
{
return $this->_params;
}
/**
* Vrne array parametrov
* @return object
*/
function toArray()
{
return enkaObjectToArray($this->_params);
}
/** Doda ali ponastavi posamezen parameter
* @param string The name of the param
* @param string The value of the parameter
* @return string The set value
*/
function set($key, $value = '')
{
$this->_params-> $key = $value;
return $value;
}
/**
* Nastavi privzeto vrednost če le ta ni določena
* @param string The name of the param
* @param string The value of the parameter
* @return string The set value
*/
function def($key, $value = '')
{
return $this->set($key, $this->get($key, $value));
}
/** Vrne vrednost posameznega parametra
* @param string The name of the param
* @param mixed The default value if not found
* @return string
*/
function get($key, $default = '')
{
if (isset ($this->_params-> $key))
{
return $this->_params-> $key === '' ? $default : $this->_params-> $key;
}
else
{
return $default;
}
}
/** Vrne parametre v tekstovni obliki primeni za hrambo v sql tabeli
* @return string
*/
function getString()
{
$txt = array ();
foreach (get_object_vars($this->_params) as $k => $v)
{
$txt[] = "$k=$v";
}
$saveparams = implode("\n", $txt);
return $saveparams;
}
}
function enkaObjectToArray($p_obj)
{
$retarray = null;
if (is_object($p_obj))
{
$retarray = array ();
foreach (get_object_vars($p_obj) as $k => $v)
{
if (is_object($v))
$retarray[$k] = enkaObjectToArray($v);
else
$retarray[$k] = $v;
}
}
return $retarray;
}
?>