From ae930833ade64e2634d1c6871fbe356b151294f3 Mon Sep 17 00:00:00 2001 From: Saophalkun Ponlu Date: Tue, 3 Oct 2017 16:07:38 +1300 Subject: [PATCH] Add gridfield versioned columns --- .../GridFieldConfig_RecordEditor.php | 1 + .../GridField/GridFieldVersionedState.php | 111 ++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 src/Forms/GridField/GridFieldVersionedState.php diff --git a/src/Forms/GridField/GridFieldConfig_RecordEditor.php b/src/Forms/GridField/GridFieldConfig_RecordEditor.php index c67d116bb..5b31ddbef 100644 --- a/src/Forms/GridField/GridFieldConfig_RecordEditor.php +++ b/src/Forms/GridField/GridFieldConfig_RecordEditor.php @@ -21,6 +21,7 @@ class GridFieldConfig_RecordEditor extends GridFieldConfig $this->addComponent($sort = new GridFieldSortableHeader()); $this->addComponent($filter = new GridFieldFilterHeader()); $this->addComponent(new GridFieldDataColumns()); + $this->addComponent(new GridFieldVersionedState()); $this->addComponent(new GridFieldEditButton()); $this->addComponent(new GridFieldDeleteAction()); $this->addComponent(new GridFieldPageCount('toolbar-header-right')); diff --git a/src/Forms/GridField/GridFieldVersionedState.php b/src/Forms/GridField/GridFieldVersionedState.php new file mode 100644 index 000000000..f05ebc9b2 --- /dev/null +++ b/src/Forms/GridField/GridFieldVersionedState.php @@ -0,0 +1,111 @@ +getDisplayFields()} + * @see {@link GridFieldDataColumns}. + * + * @param GridField $gridField + * @param array $columns List reference of all column names. + */ + public function augmentColumns($gridField, &$columns) + { + $model = $gridField->getModelClass(); + $isModelVersioned = $model::has_extension(Versioned::class); + + if(!$isModelVersioned) { + return; + } + + $matchedVersionedFields = array_intersect( + $columns, + $this->versionedLabelFields + ); + + if (count($matchedVersionedFields) > 0) { + $this->column = array_values($matchedVersionedFields)[0]; + } + // Use first column + else if ($columns) { + $this->column = $columns[0]; + } + } + + /** + * Names of all columns which are affected by this component. + * + * @param GridField $gridField + * @return array + */ + public function getColumnsHandled($gridField) + { + return [$this->column]; + } + + /** + * HTML for the column, content of the element. + * + * @param GridField $gridField + * @param DataObject $record - Record displayed in this row + * @param string $columnName + * @return string - HTML for the column. Return NULL to skip. + */ + public function getColumnContent($gridField, $record, $columnName) + { + + $flagContent = ''; + $flags = $record->getStatusFlags(); + foreach ($flags as $class => $data) { + if (is_string($data)) { + $data = array('text' => $data); + } + $flagContent .= sprintf( + "%s", + 'status-' . Convert::raw2xml($class), + (isset($data['title'])) ? sprintf(' title=\\"%s\\"', Convert::raw2xml($data['title'])) : '', + Convert::raw2xml($data['text']) + ); + } + return $flagContent; + } + + /** + * Attributes for the element containing the content returned by {@link getColumnContent()}. + * + * @param GridField $gridField + * @param DataObject $record displayed in this row + * @param string $columnName + * @return array + */ + public function getColumnAttributes($gridField, $record, $columnName) + { + return [ 'data-contains-version-state' => true ]; + } + + /** + * Additional metadata about the column which can be used by other components, + * e.g. to set a title for a search column header. + * + * @param GridField $gridField + * @param string $columnName + * @return array - Map of arbitrary metadata identifiers to their values. + */ + public function getColumnMetadata($gridField, $columnName) + { + return []; + } +}