public getClasses ( GridField $grid ) : array | ||
$grid | GridField | |
return | array | a map of class name to title |
public function getClasses(GridField $grid)
{
$result = array();
if (is_null($this->classes)) {
$classes = array_values(ClassInfo::subclassesFor($grid->getModelClass()));
sort($classes);
} else {
$classes = $this->classes;
}
$kill_ancestors = array();
foreach ($classes as $class => $title) {
if (!is_string($class)) {
$class = $title;
}
if (!class_exists($class)) {
continue;
}
$is_abstract = ($reflection = new ReflectionClass($class)) && $reflection->isAbstract();
if (!$is_abstract && $class === $title) {
$title = singleton($class)->i18n_singular_name();
}
if ($ancestor_to_hide = Config::inst()->get($class, 'hide_ancestor', Config::FIRST_SET)) {
$kill_ancestors[$ancestor_to_hide] = true;
}
if ($is_abstract || !singleton($class)->canCreate()) {
continue;
}
$result[$class] = $title;
}
if ($kill_ancestors) {
foreach ($kill_ancestors as $class => $bool) {
unset($result[$class]);
}
}
return $result;
}
public function testGetClasses() { $grid = new GridField('TestGridField'); $grid->setModelClass('GridFieldAddNewMultiClassTest_A'); $component = new GridFieldAddNewMultiClass(); $this->assertEquals(array('GridFieldAddNewMultiClassTest_A' => 'A', 'GridFieldAddNewMultiClassTest_B' => 'B', 'GridFieldAddNewMultiClassTest_C' => 'C'), $component->getClasses($grid), 'Subclasses are populated by default and sorted'); $component->setClasses(array('GridFieldAddNewMultiClassTest_B' => 'Custom Title', 'GridFieldAddNewMultiClassTest_A')); $this->assertEquals(array('GridFieldAddNewMultiClassTest_B' => 'Custom Title', 'GridFieldAddNewMultiClassTest_A' => 'A'), $component->getClasses($grid), 'Sorting and custom titles can be specified'); }