Files
luos/gulliver/system/class.ymlDomain.php
Ralph Asendeteufrer 05758ea812 CODE STYLE gulliver/system/
files modified:    class.filterForm.php
                    class.publisher.php
                    class.xmlform.php
                    class.ymlDomain.php
2012-10-17 18:15:15 -04:00

297 lines
8.0 KiB
PHP
Executable File

<?php
/**
* class.ymlDomain.php
*
* @package gulliver.system
*
* ProcessMaker Open Source Edition
* Copyright (C) 2004 - 2011 Colosa Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
*
*/
/**
*
* @package gulliver.system
*
*/
require_once (PATH_THIRDPARTY . 'lime/yaml.class.php');
/**
* ymlDomain class
*
* @copyright (C) 2002 by Colosa Development Team.
* @package gulliver.system
*/
class ymlDomain
{
public $global;
/**
* function ymlDomain
*
* @access public
* @return void
*/
public function ymlDomain ()
{
$this->global = sfYAML::Load( PATH_FIXTURES . 'domain.yml' );
}
/**
* function addDomain
*
* @access public
* @param string $domainName
* @return boolean
*/
public function addDomain ($domainName)
{
$keys = $this->name2keys( $domainName );
$currDomain = & $this->global;
$i = 0;
for ($i = 0; $i < count( $keys ); $i ++) {
if (is_array( $currDomain )) {
if (! isset( $currDomain[$keys[$i]] )) {
$currDomain[$keys[$i]] = array ();
}
$currDomain = & $currDomain[$keys[$i]];
} else {
trigger_error( "Operation not possible: Subdomain is not present $domainName", E_USER_ERROR );
return false;
}
}
return true;
}
/**
* function addDomainValue
*
* @access public
* @param string $domainName
* @param string $value
* @return boolean
*/
public function addDomainValue ($domainName, $value)
{
$keys = $this->name2keys( $domainName );
$currDomain = & $this->global;
$i = 0;
for ($i = 0; $i < count( $keys ); $i ++) {
if (is_array( $currDomain )) {
$currDomain = & $currDomain[$keys[$i]];
} else {
trigger_error( "Operation not possible: Subdomain is not present $domainName", E_USER_ERROR );
return false;
}
}
$currDomain[] = $value;
return true;
}
/**
* function exists
*
* @access public
* @param string $domainName
* @return boolean
*/
public function exists ($domainName)
{
$keys = $this->name2keys( $domainName );
$currDomain = & $this->global;
$i = 0;
for ($i = 0; $i < count( $keys ); $i ++) {
if (is_array( $currDomain ) && isset( $currDomain[$keys[$i]] )) {
$currDomain = & $currDomain[$keys[$i]];
} else {
return false;
}
}
return true;
}
/**
* function get
*
* @access public
* @param string $resource
* @return array
*/
public function get ($resource)
{
if (is_array( $result = $this->load( $resource ) )) {
//Get one value per each $item
//Ex. *.first.name.es => Returns an array with all of the defined firstNames.
// first.name.es => Returns an array with one firstName.
// *.name.es => Returns an array with one value per each sub domain of name.es.
// For example: if name.es has the subdomains:
// first.name.es and last.name.es, it returns an array of
// two elements: one firstName and one lastName.
foreach ($result as $key => $item) {
if (is_array( $item )) {
$subResult = $this->plainArray( $item );
$result[$key] = $subResult[array_rand( $subResult, 1 )];
}
}
return $result;
} else {
return array ('');
}
}
/**
* function name2keys
*
* @access public
* @param string $resource
* @return array
*/
public function name2keys ($resource)
{
if (strpos( $resource, '.' ) !== false) {
$revKeys = explode( '.', $resource );
$keys = array ();
for ($i = count( $revKeys ) - 1; $i >= 0; $i --) {
$keys[] = $revKeys[$i];
}
} elseif (strpos( $resource, '/' ) !== false) {
$rootKeys = explode( '/', $resource );
unset( $rootKeys[0] );
$keys = array_values( $rootKeys );
} else {
$keys = array ($resource );
}
return $keys;
}
/**
* function load
*
* @access public
* @param string $resource
* @return array
*/
public function load ($resource)
{
$keys = $this->name2keys( $resource );
//Find in global variable
if (count( $this->getNode( $keys[0], $this->global ) ) > 0) {
return $this->find( $keys, $this->global );
} else {
if (file_exists( PATH_FIXTURES . $keys[0] . '.yml' )) {
$local = sfYAML::Load( PATH_FIXTURES . $keys[0] . '.yml' );
unset( $keys[0] );
$keys = array_values( $keys );
return $this->find( $keys, $local );
} else {
return null;
}
}
return null;
}
/**
* function find
*
* @access public
* @param string $nodesKey
* @param string $where
* @return array
*/
public function find ($nodesKey, $where)
{
if (count( $nodesKey ) == 1) {
return $this->getNode( $nodesKey[0], $where );
} elseif (count( $nodesKey ) > 1) {
$routes = $this->getNode( $nodesKey[0], $where );
$result = array ();
unset( $nodesKey[0] );
$nodesKey = array_values( $nodesKey );
foreach ($routes as $route) {
if (is_array( $route )) {
$subResult = $this->find( $nodesKey, $route );
$this->arrayAppend( $result, $subResult );
} else {
$result[] = $route;
}
}
return $result;
} else {
return array ();
}
}
/**
* function getNode
*
* @access public
* @param string $nodesKey
* @param string $from
* @return array
*/
public function getNode ($nodeKey, $from)
{
if ($nodeKey === '*') {
return array_values( $from );
} elseif (array_key_exists( $nodeKey, $from )) {
return array ($from[$nodeKey] );
} else {
return array ();
}
}
/**
* function plainArray
*
* @access public
* @param array $array
* @return array
*/
public function plainArray ($array)
{
$result = array ();
foreach ($array as $item) {
if (is_array( $item )) {
$appResult = $this->plainArray( $item );
$this->arrayAppend( $result, $appResult );
} else {
$result[] = $item;
}
}
return $result;
}
/**
* function arrayAppend
*
* @access public
* @param string $to
* @param string $appendFrom
* @return void
*/
public function arrayAppend (&$to, $appendFrom)
{
foreach ($appendFrom as $appendItem) {
$to[] = $appendItem;
}
}
}