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

169 lines
3.8 KiB
PHP
Raw Normal View History

<?php
namespace SilverStripe\UserForms\Model\EditableFormField;
2022-11-15 23:57:49 +01:00
use SilverStripe\Dev\Deprecation;
use SilverStripe\Core\Convert;
use SilverStripe\ORM\DataObject;
use SilverStripe\Security\Member;
use SilverStripe\Versioned\Versioned;
/**
2015-09-11 00:20:06 +02:00
* Base Class for EditableOption Fields such as the ones used in
* dropdown fields and in radio check box groups
2015-09-11 00:20:06 +02:00
*
* @package userforms
* @property int $Default
* @property string $Name
* @property int $ParentID
* @property int $Sort
* @property string $Value
* @method EditableMultipleOptionField Parent()
* @mixin Versioned
*/
2016-07-21 07:53:59 +02:00
class EditableOption extends DataObject
{
2017-08-11 02:37:03 +02:00
private static $default_sort = 'Sort';
2015-09-11 00:20:06 +02:00
2017-08-11 02:37:03 +02:00
private static $db = [
'Name' => 'Varchar(255)',
'Title' => 'Varchar(255)',
'Default' => 'Boolean',
'Sort' => 'Int',
'Value' => 'Varchar(255)',
2017-08-11 02:37:03 +02:00
];
2015-09-11 00:20:06 +02:00
2017-08-11 02:37:03 +02:00
private static $has_one = [
'Parent' => EditableMultipleOptionField::class,
];
2015-09-11 00:20:06 +02:00
2017-08-11 02:37:03 +02:00
private static $extensions = [
Versioned::class . "('Stage', 'Live')",
2017-08-11 02:37:03 +02:00
];
2017-08-11 02:37:03 +02:00
private static $summary_fields = [
'Title',
'Default',
2017-08-11 02:37:03 +02:00
];
2015-07-24 04:37:48 +02:00
2016-04-20 00:40:37 +02:00
protected static $allow_empty_values = false;
private static $table_name = 'EditableOption';
2017-08-11 02:37:03 +02:00
/**
2016-04-20 00:40:37 +02:00
* Returns whether to allow empty values or not.
*
* @return boolean
*/
2016-07-21 07:53:59 +02:00
public static function allow_empty_values()
{
2016-04-20 00:40:37 +02:00
return (bool) self::$allow_empty_values;
}
/**
* Set whether to allow empty values.
*
* @param boolean $allow
*/
2016-07-21 07:53:59 +02:00
public static function set_allow_empty_values($allow)
{
2016-04-20 00:40:37 +02:00
self::$allow_empty_values = (bool) $allow;
}
2017-08-11 02:37:03 +02:00
/**
2022-11-15 23:57:49 +01:00
* @deprecated 5.0.0 Use $Title in templates instead
2017-08-11 02:37:03 +02:00
* @return string
*/
2016-07-21 07:53:59 +02:00
public function getEscapedTitle()
{
2022-11-15 23:57:49 +01:00
Deprecation::notice('5.0.0', 'Use $Title in templates instead');
return Convert::raw2xml($this->Title);
2017-08-11 02:37:03 +02:00
}
2016-04-20 00:40:37 +02:00
/**
* Fetches a value for $this->Value. If empty values are not allowed,
* then this will return the title in the case of an empty value.
*
* @return string
*/
public function getValue()
{
$value = $this->getField('Value');
2016-07-21 07:53:59 +02:00
if (empty($value) && !self::allow_empty_values()) {
2016-04-20 00:40:37 +02:00
return $this->Title;
}
return $value;
}
2016-09-23 18:27:15 +02:00
protected function onBeforeWrite()
{
if (!$this->Sort) {
$this->Sort = EditableOption::get()->max('Sort') + 1;
}
parent::onBeforeWrite();
}
/**
* @param Member $member
* @return boolean
*/
public function canEdit($member = null)
{
return $this->Parent()->canEdit($member);
}
/**
* @param Member $member
* @return boolean
*/
public function canDelete($member = null)
{
return $this->canEdit($member);
}
/**
* @param Member $member
* @return bool
*/
public function canView($member = null)
{
return $this->Parent()->canView($member);
}
/**
* Return whether a user can create an object of this type
*
* @param Member $member
* @param array $context Virtual parameter to allow context to be passed in to check
* @return bool
*/
public function canCreate($member = null, $context = [])
{
// Check parent object
$parent = $this->Parent();
if ($parent) {
return $parent->canCreate($member);
}
// Fall back to secure admin permissions
return parent::canCreate($member);
}
/**
* @param Member $member
* @return bool
*/
public function canPublish($member = null)
{
return $this->canEdit($member);
}
/**
* @param Member $member
* @return bool
*/
public function canUnpublish($member = null)
{
return $this->canDelete($member);
}
}