diff --git a/src/ORM/FieldType/DBClassName.php b/src/ORM/FieldType/DBClassName.php index a2f381f4c..7b7689f7c 100644 --- a/src/ORM/FieldType/DBClassName.php +++ b/src/ORM/FieldType/DBClassName.php @@ -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 * diff --git a/tests/php/ORM/DBClassNameTest.php b/tests/php/ORM/DBClassNameTest.php index 91bad680b..08fea60e2 100644 --- a/tests/php/ORM/DBClassNameTest.php +++ b/tests/php/ORM/DBClassNameTest.php @@ -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()); + } }