ORIENT/modules/backend/traits/InspectableContainer.php

51 lines
1.5 KiB
PHP
Raw Normal View History

2014-05-14 13:24:20 +00:00
<?php namespace Backend\Traits;
use System\Classes\SystemException;
use System\Classes\ApplicationException;
use Request;
/**
* Inspectable Container Trait
* Extension for controllers that can host inspectable widgets (Components, etc.)
*
* @package october\backend
* @author Alexey Bobkov, Samuel Georges
*/
trait InspectableContainer
{
public function onInspectableGetOptions()
{
$property = trim(Request::input('inspectorProperty'));
if (!$property)
throw new ApplicationException('The property name is not specified.');
$className = trim(Request::input('inspectorClassName'));
if (!$className)
throw new ApplicationException('The inspectable class name is not specified.');
$traitFound = in_array('System\Traits\PropertyContainer', class_uses_recursive($className));
2014-05-14 13:24:20 +00:00
if (!$traitFound)
throw new ApplicationException('The options cannot be loaded for the specified class.');
$obj = new $className(null);
2014-05-14 13:24:20 +00:00
$methodName = 'get'.ucfirst($property).'Options';
if (method_exists($obj, $methodName))
$options = $obj->$methodName();
else
$options = $obj->getPropertyOptions($property);
/*
* Convert to array to retain the sort order in JavaScript
*/
$optionsArray = [];
foreach ($options as $value => $title) {
$optionsArray[] = ['value' => $value, 'title' => $title];
}
2014-05-14 13:24:20 +00:00
return [
'options' => $optionsArray
2014-05-14 13:24:20 +00:00
];
}
}