silverstripe-userforms/code/Model/EditableFormField/EditableFieldGroupEnd.php

103 lines
2.4 KiB
PHP

<?php
/**
* Specifies that this ends a group of fields
*/
class EditableFieldGroupEnd extends EditableFormField
{
private static $belongs_to = array(
'Group' => 'EditableFieldGroup'
);
/**
* Disable selection of group class
*
* @config
* @var bool
*/
private static $hidden = true;
/**
* Non-data type
*
* @config
* @var bool
*/
private static $literal = true;
public function getCMSTitle()
{
$group = $this->Group();
return _t(
'EditableFieldGroupEnd.FIELD_GROUP_END',
'{group} end',
array(
'group' => ($group && $group->exists()) ? $group->CMSTitle : 'Group'
)
);
}
public function getCMSFields()
{
$fields = parent::getCMSFields();
$fields->removeByName(array('MergeField', 'Default', 'Validation', 'DisplayRules'));
return $fields;
}
public function getInlineClassnameField($column, $fieldClasses)
{
return new LabelField($column, $this->CMSTitle);
}
public function getInlineTitleField($column)
{
return HiddenField::create($column);
}
public function getFormField()
{
return null;
}
public function showInReports()
{
return false;
}
public function onAfterWrite()
{
parent::onAfterWrite();
// If this is not attached to a group, find the first group prior to this
// with no end attached
$group = $this->Group();
if (!($group && $group->exists()) && $this->ParentID) {
$group = EditableFieldGroup::get()
->filter(array(
'ParentID' => $this->ParentID,
'Sort:LessThanOrEqual' => $this->Sort
))
->where('"EditableFieldGroup"."EndID" IS NULL OR "EditableFieldGroup"."EndID" = 0')
->sort('"Sort" DESC')
->first();
// When a group is found, attach it to this end
if ($group) {
$group->EndID = $this->ID;
$group->write();
}
}
}
protected function onAfterDelete()
{
parent::onAfterDelete();
// Delete group
if (($group = $this->Group()) && $group->exists()) {
$group->delete();
}
}
}