Current File : //home/strato/chroot/opt/RZphp80/includes/XML/Query2XML/Driver/Array.php |
<?php
/**
* This file contains the class XML_Query2XML_Driver_Array.
*
* PHP version 5
*
* @category XML
* @package XML_Query2XML
* @author Lukas Feiler <lukas.feiler@lukasfeiler.com>
* @copyright 2008 Lukas Feiler
* @license http://www.gnu.org/copyleft/lesser.html LGPL Version 2.1
* @version CVS: $Id: Array.php 259514 2008-05-10 21:04:44Z lukasfeiler $
* @link http://pear.php.net/package/XML_Query2XML
*/
/**
* XML_Query2XML_Driver_Array extends XML_Query2XML_Driver.
*/
require_once 'XML/Query2XML.php';
/**
* Array-based driver.
*
* usage:
* <code>
* $arrayDriver = XML_Query2XML_Driver_Array::factory();
* $arrayDriver->addResultSet(
* 'RESULT_SET_NAME', // to be used for $sql or $options['sql']
* array(
* array('column' => 'value', ...), // record #1
* array('column' => 'value', ...) // record #2
* )
* );
* </code>
* Usage scenario:
* - Transform an array of associative arrays to XML:
* $query2xml->getFlatXML('RESULT_SET_ARTISTS_FLAT');
* - Transform an array of index arrays to XML:
* $dom = $query2xml->getXML(
* 'RESULT_SET_ARTISTS_FLAT',
* array(
* 'rootTag' => 'data',
* 'rowTag' => 'row',
* 'idColumn' => false,
* 'elements' => array(
* 'name' => '0',
* 'ID' => '1',
* 'info' => '2'
* )
* )
* );
* - Easy integration of other data sources without having
* to write a separate driver.
* - Easy lookup table for static data. $options['sql']['data']
* can be used to specify the matching record.
*
* @category XML
* @package XML_Query2XML
* @author Lukas Feiler <lukas.feiler@lukasfeiler.com>
* @copyright 2008 Lukas Feiler
* @license http://www.gnu.org/copyleft/lesser.html LGPL Version 2.1
* @version Release: @package_version@
* @link http://pear.php.net/package/XML_Query2XML
* @since Release 1.8.0RC1
*/
class XML_Query2XML_Driver_Array extends XML_Query2XML_Driver
{
/**
* An associative array of result sets.
* @var array An associative array.
*/
private $_resultSets = null;
/**
* Add a named result set.
*
* @param string $name The name of the result set.
* @param array $resultSet An indexed array of associative arrays.
*
* @return void
*/
public function addResultSet($name, array $resultSet)
{
$this->_resultSets[$name] = $resultSet;
}
/**
* Remove a named result set.
*
* @param string $name The name of the result set to remove
*
* @return void
*/
public function removeResultSet($name)
{
unset($this->_resultSets[$name]);
}
/**
* Factory method
*
* @param array $resultSet An index array of associative arrays.
* This argument is optional.
* @param string $resultSetName The name of the result set. This argument
* is optional. The default is an empty string.
*
* @return XML_Query2XML_Driver_Array
*/
public static function factory(array $resultSet = null, $resultSetName = '')
{
$driver = new XML_Query2XML_Driver_Array();
if (is_array($resultSet)) {
$driver->addResultSet($resultSetName, $resultSet);
}
return $driver;
}
/**
* Returns all records from a named result set.
*
* @param array $query An array with at least one element: 'query'.
* @param string $configPath The configuration path.
*
* @return array An index array of associative arrays.
*/
public function getAllRecords($query, $configPath)
{
$resultSetName = $query['query'];
if (!isset($this->_resultSets[$resultSetName])) {
throw new XML_Query2XML_ArrayException(
$configPath . ': the result set "' . $resultSetName . '" '
. 'does not exist'
);
}
$resultSet = $this->_resultSets[$resultSetName];
if (array_key_exists('data', $query)) {
/*
* Only return records that have a corresponding
* column for each element key of $query['data']
* and have the same column value as the array
* element.
*/
$filteredResultSet = array();
for ($i = 0; $i < count($resultSet); $i++) {
$include = true;
foreach ($query['data'] as $key => $value) {
if (array_key_exists($key, $resultSet[$i])) {
if ($resultSet[$i][$key] != $value) {
$include = false;
break;
}
} else {
$include = false;
}
}
if ($include) {
$filteredResultSet[] = $resultSet[$i];
}
}
$resultSet = $filteredResultSet;
}
return $resultSet;
}
}
/**
* Exception for errors related to the array driver.
*
* @category XML
* @package XML_Query2XML
* @author Lukas Feiler <lukas.feiler@lukasfeiler.com>
* @license http://www.gnu.org/copyleft/lesser.html LGPL Version 2.1
* @link http://pear.php.net/package/XML_Query2XML
* @since Release 1.8.0RC1
*/
class XML_Query2XML_ArrayException extends XML_Query2XML_DriverException
{
/**
* Constructor
*
* @param string $message The error message.
*/
public function __construct($message)
{
parent::__construct($message);
}
}
?>