[WIP] Allow modules to register *framework* params

I'm not yet convinced about this solution. The name
*framework parameter* isn't always correct. (i.e. page)

Then there's also an alternative available by using the
`rel` attribute of anchors with a custom value. If it's
set our JS preserves (or doesn't) the `_dashlet` param.
It cannot do that for every url that's loaded into the
same container. (e.g. stat badges in the footer of lists)
This commit is contained in:
Johannes Meyer 2022-04-25 11:53:49 +02:00
parent fae7531879
commit efcd14ce0a
5 changed files with 64 additions and 5 deletions

View File

@ -207,6 +207,9 @@ class Module
*/ */
protected $routes = array(); protected $routes = array();
/** @var string[] Framework parameters of this module */
protected $frameworkParams = [];
/** /**
* A set of menu elements * A set of menu elements
* *
@ -283,6 +286,18 @@ class Module
$this->translationDomain = $name; $this->translationDomain = $name;
} }
/**
* Get this module's framework parameters
*
* @return string[]
*/
public function getFrameworkParams(): array
{
$this->launchConfigScript();
return $this->frameworkParams;
}
/** /**
* Provide a search URL * Provide a search URL
* *
@ -1461,4 +1476,18 @@ class Module
$this->routes[$name] = $route; $this->routes[$name] = $route;
return $this; return $this;
} }
/**
* Register URL parameters which should be ignored by various URL handlers
*
* @param string ...$params
*
* @return $this
*/
protected function addFrameworkParams(string ...$params): self
{
$this->frameworkParams = array_merge($this->frameworkParams, $params);
return $this;
}
} }

View File

@ -133,6 +133,33 @@ class Web extends EmbeddedWeb
return array_combine($themes, $themes); return array_combine($themes, $themes);
} }
/**
* Get default framework parameters and those of the current module
*
* @return string[]
*/
public function getFrameworkParams(): array
{
$defaultParams = [
'isIframe',
'showFullscreen',
'showCompact',
'renderLayout',
'_disableLayout',
'_dashlet',
'_dev',
// TODO: is this really a "framework" param? or should the all be called differently, widgetyUrlFlags perhaps?
'page'
];
$moduleParams = [];
if (($moduleName = $this->getRequest()->getModuleName()) !== 'default') {
$moduleParams = $this->getModuleManager()->getModule($moduleName)->getFrameworkParams();
}
return array_merge($defaultParams, $moduleParams);
}
/** /**
* Prepare routing * Prepare routing
* *

View File

@ -3,6 +3,7 @@
namespace Icinga\Web; namespace Icinga\Web;
use Icinga\Application\Icinga;
use Icinga\Data\Filterable; use Icinga\Data\Filterable;
use Icinga\Data\Sortable; use Icinga\Data\Sortable;
use Icinga\Data\QueryInterface; use Icinga\Data\QueryInterface;
@ -234,16 +235,17 @@ class Controller extends ModuleActionController
'limit', // setupPaginationControl() 'limit', // setupPaginationControl()
'sort', // setupSortControl() 'sort', // setupSortControl()
'dir', // setupSortControl() 'dir', // setupSortControl()
'backend', // Framework
'showCompact', // Framework
'_dev' // Framework
); );
$editor = Widget::create('filterEditor'); $editor = Widget::create('filterEditor');
/** @var \Icinga\Web\Widget\FilterEditor $editor */ /** @var \Icinga\Web\Widget\FilterEditor $editor */
call_user_func_array( call_user_func_array(
array($editor, 'preserveParams'), array($editor, 'preserveParams'),
array_merge($defaultPreservedParams, $preserveParams ?: array()) array_merge(
Icinga::app()->getFrameworkParams(),
$defaultPreservedParams,
$preserveParams ?: array()
)
); );
$editor $editor

View File

@ -729,7 +729,6 @@ class ListController extends Controller
protected function filterQuery(DataView $dataView) protected function filterQuery(DataView $dataView)
{ {
$this->setupFilterControl($dataView, null, null, array( $this->setupFilterControl($dataView, null, null, array(
'format', // handleFormatRequest()
'stateType', // hostsAction() and servicesAction() 'stateType', // hostsAction() and servicesAction()
'addColumns', // addColumns() 'addColumns', // addColumns()
'problems', // servicegridAction() 'problems', // servicegridAction()

View File

@ -120,6 +120,8 @@ $this->provideSearchUrl($this->translate('Services'), 'monitoring/list/services?
$this->provideSearchUrl($this->translate('Hostgroups'), 'monitoring/list/hostgroups?limit=10', 97); $this->provideSearchUrl($this->translate('Hostgroups'), 'monitoring/list/hostgroups?limit=10', 97);
$this->provideSearchUrl($this->translate('Servicegroups'), 'monitoring/list/servicegroups?limit=10', 96); $this->provideSearchUrl($this->translate('Servicegroups'), 'monitoring/list/servicegroups?limit=10', 96);
$this->addFrameworkParams('backend', 'format');
/* /*
* Available navigation items * Available navigation items
*/ */