-
Notifications
You must be signed in to change notification settings - Fork 821
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 | Original file line | Diff line number | Diff line change |
---|---|---|---|
|
@@ -25,6 +25,7 @@ class GridField extends FormField { | ||
* @var array | * @var array | ||
*/ | */ | ||
public static $allowed_actions = array( | public static $allowed_actions = array( | ||
'index', | |||
'gridFieldAlterAction' | 'gridFieldAlterAction' | ||
); | ); | ||
|
|
||
|
@@ -98,8 +99,10 @@ public function __construct($name, $title = null, SS_List $dataList = null, Grid | ||
|
|
||
|
|
||
$this->addExtraClass('ss-gridfield'); | $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(), | $this->getAttributes(), | ||
array('value' => false, 'type' => false, 'name' => false) | array('value' => false, 'type' => false, 'name' => false) | ||
); | ); | ||
$attrs['data-name'] = $this->Name(); | |||
$tableAttrs = array( | $tableAttrs = array( | ||
'id' => isset($this->id) ? $this->id : null, | 'id' => isset($this->id) ? $this->id : null, | ||
'class' => "field CompositeField {$this->extraClass()}", | '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 | * 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. | * This is the action that gets executed when a GridField_AlterAction gets clicked. | ||
* | * | ||
* @param array $data | * @param array $data | ||
* @return string | * @return string | ||
*/ | */ | ||
public function gridFieldAlterAction($data, $form, SS_HTTPRequest $request) { | public function gridFieldAlterAction($data, $form, SS_HTTPRequest $request) { | ||
This comment has been minimized.
Sorry, something went wrong.
sminnee
Member
|
|||
$id = $data['StateID']; | $html = ''; | ||
$stateChange = Session::get($id); | $data = $request->requestVars(); | ||
This comment has been minimized.
Sorry, something went wrong.
sminnee
Member
|
|||
$gridName = $stateChange['grid']; | $fieldData = @$data[$this->Name()]; | ||
$grid = $form->Fields()->dataFieldByName($gridName); |
|
||
|
// Update state from client | ||
$state = $grid->getState(false); | $state = $this->getState(false); | ||
if(isset($data['GridState'])) $state->setValue($data['GridState']); | if(isset($fieldData['GridState'])) $state->setValue($fieldData['GridState']); | ||
|
|
||
$actionName = $stateChange['actionName']; | // Try to execute alter action | ||
$args = isset($stateChange['args']) ? $stateChange['args'] : array(); | foreach($data as $k => $v) { | ||
$html = $grid->handleAction($actionName, $args, $data); | if(preg_match('/^action_gridFieldAlterAction\?StateID=(.*)/', $k, $matches)) { | ||
|
$id = $matches[1]; | ||
if($html) { | $stateChange = Session::get($id); | ||
return $html; | $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')) { | switch($request->getHeader('X-Get-Fragment')) { | ||
case 'CurrentField': | case 'CurrentField': | ||
return $grid->FieldHolder(); | return $this->FieldHolder(); | ||
break; | break; | ||
|
|
||
case 'CurrentForm': | case 'CurrentForm': | ||
|
@@ -565,6 +578,9 @@ function handleRequest(SS_HTTPRequest $request, DataModel $model) { | ||
|
|
||
$this->request = $request; | $this->request = $request; | ||
$this->setModel($model); | $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) { | foreach($this->components as $component) { | ||
if(!($component instanceof GridField_URLHandler)) { | if(!($component instanceof GridField_URLHandler)) { | ||
|
Let's add a comment here explaining that data-url is required for no-js operation.