diff --git a/application/tables/IcingaServiceTable.php b/application/tables/IcingaServiceTable.php
index ce002939..f7b08269 100644
--- a/application/tables/IcingaServiceTable.php
+++ b/application/tables/IcingaServiceTable.php
@@ -2,10 +2,9 @@
namespace Icinga\Module\Director\Tables;
-use Icinga\Module\Director\Web\Table\IcingaObjectTable;
+use Icinga\Module\Director\Web\Table\QuickTable;
-// TODO: quickform once apply has been moved elsewhere
-class IcingaServiceTable extends IcingaObjectTable
+class IcingaServiceTable extends QuickTable
{
protected $searchColumns = array(
'service',
@@ -14,12 +13,18 @@ class IcingaServiceTable extends IcingaObjectTable
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',
);
}
+ protected function listTableClasses()
+ {
+ return array_merge(array('assignment-table'), parent::listTableClasses());
+ }
+
protected function getActionUrl($row)
{
// TODO: Remove once we got a separate apply table
@@ -33,6 +38,41 @@ class IcingaServiceTable extends IcingaObjectTable
return $this->url('director/service', $params);
}
+ protected function renderRow($row)
+ {
+ $v = $this->view();
+ $extra = $this->appliedOnes($row->id);
+ $htm = "
getRowClassesString($row) . ">\n";
+ $htm .= '' . $v->qlink($row->service, $this->getActionUrl($row));
+ if (empty($extra)) {
+ if ($row->check_command_id) {
+ $htm .= ' ' . $v->qlink(
+ 'Create apply-rule',
+ 'director/service/apply',
+ array('template' => $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 .= ' ';
+ $htm .= $v->qlink(
+ 'Add more',
+ 'director/service/apply',
+ array('template' => $row->service),
+ array('class' => 'icon-plus')
+ );
+ }
+ $htm .= ' | ';
+ return $htm . "
\n";
+ }
+
public function getTitles()
{
$view = $this->view();
@@ -52,12 +92,29 @@ class IcingaServiceTable extends IcingaObjectTable
return $query;
}
+ protected function appliedOnes($id)
+ {
+ $db = $this->connection()->getConnection();
+ $query = $db->select()->from(
+ array('s' => 'icinga_service'),
+ array(
+ 'id' => 's.id',
+ 'objectname' => 's.object_name',
+ )
+ )->join(
+ array('i' => 'icinga_service_inheritance'),
+ 'i.service_id = s.id',
+ array()
+ )->where('i.parent_service_id = ?', $id)->where('s.object_type = ?', 'apply');
+
+ return $db->fetchPairs($query);
+ }
+
public function getBaseQuery()
{
- // TODO: remove apply
return $this->getUnfilteredQuery()->where(
's.object_type IN (?)',
- array('template', 'apply')
+ array('template')
);
}
}