2007-07-19 12:40:28 +02:00
|
|
|
<?php
|
2016-08-19 00:51:35 +02:00
|
|
|
|
|
|
|
namespace SilverStripe\View;
|
|
|
|
|
|
|
|
use SilverStripe\ORM\ArrayLib;
|
|
|
|
use InvalidArgumentException;
|
|
|
|
use stdClass;
|
|
|
|
|
2008-02-25 03:10:37 +01:00
|
|
|
/**
|
2011-03-25 05:29:33 +01:00
|
|
|
* Lets you wrap a bunch of array data, or object members, into a {@link ViewableData} object.
|
2007-07-19 12:40:28 +02:00
|
|
|
*
|
2008-02-25 03:10:37 +01:00
|
|
|
* <code>
|
2007-07-19 12:40:28 +02:00
|
|
|
* new ArrayData(array(
|
|
|
|
* "ClassName" => "Page",
|
|
|
|
* "AddAction" => "Add a new Page page",
|
|
|
|
* ));
|
2008-02-25 03:10:37 +01:00
|
|
|
* </code>
|
2007-07-19 12:40:28 +02:00
|
|
|
*/
|
2016-11-29 00:31:16 +01:00
|
|
|
class ArrayData extends ViewableData
|
|
|
|
{
|
2007-10-20 10:36:47 +02:00
|
|
|
|
2016-11-29 00:31:16 +01:00
|
|
|
/**
|
|
|
|
* @var array
|
|
|
|
* @see ArrayData::_construct()
|
|
|
|
*/
|
|
|
|
protected $array;
|
2015-07-27 12:31:18 +02:00
|
|
|
|
2016-11-29 00:31:16 +01:00
|
|
|
/**
|
|
|
|
* @param object|array $value An associative array, or an object with simple properties.
|
|
|
|
* Converts object properties to keys of an associative array.
|
|
|
|
*/
|
2017-09-04 23:42:52 +02:00
|
|
|
public function __construct($value = [])
|
2016-11-29 00:31:16 +01:00
|
|
|
{
|
|
|
|
if (is_object($value)) {
|
|
|
|
$this->array = get_object_vars($value);
|
|
|
|
} elseif (ArrayLib::is_associative($value)) {
|
|
|
|
$this->array = $value;
|
|
|
|
} elseif (is_array($value) && count($value) === 0) {
|
|
|
|
$this->array = array();
|
|
|
|
} else {
|
|
|
|
$message = 'Parameter to ArrayData constructor needs to be an object or associative array';
|
|
|
|
throw new InvalidArgumentException($message);
|
|
|
|
}
|
|
|
|
parent::__construct();
|
|
|
|
}
|
2015-07-27 12:31:18 +02:00
|
|
|
|
2016-11-29 00:31:16 +01:00
|
|
|
/**
|
|
|
|
* Get the source array
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
public function toMap()
|
|
|
|
{
|
|
|
|
return $this->array;
|
|
|
|
}
|
2015-07-27 12:31:18 +02:00
|
|
|
|
2016-11-29 00:31:16 +01:00
|
|
|
/**
|
|
|
|
* Gets a field from this object.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* If the value is an object but not an instance of
|
|
|
|
* ViewableData, it will be converted recursively to an
|
|
|
|
* ArrayData.
|
|
|
|
*
|
|
|
|
* If the value is an associative array, it will likewise be
|
|
|
|
* converted recursively to an ArrayData.
|
|
|
|
*
|
|
|
|
* @param string $field
|
|
|
|
* @return mixed
|
|
|
|
*/
|
|
|
|
public function getField($field)
|
|
|
|
{
|
|
|
|
$value = $this->array[$field];
|
|
|
|
if (is_object($value) && !$value instanceof ViewableData) {
|
|
|
|
return new ArrayData($value);
|
|
|
|
} elseif (ArrayLib::is_associative($value)) {
|
|
|
|
return new ArrayData($value);
|
|
|
|
} else {
|
|
|
|
return $value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Add or set a field on this object.
|
|
|
|
*
|
|
|
|
* @param string $field
|
|
|
|
* @param mixed $value
|
|
|
|
* @return $this
|
|
|
|
*/
|
|
|
|
public function setField($field, $value)
|
|
|
|
{
|
|
|
|
$this->array[$field] = $value;
|
|
|
|
return $this;
|
|
|
|
}
|
2015-07-27 12:31:18 +02:00
|
|
|
|
2016-11-29 00:31:16 +01:00
|
|
|
/**
|
|
|
|
* Check array to see if field isset
|
|
|
|
*
|
|
|
|
* @param string $field Field Key
|
|
|
|
* @return bool
|
|
|
|
*/
|
|
|
|
public function hasField($field)
|
|
|
|
{
|
|
|
|
return isset($this->array[$field]);
|
|
|
|
}
|
2011-03-27 12:37:06 +02:00
|
|
|
|
2016-11-29 00:31:16 +01:00
|
|
|
/**
|
|
|
|
* Converts an associative array to a simple object
|
|
|
|
*
|
|
|
|
* @param array
|
|
|
|
* @return stdClass $obj
|
|
|
|
*/
|
|
|
|
public static function array_to_object($arr = null)
|
|
|
|
{
|
|
|
|
$obj = new stdClass();
|
|
|
|
if ($arr) {
|
|
|
|
foreach ($arr as $name => $value) {
|
|
|
|
$obj->$name = $value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $obj;
|
|
|
|
}
|
2012-03-24 04:04:52 +01:00
|
|
|
}
|