From 8a9e07591433cb40e6eaf2762be27f35bd165373 Mon Sep 17 00:00:00 2001 From: Peter Thaleikis Date: Thu, 10 Sep 2015 21:30:10 +1200 Subject: [PATCH 1/5] Allowing to refer to external links from a modeladmin --- code/GridFieldExternalLink.php | 67 ++++++++++++++++++++++++++++++ templates/GridFieldExternalLink.ss | 1 + 2 files changed, 68 insertions(+) create mode 100644 code/GridFieldExternalLink.php create mode 100644 templates/GridFieldExternalLink.ss diff --git a/code/GridFieldExternalLink.php b/code/GridFieldExternalLink.php new file mode 100644 index 0000000..94c970b --- /dev/null +++ b/code/GridFieldExternalLink.php @@ -0,0 +1,67 @@ + 'col-buttons'); + } + + /** + * Add the title + * + * @param GridField $gridField + * @param string $columnName + * @return array + */ + public function getColumnMetadata($gridField, $columnName) { + if($columnName == 'Actions') { + return array('title' => ''); + } + return array(); + } + + /** + * Which columns are handled by this component + * + * @param type $gridField + * @return type + */ + public function getColumnsHandled($gridField) { + return array('Actions'); + } + + /** + * @param GridField $gridField + * @param DataObject $record + * @param string $columnName + * + * @return string - the HTML for the column + */ + public function getColumnContent($gridField, $record, $columnName) { + $data = new ArrayData(array( + 'Link' => method_exists($record, 'getExternalLink') ? $record->getExternalLink() : $record->ExternalLink + )); + + return $data->renderWith('GridFieldExternalLink'); + } +} diff --git a/templates/GridFieldExternalLink.ss b/templates/GridFieldExternalLink.ss new file mode 100644 index 0000000..52013e6 --- /dev/null +++ b/templates/GridFieldExternalLink.ss @@ -0,0 +1 @@ +<% _t('GridFieldExtensions.ExternalLink','External Link') %> From f57278b11af5b536f9acb9cf6fc03dedb0b9ec0c Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Mon, 14 Sep 2015 14:53:49 +1200 Subject: [PATCH 2/5] BUG Ensure that sorting a row doesn't destroy any unsaved inline changes --- code/GridFieldOrderableRows.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/code/GridFieldOrderableRows.php b/code/GridFieldOrderableRows.php index bb8a1ec..0be7897 100755 --- a/code/GridFieldOrderableRows.php +++ b/code/GridFieldOrderableRows.php @@ -199,6 +199,10 @@ class GridFieldOrderableRows extends RequestHandler implements /** * Handles requests to reorder a set of IDs in a specific order. + * + * @param GridField $grid + * @param SS_HTTPRequest $request + * @return SS_HTTPResponse */ public function handleReorder($grid, $request) { $list = $grid->getList(); @@ -234,6 +238,12 @@ class GridFieldOrderableRows extends RequestHandler implements $this->httpError(404); } + // Save any un-comitted changes to the gridfield + if(($form = $grid->getForm()) && ($record = $form->getRecord()) ) { + $form->loadDataFrom($request->requestVars(), true); + $grid->saveInto($record); + } + // Populate each object we are sorting with a sort value. $this->populateSortValues($items); From 9a253f27f271af0e752334369709b889e7dfc742 Mon Sep 17 00:00:00 2001 From: Peter Thaleikis Date: Mon, 14 Sep 2015 17:15:45 +1200 Subject: [PATCH 3/5] using hasmethod instead of method_exists --- code/GridFieldExternalLink.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/GridFieldExternalLink.php b/code/GridFieldExternalLink.php index 94c970b..0c0e282 100644 --- a/code/GridFieldExternalLink.php +++ b/code/GridFieldExternalLink.php @@ -59,7 +59,7 @@ class GridFieldExternalLink extends GridFieldDataColumns { */ public function getColumnContent($gridField, $record, $columnName) { $data = new ArrayData(array( - 'Link' => method_exists($record, 'getExternalLink') ? $record->getExternalLink() : $record->ExternalLink + 'Link' => $record->hasMethod('getExternalLink') ? $record->getExternalLink() : $record->ExternalLink )); return $data->renderWith('GridFieldExternalLink'); From 4c8009ad02735085d6508911634decfc6425a59e Mon Sep 17 00:00:00 2001 From: Peter Thaleikis Date: Mon, 14 Sep 2015 17:17:23 +1200 Subject: [PATCH 4/5] Adding possibility to define a custom text for the link --- code/GridFieldExternalLink.php | 3 ++- templates/GridFieldExternalLink.ss | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/code/GridFieldExternalLink.php b/code/GridFieldExternalLink.php index 0c0e282..cb54f2e 100644 --- a/code/GridFieldExternalLink.php +++ b/code/GridFieldExternalLink.php @@ -59,7 +59,8 @@ class GridFieldExternalLink extends GridFieldDataColumns { */ public function getColumnContent($gridField, $record, $columnName) { $data = new ArrayData(array( - 'Link' => $record->hasMethod('getExternalLink') ? $record->getExternalLink() : $record->ExternalLink + 'Link' => $record->hasMethod('getExternalLink') ? $record->getExternalLink() : $record->ExternalLink, + 'Text' => $record->hasMethod('getExternalLinkText') ? $record->getExternalLinkText() : 'External Link' )); return $data->renderWith('GridFieldExternalLink'); diff --git a/templates/GridFieldExternalLink.ss b/templates/GridFieldExternalLink.ss index 52013e6..cf82024 100644 --- a/templates/GridFieldExternalLink.ss +++ b/templates/GridFieldExternalLink.ss @@ -1 +1 @@ -<% _t('GridFieldExtensions.ExternalLink','External Link') %> +$Text From b6056fc7b9bbeccbab8441e9271f5ae5c09d3faf Mon Sep 17 00:00:00 2001 From: tsg Date: Mon, 14 Sep 2015 18:16:36 -0500 Subject: [PATCH 5/5] add support for setting a default value for GridFieldAddNewMultiClasss --- code/GridFieldAddNewMultiClass.php | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/code/GridFieldAddNewMultiClass.php b/code/GridFieldAddNewMultiClass.php index e5075d8..9d4d1ea 100755 --- a/code/GridFieldAddNewMultiClass.php +++ b/code/GridFieldAddNewMultiClass.php @@ -19,6 +19,8 @@ class GridFieldAddNewMultiClass implements GridField_HTMLProvider, GridField_URL private $title; private $classes; + + private $defaultClass; /** * @var String @@ -112,11 +114,23 @@ class GridFieldAddNewMultiClass implements GridField_HTMLProvider, GridField_URL * @param array $classes a set of class names, optionally mapped to titles * @return GridFieldAddNewMultiClass $this */ - public function setClasses(array $classes) { + public function setClasses(array $classes, $default = null) { $this->classes = $classes; + if($default) $this->defaultClass = $default; return $this; } + /** + * Sets the default class that is selected automatically. + * + * @param string $default the class name to use as default + * @return GridFieldAddNewMultiClass $this + */ + public function setDefaultClass($default) { + $this->defaultClass = $default; + return $this; + } + /** * Handles adding a new instance of a selected class. * @@ -157,7 +171,7 @@ class GridFieldAddNewMultiClass implements GridField_HTMLProvider, GridField_URL GridFieldExtensions::include_requirements(); - $field = new DropdownField(sprintf('%s[ClassName]', __CLASS__), '', $classes); + $field = new DropdownField(sprintf('%s[ClassName]', __CLASS__), '', $classes, $this->defaultClass); if (Config::inst()->get('GridFieldAddNewMultiClass', 'showEmptyString')) { $field->setEmptyString(_t('GridFieldExtensions.SELECTTYPETOCREATE', '(Select type to create)')); }