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

106 lines
2.5 KiB
PHP
Raw Normal View History

2015-08-11 08:21:43 +02:00
<?php
namespace SilverStripe\UserForms\Model\EditableFormField;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\HiddenField;
use SilverStripe\Forms\LabelField;
use SilverStripe\Security\Group;
use SilverStripe\UserForms\Model\EditableFormField;
2015-08-11 08:21:43 +02:00
/**
* Specifies that this ends a group of fields
*
* @method EditableFieldGroup Group()
2015-08-11 08:21:43 +02:00
*/
2016-07-21 07:53:59 +02:00
class EditableFieldGroupEnd extends EditableFormField
{
private static $belongs_to = [
'Group' => EditableFieldGroup::class
];
2016-07-21 07:53:59 +02:00
/**
* Disable selection of group class
*
* @config
* @var bool
*/
private static $hidden = true;
/**
* Non-data type
*
* @config
* @var bool
*/
private static $literal = true;
private static $table_name = 'EditableFieldGroupEnd';
2016-07-21 07:53:59 +02:00
public function getCMSTitle()
{
$group = $this->Group();
return _t(
__CLASS__.'.FIELD_GROUP_END',
2016-07-21 07:53:59 +02:00
'{group} end',
[
'group' => ($group && $group->exists()) ? $group->CMSTitle : Group::class
]
2016-07-21 07:53:59 +02:00
);
}
public function getCMSFields()
{
$this->beforeUpdateCMSFields(function (FieldList $fields) {
$fields->removeByName(['MergeField', 'Default', 'Validation', 'DisplayRules']);
});
return parent::getCMSFields();
2016-07-21 07:53:59 +02:00
}
public function getInlineClassnameField($column, $fieldClasses)
{
return LabelField::create($column, $this->CMSTitle);
2016-07-21 07:53:59 +02:00
}
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([
2016-07-21 07:53:59 +02:00
'ParentID' => $this->ParentID,
'Sort:LessThanOrEqual' => $this->Sort
])
2016-07-21 07:53:59 +02:00
->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();
}
}
}
2015-08-11 08:21:43 +02:00
}