diff --git a/application/tables/IcingaServiceTable.php b/application/tables/IcingaServiceTable.php
index 00736eab..30a8b4bd 100644
--- a/application/tables/IcingaServiceTable.php
+++ b/application/tables/IcingaServiceTable.php
@@ -2,6 +2,9 @@
namespace Icinga\Module\Director\Tables;
+use Icinga\Data\Filter\Filter;
+use Icinga\Exception\IcingaException;
+use Icinga\Module\Director\IcingaConfig\AssignRenderer;
use Icinga\Module\Director\Web\Table\QuickTable;
class IcingaServiceTable extends QuickTable
@@ -13,9 +16,9 @@ class IcingaServiceTable extends QuickTable
public function getColumns()
{
return array(
- 'id' => 's.id',
- 'service' => 's.object_name',
- 'object_type' => 's.object_type',
+ 'id' => 's.id',
+ 'service' => 's.object_name',
+ 'object_type' => 's.object_type',
'check_command_id' => 's.check_command_id',
);
}
@@ -47,21 +50,34 @@ class IcingaServiceTable extends QuickTable
if (empty($extra)) {
if ($row->check_command_id) {
$htm .= ' ' . $v->qlink(
- 'Create apply-rule',
- 'director/service/add',
- array('apply' => $row->service),
- array('class' => 'icon-plus')
- );
+ 'Create apply-rule',
+ 'director/service/add',
+ array('apply' => $row->service),
+ array('class' => 'icon-plus')
+ );
}
} else {
- $htm .= '. Related apply rules:
';
- foreach ($extra as $id => $service) {
- $htm .= '- '
- . $v->qlink($service, 'director/service', array('id' => $id))
- . '
';
+ $htm .= '. Related apply rules: ';
+ foreach ($extra as $service) {
+ $href = $v->url('director/service', array('id' => $service->id));
+ $htm .= "";
+
+ try {
+ $prettyFilter = AssignRenderer::forFilter(
+ Filter::fromQueryString($service->assign_filter)
+ )->renderAssign();
+ }
+ catch (IcingaException $e) {
+ // ignore errors in filter rendering
+ $prettyFilter = 'Error in Filter rendering: ' . $e->getMessage();
+ }
+
+ $htm .= "" . $service->object_name . ' | ';
+ $htm .= '' . $prettyFilter . ' | ';
+ $htm .= '
';
}
- $htm .= '';
+ $htm .= '
';
$htm .= $v->qlink(
'Add more',
'director/service/add',
@@ -109,23 +125,18 @@ class IcingaServiceTable extends QuickTable
$query = $db->select()->from(
array('s' => 'icinga_service'),
array(
- 'id' => 's.id',
- 'objectname' => $nameCol,
+ 'id' => 's.id',
+ 'object_name' => 's.object_name',
+ 'assign_filter' => 's.assign_filter',
)
)->join(
array('i' => 'icinga_service_inheritance'),
'i.service_id = s.id',
array()
)->where('i.parent_service_id = ?', $id)
- ->where('s.object_type = ?', 'apply');
+ ->where('s.object_type = ?', 'apply');
- $query->joinLeft(
- array('a' => 'icinga_service_assignment'),
- 'a.service_id = s.id',
- array()
- )->group('s.id');
-
- return $db->fetchPairs($query);
+ return $db->fetchAll($query);
}
public function getBaseQuery()
@@ -134,6 +145,6 @@ class IcingaServiceTable extends QuickTable
's.object_type IN (?)',
array('template')
)->order('CASE WHEN s.check_command_id IS NULL THEN 1 ELSE 0 END')
- ->order('s.object_name');
+ ->order('s.object_name');
}
}
diff --git a/public/css/module.less b/public/css/module.less
index c53b268d..eb132dc8 100644
--- a/public/css/module.less
+++ b/public/css/module.less
@@ -887,25 +887,25 @@ table.icinga-objects {
}
table.assignment-table {
- ul.apply-rules {
+ table.apply-rules {
margin: 1em 0 1em 0;
padding: 0;
- border: 1px solid @gray-lighter;
+ width: 100%;
- li {
- display: block;
+ tr {
+ border-bottom: 1px solid @gray-lighter;
+ border-left: 5px solid transparent;
- a {
- display: block;
- float: none;
- font-weight: normal;
- background-color: white;
- padding: 0.3em 1.5em;
- &:hover {
- background-color: @icinga-blue;
- color: white;
- text-decoration: none;
- }
+ td {
+ padding: 0.5em 1em;
+ }
+
+ &:hover, &:active, &.active {
+ border-left: 5px solid @icinga-blue;
+ }
+
+ &:hover {
+ background: white;
}
}
}