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: '; + $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') ); } }