Merge branch 'master' into feature/custom-notification-command-8644

This commit is contained in:
Marius Hein 2015-03-12 16:45:57 +01:00
commit cb28f00c4d
75 changed files with 273 additions and 389 deletions

View File

@ -23,7 +23,7 @@ class ConfigController extends ActionController
/**
* The first allowed config action according to the user's permissions
*
* @type string
* @var string
*/
protected $firstAllowedAction;
@ -72,7 +72,6 @@ class ConfigController extends ActionController
$allowedActions[] = 'roles';
}
$this->firstAllowedAction = array_shift($allowedActions);
$this->getTabs()->setTitle($this->translate('Config Navigation'));
}
public function devtoolsAction()

View File

@ -51,7 +51,6 @@ class RolesController extends ActionController
'label' => $this->translate('Roles'),
'url' => 'roles'
));
$this->getTabs()->setTitle($this->translate('Role Configuration'));
}
/**

View File

@ -7,6 +7,7 @@ use Exception;
use Icinga\Web\Form;
use Icinga\Data\ConfigObject;
use Icinga\Data\ResourceFactory;
use Icinga\Protocol\Ldap\Connection;
/**
* Form class for adding/modifying ldap resources
@ -57,6 +58,40 @@ class LdapResourceForm extends Form
'value' => 389
)
);
$this->addElement(
'select',
'connection',
array(
'required' => true,
'autosubmit' => true,
'label' => $this->translate('Connection'),
'description' => $this->translate(
'The type of connection to use. Unencrypted (Plaintext) or encrypted (SSL, TLS).'
),
'multiOptions' => array(
'plaintext' => $this->translate('Plaintext'),
Connection::SSL => 'Secure Sockets Layer (SSL)',
Connection::STARTTLS => 'Transport Layer Security (TLS)'
)
)
);
if (isset($formData['connection']) && $formData['connection'] !== 'plaintext') {
// TODO(jom): Do not show this checkbox unless the connection is actually failing due to certificate errors
$this->addElement(
'checkbox',
'reqcert',
array(
'required' => true,
'label' => $this->translate('Require Certificate'),
'description' => $this->translate(
'When checked, the LDAP server must provide a valid and known (trusted) certificate.'
),
'value' => 1
)
);
}
$this->addElement(
'text',
'root_dn',
@ -119,12 +154,15 @@ class LdapResourceForm extends Form
$form->getElement('bind_pw')->getValue()
)
) {
throw new Exception();
throw new Exception(); // TODO: Get the exact error message
}
} catch (Exception $e) {
$form->addError(
$form->translate('Connectivity validation failed, connection to the given resource not possible.')
);
$msg = $form->translate('Connectivity validation failed, connection to the given resource not possible.');
if (($error = $e->getMessage())) {
$msg .= ' (' . $error . ')';
}
$form->addError($msg);
return false;
}

View File

@ -18,7 +18,7 @@ class RoleForm extends ConfigForm
/**
* Provided permissions by currently loaded modules
*
* @type array
* @var array
*/
protected $providedPermissions = array(
'*' => '*',
@ -33,7 +33,7 @@ class RoleForm extends ConfigForm
/**
* Provided restrictions by currently loaded modules
*
* @type array
* @var array
*/
protected $providedRestrictions = array();
@ -46,11 +46,11 @@ class RoleForm extends ConfigForm
$helper = new Zend_Form_Element('bogus');
foreach (Icinga::app()->getModuleManager()->getLoadedModules() as $module) {
foreach ($module->getProvidedPermissions() as $permission) {
/** @type object $permission */
/** @var object $permission */
$this->providedPermissions[$permission->name] = $permission->name . ': ' . $permission->description;
}
foreach ($module->getProvidedRestrictions() as $restriction) {
/** @type object $restriction */
/** @var object $restriction */
$name = $helper->filterName($restriction->name); // Zend only permits alphanumerics, the underscore,
// the circumflex and any ASCII character in range
// \x7f to \xff (127 to 255)

View File

@ -2,20 +2,9 @@
<?= $tabs; ?>
</div>
<div class="content" data-base-target="_next">
<h1 tabindex="-1" id="authentication-configuration">
<?= $this->translate('Authentication Configuration'); ?>
</h1>
<h2 tabindex="-1" id="authentication-new-backend" class="sr-only">
<?= t('New Authentication Backend'); ?>
</h2>
<p>
<a href="<?= $this->href('/config/createAuthenticationBackend'); ?>">
<?= $this->icon('plus'); ?><?= $this->translate('Create A New Authentication Backend'); ?>
</a>
</p>
<h2 tabindex="-1" id="authentication-reorder" class="sr-only">
<?= t('Reorder Authentication Backends'); ?>
</h2>
<a href="<?= $this->href('/config/createAuthenticationBackend'); ?>">
<?= $this->icon('plus'); ?><?= $this->translate('Create A New Authentication Backend'); ?>
</a>
<div id="authentication-reorder-form">
<?= $form; ?>
</div>

View File

@ -11,9 +11,6 @@
$permissions = $module->getProvidedPermissions();
$state = $moduleData->enabled ? ($moduleData->loaded ? 'enabled' : 'failed') : 'disabled'
?>
<h1 tabindex="-1">
<?= $this->escape($module->getTitle()) ?>
</h1>
<table class="avp">
<tr>
<th><?= $this->escape($this->translate('Name')) ?></th>

View File

@ -4,7 +4,6 @@
</div>
<div class="content">
<h1 tabindex="-1"><?= $this->translate('Installed Modules') ?></h1>
<table class="action" data-base-target="_next">
<tbody>
<?php foreach ($modules as $module): ?>

View File

@ -2,20 +2,9 @@
<?= $tabs; ?>
</div>
<div class="content" data-base-target="_next">
<h1 tabindex="-1" id="resource-index">
<?= t('Resource Configuration'); ?>
</h1>
<h2 tabindex="-1" id="resource-new-resource" class="sr-only">
<?= t('Create New Resource'); ?>
</h2>
<p>
<a href="<?= $this->href('/config/createresource'); ?>">
<?= $this->icon('plus'); ?> <?= $this->translate('Create A New Resource'); ?>
</a>
</p>
<h2 tabindex="-1" id="resource-edit-resource" class="sr-only">
<?= t('Edit Existing Resources'); ?>
</h2>
<a href="<?= $this->href('/config/createresource'); ?>">
<?= $this->icon('plus'); ?> <?= $this->translate('Create A New Resource'); ?>
</a>
<table class="action" id="resource-edit-table">
<thead>
<th><?= $this->translate('Resource'); ?></th>

View File

@ -2,9 +2,6 @@
<?= $tabs ?>
</div>
<div class="content">
<h1 tabindex="-1" id="roles-index">
<?= $this->translate('Roles') ?>
</h1>
<div>
<?php /** @var \Icinga\Application\Config $roles */ if ($roles->isEmpty()): ?>
<?= $this->translate('No roles found.') ?>
@ -70,9 +67,6 @@
</tbody>
</table>
<?php endif ?>
<h2 tabindex="-1" id="roles-index-new" class="sr-only">
<?= $this->translate('Create New Role'); ?>
</h2>
<a data-base-target="_next" href="<?= $this->href('roles/new') ?>">
<?= $this->translate('Create a New Role') ?>
</a>

View File

@ -115,7 +115,7 @@ abstract class ApplicationBootstrap
/**
* Whether Icinga Web 2 requires setup
*
* @type bool
* @var bool
*/
protected $requiresSetup = false;

View File

@ -17,7 +17,7 @@ abstract class Command
protected $docs;
/**
* @type Params
* @var Params
*/
protected $params;
protected $screen;

View File

@ -14,14 +14,14 @@ class SimpleTree implements IteratorAggregate
/**
* Root node
*
* @type TreeNode
* @var TreeNode
*/
protected $sentinel;
/**
* Nodes
*
* @type array
* @var array
*/
protected $nodes = array();

View File

@ -10,7 +10,7 @@ class TreeNode implements Identifiable
/**
* The node's ID
*
* @type mixed
* @var mixed
*/
protected $id;
@ -24,7 +24,7 @@ class TreeNode implements Identifiable
/**
* The node's children
*
* @type array
* @var array
*/
protected $children = array();

View File

@ -14,7 +14,7 @@ class TreeNodeIterator implements RecursiveIterator
/**
* The node's children
*
* @type array
* @var array
*/
protected $children;

View File

@ -33,7 +33,7 @@ class FileExtensionFilterIterator extends FilterIterator
/**
* The extension to filter for
*
* @type string
* @var string
*/
protected $extension;
@ -58,7 +58,7 @@ class FileExtensionFilterIterator extends FilterIterator
public function accept()
{
$current = $this->current();
/** @type $current \SplFileInfo */
/** @var $current \SplFileInfo */
if (! $current->isFile()) {
return false;
}

View File

@ -37,7 +37,7 @@ class NonEmptyFileIterator extends FilterIterator
public function accept()
{
$current = $this->current();
/** @type $current \SplFileInfo */
/** @var $current \SplFileInfo */
if (! $current->isFile()
|| $current->getSize() === 0
) {

View File

@ -3,7 +3,6 @@
namespace Icinga\Protocol\Ldap;
use Exception;
use Icinga\Exception\ProgrammingError;
use Icinga\Protocol\Ldap\Exception as LdapException;
use Icinga\Application\Platform;
@ -35,6 +34,8 @@ class Connection
const LDAP_SIZELIMIT_EXCEEDED = 4;
const LDAP_ADMINLIMIT_EXCEEDED = 11;
const PAGE_SIZE = 1000;
const STARTTLS = 'tls';
const SSL = 'ssl';
protected $ds;
protected $hostname;
@ -43,6 +44,8 @@ class Connection
protected $bind_pw;
protected $root_dn;
protected $count;
protected $connectionType;
protected $reqCert = true;
/**
* Whether the bind on this connection was already performed
@ -66,8 +69,6 @@ class Connection
/**
* Constructor
*
* TODO: Allow to pass port and SSL options
*
* @param ConfigObject $config
*/
public function __construct(ConfigObject $config)
@ -77,6 +78,8 @@ class Connection
$this->bind_pw = $config->bind_pw;
$this->root_dn = $config->root_dn;
$this->port = $config->get('port', $this->port);
$this->connectionType = $config->get('connection');
$this->reqCert = (bool) $config->get('reqcert', $this->reqCert);
}
public function getHostname()
@ -470,59 +473,53 @@ class Connection
*/
protected function prepareNewConnection()
{
$use_tls = false;
$force_tls = false;
if ($use_tls) {
if ($this->connectionType === static::STARTTLS || $this->connectionType === static::SSL) {
$this->prepareTlsEnvironment();
}
$ds = ldap_connect($this->hostname, $this->port);
$hostname = $this->hostname;
if ($this->connectionType === static::SSL) {
$hostname = 'ldaps://' . $hostname;
}
$ds = ldap_connect($hostname, $this->port);
try {
$this->capabilities = $this->discoverCapabilities($ds);
$this->discoverySuccess = true;
} catch (LdapException $e) {
// create empty default capabilities
Logger::debug($e);
Logger::warning('LADP discovery failed, assuming default LDAP settings.');
$this->capabilities = new Capability();
$this->capabilities = new Capability(); // create empty default capabilities
}
if ($use_tls) {
if ($this->connectionType === static::STARTTLS) {
$force_tls = false;
if ($this->capabilities->hasStartTLS()) {
if (@ldap_start_tls($ds)) {
Logger::debug('LDAP STARTTLS succeeded');
} else {
Logger::debug('LDAP STARTTLS failed: %s', ldap_error($ds));
throw new LdapException(
'LDAP STARTTLS failed: %s',
ldap_error($ds)
);
Logger::error('LDAP STARTTLS failed: %s', ldap_error($ds));
throw new LdapException('LDAP STARTTLS failed: %s', ldap_error($ds));
}
} elseif ($force_tls) {
throw new LdapException(
'TLS is required but not announced by %s',
$this->hostname
);
throw new LdapException('STARTTLS is required but not announced by %s', $this->hostname);
} else {
Logger::warning('LDAP TLS enabled but not announced');
Logger::warning('LDAP STARTTLS enabled but not announced');
}
}
// ldap_rename requires LDAPv3:
if ($this->capabilities->hasLdapV3()) {
if (! ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3)) {
throw new LdapException('LDAPv3 is required');
}
} else {
// TODO: remove this -> FORCING v3 for now
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
Logger::warning('No LDAPv3 support detected');
}
// Not setting this results in "Operations error" on AD when using the
// whole domain as search base:
// Not setting this results in "Operations error" on AD when using the whole domain as search base
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
// ldap_set_option($ds, LDAP_OPT_DEREF, LDAP_DEREF_NEVER);
return $ds;
@ -530,17 +527,16 @@ class Connection
protected function prepareTlsEnvironment()
{
$strict_tls = true;
// TODO: allow variable known CA location (system VS Icinga)
if (Platform::isWindows()) {
// putenv('LDAP...')
putenv('LDAPTLS_REQCERT=never');
} else {
if ($strict_tls) {
if ($this->reqCert) {
$ldap_conf = $this->getConfigDir('ldap_ca.conf');
} else {
$ldap_conf = $this->getConfigDir('ldap_nocert.conf');
}
putenv('LDAPRC=' . $ldap_conf);
putenv('LDAPRC=' . $ldap_conf); // TODO: Does not have any effect
if (getenv('LDAPRC') !== $ldap_conf) {
throw new LdapException('putenv failed');
}

View File

@ -51,7 +51,7 @@ class ActionController extends Zend_Controller_Action
/**
* Authentication manager
*
* @type Manager|null
* @var Manager|null
*/
private $auth;

View File

@ -33,7 +33,7 @@ class DomNodeIterator implements RecursiveIterator
/**
* The node's children
*
* @type IteratorIterator
* @var IteratorIterator
*/
protected $children;

View File

@ -145,7 +145,7 @@ class Form extends Zend_Form
/**
* Authentication manager
*
* @type Manager|null
* @var Manager|null
*/
private $auth;

View File

@ -18,7 +18,7 @@ class Menu implements RecursiveIterator
/**
* The id of this menu
*
* @type string
* @var string
*/
protected $id;
@ -27,7 +27,7 @@ class Menu implements RecursiveIterator
*
* Used for sorting when priority is unset or equal to other items
*
* @type string
* @var string
*/
protected $title;
@ -36,42 +36,42 @@ class Menu implements RecursiveIterator
*
* Used for sorting
*
* @type int
* @var int
*/
protected $priority = 100;
/**
* The url of this menu
*
* @type string
* @var string
*/
protected $url;
/**
* The path to the icon of this menu
*
* @type string
* @var string
*/
protected $icon;
/**
* The sub menus of this menu
*
* @type array
* @var array
*/
protected $subMenus = array();
/**
* A custom item renderer used instead of the default rendering logic
*
* @type MenuItemRenderer
* @var MenuItemRenderer
*/
protected $itemRenderer = null;
/*
* Parent menu
*
* @type Menu
* @var Menu
*/
protected $parent;

View File

@ -39,7 +39,7 @@ class View extends Zend_View_Abstract
/**
* Authentication manager
*
* @type \Icinga\Authentication\Manager|null
* @var \Icinga\Authentication\Manager|null
*/
private $auth;

View File

@ -678,28 +678,20 @@ class FilterEditor extends AbstractWidget
public function render()
{
if (! $this->preservedUrl()->getParam('modifyFilter')) {
$filterEditor = $this->renderSearch() . $this->shorten($this->filter, 50);
} else {
$filterEditor = $this->renderSearch()
. '<form action="'
. Url::fromRequest()
. '" class="filterEditor" method="POST">'
. '<ul class="tree widgetFilter"><li>'
. $this->renderFilter($this->filter)
. '</li></ul>'
. '<div style="float: right">'
. '<input type="submit" name="submit" value="Apply" />'
. '<input type="submit" name="cancel" value="Cancel" />'
. '</div>'
. '</form>';
return $this->renderSearch() . $this->shorten($this->filter, 50);
}
return sprintf(
'<div class="filter-editor dontprint">'
. '<h2 tabindex="-1" class="sr-only">%s</h2>%s</div>',
t('Filters'),
$filterEditor
);
return $this->renderSearch()
. '<form action="'
. Url::fromRequest()
. '" class="filterEditor" method="POST">'
. '<ul class="tree widgetFilter"><li>'
. $this->renderFilter($this->filter)
. '</li></ul>'
. '<div style="float: right">'
. '<input type="submit" name="submit" value="Apply" />'
. '<input type="submit" name="cancel" value="Cancel" />'
. '</div>'
. '</form>';
}
protected function shorten($string, $length)

View File

@ -133,13 +133,6 @@ class SortBox extends AbstractWidget
if ($this->request) {
$form->populate($this->request->getParams());
}
return sprintf(
'<div class="sort-box dontprint">'
. '<h2 tabindex="-1" class="sr-only">%s</h2>%s%s</div>',
t('Sort Criteria'),
t('Sort by'),
(string) $form
);
return $form;
}
}

View File

@ -20,7 +20,6 @@ class Tabs extends AbstractWidget implements Countable
* @var string
*/
private $baseTpl = <<< 'EOT'
{HEADER}
<ul class="tabs">
{TABS}
{DROPDOWN}
@ -29,13 +28,6 @@ class Tabs extends AbstractWidget implements Countable
</ul>
EOT;
/**
* Template used for the header
*
* @type string
*/
private $headerTpl = '<h2 class="sr-only">{TITLE}</h2>';
/**
* Template used for the tabs dropdown
*
@ -109,13 +101,6 @@ EOT;
*/
private $closeTab = true;
/**
* Title of the tab navigation
*
* @type string
*/
private $title;
/**
* Set whether the current tab is closable
*/
@ -381,15 +366,13 @@ EOT;
'{TABS}',
'{DROPDOWN}',
'{REFRESH}',
'{CLOSE}',
'{HEADER}'
'{CLOSE}'
),
array(
$tabs,
$drop,
$close,
$refresh,
$this->renderHeader()
$refresh
),
$this->baseTpl
);
@ -451,30 +434,4 @@ EOT;
$tabextension->apply($this);
return $this;
}
/**
* Set the title of the tab navigation
*
* @param string $title
* @return self
*/
public function setTitle($title)
{
$this->title = $title;
return $this;
}
/**
* Render the title into the header template
*
* @return string
*/
public function renderHeader()
{
if (! $this->title) {
return '';
}
return str_replace('{TITLE}', $this->title, $this->headerTpl);
}
}

View File

@ -1,6 +1,6 @@
<div class="controls">
<?= /** @type \Icinga\Web\Widget\Tabs $tabs */ $tabs->showOnlyCloseButton() ?>
<?= /** @var \Icinga\Web\Widget\Tabs $tabs */ $tabs->showOnlyCloseButton() ?>
</div>
<div class="content">
<?= /** @type \Icinga\Module\Doc\Renderer\DocSectionRenderer $section */ $section ?>
<?= /** @var \Icinga\Module\Doc\Renderer\DocSectionRenderer $section */ $section ?>
</div>

View File

@ -1,5 +1,5 @@
<div class="controls"></div>
<?= /** @type \Icinga\Web\Widget\Tabs $tabs */ $tabs->showOnlyCloseButton(); ?>
<?= /** @var \Icinga\Web\Widget\Tabs $tabs */ $tabs->showOnlyCloseButton(); ?>
<h1><?= $this->translate('Available documentations'); ?></h1>
<div class="content">
<ul>
@ -16,4 +16,4 @@
array('title' => $this->translate('List all modifications for which documentation is available'))
); ?></li>
</ul>
</div>
</div>

View File

@ -1,5 +1,5 @@
<div class="controls">
<?= /** @type \Icinga\Web\Widget\Tabs $tabs */ $tabs->showOnlyCloseButton(); ?>
<?= /** @var \Icinga\Web\Widget\Tabs $tabs */ $tabs->showOnlyCloseButton(); ?>
<h1><?= $this->translate('Module documentations'); ?></h1>
</div>
<div class="content">
@ -16,4 +16,4 @@
); ?></li>
<?php endforeach ?>
</ul>
</div>
</div>

View File

@ -1,5 +1,5 @@
<div class="content">
<h1><?= /** @type string $title */ $title ?></h1>
<?= /** @type \Icinga\Module\Doc\Renderer\DocTocRenderer $toc */ $toc ?>
<?= /** @type \Icinga\Module\Doc\Renderer\DocSectionRenderer $section */ $section ?>
<h1><?= /** @var string $title */ $title ?></h1>
<?= /** @var \Icinga\Module\Doc\Renderer\DocTocRenderer $toc */ $toc ?>
<?= /** @var \Icinga\Module\Doc\Renderer\DocSectionRenderer $section */ $section ?>
</div>

View File

@ -1,5 +1,5 @@
<div class="content">
<?php foreach (/** @type \Icinga\Module\Doc\Renderer\DocSearchRenderer[] $searches */ $searches as $title => $search): ?>
<?php foreach (/** @var \Icinga\Module\Doc\Renderer\DocSearchRenderer[] $searches */ $searches as $title => $search): ?>
<?php if (! $search->isEmpty()): ?>
<h1><?= $this->escape($title) ?></h1>
<?= $search ?>

View File

@ -1,7 +1,7 @@
<div class="controls">
<?= /** @type \Icinga\Web\Widget\Tabs $tabs */ $tabs->showOnlyCloseButton() ?>
<h1><?= /** @type string $title */ $title ?></h1>
<?= /** @var \Icinga\Web\Widget\Tabs $tabs */ $tabs->showOnlyCloseButton() ?>
<h1><?= /** @var string $title */ $title ?></h1>
</div>
<div class="content">
<?= /** @type \Icinga\Module\Doc\Renderer\DocTocRenderer $toc */ $toc ?>
<?= /** @var \Icinga\Module\Doc\Renderer\DocTocRenderer $toc */ $toc ?>
</div>

View File

@ -1,7 +1,7 @@
<?php
/* Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */
/** @type $this \Icinga\Application\Modules\Module */
/** @var $this \Icinga\Application\Modules\Module */
$section = $this->menuSection($this->translate('Documentation'), array(
'title' => 'Documentation',

View File

@ -19,7 +19,7 @@ class DocIterator implements Countable, IteratorAggregate
/**
* Ordered files
*
* @type array
* @var array
*/
protected $fileInfo;

View File

@ -18,14 +18,14 @@ class DocParser
/**
* Path to the documentation
*
* @type string
* @var string
*/
protected $path;
/**
* Iterator over documentation files
*
* @type DocIterator
* @var DocIterator
*/
protected $docIterator;
@ -130,7 +130,7 @@ class DocParser
$tree = new SimpleTree();
$stack = new SplStack();
foreach ($this->docIterator as $fileInfo) {
/** @type $fileInfo \SplFileInfo */
/** @var $fileInfo \SplFileInfo */
$file = $fileInfo->openFile();
$lastLine = null;
foreach ($file as $line) {
@ -143,7 +143,7 @@ class DocParser
if ($id === null) {
$path = array();
foreach ($stack as $section) {
/** @type $section DocSection */
/** @var $section DocSection */
$path[] = $section->getTitle();
}
$path[] = $title;

View File

@ -13,35 +13,35 @@ class DocSection extends TreeNode
/**
* Chapter the section belongs to
*
* @type DocSection
* @var DocSection
*/
protected $chapter;
/**
* Content of the section
*
* @type array
* @var array
*/
protected $content = array();
/**
* Header level
*
* @type int
* @var int
*/
protected $level;
/**
* Whether to instruct search engines to not index the link to the section
*
* @type bool
* @var bool
*/
protected $noFollow;
/**
* Title of the section
*
* @type string
* @var string
*/
protected $title;

View File

@ -19,7 +19,7 @@ class DocSectionFilterIterator extends RecursiveFilterIterator implements Counta
/**
* Chapter to filter for
*
* @type string
* @var string
*/
protected $chapter;
@ -44,7 +44,7 @@ class DocSectionFilterIterator extends RecursiveFilterIterator implements Counta
public function accept()
{
$section = $this->current();
/** @type \Icinga\Module\Doc\DocSection $section */
/** @var \Icinga\Module\Doc\DocSection $section */
if ($section->getChapter()->getId() === $this->chapter) {
return true;
}

View File

@ -16,21 +16,21 @@ abstract class DocRenderer extends RecursiveIteratorIterator
/**
* URL to replace links with
*
* @type string
* @var string
*/
protected $url;
/**
* Additional URL parameters
*
* @type array
* @var array
*/
protected $urlParams = array();
/**
* View
*
* @type View|null
* @var View|null
*/
protected $view;

View File

@ -19,7 +19,7 @@ class DocSearchRenderer extends DocRenderer
/**
* The content to render
*
* @type array
* @var array
*/
protected $content = array();
@ -105,7 +105,7 @@ class DocSearchRenderer extends DocRenderer
$path,
array('highlight-search' => $this->getInnerIterator()->getSearch()->getInput())
);
/** @type \Icinga\Web\Url $url */
/** @var \Icinga\Web\Url $url */
$url->setAnchor($this->encodeAnchor($section->getId()));
$urlAttributes = array(
'data-base-target' => '_next',

View File

@ -26,28 +26,28 @@ class DocSectionRenderer extends DocRenderer
/**
* Content to render
*
* @type array
* @var array
*/
protected $content = array();
/**
* Search criteria to highlight
*
* @type string
* @var string
*/
protected $highlightSearch;
/**
* Parsedown instance
*
* @type Parsedown
* @var Parsedown
*/
protected $parsedown;
/**
* Documentation tree
*
* @type SimpleTree
* @var SimpleTree
*/
protected $tree;
@ -169,7 +169,7 @@ class DocSectionRenderer extends DocRenderer
$doc->loadHTML($match[0]);
$xpath = new DOMXPath($doc);
$blockquote = $xpath->query('//blockquote[1]')->item(0);
/** @type \DOMElement $blockquote */
/** @var \DOMElement $blockquote */
if (strtolower(substr(trim($blockquote->nodeValue), 0, 5)) === 'note:') {
$blockquote->setAttribute('class', 'note');
}
@ -189,7 +189,7 @@ class DocSectionRenderer extends DocRenderer
$doc->loadHTML($match[0]);
$xpath = new DOMXPath($doc);
$img = $xpath->query('//img[1]')->item(0);
/** @type \DOMElement $img */
/** @var \DOMElement $img */
$img->setAttribute('src', Url::fromPath($img->getAttribute('src'))->getAbsoluteUrl());
return substr_replace($doc->saveXML($img), '', -2, 1); // Replace '/>' with '>'
}
@ -206,7 +206,7 @@ class DocSectionRenderer extends DocRenderer
if (($section = $this->tree->getNode($this->decodeAnchor($match['fragment']))) === null) {
return $match[0];
}
/** @type \Icinga\Module\Doc\DocSection $section */
/** @var \Icinga\Module\Doc\DocSection $section */
$path = $this->getView()->getHelper('Url')->url(
array_merge(
$this->urlParams,
@ -219,7 +219,7 @@ class DocSectionRenderer extends DocRenderer
false
);
$url = $this->getView()->url($path);
/** @type \Icinga\Web\Url $url */
/** @var \Icinga\Web\Url $url */
$url->setAnchor($this->encodeAnchor($section->getId()));
return sprintf(
'<a %s%shref="%s"',

View File

@ -19,7 +19,7 @@ class DocTocRenderer extends DocRenderer
/**
* Content to render
*
* @type array
* @var array
*/
protected $content = array();
@ -85,7 +85,7 @@ class DocTocRenderer extends DocRenderer
false
);
$url = $view->url($path);
/** @type \Icinga\Web\Url $url */
/** @var \Icinga\Web\Url $url */
$url->setAnchor($this->encodeAnchor($section->getId()));
$urlAttributes = array(
'data-base-target' => '_next',

View File

@ -11,14 +11,14 @@ class DocSearch
/**
* Search string
*
* @type string
* @var string
*/
protected $input;
/**
* Search criteria
*
* @type array
* @var array
*/
protected $search;

View File

@ -19,14 +19,14 @@ class DocSearchIterator extends RecursiveFilterIterator
/**
* Search criteria
*
* @type DocSearch
* @var DocSearch
*/
protected $search;
/**
* Current search matches
*
* @type DocSearchMatch[]|null
* @var DocSearchMatch[]|null
*/
protected $matches;
@ -51,7 +51,7 @@ class DocSearchIterator extends RecursiveFilterIterator
public function accept()
{
$section = $this->current();
/** @type $section \Icinga\Module\Doc\DocSection */
/** @var $section \Icinga\Module\Doc\DocSection */
$matches = array();
if (($match = $this->search->search($section->getTitle())) !== null) {
$matches[] = $match->setMatchType(DocSearchMatch::MATCH_HEADER);

View File

@ -15,56 +15,56 @@ class DocSearchMatch
/**
* CSS class for highlighting matches
*
* @type string
* @var string
*/
const HIGHLIGHT_CSS_CLASS = 'search-highlight';
/**
* Header match
*
* @type int
* @var int
*/
const MATCH_HEADER = 1;
/**
* Content match
*
* @type int
* @var int
*/
const MATCH_CONTENT = 2;
/**
* Line
*
* @type string
* @var string
*/
protected $line;
/**
* Line number
*
* @type int
* @var int
*/
protected $lineno;
/**
* Type of the match
*
* @type int
* @var int
*/
protected $matchType;
/**
* Matches
*
* @type array
* @var array
*/
protected $matches = array();
/**
* View
*
* @type View|null
* @var View|null
*/
protected $view;

View File

@ -44,7 +44,7 @@ class Monitoring_AlertsummaryController extends Controller
'label' => $this->translate('Alert Summary'),
'url' => Url::fromRequest()
)
)->activate('alertsummary')->setTitle($this->translate('Alertsummary Navigation'));
)->activate('alertsummary');
$this->view->title = $this->translate('Alert Summary');
$this->view->intervalBox = $this->createIntervalBox();

View File

@ -727,7 +727,6 @@ class Monitoring_ListController extends Controller
private function createTabs()
{
$tabs = $this->getTabs();
$tabs->setTitle($this->translate('Monitoring Navigation'));
if (in_array($this->_request->getActionName(), array(
'hosts',
'services',

View File

@ -29,7 +29,7 @@ class Monitoring_ProcessController extends Controller
'label' => $this->translate('Monitoring Health'),
'url' =>'monitoring/process/info'
)
)->setTitle($this->translate('Process Information'));
);
}
/**

View File

@ -17,7 +17,7 @@ class BackendConfigForm extends ConfigForm
/**
* The available monitoring backend resources split by type
*
* @type array
* @var array
*/
protected $resources;

View File

@ -1,9 +1,6 @@
<div class="controls">
<?= $this->tabs ?>
<div style="margin: 1em;" class="dontprint">
<h2 tabindex="-1" class="sr-only">
<?= $this->translate('Filters'); ?>
</h2>
<?= $intervalBox; ?>
</div>
<?= $this->widget('limiter') ?>
@ -11,33 +8,25 @@
</div>
<div class="content alertsummary">
<h1 tabindex="-1">
<?= $this->translate('Alert summary'); ?>
</h1>
<!-- <h1><?= $this->translate('Alert summary'); ?></h1> -->
<div class="hbox">
<div class="hbox-item">
<h2 tabindex="-1" id="alertsummary-notifications">
<?= $this->translate('Notifications and Problems'); ?>
</h2>
<h2><?= $this->translate('Notifications and Problems'); ?></h2>
<div style="width: 400px; height: 400px;">
<?= $defectChart->render(); ?>
</div>
</div>
<div class="hbox-item">
<h2 tabindex="-1" id="alertsummary-reaction-time">
<?= $this->translate('Time to Reaction (Ack, Recover)'); ?>
</h2>
<h2><?= $this->translate('Time to Reaction (Ack, Recover)'); ?></h2>
<div style="width: 400px; height: 400px;">
<?= $healingChart->render(); ?>
</div>
</div>
</div>
<h2 tabindex="-1" id="alertsummary-trend">
<?= $this->translate('Trend'); ?>
</h2>
<h2><?= $this->translate('Trend'); ?></h2>
<div class="alertsummary-flex-container">
<div class="alertsummary-flex">
@ -64,9 +53,7 @@
</div>
<?php if ($this->recentAlerts): ?>
<h2 tabindex="-1" id="alertsummary-top5">
<?= $this->translate('Top 5 Recent Alerts'); ?>
</h2>
<h1><?= $this->translate('Top 5 Recent Alerts'); ?></h1>
<div class="alertsummary-flex-container">
<div class="alertsummary-flex">
@ -79,9 +66,7 @@
</div>
<?php endif; ?>
<h2 tabindex="-1" id="alertsummary-history">
<?= $this->translate('History'); ?>
</h2>
<h1><?= $this->translate('History'); ?></h1>
<div class="alertsummary-flex-container">
<div class="alertsummary-flex">
<?= $this->partial('list/notifications.phtml', array(

View File

@ -3,7 +3,6 @@
<?= $this->render('partials/host/servicesummary.phtml') ?>
</div>
<div class="content" data-base-target="_next">
<h1 tabindex="-1"><?= $this->translate('Host Detail Information') ?></h1>
<?= $this->render('show/components/output.phtml') ?>
<?= $this->render('show/components/grapher.phtml') ?>

View File

@ -1,14 +1,15 @@
<?php if (false === $this->compact): ?>
<div class="controls">
<?= $this->tabs ?>
<?= $this->sortControl ?>
<?= $this->widget('limiter', array('url' => $this->url, 'max' => $comments->count())); ?>
<?= $this->paginationControl($comments, null, null, array('preserve' => $this->preserve)); ?>
</div>
<div class="controls">
<?= $this->tabs->render($this); ?>
<div style="margin: 1em" class="dontprint">
<?= $this->translate('Sort by'); ?> <?= $this->sortControl->render($this); ?>
</div>
<?= $this->widget('limiter', array('url' => $this->url, 'max' => $comments->count())); ?>
<?= $this->paginationControl($comments, null, null, array('preserve' => $this->preserve)); ?>
</div>
<?php endif ?>
<div class="content">
<h1 tabindex="-1"><?= $this->translate('Comments') ?></h1>
<?php if (count($comments) === 0): ?>
<?= $this->translate('No comments matching the filter'); ?>
</div>

View File

@ -4,9 +4,6 @@
</div>
<?php endif ?>
<div class="content">
<h1 tabindex="-1">
<?= $this->translate('Contact Groups'); ?>
</h1>
<div class="boxview" data-base-target="_next">
<?php

View File

@ -1,14 +1,12 @@
<?php if (false === $this->compact): ?>
<div class="controls">
<?= $this->tabs ?>
<?= $this->sortControl ?>
<?= $this->widget('limiter', array('url' => $this->url, 'max' => $contacts->count())); ?>
<?= $this->paginationControl($contacts, null, null, array('preserve' => $this->preserve)); ?>
<div class="controls">
<?= $this->tabs ?>
<div style="margin: 1em">
<?= $this->sortControl->render($this); ?>
</div>
<?php endif ?>
<?= $this->paginationControl($contacts, null, null, array('preserve' => $this->preserve)); ?>
</div>
<div data-base-target="_next" class="content contacts">
<h1 tabindex="-1"><?= $this->translate('Contacts') ?></h1>
<?php
if (count($contacts) === 0) {
echo $this->translate('No contacts matching the filter');

View File

@ -4,17 +4,23 @@ use Icinga\Module\Monitoring\Object\Host;
use Icinga\Module\Monitoring\Object\Service;
?>
<?php if (false === $this->compact): ?>
<div class="controls">
<?= $this->tabs ?>
<?= $this->sortControl ?>
<?= $this->widget('limiter', array('url' => $this->url, 'max' => $downtimes->count())); ?>
<?= $this->paginationControl($downtimes, null, null, array('preserve' => $this->preserve)); ?>
</div>
<div class="controls">
<?= $this->tabs->render($this); ?>
<div style="margin: 1em" class="dontprint">
<?= $this->translate('Sort by'); ?> <?= $this->sortControl->render($this); ?>
<?php if (! $this->filterEditor): ?>
<?= $this->filterPreview ?>
<?php endif; ?>
</div>
<?= $this->widget('limiter', array('url' => $this->url, 'max' => $downtimes->count())); ?>
<?= $this->paginationControl($downtimes, null, null, array('preserve' => $this->preserve)); ?>
</div>
<?php endif ?>
<div class="content">
<?= $this->filterEditor ?>
<h1 tabindex="-1"><?= $this->translate('Downtimes'); ?></h1>
<?php if (count($downtimes) === 0): ?>
<?= $this->translate('No active downtimes'); ?>
</div>

View File

@ -2,21 +2,18 @@
use Icinga\Data\Filter\Filter;
use Icinga\Web\Widget\Chart\HistoryColorGrid;
?>
<?php if (! $compact): ?>
<? if (! $compact): ?>
<div class="controls">
<?= $this->tabs->render($this); ?>
<div class="fake-controls">
<h2 tabindex="-1" class="sr-only">
<?= $this->translate('Filters'); ?>
</h2>
<?= $form ?>
</div>
</div>
<div class="content" data-base-target="_next">
<h1 tabindex="-1"><?= $this->translate('Event Grid'); ?></h1>
<?php else: ?>
<div class="content" data-base-target="_next">
<?php endif; ?>
<? endif; ?>
<div class="content" data-base-target="_next">
<?php
$settings = array(

View File

@ -4,21 +4,24 @@ use Icinga\Module\Monitoring\Object\Host;
use Icinga\Module\Monitoring\Object\Service;
?>
<?php if (false === $this->compact): ?>
<div class="controls">
<?= $this->tabs ?>
<?= $this->sortControl ?>
<div style="margin: 1em" class="dontprint">
<div style="float: right">
<?= $this->translate('Sort by') ?> <?= $this->sortControl ?>
</div>
</div>
<?= $this->widget('limiter', array('url' => $this->url, 'max' => $this->history->count())); ?>
<?= $this->paginationControl($history, null, null, array('preserve' => $this->preserve)); ?>
</div>
<?php endif ?>
<div class="content">
<?= $this->filterEditor ?>
<h1 tabindex="-1"><?= $this->translate('Event History') ?></h1>
<?php else: ?>
<div class="content">
<?php endif; ?>
<?= $this->filterEditor ?>
<?php if (empty($history)): ?>
<?= $this->translate('No history events matching the filter') ?>
</div>

View File

@ -3,13 +3,14 @@
<?php else: ?>
<div class="controls">
<?= $this->tabs ?>
<?= $this->sortControl->render($this); ?>
<div style="margin: 1em;" class="dontprint">
<?= $this->translate('Sort by'); ?> <?= $this->sortControl->render($this); ?>
</div>
<?= $this->widget('limiter')->setMaxLimit(count($hostgroups)); ?>
<?= $this->paginationControl($hostgroups, null, null, array('preserve' => $this->preserve)); ?>
</div>
<div class="content">
<?= $this->filterEditor; ?>
<h1 tabindex="-1"><?= $this->translate('Host Groups') ?></h1>
<?php endif ?>
<?php
if (count($hostgroups) === 0) {

View File

@ -9,8 +9,9 @@ if ($this->compact): ?>
<div style="margin: 1em;" class="dontprint">
<?= $this->render('list/components/selectioninfo.phtml') ?>
<?= $this->render('list/components/hostssummary.phtml') ?>
<?= $this->translate('Sort by') ?> <?= $this->sortControl->render($this) ?>
</div>
<?= $this->sortControl->render($this) ?>
<?= $this->widget('limiter')->setMaxLimit($this->hosts->count()) ?>
<?= $this->paginationControl($hosts, null, null, array('preserve' => $this->preserve)) ?>
<?= $this->selectionToolbar('multi', $this->href('monitoring/hosts/show?' . $this->filter->toQueryString())) ?>
@ -18,7 +19,6 @@ if ($this->compact): ?>
<div class="content">
<?= $this->filterEditor ?>
<h1 tabindex="-1"><?= $this->translate('Hosts') ?></h1>
<?php
endif;
@ -31,6 +31,7 @@ if ($hosts->count() === 0) {
return;
}
?>
<table
data-base-target="_next"
class="action multiselect"

View File

@ -4,18 +4,19 @@ use Icinga\Module\Monitoring\Object\Host;
use Icinga\Module\Monitoring\Object\Service;
?>
<?php if (! $this->compact): ?>
<div class="controls">
<?= $this->tabs ?>
<?= $this->sortControl->render($this) ?>
<div class="dontprint" style="margin: 1em;">
<?= $this->translate('Sort by') ?> <?= $this->sortControl->render($this) ?>
</div>
<?= $this->widget('limiter') ?>
<?= $this->paginationControl($notifications, null, null, array('preserve' => $this->preserve)) ?>
</div>
<div class="content">
<h1 tabindex="-1"><?= $this->translate('Notifications'); ?></h1>
<?php else: ?>
<div class="content">
<?php endif ?>
<div class="content">
<?php if (count($notifications) === 0): ?>
<?= $this->translate('No notifications matching the filter') ?>
<?php return; endif ?>

View File

@ -6,11 +6,12 @@ use Icinga\Module\Monitoring\Object\Service;
<?php if (!$this->compact): ?>
<div class="controls">
<?= $this->tabs; ?>
<?= $this->sortControl; ?>
<div style="margin: 1em;" class="dontprint">
<?= $this->translate('Sort by'); ?> <?= $this->sortControl; ?>
</div>
</div>
<?php endif ?>
<div class="content" data-base-target="_next">
<h1 tabindex="-1"><?= $this->translate('Service Grid') ?></h1>
<table class="pivot servicestates">
<?php
$hasHeader = false;

View File

@ -3,13 +3,14 @@
<?php else: ?>
<div class="controls">
<?= $this->tabs ?>
<?= $this->sortControl->render($this); ?>
<div style="margin: 1em;" class="dontprint">
<?= $this->translate('Sort by'); ?> <?= $this->sortControl->render($this); ?>
</div>
<?= $this->widget('limiter')->setMaxLimit(count($servicegroups)); ?>
<?= $this->paginationControl($servicegroups, null, null, array('preserve' => $this->preserve)); ?>
</div>
<div class="content">
<?= $this->filterEditor; ?>
<h1 tabindex="-1"><?= $this->translate('Service Groups') ?></h1>
<?php endif ?>
<?php
if (count($servicegroups) === 0) {

View File

@ -10,8 +10,10 @@ if (!$this->compact): ?>
<div style="margin: 1em;" class="dontprint">
<?= $this->render('list/components/selectioninfo.phtml') ?>
<?= $this->render('list/components/servicesummary.phtml') ?>
<div style="float: right">
<?= $this->translate('Sort by') ?> <?= $this->sortControl ?>
</div>
</div>
<?= $this->sortControl ?>
<?php if ($this->limit === 0): ?>
<?= $this->widget('limiter') ?>
<?php else: ?>
@ -22,7 +24,6 @@ if (!$this->compact): ?>
<div class="content">
<?= $this->filterEditor ?>
<h1 tabindex="-1"><?= $this->translate('Services') ?></h1>
<?php else: ?>
<div class="content">

View File

@ -3,9 +3,7 @@
<?php endif ?>
<?php if (($hostCount = count($objects)) > 0): ?>
<div class="hbox-item">
<h1 tabindex="-1">
<?= sprintf($this->translatePlural('Host (%u)', 'Hosts (%u)', $hostCount), $hostCount); ?>
</h1>
<strong><?= sprintf($this->translatePlural('Host (%u)', 'Hosts (%u)', $hostCount), $hostCount); ?></strong>
</div>
<div class="hbox-item">
&nbsp;<?= $hostStatesPieChart; ?>

View File

@ -4,9 +4,7 @@
<?php if (($serviceCount = count($objects)) > 0): ?>
<div class="hbox">
<div class="hbox-item" style="width: 6em;">
<h1 tabindex="-1">
<?= sprintf($this->translatePlural('Service (%u)', 'Services (%u)', $serviceCount), $serviceCount); ?>
</h1>
<strong><?= sprintf($this->translatePlural('Service (%u)', 'Services (%u)', $serviceCount), $serviceCount); ?></strong>
</div>
<div class="hbox-item">
&nbsp;<?= $serviceStatesPieChart; ?>

View File

@ -9,10 +9,6 @@ $cp = $this->checkPerformance()->create($this->checkperformance);
</div>
<div class="content processinfo">
<h1 tabindex="-1">
<?= $this->translate('Monitoring Health'); ?>
</h1>
<div class="boxview">
<div class="box left">
@ -20,9 +16,7 @@ $cp = $this->checkPerformance()->create($this->checkperformance);
</div>
<div class="box left">
<h2 tabindex="-1" id="process-process-info">
<?= $this->translate('Process Info') ?>
</h2>
<h2><?= $this->translate('Process Info') ?></h2>
<table class="avp">
<tbody>
<tr>
@ -73,13 +67,9 @@ $cp = $this->checkPerformance()->create($this->checkperformance);
</div>
<div class="box left">
<h2 tabindex="-1" id="process-performance-info">
<?= $this->translate('Performance Info') ?>
</h2>
<h2><?= $this->translate('Performance Info') ?></h2>
<h3 tabindex="-1" id="process-object-summaries">
<?= $this->translate('Object summaries') ?>
</h3>
<h3><?= $this->translate('Object summaries') ?></h3>
<table class="avp">
<thead>
<tr>
@ -127,9 +117,7 @@ $cp = $this->checkPerformance()->create($this->checkperformance);
</tbody>
</table>
<h3 tabindex="-1" id="process-active-checks">
<?= $this->translate('Active checks') ?>
</h3>
<h3><?= $this->translate('Active checks') ?></h3>
<table class="avp">
<thead>
<tr>
@ -159,9 +147,7 @@ $cp = $this->checkPerformance()->create($this->checkperformance);
</tbody>
</table>
<h3 tabindex="-1" id="process-passive-checks">
<?= $this->translate('Passive checks') ?>
</h3>
<h3><?= $this->translate('Passive checks') ?></h3>
<table class="avp">
<tbody>
<tr>

View File

@ -1,6 +1,6 @@
<?php
/** @type \Icinga\Module\Monitoring\Object\MonitoredObject $object */
/** @var \Icinga\Module\Monitoring\Object\MonitoredObject $object */
if ($object->getType() === $object::TYPE_HOST) {
$isService = false;

View File

@ -2,7 +2,7 @@
<th><?= $this->translate('Comments'); ?></th>
<td>
<?php if ($this->hasPermission('monitoring/command/comment/add')) {
/** @type \Icinga\Module\Monitoring\Object\MonitoredObject $object */
/** @var \Icinga\Module\Monitoring\Object\MonitoredObject $object */
if ($object->getType() === $object::TYPE_HOST) {
echo $this->qlink(
$this->translate('Add comment'),

View File

@ -2,7 +2,7 @@
<th><?= $this->translate('Downtimes'); ?></th>
<td>
<?php if ($this->hasPermission('monitoring/command/downtime/schedule')) {
/** @type \Icinga\Module\Monitoring\Object\MonitoredObject $object */
/** @var \Icinga\Module\Monitoring\Object\MonitoredObject $object */
if ($object->getType() === $object::TYPE_HOST) {
echo $this->qlink(
$this->translate('Schedule downtime'),

View File

@ -4,7 +4,6 @@
</div>
<?php endif ?>
<div class="content tactical">
<h1 tabindex="-1"><?= $this->translate('Tactical Overview') ?></h1>
<div class="boxview" data-base-target="_next">
<?php if ($this->statusSummary->hosts_down || $this->statusSummary->hosts_unreachable): ?>
<?= $this->render('tactical/components/problem_hosts.phtml'); ?>

View File

@ -10,9 +10,6 @@ $firstRow = !$beingExtended;
<div class="controls">
<?= $this->tabs ?>
<div style="margin: 1em;" class="dontprint">
<h2 tabindex="-1" class="sr-only">
<?= $this->translate('Filters') ?>
</h2>
<?= $intervalBox; ?>
</div>
<div style="margin: 1em;" class="timeline-legend">
@ -25,7 +22,6 @@ $firstRow = !$beingExtended;
</div>
</div>
<div class="content" data-base-target="_next">
<h1 tabindex="-1"><?= $this->translate('Timeline'); ?></h1>
<div class="timeline">
<?php endif ?>
<?php if ($switchedContext): ?>

View File

@ -1,7 +1,7 @@
<?php
/* Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */
/** @type $this \Icinga\Application\Modules\Module */
/** @var $this \Icinga\Application\Modules\Module */
$this->providePermission(
'monitoring/command/*',

View File

@ -120,7 +120,7 @@ abstract class MonitoredObject implements Filterable
/**
* Filter
*
* @type Filter
* @var Filter
*/
protected $filter;

View File

@ -212,8 +212,3 @@ hr.command-separator {
border: none;
border-bottom: 2px solid @colorPetrol;
}
.sort-box {
float: right;
margin-right: 1em;
}

View File

@ -93,7 +93,7 @@ class WebWizard extends Wizard implements SetupWizard
$this->addPage(new PreferencesPage());
$this->addPage(new DbResourcePage());
$this->addPage(new LdapDiscoveryPage());
$this->addPage(new LdapDiscoveryConfirmPage());
//$this->addPage(new LdapDiscoveryConfirmPage());
$this->addPage(new LdapResourcePage());
$this->addPage(new AuthBackendPage());
$this->addPage(new AdminAccountPage());
@ -132,13 +132,13 @@ class WebWizard extends Wizard implements SetupWizard
} elseif ($authData['type'] === 'ldap') {
$page->setResourceConfig($this->getPageData('setup_ldap_resource'));
$suggestions = $this->getPageData('setup_ldap_discovery_confirm');
$suggestions = $this->getPageData('setup_ldap_discovery');
if (isset($suggestions['backend'])) {
$page->populate($suggestions['backend']);
}
}
} elseif ($page->getName() === 'setup_ldap_discovery_confirm') {
$page->setResourceConfig($this->getPageData('setup_ldap_discovery'));
/*} elseif ($page->getName() === 'setup_ldap_discovery_confirm') {
$page->setResourceConfig($this->getPageData('setup_ldap_discovery'));*/
} elseif ($page->getName() === 'setup_admin_account') {
$page->setBackendConfig($this->getPageData('setup_authentication_backend'));
$authData = $this->getPageData('setup_authentication_type');
@ -169,7 +169,7 @@ class WebWizard extends Wizard implements SetupWizard
);
}
$suggestion = $this->getPageData('setup_ldap_discovery_confirm');
$suggestion = $this->getPageData('setup_ldap_discovery');
if (isset($suggestion['resource'])) {
$page->populate($suggestion['resource']);
}
@ -199,8 +199,8 @@ class WebWizard extends Wizard implements SetupWizard
} elseif ($newPage->getname() === 'setup_ldap_discovery') {
$authData = $this->getPageData('setup_authentication_type');
$skip = $authData['type'] !== 'ldap';
} elseif ($newPage->getName() === 'setup_ldap_discovery_confirm') {
$skip = false === $this->hasPageData('setup_ldap_discovery');
/*} elseif ($newPage->getName() === 'setup_ldap_discovery_confirm') {
$skip = false === $this->hasPageData('setup_ldap_discovery');*/
} elseif ($newPage->getName() === 'setup_ldap_resource') {
$authData = $this->getPageData('setup_authentication_type');
$skip = $authData['type'] !== 'ldap';

View File

@ -270,7 +270,7 @@ a:focus {
/* Accessibility Skip Links */
.skip-links {
position: relative;
position: absolute;
opacity: 1;
ul {
list-style-type: none;
@ -286,6 +286,7 @@ a:focus {
left: -999em;
box-sizing: content-box;
width: 10.4em !important;
top: 0em;
text-align: left !important;
padding: 0.8em;
background-color: white;
@ -299,9 +300,3 @@ a:focus {
}
}
}
.skip-links-inline {
ul > li > a {
width: 14em !important;
top: -3em;
}
}

View File

@ -356,32 +356,16 @@
return false;
},
/**
* Handle anchor, i.e. focus the element which is referenced by the anchor
*
* @param {string} query jQuery selector
*/
handleAnchor: function(query) {
var $element = $(query);
if ($element.length > 0) {
// TODO(mh): Some elements are missing to place the right focus
// This is a fixed workarround until all header took place
var $item = $element.find(':header:first').nextUntil(':header:first').next();
if ($item.length > 0) {
$element = $item;
}
/*
var focusQueries = ['h1:first', ':header:first', ':input:first'];
$.each(focusQueries, function(index,q) {
var $item = $element.find(q);
if ($item.length > 0) {
$element = $item;
return false;
}
});
*/
// If we want to focus an element which has no tabindex
// add one that we can focus is
if ($element.prop('tabindex') < 0) {
$element.prop('tabindex', '-1');
if (typeof $element.attr('tabindex') === 'undefined') {
$element.attr('tabindex', -1);
}
$element.focus();
}