Skip to content

Instantly share code, notes, and snippets.

@sminnee
Created March 6, 2015 14:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sminnee/309f43df99ece6e449fb to your computer and use it in GitHub Desktop.
Save sminnee/309f43df99ece6e449fb to your computer and use it in GitHub Desktop.
Extension exercises - solution
<?php
/**
* Add an OptionSetField of sort options
*/
class GridFieldSortOptionSet implements GridField_HTMLProvider, GridField_DataManipulator,
GridField_ActionProvider, GridField_ColumnProvider {
protected $suppressOnSort = array();
public function augmentColumns($gridField, &$columns) {
if($column = $gridField->State->GridFieldSortOptionSet->SortColumn.'') {
if($this->suppressOnSort) {
foreach($this->suppressOnSort as $component) {
$gridField->getConfig()->removeComponentsByType($component);
}
}
}
}
public function getColumnsHandled($gridField) { return array(); }
public function getColumnContent($gridField, $record, $columnName) {}
public function getColumnAttributes($gridField, $record, $columnName) {}
public function getColumnMetadata($gridField, $columnName) {}
/**
* Returns the optionset in the header
*/
public function getHTMLFragments($gridField) {
$buttons ="Sort by:";
$buttons .= GridField_FormAction::create(
$gridField, 'SetSort', 'Custom order', 'SetSort', array(
'SortColumn' => '',
'SortDir' => '',
))->Field();
$columns = $gridField->getColumns();
$list = $gridField->getList();
$state = $gridField->State->GridFieldSortOptionSet;
foreach($columns as $column) {
if($list->canSortBy($column)) {
$metadata = $gridField->getColumnMetadata($column);
$sortDir = ($state->SortColumn == $column && $state->SortDir == 'ASC') ? 'DESC' : 'ASC';
$buttons .= GridField_FormAction::create(
$gridField, 'SetSort',
$metadata['title'],
'SetSort', array(
'SortColumn' => $column.'',
'SortDir' => $sortDir,
))->Field();
}
}
return array(
'toolbar-header-right' => $buttons,
);
}
public function setComponentsToSupressOnSort($suppressOnSort) {
if(!is_array($suppressOnSort)) $suppressOnSort = array($suppressOnSort);
$this->suppressOnSort = $suppressOnSort;
}
public function getManipulatedData(GridField $gridField, SS_List $dataList) {
$state = $gridField->State->GridFieldSortOptionSet;
if($state->SortColumn) {
return $dataList->sort(''.$state->SortColumn, (''.$state->SortDir)?(''.$state->SortDir):'ASC');
} else {
return $dataList;
}
}
public function getActions($gridField) {
return array('SetSort');
}
public function handleAction(GridField $gridField, $actionName, $arguments, $data) {
$gridField->State->GridFieldSortOptionSet->SortColumn = $arguments['SortColumn'];
$gridField->State->GridFieldSortOptionSet->SortDir = $arguments['SortDir'];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment