Created
March 6, 2015 14:59
-
-
Save sminnee/309f43df99ece6e449fb to your computer and use it in GitHub Desktop.
Extension exercises - solution
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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