Merge branch 'feature/dope-layout-5543' of git.icinga.org:icingaweb2 into feature/dope-layout-5543

This commit is contained in:
Bernd Erk 2015-09-29 12:52:15 +02:00
commit 44b9d44641
11 changed files with 160 additions and 99 deletions

View File

@ -55,13 +55,13 @@ class ConfigController extends Controller
$tabs = $this->getTabs();
$tabs->add('userbackend', array(
'title' => $this->translate('Configure how users authenticate with and log into Icinga Web 2'),
'label' => $this->translate('User Backends'),
'label' => $this->translate('Authentication'),
'url' => 'config/userbackend',
'baseTarget' => '_main'
));
$tabs->add('usergroupbackend', array(
'title' => $this->translate('Configure how users are associated with groups by Icinga Web 2'),
'label' => $this->translate('User Group Backends'),
'label' => $this->translate('User Groups'),
'url' => 'usergroupbackend/list',
'baseTarget' => '_main'
));
@ -95,6 +95,7 @@ class ConfigController extends Controller
$this->view->form = $form;
$this->createApplicationTabs()->activate('general');
$this->createAuthenticationTabs();
}
/**
@ -199,6 +200,7 @@ class ConfigController extends Controller
$form->handleRequest();
$this->view->form = $form;
$this->createApplicationTabs();
$this->createAuthenticationTabs()->activate('userbackend');
$this->render('userbackend/reorder');
}
@ -337,6 +339,7 @@ class ConfigController extends Controller
$this->assertPermission('config/application/resources');
$this->view->resources = Config::app('resources', true);
$this->createApplicationTabs()->activate('resource');
$this->createAuthenticationTabs();
}
/**

View File

@ -154,14 +154,26 @@ class UsergroupbackendController extends Controller
protected function createListTabs()
{
$tabs = $this->getTabs();
$tabs->add('general', array(
'title' => $this->translate('Adjust the general configuration of Icinga Web 2'),
'label' => $this->translate('General'),
'url' => 'config/general',
'baseTarget' => '_main'
));
$tabs->add('resource', array(
'title' => $this->translate('Configure which resources are being utilized by Icinga Web 2'),
'label' => $this->translate('Resources'),
'url' => 'config/resource',
'baseTarget' => '_main'
));
$tabs->add('userbackend', array(
'title' => $this->translate('Configure how users authenticate with and log into Icinga Web 2'),
'label' => $this->translate('User Backends'),
'label' => $this->translate('Authentication'),
'url' => 'config/userbackend'
));
$tabs->add('usergroupbackend', array(
'title' => $this->translate('Configure how users are associated with groups by Icinga Web 2'),
'label' => $this->translate('User Group Backends'),
'label' => $this->translate('User Groups'),
'url' => 'usergroupbackend/list'
));
return $tabs;

View File

@ -388,7 +388,9 @@ class ListController extends Controller
'contacts' => array()
);
}
$groupData[$c->contactgroup_name]['contacts'][] = $c;
if (isset ($c->contact_name)) {
$groupData[$c->contactgroup_name]['contacts'][] = $c;
}
}
// TODO: Find a better naming

View File

@ -1,4 +1,6 @@
<?php if (! $this->compact): ?>
<?php
if (! $this->compact): ?>
<div class="controls">
<?= $this->tabs; ?>
<?= $this->sortBox; ?>
@ -9,47 +11,44 @@
<?php endif ?>
<div class="content">
<?php
if (count($groupData) === 0) {
echo $this->translate('No contactgroups found matching the filter') . '</div>';
return;
}
?>
<div class="boxview" data-base-target="_next">
<?php foreach ($groupData as $groupName => $groupInfo): ?>
<div class="box contactgroup">
<div class="box header">
<h2><?= $groupInfo['alias']; ?></h2>
<?php if ($groupInfo['alias'] !== $groupName): ?>
<h2><?= $groupName; ?></h2>
<?php endif ?>
</div>
<div class="box contents">
<?php foreach ($groupInfo['contacts'] as $c): ?>
<div class="box entry">
<?= $this->img('static/gravatar', array('email' => $c->contact_email)); ?>
<?= $this->qlink(
$c->contact_alias,
'monitoring/show/contact',
array('contact_name' => $c->contact_name),
array('title' => sprintf(
$this->translate('Show detailed information about %s'),
$c->contact_alias
))
); ?>
<p>
<?php if ($c->contact_email): ?>
<?= $c->contact_email; ?>
<?php endif;
if ($c->contact_pager): ?>
<br>
<?= $c->contact_pager; ?>
<?php endif ?>
</p>
</div>
<?php endforeach ?>
</div>
</div>
<?php endforeach ?>
</div>
<table class="action action-table listing-table" data-base-target="_next">
<thead>
<tr>
<th></th>
<th><?= $this->translate('Hostgroup') ?></th>
<th><?= $this->translate('Alias') ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($groupData as $groupName => $groupInfo): ?>
<tr>
<td class="count-col">
<span class="badge"><?= count($groupInfo['contacts']) ?></span>
</td>
<td>
<?= $this->qlink(
$groupName,
'monitoring/list/contacts',
array('contactgroup' => $groupName),
array('title' => sprintf(
$this->translate('Show detailed information about %s'),
$groupName
))
) ?>
</td>
<td>
<?php if ($groupInfo['alias'] !== $groupName): ?>
<?= $groupInfo['alias'] ?>
<?php endif ?>
</td>
</tr>
<?php endforeach ?>
</tbody>
</table>
</div>

View File

@ -7,54 +7,61 @@
<?= $this->filterEditor; ?>
</div>
<?php endif ?>
<div data-base-target="_next" class="content contacts">
<?php foreach ($contacts->peekAhead($this->compact) as $contact): ?>
<div class="contact">
<?= $this->img('static/gravatar', array('email' => $contact->contact_email)); ?>
<strong><?= $this->qlink(
$contact->contact_name,
'monitoring/show/contact',
array('contact_name' => $contact->contact_name),
array('title' => sprintf(
$this->translate('Show detailed information about %s'),
$contact->contact_alias
))
); ?></strong> (<?= $contact->contact_alias; ?>)
<div>
<?= $this->translate('Email'); ?>: <a href="mailto:<?= $contact->contact_email; ?>" title="<?= sprintf($this->translate('Send a mail to %s'), $contact->contact_alias); ?>" aria-label="<?= sprintf($this->translate('Send a mail to %s'), $contact->contact_alias); ?>">
<div class="content">
<?php if ($contacts->hasResult()): ?>
<table class="action action-table listing-table" data-base-target="_next">
<thead>
<tr>
<th><?= $this->translate('Name') ?></th>
<th><?= $this->translate('Email') ?></th>
<th><?= $this->translate('Pager') ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($contacts->peekAhead($this->compact) as $contact): ?>
<tr>
<td>
<?= $this->qlink(
$contact->contact_name,
'monitoring/show/contact',
array('contact_name' => $contact->contact_name),
array('title' => sprintf(
$this->translate('Show detailed information about %s'),
$contact->contact_alias
), 'class' => 'rowaction')
); ?>
</td>
<td>
<?= $this->translate('Email') ?>:
<a href="mailto:<?= $contact->contact_email; ?>"
title="<?= sprintf($this->translate('Send a mail to %s'), $contact->contact_alias); ?>"
aria-label="<?= sprintf($this->translate('Send a mail to %s'), $contact->contact_alias); ?>">
<?= $this->escape($contact->contact_email); ?>
</a>
</div>
<?php if ($contact->contact_pager): ?>
<div>
<?= $this->translate('Pager') ?>:
<?= $this->escape($contact->contact_pager) ?>
</div>
<?php endif; ?>
<div style="clear: both;"></div>
<div class="notification-periods">
</td>
<td>
<?php if ($contact->contact_pager): ?>
<?= $this->escape($contact->contact_pager) ?>
<?php endif; ?>
</td>
<?php if ($contact->contact_notify_service_timeperiod): ?>
<div>
<?= $this->translate('Service notification period') ?>:
<td>
<?= $this->escape($contact->contact_notify_service_timeperiod) ?>
</div>
</td>
<?php endif; ?>
<?php if ($contact->contact_notify_host_timeperiod): ?>
<div>
<?= $this->translate('Host notification period') ?>:
<td>
<?= $this->escape($contact->contact_notify_host_timeperiod) ?>
</div>
</td>
<?php endif; ?>
</div>
</div>
<?php
endforeach;
if (true): /* The following piece of HTML MUST be nested in <?php */ ?>
<div style="clear: both;"></div>
<?php endif; ?>
<?php if (! $contacts->hasResult()): ?>
<?= $this->translate('No contacts found matching the filter'); ?>
<?php elseif ($contacts->hasMore()): ?>
</tr>
<?php endforeach ?>
</tbody>
</table>
<?php if ($contacts->hasMore()): ?>
<?= $this->qlink(
$this->translate('Show More'),
$this->url()->without(array('view', 'limit')),
@ -65,4 +72,7 @@
)
); ?>
<?php endif ?>
</div>
<?php else: ?>
<?= $this->translate('No contacts found matching the filter'); ?>
<?php endif ?>
</div>

View File

@ -14,7 +14,7 @@ if (! $this->compact): ?>
<p><?= $this->translate('No service groups found matching the filter.') ?></p>
</div>
<?php return; endif ?>
<table class="action-tabline listing-table" data-base-target="_next">
<table class="action-table listing-table" data-base-target="_next">
<thead>
<th></th>
<th><?= $this->translate('Service Group') ?></th>

View File

@ -20,6 +20,11 @@ class ContactQuery extends IdoQuery
'instances' => array(
'instance_name' => 'i.instance_name'
),
'contactgroups' => array(
'contactgroup' => 'cgo.name1 COLLATE latin1_general_ci',
'contactgroup_name' => 'cgo.name1',
'contactgroup_alias' => 'cg.alias COLLATE latin1_general_ci'
),
'contacts' => array(
'contact_id' => 'c.contact_id',
'contact' => 'co.name1 COLLATE latin1_general_ci',
@ -186,6 +191,26 @@ class ContactQuery extends IdoQuery
);
}
/**
* Join contacts
*/
protected function joinContactgroups()
{
$this->select->joinLeft(
array('cgm' => $this->prefix . 'contactgroup_members'),
'co.object_id = cgm.contact_object_id',
array()
)->joinLeft(
array('cg' => $this->prefix . 'contactgroups'),
'cgm.contactgroup_id = cg.contactgroup_id',
array()
)->joinLeft(
array('cgo' => $this->prefix . 'objects'),
'cg.contactgroup_object_id = cgo.object_id AND cgo.is_active = 1 AND cgo.objecttype_id = 11',
array()
);
}
/**
* Join instances
*/

View File

@ -33,7 +33,10 @@ class Contact extends DataView
'contact_notify_host_flapping',
'contact_notify_host_downtime',
'contact_notify_host_timeperiod',
'contact_notify_service_timeperiod'
'contact_notify_service_timeperiod',
'contactgroup',
'contactgroup_name',
'contactgroup_alias'
);
}

View File

@ -25,6 +25,15 @@ a {
}
}
blockquote {
border-left: 6px solid @gray-light;
color: @text-color-light;
// Reset default margin
margin: 0;
font-family: @font-family-fixed;
padding: @vertical-padding @horizontal-padding;
}
body {
background-color: @body-bg-color;
color: @text-color;
@ -35,14 +44,14 @@ body {
h1 {
font-size: 18px;
line-height: 22px;
font-weight: normal;
line-height: 22px;
}
h2 {
font-size: 16px;
line-height: 19px;
font-weight: normal;
line-height: 19px;
}
p {

View File

@ -1,7 +1,7 @@
/*! Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */
.bg-color-default() {
background-color: @body-bg-color;
background-color: inherit;
}
.bg-color-ok,
@ -89,7 +89,7 @@
}
.fg-color-default {
color: @text-color;
color: inherit;
}
.fg-color-inverted() {

View File

@ -14,10 +14,12 @@ input {
input.search {
padding-left: 20px;
background-image: url('../img/icons/search.png');
background: url('../img/icons/search.png') no-repeat 0;
background-size: 12px 12px;
background-repeat: no-repeat;
background-position: 0em;
}
input, select, textarea {
width: 320px;
}
form {
@ -37,17 +39,13 @@ form {
display: inline-block;
padding-right: @horizontal-padding;
text-align: right;
width: 240px;
width: 160px;
}
.control-group {
padding: @vertical-padding @horizontal-padding;
}
select {
display: table-cell;
}
button.link,
input[type="submit"].link {
// Reset defaults