A super easy PHP Framework for web development!
				https://github.com/exacti/phacil-framework
			
			
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							146 lines
						
					
					
						
							3.1 KiB
						
					
					
				
			
		
		
	
	
							146 lines
						
					
					
						
							3.1 KiB
						
					
					
				<?php
 | 
						|
/**
 | 
						|
 * Copyright © 2023 ExacTI Technology Solutions. All rights reserved.
 | 
						|
 * GPLv3 General License.
 | 
						|
 * https://exacti.com.br
 | 
						|
 * Phacil PHP Framework - https://github.com/exacti/phacil-framework
 | 
						|
 */
 | 
						|
 | 
						|
namespace Phacil\Framework\Databases\Object;
 | 
						|
 | 
						|
use ArrayObject as NativeArrayObject;
 | 
						|
use Phacil\Framework\Databases\Api\Object\ItemInterface as ObjectInterface;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
 * {@inheritdoc}
 | 
						|
 * @method mixed getValue(string $field) 
 | 
						|
 * @method mixed getValues(string field, ...) 
 | 
						|
 * @package Phacil\Framework\Databases\Object
 | 
						|
 */
 | 
						|
class Item extends NativeArrayObject implements ObjectInterface {
 | 
						|
 | 
						|
	/**
 | 
						|
	 * 
 | 
						|
	 * @var array|null
 | 
						|
	 */
 | 
						|
	protected $__data = null;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * 
 | 
						|
	 * @param mixed $data 
 | 
						|
	 * @return $this 
 | 
						|
	 */
 | 
						|
	function __construct($data = null) {
 | 
						|
		$this->__data = $data;
 | 
						|
		parent::__construct($data);
 | 
						|
		return $this;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * 
 | 
						|
	 * @param array $data 
 | 
						|
	 * @return $this 
 | 
						|
	 */
 | 
						|
	public function setData(array $data) {
 | 
						|
		$this->__data = $data;
 | 
						|
		return $this;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @param string $key 
 | 
						|
	 * @return mixed 
 | 
						|
	 */
 | 
						|
	private function _getValue($key){
 | 
						|
		return isset($this->__data[$key]) ? $this->__data[$key] : null;
 | 
						|
	}
 | 
						|
 | 
						|
	public function __get($key){
 | 
						|
		return isset($this->__data[$key]) ? $this->__data[$key] : null;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * 
 | 
						|
	 * @param string $key 
 | 
						|
	 * @param mixed $value 
 | 
						|
	 * @return $this 
 | 
						|
	 */
 | 
						|
	public function setValue($key, $value){
 | 
						|
		$this->__data[$key] = $value;
 | 
						|
 | 
						|
		return $this;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * 
 | 
						|
	 * @param string $method 
 | 
						|
	 * @param string[] $args 
 | 
						|
	 * @return mixed 
 | 
						|
	 */
 | 
						|
	public function __call($method, $args) {
 | 
						|
		if(($p = strpos($method, 'get')) !== false && $p === 0){
 | 
						|
			$fieldname = (str_replace('get', '', $method)); 
 | 
						|
 | 
						|
			if(!empty($args)){
 | 
						|
				switch ($fieldname) {
 | 
						|
					case 'Values':
 | 
						|
					case 'Value':
 | 
						|
						if(count($args) === 1)
 | 
						|
							return $this->_getValue($args[0]);
 | 
						|
 | 
						|
						$values = [];
 | 
						|
						foreach($args as $arg){
 | 
						|
							$values[$arg] = $this->_getValue($arg);
 | 
						|
						}
 | 
						|
						return $values;
 | 
						|
						break;
 | 
						|
					
 | 
						|
					default:
 | 
						|
						# code...
 | 
						|
						break;
 | 
						|
				}
 | 
						|
				
 | 
						|
			}
 | 
						|
 | 
						|
			//Convert data to insensitive case
 | 
						|
			$lower_array_object = new \Phacil\Framework\ArrayClass\CaseInsensitiveArray(
 | 
						|
				$this->__data
 | 
						|
			);
 | 
						|
 | 
						|
			return $lower_array_object[$fieldname];
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Convert object data into XML string
 | 
						|
	 *
 | 
						|
	 * @param string $rootName (Optional) root node name
 | 
						|
	 * @param bool $addOpenTag (Optional) flag that allow to add initial xml node
 | 
						|
	 * @param bool $addCdata (Optional) flag that require wrap all values in CDATA
 | 
						|
	 * @return string
 | 
						|
	 */
 | 
						|
	public function toXml($rootName = 'item', $addOpenTag = true, $addCdata = true)
 | 
						|
	{
 | 
						|
		$xml = '';
 | 
						|
		//$data = $this->__data;
 | 
						|
		foreach ($this->__data as $fieldName => $fieldValue) {
 | 
						|
			if ($addCdata === true) {
 | 
						|
				$fieldValue = "<![CDATA[{$fieldValue}]]>";
 | 
						|
			} else {
 | 
						|
				$fieldValue = $fieldValue !== null ? str_replace(
 | 
						|
					['&', '"', "'", '<', '>'],
 | 
						|
					['&', '"', ''', '<', '>'],
 | 
						|
					$fieldValue
 | 
						|
				) : '';
 | 
						|
			}
 | 
						|
			$xml .= "<{$fieldName}>{$fieldValue}</{$fieldName}>\n";
 | 
						|
		}
 | 
						|
		if ($rootName) {
 | 
						|
			$xml = "<{$rootName}>\n{$xml}</{$rootName}>\n";
 | 
						|
		}
 | 
						|
		if ($addOpenTag) {
 | 
						|
			$xml = '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . $xml;
 | 
						|
		}
 | 
						|
		return $xml;
 | 
						|
	}
 | 
						|
} |