Commit
…to allow altering it there MINOR Parameter namespacing for GridState to avoid clashes with multiple GridField instances in same form MINOR GridField->index() to render the field, unify with gridFieldAlterAction() to support state changes
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -25,6 +25,7 @@ class GridField extends FormField { | |
* @var array | ||
*/ | ||
public static $allowed_actions = array( | ||
'index', | ||
'gridFieldAlterAction' | ||
); | ||
|
||
|
@@ -98,8 +99,10 @@ public function __construct($name, $title = null, SS_List $dataList = null, Grid | |
|
||
|
||
$this->addExtraClass('ss-gridfield'); | ||
$this->requireDefaultCSS(); | ||
|
||
} | ||
|
||
function index($request) { | ||
return $this->gridFieldAlterAction(array(), $this->getForm(), $request); | ||
} | ||
|
||
/** | ||
|
@@ -356,6 +359,7 @@ public function FieldHolder() { | |
$this->getAttributes(), | ||
array('value' => false, 'type' => false, 'name' => false) | ||
); | ||
$attrs['data-name'] = $this->Name(); | ||
$tableAttrs = array( | ||
'id' => isset($this->id) ? $this->id : null, | ||
'class' => "field CompositeField {$this->extraClass()}", | ||
|
@@ -370,6 +374,10 @@ public function FieldHolder() { | |
); | ||
} | ||
|
||
public function getAttributes() { | ||
return array_merge(parent::getAttributes(), array('data-url' => $this->Link())); | ||
This comment has been minimized.
Sorry, something went wrong. |
||
} | ||
|
||
/** | ||
* Get the columns of this GridField, they are provided by attached GridField_ColumnProvider | ||
* | ||
|
@@ -491,33 +499,38 @@ protected function buildColumnDispatch() { | |
} | ||
} | ||
} | ||
|
||
/** | ||
* This is the action that gets executed when a GridField_AlterAction gets clicked. | ||
* | ||
* @param array $data | ||
* @return string | ||
*/ | ||
public function gridFieldAlterAction($data, $form, SS_HTTPRequest $request) { | ||
This comment has been minimized.
Sorry, something went wrong.
sminnee
Member
|
||
$id = $data['StateID']; | ||
$stateChange = Session::get($id); | ||
This comment has been minimized.
Sorry, something went wrong.
sminnee
Member
|
||
$gridName = $stateChange['grid']; | ||
$grid = $form->Fields()->dataFieldByName($gridName); | ||
|
||
$state = $grid->getState(false); | ||
if(isset($data['GridState'])) $state->setValue($data['GridState']); | ||
|
||
$actionName = $stateChange['actionName']; | ||
$args = isset($stateChange['args']) ? $stateChange['args'] : array(); | ||
$html = $grid->handleAction($actionName, $args, $data); | ||
|
||
if($html) { | ||
return $html; | ||
$html = ''; | ||
$data = $request->requestVars(); | ||
$fieldData = @$data[$this->Name()]; | ||
|
||
// Update state from client | ||
$state = $this->getState(false); | ||
if(isset($fieldData['GridState'])) $state->setValue($fieldData['GridState']); | ||
|
||
// Try to execute alter action | ||
foreach($data as $k => $v) { | ||
if(preg_match('/^action_gridFieldAlterAction\?StateID=(.*)/', $k, $matches)) { | ||
$id = $matches[1]; | ||
$stateChange = Session::get($id); | ||
$actionName = $stateChange['actionName']; | ||
$args = isset($stateChange['args']) ? $stateChange['args'] : array(); | ||
$html = $this->handleAction($actionName, $args, $data); | ||
// A field can optionally return its own HTML | ||
if($html) return $html; | ||
} | ||
} | ||
|
||
switch($request->getHeader('X-Get-Fragment')) { | ||
case 'CurrentField': | ||
return $grid->FieldHolder(); | ||
return $this->FieldHolder(); | ||
break; | ||
|
||
case 'CurrentForm': | ||
|
@@ -565,6 +578,9 @@ function handleRequest(SS_HTTPRequest $request, DataModel $model) { | |
|
||
$this->request = $request; | ||
$this->setModel($model); | ||
|
||
$fieldData = $this->request->requestVar($this->Name()); | ||
if($fieldData && $fieldData['GridState']) $this->getState(false)->setValue($fieldData['GridState']); | ||
|
||
This comment has been minimized.
Sorry, something went wrong.
sminnee
Member
|
||
foreach($this->components as $component) { | ||
if(!($component instanceof GridField_URLHandler)) { | ||
|
Let's add a comment here explaining that data-url is required for no-js operation.