1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
<?php
namespace Icinga\Module\Map\Controllers;
use Icinga\Data\Filter\FilterException;
use Icinga\Web\Controller\ModuleActionController;
class IndexController extends ModuleActionController
{
public function indexAction()
{
$config = $this->Config();
$map = null;
$mapConfig = null;
// try to load stored map
if ($this->params->has("load")) {
$map = $this->params->get("load");
if (!preg_match("/^[\w]+$/", $map)) {
throw new FilterException("Invalid character in map name. Allow characters: a-zA-Z0-9_");
}
$mapConfig = $this->Config("maps");
if (!$mapConfig->hasSection($map)) {
throw new FilterException("Could not find stored map with name = " . $map);
}
}
$this->view->id = uniqid();
$this->view->host = $this->params->get("showHost");
$this->view->expand = $this->params->get("expand");
$this->view->fullscreen = ($this->params->get("showFullscreen") == 1);
$parameterDefaults = array(
"default_zoom" => "4",
"default_long" => '13.377485',
"default_lat" => '52.515855',
"min_zoom" => "2",
"max_zoom" => "19",
"max_native_zoom" => "19",
"disable_cluster_at_zoom" => null, // should be by default: max_zoom - 1
"cluster_problem_count" => 0,
"tile_url" => "//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
);
/*
* 1. url
* 2. stored map
* 3. user config
* 4. config
*/
$userPreferences = $this->Auth()->getUser()->getPreferences();
if ($userPreferences->has("map")) {
$config->getSection("map")->merge($userPreferences->get("map"));
}
foreach ($parameterDefaults as $parameter => $default) {
if ($this->params->has($parameter)) {
$this->view->$parameter = $this->params->get($parameter);
} elseif (isset($map) && $mapConfig->getSection($map)->offsetExists($parameter)) {
$this->view->$parameter = $mapConfig->get($map, $parameter);
} else {
$this->view->$parameter = $config->get("map", $parameter, $default);
}
}
if (!$this->view->disable_cluster_at_zoom) {
$this->view->disable_cluster_at_zoom = $this->view->max_zoom - 1;
}
$pattern = "/^([_]{0,1}(host|service))|\(|(object|state)Type/";
$urlParameters = $this->filterArray($this->getAllParams(), $pattern);
if (isset($map)) {
$mapParameters = $this->filterArray($mapConfig->getSection($map)->toArray(), $pattern);
$urlParameters = array_merge($mapParameters, $urlParameters);
}
array_walk($urlParameters, function (&$a, $b) {
$a = $b . "=" . $a;
});
$this->view->url_parameters = join('&', $urlParameters);
$this->view->dashletHeight = $config->get('map', 'dashlet_height', '300');
}
function filterArray($array, $pattern)
{
$matches = preg_grep($pattern, array_keys($array));
return array_intersect_key($array, array_flip($matches));
}
}
|