Skip to content

Commit

Permalink
API Add back strong typing that got removed in a merge-up (#11372)
Browse files Browse the repository at this point in the history
  • Loading branch information
GuySartorelli authored Sep 12, 2024
1 parent 907cb17 commit 8662c07
Showing 1 changed file with 14 additions and 27 deletions.
41 changes: 14 additions & 27 deletions src/ORM/FieldType/DBClassNameTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,35 +6,31 @@
use SilverStripe\Core\Config\Config;
use SilverStripe\ORM\DataObject;
use RuntimeException;
use SilverStripe\View\ViewableData;

trait DBClassNameTrait
{
/**
* Base classname of class to enumerate.
* If 'DataObject' then all classes are included.
* If empty, then the baseClass of the parent object will be used
*
* @var string|null
*/
protected $baseClass = null;
protected ?string $baseClass = null;

/**
* Parent object
*
* @var DataObject|null
*/
protected $record = null;
protected ?DataObject $record = null;

private static $index = true;
private static string|bool $index = true;

/**
* Create a new DBClassName field
*
* @param string $name Name of field
* @param string|null $baseClass Optional base class to limit selections
* @param array $options Optional parameters for this DBField instance
* @param array $options Optional parameters for this DBField instance
*/
public function __construct($name = null, $baseClass = null, $options = [])
public function __construct(?string $name = null, ?string $baseClass = null, array $options = [])
{
$this->setBaseClass($baseClass);
if (is_a($this, DBVarchar::class)) {
Expand All @@ -48,10 +44,8 @@ public function __construct($name = null, $baseClass = null, $options = [])

/**
* Get the base dataclass for the list of subclasses
*
* @return string
*/
public function getBaseClass()
public function getBaseClass(): string
{
// Use explicit base class
if ($this->baseClass) {
Expand All @@ -74,44 +68,37 @@ public function getBaseClass()
/**
* Get the base name of the current class
* Useful as a non-fully qualified CSS Class name in templates.
*
* @return string|null
*/
public function getShortName()
public function getShortName(): string
{
$value = $this->getValue();
if (empty($value) || !ClassInfo::exists($value)) {
return null;
return '';
}
return ClassInfo::shortName($value);
}

/**
* Assign the base class
*
* @param string $baseClass
* @return $this
*/
public function setBaseClass($baseClass)
public function setBaseClass(?string $baseClass): static
{
$this->baseClass = $baseClass;
return $this;
}

/**
* Get list of classnames that should be selectable
*
* @return array
*/
public function getEnum()
public function getEnum(): array
{
$classNames = ClassInfo::subclassesFor($this->getBaseClass());
$dataobject = strtolower(DataObject::class);
unset($classNames[$dataobject]);
return array_values($classNames ?? []);
}

public function setValue($value, $record = null, $markChanged = true)
public function setValue(mixed $value, null|array|ViewableData $record = null, bool $markChanged = true): static
{
parent::setValue($value, $record, $markChanged);

Expand All @@ -121,8 +108,8 @@ public function setValue($value, $record = null, $markChanged = true)

return $this;
}
private function getDefaultClassName()

private function getDefaultClassName(): string
{
// Allow classes to set default class
$baseClass = $this->getBaseClass();
Expand Down

0 comments on commit 8662c07

Please sign in to comment.