src/GridFieldEditableColumns.php
public function getFields(GridField $grid, DataObjectInterface $record)
    {
        $cols   = $this->getDisplayFields($grid);
        $fields = new FieldList();

        /** @var DataList $list */
        $list   = $grid->getList();
        $class  = $list ? $list->dataClass() : null;

        foreach ($cols as $col => $info) {
            $field = null;

            if ($info instanceof Closure) {
                $field = call_user_func($info, $record, $col, $grid);
            } elseif (is_array($info)) {
                if (isset($info['callback'])) {
                    $field = call_user_func($info['callback'], $record, $col, $grid);
                } elseif (isset($info['field'])) {
                    if ($info['field'] == LiteralField::class) {
                        $field = new $info['field']($col, null);
                    } else {
                        $field = new $info['field']($col);
                    }
                }

                if (!$field instanceof FormField) {
                    throw new Exception(sprintf(
                        'The field for column "%s" is not a valid form field',
                        $col
                    ));
                }
            }

            if (!$field && $list instanceof ManyManyList) {
                $extra = $list->getExtraFields();

                if ($extra && array_key_exists($col, $extra)) {
                    $field = Injector::inst()->create($extra[$col], $col)->scaffoldFormField();
                }
            }

            if (!$field) {
                if (!$this->displayFields) {
                    // If setDisplayFields() not used, utilize $summary_fields
                    // in a way similar to base class
                    //
                    // Allows use of 'MyBool.Nice' and 'MyHTML.NoHTML' so that
                    // GridFields not using inline editing still look good or
                    // revert to looking good in cases where the field isn't
                    // available or is readonly
                    //
                    $colRelation = explode('.', $col);
                    if ($class && $obj = DataObject::singleton($class)->dbObject($colRelation[0])) {
                        $field = $obj->scaffoldFormField();
                    } else {
                        $field = new ReadonlyField($colRelation[0]);
                    }
                } elseif ($class && $obj = DataObject::singleton($class)->dbObject($col)) {
                    $field = $obj->scaffoldFormField();
                } else {
                    $field = new ReadonlyField($col);
                }
            }

            if (!$field instanceof FormField) {
                throw new Exception(sprintf(
                    'Invalid form field instance for column "%s"',
                    $col
                ));
            }

            // Add CSS class for interactive fields
            if (!($field->isReadOnly() || $field instanceof LiteralField)) {
                $field->addExtraClass('editable-column-field');
            }

            $fields->push($field);
        }

        return $fields;
    }
public function getFields(GridField $grid, DataObjectInterface $record)
    {
        $cols   = $this->getDisplayFields($grid);
        $fields = new FieldList();

        /** @var DataList $list */
        $list   = $grid->getList();
        $class  = $list ? $list->dataClass() : null;

        foreach ($cols as $col => $info) {
            $field = null;

            if ($info instanceof Closure) {
                $field = call_user_func($info, $record, $col, $grid);
            } elseif (is_array($info)) {
                if (isset($info['callback'])) {
                    $field = call_user_func($info['callback'], $record, $col, $grid);
                } elseif (isset($info['field'])) {
                    if ($info['field'] == LiteralField::class) {
                        $field = new $info['field']($col, null);
                    } else {
                        $field = new $info['field']($col);
                    }
                }

                if (!$field instanceof FormField) {
                    throw new Exception(sprintf(
                        'The field for column "%s" is not a valid form field',
                        $col
                    ));
                }
            }

            if (!$field && $list instanceof ManyManyList) {
                $extra = $list->getExtraFields();

                if ($extra && array_key_exists($col, $extra)) {
                    $field = Injector::inst()->create($extra[$col], $col)->scaffoldFormField();
                }
            }

            if (!$field) {
                if (!$this->displayFields) {
                    // If setDisplayFields() not used, utilize $summary_fields
                    // in a way similar to base class
                    //
                    // Allows use of 'MyBool.Nice' and 'MyHTML.NoHTML' so that
                    // GridFields not using inline editing still look good or
                    // revert to looking good in cases where the field isn't
                    // available or is readonly
                    //
                    $colRelation = explode('.', $col);
                    if ($class && $obj = DataObject::singleton($class)->dbObject($colRelation[0])) {
                        $field = $obj->scaffoldFormField();
                    } else {
                        $field = new ReadonlyField($colRelation[0]);
                    }
                } elseif ($class && $obj = DataObject::singleton($class)->dbObject($col)) {
                    $field = $obj->scaffoldFormField();
                } else {
                    $field = new ReadonlyField($col);
                }
            }

            if (!$field instanceof FormField) {
                throw new Exception(sprintf(
                    'Invalid form field instance for column "%s"',
                    $col
                ));
            }

            // Add CSS class for interactive fields
            if (!($field->isReadOnly() || $field instanceof LiteralField)) {
                $field->addExtraClass('editable-column-field');
            }

            $fields->push($field);
        }

        return $fields;
    }
public function getFields ( GridField $ grid , DataObjectInterface $ record ) { $ cols = $ this -> getDisplayFields ( $ grid ) ; $ fields = new FieldList ( ) ; /** @var DataList $list */ $ list = $ grid -> getList ( ) ; $ class = $ list ? $ list -> dataClass ( ) : null ; foreach ( $ cols as $ col => $ info ) { $ field = null ; if ( $ info instanceof Closure ) { $ field = call_user_func ( $ info , $ record , $ col , $ grid ) ; } elseif ( is_array ( $ info ) ) { if ( isset ( $ info [ 'callback' ] ) ) { $ field = call_user_func ( $ info [ 'callback' ] , $ record , $ col , $ grid ) ; } elseif ( isset ( $ info [ 'field' ] ) ) { if ( $ info [ 'field' ] == LiteralField :: class ) { $ field = new $ info [ 'field' ] ( $ col , null ) ; } else { $ field = new $ info [ 'field' ] ( $ col ) ; } } if ( ! $ field instanceof FormField ) { throw new Exception ( sprintf ( 'The field for column "%s" is not a valid form field' , $ col ) ) ; } } if ( ! $ field && $ list instanceof ManyManyList ) { $ extra = $ list -> getExtraFields ( ) ; if ( $ extra && array_key_exists ( $ col , $ extra ) ) { $ field = Injector :: inst ( ) -> create ( $ extra [ $ col ] , $ col ) -> scaffoldFormField ( ) ; } } if ( ! $ field ) { if ( ! $ this -> displayFields ) { // If setDisplayFields() not used, utilize $summary_fields // in a way similar to base class // // Allows use of 'MyBool.Nice' and 'MyHTML.NoHTML' so that // GridFields not using inline editing still look good or // revert to looking good in cases where the field isn't // available or is readonly // $ colRelation = explode ( '.' , $ col ) ; if ( $ class && $ obj = DataObject :: singleton ( $ class ) -> dbObject ( $ colRelation [ 0 ] ) ) { $ field = $ obj -> scaffoldFormField ( ) ; } else { $ field = new ReadonlyField ( $ colRelation [ 0 ] ) ; } } elseif ( $ class && $ obj = DataObject :: singleton ( $ class ) -> dbObject ( $ col ) ) { $ field = $ obj -> scaffoldFormField ( ) ; } else { $ field = new ReadonlyField ( $ col ) ; } } if ( ! $ field instanceof FormField ) { throw new Exception ( sprintf ( 'Invalid form field instance for column "%s"' , $ col ) ) ; } // Add CSS class for interactive fields if ( ! ( $ field -> isReadOnly ( ) || $ field instanceof LiteralField ) ) { $ field -> addExtraClass ( 'editable-column-field' ) ; } $ fields -> push ( $ field ) ; } return $ fields ; }
Gets the field list for a record.

@param GridField $grid
@param DataObjectInterface $record
@return FieldList
@throws Exception
Gets the field list for a record .