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

<?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(
['&', '"', "'", '<', '>'],
['&amp;', '&quot;', '&apos;', '&lt;', '&gt;'],
$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;
}
}