mirror of
https://github.com/symbiote/silverstripe-gridfieldextensions.git
synced 2024-10-22 17:05:39 +02:00
148 lines
2.9 KiB
PHP
148 lines
2.9 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* A base utility class for request handlers which present a grid field detail
|
||
|
* view.
|
||
|
*
|
||
|
* This class provides some useful defaults for grid field detail views, such
|
||
|
* as tabs, breadcrumbs and a back link. Much of this code is extracted from the
|
||
|
* detail form.
|
||
|
*/
|
||
|
abstract class GridFieldRequestHandler extends RequestHandler {
|
||
|
|
||
|
/**
|
||
|
* @var GridField
|
||
|
*/
|
||
|
protected $grid;
|
||
|
|
||
|
/**
|
||
|
* @var GridFieldComponent
|
||
|
*/
|
||
|
protected $component;
|
||
|
|
||
|
/**
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $name;
|
||
|
|
||
|
/**
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $template = __CLASS__;
|
||
|
|
||
|
public function __construct(GridField $grid, GridFieldComponent $component, $name) {
|
||
|
$this->grid = $grid;
|
||
|
$this->component = $component;
|
||
|
$this->name = $name;
|
||
|
|
||
|
parent::__construct();
|
||
|
}
|
||
|
|
||
|
public function index($request) {
|
||
|
$result = $this->renderWith($this->template);
|
||
|
|
||
|
if($request->isAjax()) {
|
||
|
return $result;
|
||
|
} else {
|
||
|
return $this->getTopLevelController()->customise(array(
|
||
|
'Content' => $result
|
||
|
));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function Link($action = null) {
|
||
|
return Controller::join_links($this->grid->Link(), $this->name, $action);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* This method should be overloaded to build out the detail form.
|
||
|
*
|
||
|
* @return Form
|
||
|
*/
|
||
|
public function Form() {
|
||
|
$form = new Form(
|
||
|
$this,
|
||
|
'Form',
|
||
|
new FieldList($root = new TabSet('Root', new Tab('Main'))),
|
||
|
new FieldList()
|
||
|
);
|
||
|
|
||
|
if($this->getTopLevelController() instanceof LeftAndMain) {
|
||
|
$form->setTemplate('LeftAndMain_EditForm');
|
||
|
$form->addExtraClass('cms-content cms-edit-form cms-tabset center');
|
||
|
$form->setAttribute('data-pjax-fragment', 'CurrentForm Content');
|
||
|
|
||
|
$root->setTemplate('CMSTabSet');
|
||
|
$form->Backlink = $this->getBackLink();
|
||
|
}
|
||
|
|
||
|
return $form;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return Controller
|
||
|
*/
|
||
|
public function getController() {
|
||
|
return $this->grid->getForm()->getController();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $template
|
||
|
*/
|
||
|
public function setTemplate($template) {
|
||
|
$this->template = $template;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getTemplate() {
|
||
|
return $this->template;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return ArrayList
|
||
|
*/
|
||
|
public function getBreadcrumbs() {
|
||
|
$controller = $this->getController();
|
||
|
|
||
|
if($controller->hasMethod('Breadcrumbs')) {
|
||
|
return $controller->Breadcrumbs();
|
||
|
} else {
|
||
|
return new ArrayList();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string
|
||
|
*/
|
||
|
protected function getBackLink() {
|
||
|
$controller = $this->getTopLevelController();
|
||
|
|
||
|
if($controller->hasMethod('Backlink')) {
|
||
|
return $controller->Backlink();
|
||
|
} else {
|
||
|
return $controller->Link();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return Controller
|
||
|
*/
|
||
|
protected function getTopLevelController() {
|
||
|
$controller = $this->getController();
|
||
|
|
||
|
while($controller) {
|
||
|
if($controller instanceof GridFieldRequestHandler) {
|
||
|
$controller = $controller->getController();
|
||
|
} elseif($controller instanceof GridFieldDetailForm_ItemRequest) {
|
||
|
$controller = $controller->getController();
|
||
|
} else {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $controller;
|
||
|
}
|
||
|
|
||
|
}
|