mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-09-29 20:59:23 +02:00
Updating StateStore interface not to define a constructor & fixing GridFieldFilterHeader to add required attributes
This commit is contained in:
parent
b4c8f699eb
commit
ddaa22986f
34
src/Forms/GridField/FormAction/AbstractRequestAwareStore.php
Normal file
34
src/Forms/GridField/FormAction/AbstractRequestAwareStore.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
namespace SilverStripe\Forms\GridField\FormAction;
|
||||||
|
|
||||||
|
use SilverStripe\Control\HTTPRequest;
|
||||||
|
|
||||||
|
abstract class AbstractRequestAwareStore
|
||||||
|
{
|
||||||
|
private static $dependencies = [
|
||||||
|
'request' => '%$' . HTTPRequest::class,
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var HTTPRequest
|
||||||
|
*/
|
||||||
|
protected $request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return HTTPRequest
|
||||||
|
*/
|
||||||
|
public function getRequest()
|
||||||
|
{
|
||||||
|
return $this->request;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param HTTPRequest $request
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setRequest($request)
|
||||||
|
{
|
||||||
|
$this->request = $request;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
@ -6,21 +6,8 @@ use SilverStripe\Control\HTTPRequest;
|
|||||||
/**
|
/**
|
||||||
* Stores GridField action state on an attribute on the action and then analyses request parameters to load it back
|
* Stores GridField action state on an attribute on the action and then analyses request parameters to load it back
|
||||||
*/
|
*/
|
||||||
class AttributeStore implements StateStore
|
class AttributeStore extends AbstractRequestAwareStore implements StateStore
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @var HTTPRequest
|
|
||||||
*/
|
|
||||||
protected $request;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param HTTPRequest $request
|
|
||||||
*/
|
|
||||||
public function __construct(HTTPRequest $request)
|
|
||||||
{
|
|
||||||
$this->request = $request;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the given state against the given ID returning an associative array to be added as attributes on the form
|
* Save the given state against the given ID returning an associative array to be added as attributes on the form
|
||||||
* action
|
* action
|
||||||
@ -41,11 +28,11 @@ class AttributeStore implements StateStore
|
|||||||
* Load state for a given ID
|
* Load state for a given ID
|
||||||
*
|
*
|
||||||
* @param string $id
|
* @param string $id
|
||||||
* @return mixed
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function load($id)
|
public function load($id)
|
||||||
{
|
{
|
||||||
// Check the request
|
// Check the request
|
||||||
return json_decode($this->request->requestVar('ActionState'), true);
|
return (array) json_decode((string) $this->getRequest()->requestVar('ActionState'), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,21 +6,8 @@ use SilverStripe\Control\HTTPRequest;
|
|||||||
/**
|
/**
|
||||||
* Stores GridField action state in the session in exactly the same way it has in the past
|
* Stores GridField action state in the session in exactly the same way it has in the past
|
||||||
*/
|
*/
|
||||||
class SessionStore implements StateStore
|
class SessionStore extends AbstractRequestAwareStore implements StateStore
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @var HTTPRequest
|
|
||||||
*/
|
|
||||||
protected $request;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param HTTPRequest $request
|
|
||||||
*/
|
|
||||||
public function __construct(HTTPRequest $request)
|
|
||||||
{
|
|
||||||
$this->request = $request;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the given state against the given ID returning an associative array to be added as attributes on the form
|
* Save the given state against the given ID returning an associative array to be added as attributes on the form
|
||||||
* action
|
* action
|
||||||
@ -31,7 +18,7 @@ class SessionStore implements StateStore
|
|||||||
*/
|
*/
|
||||||
public function save($id, array $state)
|
public function save($id, array $state)
|
||||||
{
|
{
|
||||||
$this->request->getSession()->set($id, $state);
|
$this->getRequest()->getSession()->set($id, $state);
|
||||||
|
|
||||||
// This adapter does not require any additional attributes...
|
// This adapter does not require any additional attributes...
|
||||||
return [];
|
return [];
|
||||||
@ -41,10 +28,10 @@ class SessionStore implements StateStore
|
|||||||
* Load state for a given ID
|
* Load state for a given ID
|
||||||
*
|
*
|
||||||
* @param string $id
|
* @param string $id
|
||||||
* @return mixed
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function load($id)
|
public function load($id)
|
||||||
{
|
{
|
||||||
return $this->request->getSession()->get($id);
|
return (array) $this->getRequest()->getSession()->get($id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace SilverStripe\Forms\GridField\FormAction;
|
namespace SilverStripe\Forms\GridField\FormAction;
|
||||||
|
|
||||||
use SilverStripe\Control\HTTPRequest;
|
|
||||||
|
|
||||||
interface StateStore
|
interface StateStore
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @param HTTPRequest $request
|
|
||||||
*/
|
|
||||||
public function __construct(HTTPRequest $request);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the given state against the given ID returning an associative array to be added as attributes on the form
|
* Save the given state against the given ID returning an associative array to be added as attributes on the form
|
||||||
* action
|
* action
|
||||||
@ -24,7 +17,7 @@ interface StateStore
|
|||||||
* Load state for a given ID
|
* Load state for a given ID
|
||||||
*
|
*
|
||||||
* @param string $id
|
* @param string $id
|
||||||
* @return mixed
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function load($id);
|
public function load($id);
|
||||||
}
|
}
|
||||||
|
@ -1014,7 +1014,7 @@ class GridField extends FormField
|
|||||||
|
|
||||||
// Fetch the store for the "state" of actions (not the GridField)
|
// Fetch the store for the "state" of actions (not the GridField)
|
||||||
/** @var StateStore $store */
|
/** @var StateStore $store */
|
||||||
$store = Injector::inst()->create(StateStore::class . '.' . $this->getName(), $request);
|
$store = Injector::inst()->create(StateStore::class . '.' . $this->getName());
|
||||||
|
|
||||||
foreach ($data as $dataKey => $dataValue) {
|
foreach ($data as $dataKey => $dataValue) {
|
||||||
if (preg_match('/^action_gridFieldAlterAction\?StateID=(.*)/', $dataKey, $matches)) {
|
if (preg_match('/^action_gridFieldAlterAction\?StateID=(.*)/', $dataKey, $matches)) {
|
||||||
|
@ -289,14 +289,18 @@ class GridFieldFilterHeader implements GridField_URLHandler, GridField_HTMLProvi
|
|||||||
}, array_keys($filters)), $filters);
|
}, array_keys($filters)), $filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$searchAction = GridField_FormAction::create($gridField, 'filter', false, 'filter', null);
|
||||||
|
$clearAction = GridField_FormAction::create($gridField, 'reset', false, 'reset', null);
|
||||||
$schema = [
|
$schema = [
|
||||||
'formSchemaUrl' => $schemaUrl,
|
'formSchemaUrl' => $schemaUrl,
|
||||||
'name' => $searchField,
|
'name' => $searchField,
|
||||||
'placeholder' => _t(__CLASS__ . '.Search', 'Search "{name}"', ['name' => $name]),
|
'placeholder' => _t(__CLASS__ . '.Search', 'Search "{name}"', ['name' => $name]),
|
||||||
'filters' => $filters ?: new \stdClass, // stdClass maps to empty json object '{}'
|
'filters' => $filters ?: new \stdClass, // stdClass maps to empty json object '{}'
|
||||||
'gridfield' => $gridField->getName(),
|
'gridfield' => $gridField->getName(),
|
||||||
'searchAction' => GridField_FormAction::create($gridField, 'filter', false, 'filter', null)->getAttribute('name'),
|
'searchAction' => $searchAction->getAttribute('name'),
|
||||||
'clearAction' => GridField_FormAction::create($gridField, 'reset', false, 'reset', null)->getAttribute('name')
|
'searchActionState' => $searchAction->getAttribute('data-action-state'),
|
||||||
|
'clearAction' => $clearAction->getAttribute('name'),
|
||||||
|
'clearActionState' => $clearAction->getAttribute('data-action-state'),
|
||||||
];
|
];
|
||||||
|
|
||||||
return Convert::raw2json($schema);
|
return Convert::raw2json($schema);
|
||||||
|
@ -108,11 +108,7 @@ class GridField_FormAction extends FormAction
|
|||||||
|
|
||||||
// Create a "store" for the "state" of this action
|
// Create a "store" for the "state" of this action
|
||||||
/** @var StateStore $store */
|
/** @var StateStore $store */
|
||||||
$store = Injector::inst()->create(
|
$store = Injector::inst()->create(StateStore::class . '.' . $this->gridField->getName());
|
||||||
StateStore::class . '.' . $this->gridField->getName(),
|
|
||||||
// For some reason `getRequest` on GridField_FormAction does not return the correct request
|
|
||||||
Controller::curr()->getRequest()
|
|
||||||
);
|
|
||||||
// Store the state and update attributes as required
|
// Store the state and update attributes as required
|
||||||
$attributes += $store->save($key, $state);
|
$attributes += $store->save($key, $state);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user