263 lines
7.4 KiB
PHP
263 lines
7.4 KiB
PHP
<?php
|
|
/**
|
|
* @package FrameworkOnFramework
|
|
* @subpackage config
|
|
* @copyright Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba Ltd. All rights reserved.
|
|
* @license GNU General Public License version 2, or later
|
|
*/
|
|
|
|
defined('F0F_INCLUDED') or die();
|
|
|
|
/**
|
|
* Configuration parser for the tables-specific settings
|
|
*
|
|
* @package FrameworkOnFramework
|
|
* @since 2.1
|
|
*/
|
|
class F0FConfigDomainTables implements F0FConfigDomainInterface
|
|
{
|
|
/**
|
|
* Parse the XML data, adding them to the $ret array
|
|
*
|
|
* @param SimpleXMLElement $xml The XML data of the component's configuration area
|
|
* @param array &$ret The parsed data, in the form of a hash array
|
|
*
|
|
* @return void
|
|
*/
|
|
public function parseDomain(SimpleXMLElement $xml, array &$ret)
|
|
{
|
|
// Initialise
|
|
$ret['tables'] = array();
|
|
|
|
// Parse table configuration
|
|
$tableData = $xml->xpath('table');
|
|
|
|
// Sanity check
|
|
if (empty($tableData))
|
|
{
|
|
return;
|
|
}
|
|
|
|
foreach ($tableData as $aTable)
|
|
{
|
|
$key = (string) $aTable['name'];
|
|
|
|
$ret['tables'][$key]['behaviors'] = (string) $aTable->behaviors;
|
|
$ret['tables'][$key]['tablealias'] = $aTable->xpath('tablealias');
|
|
$ret['tables'][$key]['fields'] = array();
|
|
$ret['tables'][$key]['relations'] = array();
|
|
|
|
$fieldData = $aTable->xpath('field');
|
|
|
|
if (!empty($fieldData))
|
|
{
|
|
foreach ($fieldData as $field)
|
|
{
|
|
$k = (string) $field['name'];
|
|
$ret['tables'][$key]['fields'][$k] = (string) $field;
|
|
}
|
|
}
|
|
|
|
$relationsData = $aTable->xpath('relation');
|
|
|
|
if (!empty($relationsData))
|
|
{
|
|
foreach ($relationsData as $relationData)
|
|
{
|
|
$type = (string)$relationData['type'];
|
|
$itemName = (string)$relationData['name'];
|
|
|
|
if (empty($type) || empty($itemName))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
$tableClass = (string)$relationData['tableClass'];
|
|
$localKey = (string)$relationData['localKey'];
|
|
$remoteKey = (string)$relationData['remoteKey'];
|
|
$ourPivotKey = (string)$relationData['ourPivotKey'];
|
|
$theirPivotKey = (string)$relationData['theirPivotKey'];
|
|
$pivotTable = (string)$relationData['pivotTable'];
|
|
$default = (string)$relationData['default'];
|
|
|
|
$default = !in_array($default, array('no', 'false', 0));
|
|
|
|
$relation = array(
|
|
'type' => $type,
|
|
'itemName' => $itemName,
|
|
'tableClass' => empty($tableClass) ? null : $tableClass,
|
|
'localKey' => empty($localKey) ? null : $localKey,
|
|
'remoteKey' => empty($remoteKey) ? null : $remoteKey,
|
|
'default' => $default,
|
|
);
|
|
|
|
if (!empty($ourPivotKey) || !empty($theirPivotKey) || !empty($pivotTable))
|
|
{
|
|
$relation['ourPivotKey'] = empty($ourPivotKey) ? null : $ourPivotKey;
|
|
$relation['theirPivotKey'] = empty($theirPivotKey) ? null : $theirPivotKey;
|
|
$relation['pivotTable'] = empty($pivotTable) ? null : $pivotTable;
|
|
}
|
|
|
|
$ret['tables'][$key]['relations'][] = $relation;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Return a configuration variable
|
|
*
|
|
* @param string &$configuration Configuration variables (hashed array)
|
|
* @param string $var The variable we want to fetch
|
|
* @param mixed $default Default value
|
|
*
|
|
* @return mixed The variable's value
|
|
*/
|
|
public function get(&$configuration, $var, $default)
|
|
{
|
|
$parts = explode('.', $var);
|
|
|
|
$view = $parts[0];
|
|
$method = 'get' . ucfirst($parts[1]);
|
|
|
|
if (!method_exists($this, $method))
|
|
{
|
|
return $default;
|
|
}
|
|
|
|
array_shift($parts);
|
|
array_shift($parts);
|
|
|
|
$ret = $this->$method($view, $configuration, $parts, $default);
|
|
|
|
return $ret;
|
|
}
|
|
|
|
/**
|
|
* Internal method to return the magic field mapping
|
|
*
|
|
* @param string $table The table for which we will be fetching a field map
|
|
* @param array &$configuration The configuration parameters hash array
|
|
* @param array $params Extra options; key 0 defines the table we want to fetch
|
|
* @param string $default Default magic field mapping; empty if not defined
|
|
*
|
|
* @return array Field map
|
|
*/
|
|
protected function getField($table, &$configuration, $params, $default = '')
|
|
{
|
|
$fieldmap = array();
|
|
|
|
if (isset($configuration['tables']['*']) && isset($configuration['tables']['*']['fields']))
|
|
{
|
|
$fieldmap = $configuration['tables']['*']['fields'];
|
|
}
|
|
|
|
if (isset($configuration['tables'][$table]) && isset($configuration['tables'][$table]['fields']))
|
|
{
|
|
$fieldmap = array_merge($fieldmap, $configuration['tables'][$table]['fields']);
|
|
}
|
|
|
|
$map = $default;
|
|
|
|
if (empty($params[0]))
|
|
{
|
|
$map = $fieldmap;
|
|
}
|
|
elseif (isset($fieldmap[$params[0]]))
|
|
{
|
|
$map = $fieldmap[$params[0]];
|
|
}
|
|
|
|
return $map;
|
|
}
|
|
|
|
/**
|
|
* Internal method to get table alias
|
|
*
|
|
* @param string $table The table for which we will be fetching table alias
|
|
* @param array &$configuration The configuration parameters hash array
|
|
* @param array $params Extra options; key 0 defines the table we want to fetch
|
|
* @param string $default Default table alias
|
|
*
|
|
* @return string Table alias
|
|
*/
|
|
protected function getTablealias($table, &$configuration, $params, $default = '')
|
|
{
|
|
$tablealias = $default;
|
|
|
|
if (isset($configuration['tables']['*'])
|
|
&& isset($configuration['tables']['*']['tablealias'])
|
|
&& isset($configuration['tables']['*']['tablealias'][0]))
|
|
{
|
|
$tablealias = (string) $configuration['tables']['*']['tablealias'][0];
|
|
}
|
|
|
|
if (isset($configuration['tables'][$table])
|
|
&& isset($configuration['tables'][$table]['tablealias'])
|
|
&& isset($configuration['tables'][$table]['tablealias'][0]))
|
|
{
|
|
$tablealias = (string) $configuration['tables'][$table]['tablealias'][0];
|
|
}
|
|
|
|
return $tablealias;
|
|
}
|
|
|
|
/**
|
|
* Internal method to get table behaviours
|
|
*
|
|
* @param string $table The table for which we will be fetching table alias
|
|
* @param array &$configuration The configuration parameters hash array
|
|
* @param array $params Extra options; key 0 defines the table we want to fetch
|
|
* @param string $default Default table alias
|
|
*
|
|
* @return string Table behaviours
|
|
*/
|
|
protected function getBehaviors($table, &$configuration, $params, $default = '')
|
|
{
|
|
$behaviors = $default;
|
|
|
|
if (isset($configuration['tables']['*'])
|
|
&& isset($configuration['tables']['*']['behaviors']))
|
|
{
|
|
$behaviors = (string) $configuration['tables']['*']['behaviors'];
|
|
}
|
|
|
|
if (isset($configuration['tables'][$table])
|
|
&& isset($configuration['tables'][$table]['behaviors']))
|
|
{
|
|
$behaviors = (string) $configuration['tables'][$table]['behaviors'];
|
|
}
|
|
|
|
return $behaviors;
|
|
}
|
|
|
|
/**
|
|
* Internal method to get table relations
|
|
*
|
|
* @param string $table The table for which we will be fetching table alias
|
|
* @param array &$configuration The configuration parameters hash array
|
|
* @param array $params Extra options; key 0 defines the table we want to fetch
|
|
* @param string $default Default table alias
|
|
*
|
|
* @return array Table relations
|
|
*/
|
|
protected function getRelations($table, &$configuration, $params, $default = '')
|
|
{
|
|
$relations = $default;
|
|
|
|
if (isset($configuration['tables']['*'])
|
|
&& isset($configuration['tables']['*']['relations']))
|
|
{
|
|
$relations = $configuration['tables']['*']['relations'];
|
|
}
|
|
|
|
if (isset($configuration['tables'][$table])
|
|
&& isset($configuration['tables'][$table]['relations']))
|
|
{
|
|
$relations = $configuration['tables'][$table]['relations'];
|
|
}
|
|
|
|
return $relations;
|
|
}
|
|
}
|