API Add getShortName to DBClassName

Fixes #7586
This commit is contained in:
Damian Mooyman 2017-11-15 11:27:21 +13:00
parent cf321895ba
commit f863573d1c
No known key found for this signature in database
GPG Key ID: 78B823A10DE27D1A
2 changed files with 33 additions and 0 deletions

View File

@ -109,6 +109,21 @@ class DBClassName extends DBEnum
return DataObject::class;
}
/**
* 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()
{
$value = $this->getValue();
if (empty($value) || !ClassInfo::exists($value)) {
return null;
}
return ClassInfo::shortName($value);
}
/**
* Assign the base class
*

View File

@ -5,6 +5,7 @@ namespace SilverStripe\ORM\Tests;
use SilverStripe\ORM\FieldType\DBClassName;
use SilverStripe\ORM\DataObject;
use SilverStripe\Dev\SapphireTest;
use SilverStripe\ORM\FieldType\DBField;
/**
* @skipUpgrade
@ -119,4 +120,21 @@ class DBClassNameTest extends SapphireTest
$this->assertEquals(DBClassNameTest\CustomDefault::class, $field7->getBaseClass());
$this->assertEquals(DBClassNameTest\CustomDefaultSubclass::class, $field7->getDefault());
}
public function testShortName()
{
$test1 = new DBClassNameTest\TestObject();
$test2 = new DBClassNameTest\ObjectSubSubClass();
$this->assertEquals('TestObject', $test1->obj('ClassName')->getShortName());
$this->assertEquals('ObjectSubSubClass', $test2->obj('ClassName')->getShortName());
$test3 = DBField::create_field('DBClassName', \stdClass::class);
$this->assertEquals('stdClass', $test3->getShortName());
$test4 = DBField::create_field('DBClassName', null);
$this->assertNull($test4->getShortName());
$test5 = DBField::create_field('DBClassName', 'not a class');
$this->assertNull($test5->getShortName());
}
}