--- a/busui/owa/ini_db.php +++ b/busui/owa/ini_db.php @@ -1,1 +1,236 @@ - + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category wa + * @package wa + * @version $Revision$ + * @since wa 1.0.0 + */ +class ini_db extends owa_base { + + /** + * Data file + * + * @var unknown_type + */ + var $ini_file; + + /** + * Result Format + * + * @var string + */ + var $return_format; + + /** + * Cache flag + * + * @var boolean + */ + var $cache = true; + + + /** + * Database Access Object + * + * @var object + */ + var $db; + + /** + * Constructor + * + * @param string $ini_file + * @param string_type $sections + * @param string $return_format + * @access public + * @return ini_db + */ + function __construct($ini_file, $sections = null, $return_format = 'object') { + + parent::__construct(); + $this->ini_file = $ini_file; + $this->return_format = $return_format; + + if (!empty($sections)){ + $this->db = $this->readINIfile($this->ini_file, ';'); + } else { + $this->db = file($this->ini_file); + } + } + + /** + * Returns a section from an ini file based on regex match rule + * contained as keys in an ini file. + * + * @param string + * @access public + */ + function fetch($haystack) { + + $record = null; + + foreach ($this->db as $key=>$value) { + if (($key!='#*#')&&(!array_key_exists('parent',$value))) continue; + + $keyEreg = '#'.$key.'#'; + + if (preg_match($keyEreg, $haystack)) { + $record=array('regex'=>strtolower($keyEreg),'pattern'=>$key)+$value; + + $maxDeep=8; + while (array_key_exists('parent',$value)&&(--$maxDeep>0)) + + $record+=($value = $this->db[strtolower($value['parent'])]); + break; + } + } + + switch ($this->return_format) { + case "array": + return $record; + break; + case "object": + return ((object)$record); + break; + } + return $record; + } + + /** + * Returns part of the passed string based on regex match rules + * contained as keys in an ini file. + * + * @param string + * @access public + * @return string + */ + function match($haystack) { + + $needle = ''; + + if (!empty($haystack)): + + $tmp = ''; + + foreach ($this->db as $key => $value) { + + if (!empty($value)): + //$this->e->debug('ref db:'.print_r($this->db, true)); + preg_match(trim($value), $haystack, $tmp); + if (!empty($tmp)): + $needle = $tmp; + //$this->e->debug('ref db:'.print_r($tmp, true)); + endif; + endif; + } + + return $needle; + + else: + return; + endif; + } + + function contains($haystack = '') { + + $pos = false; + + if ($haystack) { + + foreach ($this->db as $k => $needle) { + $needle = substr(strtolower(trim($needle)),1,-1); + $pos = strpos(strtolower($haystack), $needle); + + if ($pos) { + owa_coreAPI::debug(sprintf('Haystack contains "%s" at position %d', $needle, $pos)); + return true; + } + } + + return false; + } + } + + /** + * Fetch a record set and perfrom a regex replace on the name + * + * @param string $haystack + * @return string + */ + function fetch_replace($haystack) { + + $record = $this->fetch($haystack); + + //print_r($record); + + $new_record = preg_replace($record->regex, $record->name, $haystack); + + return $new_record; + } + + /** + * Reads INI file + * + * @param string $filename + * @param string $commentchar + * @return array + */ + function readINIfile ($filename, $commentchar) { + $array1 = file($filename); + $section = ''; + foreach ($array1 as $filedata) { + $dataline = trim($filedata); + $firstchar = substr($dataline, 0, 1); + if ($firstchar!=$commentchar && $dataline!='') { + //It's an entry (not a comment and not a blank line) + if ($firstchar == '[' && substr($dataline, -1, 1) == ']') { + //It's a section + $section = strtolower(substr($dataline, 1, -1)); + } else { + //It's a key... + $delimiter = strpos($dataline, '='); + if ($delimiter > 0) { + //...with a value + $key = strtolower(trim(substr($dataline, 0, $delimiter))); + $value = trim(substr($dataline, $delimiter + 1)); + if (substr($value, 1, 1) == '"' && substr($value, -1, 1) == '"') { $value = substr($value, 1, -1); } + $array2[$section][$key] = stripcslashes($value); + } else { + //...without a value + $array2[$section][strtolower(trim($dataline))]=''; + } + } + } else { + //It's a comment or blank line. Ignore. + } + } + + return $array2; + } +} + +?>