mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
API Update serialisation of JSON tree data
Update TreeDropdownField schema
This commit is contained in:
parent
05ac2c6fc9
commit
0791b387b8
@ -55,6 +55,10 @@ use InvalidArgumentException;
|
|||||||
*/
|
*/
|
||||||
class TreeDropdownField extends FormField
|
class TreeDropdownField extends FormField
|
||||||
{
|
{
|
||||||
|
protected $schemaDataType = self::SCHEMA_DATA_TYPE_SINGLESELECT;
|
||||||
|
|
||||||
|
protected $schemaComponent = 'TreeDropdownField';
|
||||||
|
|
||||||
private static $url_handlers = array(
|
private static $url_handlers = array(
|
||||||
'$Action!/$ID' => '$Action'
|
'$Action!/$ID' => '$Action'
|
||||||
);
|
);
|
||||||
@ -317,20 +321,13 @@ class TreeDropdownField extends FormField
|
|||||||
*/
|
*/
|
||||||
public function Field($properties = array())
|
public function Field($properties = array())
|
||||||
{
|
{
|
||||||
$item = DataObject::singleton($this->sourceObject);
|
|
||||||
$emptyTitle = _t(
|
|
||||||
'DropdownField.CHOOSE_MODEL',
|
|
||||||
'(Choose {name})',
|
|
||||||
['name' => $item->i18n_singular_name()]
|
|
||||||
);
|
|
||||||
|
|
||||||
$record = $this->Value() ? $this->objectForKey($this->Value()) : null;
|
$record = $this->Value() ? $this->objectForKey($this->Value()) : null;
|
||||||
if ($record instanceof ViewableData) {
|
if ($record instanceof ViewableData) {
|
||||||
$title = $record->obj($this->labelField)->forTemplate();
|
$title = $record->obj($this->labelField)->forTemplate();
|
||||||
} elseif ($record) {
|
} elseif ($record) {
|
||||||
$title = Convert::raw2xml($record->{$this->labelField});
|
$title = Convert::raw2xml($record->{$this->labelField});
|
||||||
} else {
|
} else {
|
||||||
$title = $emptyTitle;
|
$title = $this->getEmptyTitle();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO Implement for TreeMultiSelectField
|
// TODO Implement for TreeMultiSelectField
|
||||||
@ -343,7 +340,7 @@ class TreeDropdownField extends FormField
|
|||||||
$properties,
|
$properties,
|
||||||
array(
|
array(
|
||||||
'Title' => $title,
|
'Title' => $title,
|
||||||
'EmptyTitle' => $emptyTitle,
|
'EmptyTitle' => $this->getEmptyTitle(),
|
||||||
'Metadata' => ($metadata) ? Convert::raw2json($metadata) : null,
|
'Metadata' => ($metadata) ? Convert::raw2json($metadata) : null,
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
@ -430,7 +427,8 @@ class TreeDropdownField extends FormField
|
|||||||
return [
|
return [
|
||||||
'name' => $this->getName(),
|
'name' => $this->getName(),
|
||||||
'id' => $child->obj($this->keyField),
|
'id' => $child->obj($this->keyField),
|
||||||
'title' => $child->obj($this->labelField),
|
'title' => $child->getTitle(),
|
||||||
|
'treetitle' => $child->obj($this->labelField),
|
||||||
'disabled' => $this->nodeIsDisabled($child),
|
'disabled' => $this->nodeIsDisabled($child),
|
||||||
'isSubTree' => $isSubTree
|
'isSubTree' => $isSubTree
|
||||||
];
|
];
|
||||||
@ -627,4 +625,44 @@ class TreeDropdownField extends FormField
|
|||||||
$copy->setSourceObject($this->sourceObject);
|
$copy->setSourceObject($this->sourceObject);
|
||||||
return $copy;
|
return $copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getSchemaStateDefaults()
|
||||||
|
{
|
||||||
|
// Check label for field
|
||||||
|
$record = $this->Value() ? $this->objectForKey($this->Value()) : null;
|
||||||
|
$selectedlabel = null;
|
||||||
|
|
||||||
|
$data = parent::getSchemaStateDefaults();
|
||||||
|
$data['data']['emptyTitle'] = $this->getEmptyTitle();
|
||||||
|
if ($record) {
|
||||||
|
$data['data']['valueObject'] = [
|
||||||
|
'id' => $record->getField($this->keyField),
|
||||||
|
'title' => $record->getTitle(),
|
||||||
|
'treetitle' => $record->obj($this->labelField)->getSchemaValue(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSchemaDataDefaults()
|
||||||
|
{
|
||||||
|
$data = parent::getSchemaDataDefaults();
|
||||||
|
$data['data']['urlTree'] = $this->Link('tree');
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function getEmptyTitle()
|
||||||
|
{
|
||||||
|
$item = DataObject::singleton($this->sourceObject);
|
||||||
|
$emptyTitle = _t(
|
||||||
|
'DropdownField.CHOOSE_MODEL',
|
||||||
|
'(Choose {name})',
|
||||||
|
['name' => $item->i18n_singular_name()]
|
||||||
|
);
|
||||||
|
return $emptyTitle;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -361,17 +361,26 @@ class MarkedSet
|
|||||||
$output = $data;
|
$output = $data;
|
||||||
|
|
||||||
// Serialise node
|
// Serialise node
|
||||||
$output['node'] = $serialiseEval($data['node']);
|
$serialised = $serialiseEval($data['node']);
|
||||||
|
|
||||||
// Force serialisation of DBField instances
|
// Force serialisation of DBField instances
|
||||||
if (is_array($output['node'])) {
|
if (is_array($serialised)) {
|
||||||
foreach ($output['node'] as $key => $value) {
|
foreach ($serialised as $key => $value) {
|
||||||
if ($value instanceof DBField) {
|
if ($value instanceof DBField) {
|
||||||
$output['node'][$key] = $value->getSchemaValue();
|
$serialised[$key] = $value->getSchemaValue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} elseif ($output['node'] instanceof DBField) {
|
|
||||||
$output['node'] = $output['node']->getSchemaValue();
|
// Merge with top level array
|
||||||
|
unset($output['node']);
|
||||||
|
$output = array_merge($output, $serialised);
|
||||||
|
} else {
|
||||||
|
if ($serialised instanceof DBField) {
|
||||||
|
$serialised = $serialised->getSchemaValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replace node with serialised value
|
||||||
|
$output['node'] = $serialised;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Replace children with serialised elements
|
// Replace children with serialised elements
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<li id="selector-{$name}-{$id}" data-id="{$id}"
|
<li id="selector-{$name}-{$id}" data-id="{$id}"
|
||||||
class="class-{$node.ClassName} {$markingClasses} <% if $disabled %>disabled<% end_if %>"
|
class="class-{$node.ClassName} {$markingClasses} <% if $disabled %>disabled<% end_if %>"
|
||||||
>
|
>
|
||||||
<a rel="$node.ID">{$title}</a>
|
<a rel="$node.ID">{$treetitle}</a>
|
||||||
$SubTree
|
$SubTree
|
||||||
</li>
|
</li>
|
||||||
<% end_loop %>
|
<% end_loop %>
|
||||||
|
Loading…
Reference in New Issue
Block a user