GridFieldAddNewMultiClass::getClasses PHP Method

getClasses() public method

Gets the classes that can be created using this button, defaulting to the model class and its subclasses.
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;
    }

Usage Example

 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');
 }
All Usage Examples Of GridFieldAddNewMultiClass::getClasses