IcingaServiceTable: Update apply rule rendering

For new storage format, and change to table.

refs #12033
This commit is contained in:
Markus Frosch 2016-10-24 14:43:38 +02:00
parent 0d86c24cd8
commit b3eb5ea102
2 changed files with 51 additions and 40 deletions

View File

@ -2,6 +2,9 @@
namespace Icinga\Module\Director\Tables; 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; use Icinga\Module\Director\Web\Table\QuickTable;
class IcingaServiceTable extends QuickTable class IcingaServiceTable extends QuickTable
@ -13,9 +16,9 @@ class IcingaServiceTable extends QuickTable
public function getColumns() public function getColumns()
{ {
return array( return array(
'id' => 's.id', 'id' => 's.id',
'service' => 's.object_name', 'service' => 's.object_name',
'object_type' => 's.object_type', 'object_type' => 's.object_type',
'check_command_id' => 's.check_command_id', 'check_command_id' => 's.check_command_id',
); );
} }
@ -47,21 +50,34 @@ class IcingaServiceTable extends QuickTable
if (empty($extra)) { if (empty($extra)) {
if ($row->check_command_id) { if ($row->check_command_id) {
$htm .= ' ' . $v->qlink( $htm .= ' ' . $v->qlink(
'Create apply-rule', 'Create apply-rule',
'director/service/add', 'director/service/add',
array('apply' => $row->service), array('apply' => $row->service),
array('class' => 'icon-plus') array('class' => 'icon-plus')
); );
} }
} else { } else {
$htm .= '. Related apply rules: <ul class="apply-rules">'; $htm .= '. Related apply rules: <table class="apply-rules">';
foreach ($extra as $id => $service) { foreach ($extra as $service) {
$htm .= '<li>' $href = $v->url('director/service', array('id' => $service->id));
. $v->qlink($service, 'director/service', array('id' => $id)) $htm .= "<tr href=\"$href\">";
. '</li>';
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 .= "<td><a href=\"$href\">" . $service->object_name . '</a></td>';
$htm .= '<td>' . $prettyFilter . '</td>';
$htm .= '<tr>';
} }
$htm .= '</ul>'; $htm .= '</table>';
$htm .= $v->qlink( $htm .= $v->qlink(
'Add more', 'Add more',
'director/service/add', 'director/service/add',
@ -109,23 +125,18 @@ class IcingaServiceTable extends QuickTable
$query = $db->select()->from( $query = $db->select()->from(
array('s' => 'icinga_service'), array('s' => 'icinga_service'),
array( array(
'id' => 's.id', 'id' => 's.id',
'objectname' => $nameCol, 'object_name' => 's.object_name',
'assign_filter' => 's.assign_filter',
) )
)->join( )->join(
array('i' => 'icinga_service_inheritance'), array('i' => 'icinga_service_inheritance'),
'i.service_id = s.id', 'i.service_id = s.id',
array() array()
)->where('i.parent_service_id = ?', $id) )->where('i.parent_service_id = ?', $id)
->where('s.object_type = ?', 'apply'); ->where('s.object_type = ?', 'apply');
$query->joinLeft( return $db->fetchAll($query);
array('a' => 'icinga_service_assignment'),
'a.service_id = s.id',
array()
)->group('s.id');
return $db->fetchPairs($query);
} }
public function getBaseQuery() public function getBaseQuery()
@ -134,6 +145,6 @@ class IcingaServiceTable extends QuickTable
's.object_type IN (?)', 's.object_type IN (?)',
array('template') array('template')
)->order('CASE WHEN s.check_command_id IS NULL THEN 1 ELSE 0 END') )->order('CASE WHEN s.check_command_id IS NULL THEN 1 ELSE 0 END')
->order('s.object_name'); ->order('s.object_name');
} }
} }

View File

@ -887,25 +887,25 @@ table.icinga-objects {
} }
table.assignment-table { table.assignment-table {
ul.apply-rules { table.apply-rules {
margin: 1em 0 1em 0; margin: 1em 0 1em 0;
padding: 0; padding: 0;
border: 1px solid @gray-lighter; width: 100%;
li { tr {
display: block; border-bottom: 1px solid @gray-lighter;
border-left: 5px solid transparent;
a { td {
display: block; padding: 0.5em 1em;
float: none; }
font-weight: normal;
background-color: white; &:hover, &:active, &.active {
padding: 0.3em 1.5em; border-left: 5px solid @icinga-blue;
&:hover { }
background-color: @icinga-blue;
color: white; &:hover {
text-decoration: none; background: white;
}
} }
} }
} }