From 537e19d3d492387fa76fa1f5a6352acc66446bba Mon Sep 17 00:00:00 2001 From: Eric Lippmann Date: Tue, 28 Mar 2017 10:22:11 +0200 Subject: [PATCH] Merge pull request #2750 from Icinga/bugfix/click-on-host-in-service-grid-invalid-filter-2523 Servicegrid: assemble filters with the Filter class (cherry picked from commit 302e559aabeb94dac487129f4f5324448599d0c0) Signed-off-by: Eric Lippmann --- .../views/scripts/list/servicegrid.phtml | 24 +++++++++++++------ .../library/Icinga/Data/Filter/FilterTest.php | 14 +++++++++++ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/modules/monitoring/application/views/scripts/list/servicegrid.phtml b/modules/monitoring/application/views/scripts/list/servicegrid.phtml index 845cac745..0e50855b5 100644 --- a/modules/monitoring/application/views/scripts/list/servicegrid.phtml +++ b/modules/monitoring/application/views/scripts/list/servicegrid.phtml @@ -1,4 +1,5 @@ compact): ?>

translate('No services found matching the filter.') ?>

$_) { + $hostFilter->orFilter(Filter::where('host_name', $hostName)); +} ?> @@ -30,8 +34,10 @@ $hostFilter = '(host_name=' . implode('|host_name=', array_keys($pivotData)) . ' $serviceDisplayName): ?> diff --git a/test/php/library/Icinga/Data/Filter/FilterTest.php b/test/php/library/Icinga/Data/Filter/FilterTest.php index 0063dd1a1..b0e9d727c 100644 --- a/test/php/library/Icinga/Data/Filter/FilterTest.php +++ b/test/php/library/Icinga/Data/Filter/FilterTest.php @@ -261,6 +261,20 @@ class FilterTest extends BaseTestCase ); } + /** + * Test whether special characters inside values are URL-encoded, but the other ones aren't + */ + public function testSpecialCharacterEscaping() + { + $this->assertSame( + Filter::matchAll( + Filter::expression('host', '!=', 'localhost'), + Filter::matchAny(Filter::where('service', 'ping4'), Filter::where('specialchars', '(|&!=)')) + )->toQueryString(), + 'host!=localhost&(service=ping4|specialchars=%28%7C%26%21%3D%29)' + ); + } + private function row($idx) { return $this->sampleData[$idx];
qlink( $this->ellipsis($serviceDisplayName, 18), - 'monitoring/list/services?' . $hostFilter, - array('service_description' => $serviceDescription), + Url::fromPath('monitoring/list/services')->addFilter( + Filter::matchAll($hostFilter, Filter::where('service_description', $serviceDescription)) + ), + null, array('title' => sprintf( $this->translate('List all services with the name "%s" on all reported hosts'), $serviceDisplayName @@ -47,12 +53,16 @@ $hostFilter = '(host_name=' . implode('|host_name=', array_keys($pivotData)) . ' $hostDisplayName): ?>
$_) { + $serviceFilter->orFilter(Filter::where('service_description', $serviceName)); + } echo $this->qlink( $hostDisplayName, - 'monitoring/list/services?' . $serviceFilter, - array('host_name' => $hostName), + Url::fromPath('monitoring/list/services')->addFilter( + Filter::matchAll($serviceFilter, Filter::where('host_name', $hostName)) + ), + null, array('title' => sprintf($this->translate('List all reported services on host %s'), $hostDisplayName)) ); ?>