Merge branch 'master' into feature/display-documentation-4820

Conflicts:
	modules/doc/library/Doc/DocParser.php
This commit is contained in:
Eric Lippmann 2014-06-06 14:25:13 +02:00
commit 160a75403d
925 changed files with 4609 additions and 691 deletions

4
.gitignore vendored
View File

@ -37,3 +37,7 @@ config/preferences/*.ini
# Application logfiles
var/log/*.log
/debian

View File

@ -1,10 +1,23 @@
<Directory "/var/www/html/icingaweb">
Options -Indexes
AllowOverride All
Alias /icingaweb /vagrant/public
<Directory "/vagrant/public/">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
# SetEnv ICINGAWEB_CONFIGDIR /etc/icingaweb
EnableSendfile Off
RewriteEngine on
RewriteBase /icingaweb/
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
php_value xdebug.idekey PHPSTORM
</Directory>

View File

@ -0,0 +1,15 @@
/**
* This file defines global constants which can be used in
* the other configuration files.
*/
/* The directory which contains the plugins from the Monitoring Plugins project. */
const PluginDir = "/usr/lib64/nagios/plugins"
/* Our local instance name. By default this is the server's hostname as returned by `hostname --fqdn`.
* This should be the common name from the API certificate.
*/
const NodeName = "localhost"
/* Our local zone name. */
const ZoneName = NodeName

View File

@ -1,3 +1,9 @@
[autologin]
backend = autologin
;
; If you want to strip the domain
; strip_username_regexp = /\@[^$]+$/
[internal_ldap_authentication]
backend = ldap
resource = internal_ldap

View File

@ -1,11 +0,0 @@
RewriteEngine on
RewriteBase /icingaweb
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
php_flag short_open_tag on
php_value xdebug.idekey PHPSTORM

View File

@ -6,7 +6,7 @@ include openldap
Exec { path => '/bin:/usr/bin:/sbin' }
$icingaVersion = '1.11.2'
$icinga2Version = '0.0.11'
$icinga2Version = '2.0.0'
exec { 'create-mysql-icinga-db':
unless => 'mysql -uicinga -picinga icinga',
@ -50,7 +50,7 @@ group { 'icinga-cmd':
group { 'icingacmd':
ensure => present,
require => Exec['install icinga2']
require => Package['icinga2']
}
user { 'icinga':
@ -343,50 +343,95 @@ package { ['cmake', 'boost-devel', 'bison', 'flex']:
ensure => installed
}
# icinga 2
define icinga2::feature ($feature = $title) {
exec { "icinga2-feature-${feature}":
path => '/bin:/usr/bin:/sbin:/usr/sbin',
unless => "readlink /etc/icinga2/features-enabled/${feature}.conf",
command => "icinga2-enable-feature ${feature}",
require => [ Package['icinga2'] ],
notify => Service['icinga2']
}
}
yumrepo { 'icinga2-repo':
baseurl => "http://packages.icinga.org/epel/6/snapshot/",
enabled => '0',
enabled => '1',
gpgcheck => '1',
gpgkey => 'http://packages.icinga.org/icinga.key',
descr => "Icinga Repository - ${::architecture}"
}
exec { 'install icinga2':
command => 'yum -d 0 -e 0 -y --enablerepo=icinga2-repo install icinga2',
unless => 'rpm -qa | grep icinga2',
require => Yumrepo['icinga2-repo']
}
exec { 'install icinga2-classicui-config':
command => 'yum -d 0 -e 0 -y --enablerepo=icinga2-repo install icinga2-classicui-config',
unless => 'rpm -qa | grep icinga2-classicui-config',
require => [ Yumrepo['icinga2-repo'], Exec['install icinga2'], Exec['install icinga2-ido-mysql'] ]
}
exec { 'install icinga2-ido-mysql':
command => 'yum -d 0 -e 0 -y --enablerepo=icinga2-repo install icinga2-ido-mysql',
unless => 'rpm -qa | grep icinga2-ido-mysql',
require => [ Yumrepo['icinga2-repo'], Exec['install icinga2'] ],
}
exec { 'install nagios-plugins-all':
command => 'yum -d 0 -e 0 -y --enablerepo=epel install nagios-plugins-all',
unless => 'rpm -qa | grep nagios-plugins-all',
require => [ Class['epel'], Exec['install icinga2'] ],
require => [ Class['epel'], Package['icinga2'] ],
}
file { '/etc/icinga2/features-enabled/':
ensure => directory,
owner => icinga,
group => icinga,
require => Exec['install icinga2-ido-mysql']
package { 'icinga2':
ensure => latest,
require => Yumrepo['icinga2-repo'],
alias => 'icinga2'
}
package { 'icinga2-bin':
ensure => latest,
require => [ Yumrepo['icinga2-repo'], Package['icinga2'] ],
alias => 'icinga2-bin'
}
package { 'icinga2-doc':
ensure => latest,
require => Yumrepo['icinga2-repo'],
alias => 'icinga2-doc'
}
# icinga 2 classic ui
package { 'icinga2-classicui-config':
ensure => latest,
before => Package["icinga-gui"],
require => [ Yumrepo['icinga2-repo'], Package['icinga2'] ],
notify => Service['apache']
}
package { 'icinga-gui':
ensure => latest,
require => Yumrepo['icinga2-repo'],
alias => 'icinga-gui'
}
icinga2::feature { 'statusdata':
require => Package['icinga2-classicui-config']
}
icinga2::feature { 'command':
require => Package['icinga2-classicui-config']
}
icinga2::feature { 'compatlog':
require => Package['icinga2-classicui-config']
}
# icinga 2 ido mysql
package { 'icinga2-ido-mysql':
ensure => latest,
require => Yumrepo['icinga2-repo'],
alias => 'icinga2-ido-mysql'
}
exec { 'populate-icinga2-mysql-db':
unless => 'mysql -uicinga2 -picinga2 icinga2 -e "SELECT * FROM icinga_dbversion;" &> /dev/null',
command => "mysql -uroot icinga2 < /usr/share/doc/icinga2-ido-mysql-$icinga2Version/schema/mysql.sql",
require => [ Exec['create-mysql-icinga2-db'], Package['icinga2-ido-mysql'] ]
}
file { '/etc/icinga2/features-available/ido-mysql.conf':
source => 'puppet:////vagrant/.vagrant-puppet/files/etc/icinga2/features-available/ido-mysql.conf',
owner => 'icinga',
group => 'icinga',
require => Exec['install icinga2-ido-mysql']
require => Package['icinga2'],
notify => Service['icinga2']
}
file { '/etc/icinga2/features-enabled/ido-mysql.conf':
@ -394,69 +439,46 @@ file { '/etc/icinga2/features-enabled/ido-mysql.conf':
target => '/etc/icinga2/features-available/ido-mysql.conf',
owner => 'root',
group => 'root',
require => Exec['install icinga2-ido-mysql']
require => Package['icinga2-ido-mysql']
}
icinga2::feature { 'ido-mysql':
require => Exec['populate-icinga2-mysql-db']
}
# icinga 2 test config
file { '/etc/icinga2/conf.d/test-config.conf':
source => 'puppet:////vagrant/.vagrant-puppet/files/etc/icinga2/conf.d/test-config.conf',
owner => 'icinga',
group => 'icinga',
require => [ Exec['install icinga2'], Exec['create_monitoring_test_config'] ]
require => [ Package['icinga2'], Exec['create_monitoring_test_config'] ]
}
file { '/etc/icinga2/conf.d/commands.conf':
source => 'puppet:////vagrant/.vagrant-puppet/files/etc/icinga2/conf.d/commands.conf',
owner => 'icinga',
group => 'icinga',
require => Exec['install icinga2']
require => Package['icinga2']
}
file { '/etc/icinga2/constants.conf':
source => 'puppet:////vagrant/.vagrant-puppet/files/etc/icinga2/constants.conf',
owner => 'icinga',
group => 'icinga',
require => Package['icinga2']
}
service { 'icinga2':
ensure => running,
require => [
Exec['install icinga2'],
Package['icinga2'],
File['/etc/icinga2/features-enabled/ido-mysql.conf'],
File['/etc/icinga2/conf.d/test-config.conf'],
File['/etc/icinga2/conf.d/commands.conf']
]
}
exec { 'populate-icinga2-mysql-db':
unless => 'mysql -uicinga2 -picinga2 icinga2 -e "SELECT * FROM icinga_dbversion;" &> /dev/null',
command => "mysql -uroot icinga2 < /usr/share/doc/icinga2-ido-mysql-$icinga2Version/schema/mysql.sql",
require => [ Exec['create-mysql-icinga2-db'], Exec['install icinga2-ido-mysql'] ]
}
# cmmi { 'icinga2':
# url => "https://github.com/Icinga/icinga2/releases/download/v${icinga2Version}/icinga2-${icinga2Version}.tar.gz",
# output => "icinga2-${icinga2Version}.tar.gz",
# configure_command => 'mkdir build &> /dev/null || true && cd build && sudo cmake ..',
# creates => '/usr/local/sbin/icinga2',
# make => 'true && cd build/ && make && make install',
# require => Package[ ['cmake', 'boost-devel', 'bison', 'flex'] ],
# make_timeout => 900
# }
#configure { 'icingaweb':
# path => '/vagrant',
# flags => '--prefix=/vagrant \
# --with-icinga-commandpipe="/usr/local/icinga-mysql/var/rw/icinga.cmd" \
# --with-statusdat-file="/usr/local/icinga-mysql/var/status.dat" \
# --with-objects-cache-file=/usr/local/icinga-mysql/var/objects.cache \
# --with-icinga-backend=ido \
# --with-httpd-config-path="/etc/httpd/conf.d" \
# --with-ldap-authentication \
# --with-internal-authentication \
# --with-livestatus-socket="/usr/local/icinga-mysql/var/rw/live"',
# require => Exec['install php-ZendFramework']
#}
#file { 'icingaweb-public':
# ensure => '/vagrant/public',
# path => '/var/www/html/icingaweb',
# require => Class['apache']
#}
exec { 'install php-ZendFramework-Db-Adapter-Pdo-Mysql':
command => 'yum -d 0 -e 0 -y --enablerepo=epel install php-ZendFramework-Db-Adapter-Pdo-Mysql',
unless => 'rpm -qa | grep php-ZendFramework-Db-Adapter-Pdo-Mysql',
@ -664,63 +686,10 @@ exec { 'populate-icinga_web-mysql-db':
require => [ Exec['create-mysql-icinga_web-db'], Cmmi['icinga-web'] ]
}
#
# Development environment (Feature #5554)
#
file { '/var/www/html/icingaweb':
ensure => 'directory',
owner => 'apache',
group => 'apache'
}
file { '/var/www/html/icingaweb/css':
ensure => 'link',
target => '/vagrant/public/css',
owner => 'apache',
group => 'apache',
}
file { '/var/www/html/icingaweb/svg':
ensure => 'link',
target => '/vagrant/public/svg',
owner => 'apache',
group => 'apache',
}
file { '/var/www/html/icingaweb/img':
ensure => 'link',
target => '/vagrant/public/img',
owner => 'apache',
group => 'apache',
}
file { '/var/www/html/icingaweb/js':
ensure => 'link',
target => '/vagrant/public/js',
owner => 'apache',
group => 'apache',
}
file { '/var/www/html/icingaweb/index.php':
source => 'puppet:////vagrant/.vagrant-puppet/files/var/www/html/icingaweb/index.php',
owner => 'apache',
group => 'apache',
}
file { '/var/www/html/icingaweb/js.php':
ensure => absent,
}
file { '/var/www/html/icingaweb/css.php':
ensure => absent,
}
file { '/var/www/html/icingaweb/.htaccess':
source => 'puppet:////vagrant/.vagrant-puppet/files/var/www/html/icingaweb/.htaccess',
owner => 'apache',
group => 'apache',
}
file { '/etc/httpd/conf.d/icingaweb.conf':
source => 'puppet:////vagrant/.vagrant-puppet/files/etc/httpd/conf.d/icingaweb.conf',
require => Package['apache'],

View File

@ -10,11 +10,6 @@ installJquery () {
fi
}
mountIcinga2webConfd () {
# Remount /vagrant/config/ with appropriate permissions since the group apache is missing initially
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g apache`,dmode=775,fmode=775 /vagrant/config/ /vagrant/config/
}
startServicesWithNonLSBCompliantExitStatusCodes () {
# Unfortunately the ido2db init script is not LSB compliant and hence not started via puppet
service ido2db-mysql start || true
@ -22,12 +17,16 @@ startServicesWithNonLSBCompliantExitStatusCodes () {
}
mountIcinga2webVarLog () {
# Remount /vagrant/var/log/ with appropriate permissions since the group apache is missing initially
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g apache`,dmode=775,fmode=775 /vagrant/var/log/ /vagrant/var/log/
if ! $(/bin/mount | /bin/grep -q "/vagrant/var/log"); then
# Remount /vagrant/var/log/ with appropriate permissions since the group apache is missing initially
/bin/mount -t vboxsf -o \
uid=`id -u vagrant`,gid=`id -g apache`,dmode=775,fmode=664 \
/vagrant/var/log/ \
/vagrant/var/log/
fi
}
installJquery
mountIcinga2webConfd
startServicesWithNonLSBCompliantExitStatusCodes
mountIcinga2webVarLog

View File

@ -51,7 +51,6 @@ clean:
# Installs/copies all static files (executables, scripts, html, etc)
#
install-static-files: install-application copy-web-files-public copy-web-files-modules
$(INSTALL) -m 644 $(INSTALL_OPTS) "./public/.htaccess" $(DESTDIR)$(prefix)/public/.htaccess;
#
# Installs all configuration files

15
Vagrantfile vendored
View File

@ -1,7 +1,20 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
VAGRANTFILE_API_VERSION = "2"
VAGRANT_REQUIRED_VERSION = "1.2.0"
# Require 1.2.x at least
if ! defined? Vagrant.require_version
if Gem::Version.new(Vagrant::VERSION) < Gem::Version.new(VAGRANT_REQUIRED_VERSION)
puts "Vagrant >= " + VAGRANT_REQUIRED_VERSION + " required. Your version is " + Vagrant::VERSION
exit 1
end
else
Vagrant.require_version ">= " + VAGRANT_REQUIRED_VERSION
end
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# All Vagrant configuration is done here. The most common configuration
# options are documented and commented below. For a complete reference,
# please see the online documentation at vagrantup.com.

View File

@ -54,7 +54,7 @@ class ModuleCommand extends Command
$modules = $this->modules->listInstalledModules();
}
if (empty($modules)) {
echo "There are no modules installed\n";
echo "There are no $type modules\n";
return;
}
if ($this->isVerbose) {
@ -67,7 +67,7 @@ class ModuleCommand extends Command
if ($this->isVerbose) {
$dir = ' ' . $this->modules->getModuleDir($module);
} else {
$dir = $mod->getShortDescription();
$dir = $mod->getTitle();
}
printf(
"%-14s %-9s %-9s %s\n",

View File

@ -29,7 +29,7 @@ class WebCommand extends Command
// throw new Exception('Socket is required');
}
if ($basedir === null) {
$basedir = dirname(ICINGA_APPDIR) . '/public';
$basedir = dirname(ICINGAWEB_APPDIR) . '/public';
if (! file_exists($basedir) || ! is_dir($basedir)) {
throw new Exception('Basedir is required');
}

View File

@ -30,12 +30,14 @@
# namespace Icinga\Application\Controllers;
use Icinga\Authentication\Backend\AutoLoginBackend;
use Icinga\Web\Controller\ActionController;
use Icinga\Authentication\Manager as AuthManager;
use Icinga\Form\Authentication\LoginForm;
use Icinga\Authentication\AuthChain;
use Icinga\Application\Config;
use Icinga\Logger\Logger;
use Icinga\Exception\AuthenticationException;
use Icinga\Exception\NotReadableError;
use Icinga\Exception\ConfigurationError;
use Icinga\User;
@ -60,7 +62,9 @@ class AuthenticationController extends ActionController
{
$this->view->form = new LoginForm();
$this->view->form->setRequest($this->_request);
$this->view->title = 'Icinga Web Login';
$this->view->title = $this->translate('Icingaweb Login');
$user = new User('');
$password = '';
try {
$redirectUrl = Url::fromPath($this->_request->getParam('redirect', 'dashboard'));
@ -70,52 +74,76 @@ class AuthenticationController extends ActionController
}
$auth = AuthManager::getInstance();
if ($auth->isAuthenticated()) {
$this->redirectNow($redirectUrl);
}
if ($this->view->form->isSubmittedAndValid()) {
$user = new User($this->view->form->getValue('username'));
try {
$config = Config::app('authentication');
} catch (NotReadableError $e) {
Logger::error(
new Exception('Cannot load authentication configuration. An exception was thrown:', 0, $e)
);
throw new ConfigurationError(
'No authentication methods available. It seems that none authentication method has been set'
. ' up. Please check the system log or Icinga Web 2 log for more information'
);
}
try {
$config = Config::app('authentication');
} catch (NotReadableError $e) {
Logger::error(
new Exception('Cannot load authentication configuration. An exception was thrown:', 0, $e)
);
throw new ConfigurationError(
'No authentication methods available. It seems that none authentication method has been set'
. ' up. Please contact your Icinga Web administrator'
);
$chain = new AuthChain($config);
if ($this->getRequest()->isGet()) {
foreach ($chain as $backend) {
if ($backend instanceof AutoLoginBackend) {
$authenticated = $backend->authenticate($user, $password);
if ($authenticated === true) {
$auth->setAuthenticated($user);
$this->redirectNow($redirectUrl);
}
}
}
// TODO(el): Currently the user is only notified about authentication backend problems when all backends
// have errors. It may be the case that the authentication backend which provides the user has errors
// but other authentication backends work. In that scenario the user is presented an error message
// saying "Incorrect username or password". We must inform the user that not all authentication methods
// are available.
} elseif ($this->view->form->isSubmittedAndValid()) {
$user = new User($this->view->form->getValue('username'));
$password = $this->view->form->getValue('password');
$backendsTried = 0;
$backendsWithError = 0;
$chain = new AuthChain($config);
foreach ($chain as $backend) {
$authenticated = $backend->authenticate($user, $this->view->form->getValue('password'));
if ($backend instanceof AutoLoginBackend) {
continue;
}
++$backendsTried;
try {
$authenticated = $backend->authenticate($user, $password);
} catch (AuthenticationException $e) {
Logger::error($e);
++$backendsWithError;
continue;
}
if ($authenticated === true) {
$auth->setAuthenticated($user);
$this->redirectNow($redirectUrl);
} elseif ($authenticated === null) {
$backendsWithError += 1;
}
$backendsTried += 1;
}
if ($backendsWithError === $backendsTried) {
throw new ConfigurationError(
'No authentication methods available. It seems that all set up authentication methods have'
. ' errors. Please contact your Icinga Web administrator'
$this->translate(
'No authentication methods available. It seems that all set up authentication methods have'
. ' errors. Please check the system log or Icinga Web 2 log for more information'
)
);
}
$this->view->form->getElement('password')->addError(t('Incorrect username or password'));
if ($backendsWithError) {
$this->view->form->addNote(
$this->translate(
'Note that not all authentication backends are available for authentication because they'
. ' have errors. Please check the system log or Icinga Web 2 log for more information'
)
);
}
$this->view->form->getElement('password')->addError($this->translate('Incorrect username or password'));
}
} catch (Exception $e) {
$this->view->errorInfo = $e->getMessage();

View File

@ -46,6 +46,11 @@ use Icinga\Web\Controller\ActionController;
*/
class DashboardController extends ActionController
{
/**
* Default configuration
*/
const DEFAULT_CONFIG = 'dashboard/dashboard';
/**
* Retrieve a dashboard from the provided config
*
@ -53,14 +58,18 @@ class DashboardController extends ActionController
*
* @return \Icinga\Web\Widget\Dashboard
*/
private function getDashboard($config = 'dashboard/dashboard')
private function getDashboard($config = self::DEFAULT_CONFIG)
{
$dashboard = new Dashboard();
try {
$dashboardConfig = IcingaConfig::app($config);
if (count($dashboardConfig) === 0) {
return null;
}
$dashboard->readConfig($dashboardConfig);
} catch (NotReadableError $e) {
Logger::error(new Exception('Cannot load dashboard configuration. An exception was thrown:', 0, $e));
return null;
}
return $dashboard;
}
@ -133,18 +142,28 @@ class DashboardController extends ActionController
$pane = $this->_getParam('pane');
$dashboard->activate($pane);
}
$this->view->title = $dashboard->getActivePane()->getTitle() . ' :: Dashboard';
$this->view->tabs = $dashboard->getTabs();
/* Temporarily removed
$this->view->tabs->add(
'Add',
array(
'title' => '+',
'url' => Url::fromPath('dashboard/addurl')
)
);
*/
$this->view->dashboard = $dashboard;
$this->view->configPath = IcingaConfig::resolvePath(self::DEFAULT_CONFIG);
if ($dashboard === null) {
$this->view->title = 'Dashboard';
} else {
$this->view->title = $dashboard->getActivePane()->getTitle() . ' :: Dashboard';
$this->view->tabs = $dashboard->getTabs();
/* Temporarily removed
$this->view->tabs->add(
'Add',
array(
'title' => '+',
'url' => Url::fromPath('dashboard/addurl')
)
);
*/
$this->view->dashboard = $dashboard;
}
}
/**

View File

@ -16,22 +16,35 @@ class SearchController extends ActionController
$this->setAutorefreshInterval(10);
$search = $this->_request->getParam('q');
if (! $search) {
$this->view->hint = $this->translate('Ready to search, waiting for your input');
$this->view->tabs = Widget::create('tabs')->add(
'search',
array(
'title' => $this->translate('Search'),
'url' => '/search',
)
)->activate('search');
$this->render('hint');
return;
}
$dashboard = Widget::create('dashboard')->createPane('Search');
$pane = $dashboard->getPane('Search');
$dashboard = Widget::create('dashboard')->createPane($this->translate('Search'));
$pane = $dashboard->getPane($this->translate('Search'));
$suffix = strlen($search) ? ': ' . rtrim($search, '*') . '*' : '';
$pane->addComponent('Hosts' . $suffix, Url::fromPath('monitoring/list/hosts', array(
'host_name' => $search . '*',
'sort' => 'host_severity',
'limit' => 10,
)));
$pane->addComponent('Services' . $suffix, Url::fromPath('monitoring/list/services', array(
'service_description' => $search . '*',
'sort' => 'service_severity',
'limit' => 10,
)));
$pane->addComponent(
$this->translate('Hosts') . $suffix,
Url::fromPath('monitoring/list/hosts', array(
'host_name' => $search . '*',
'sort' => 'host_severity',
'limit' => 10,
)
));
$pane->addComponent(
$this->translate('Services') . $suffix,
Url::fromPath('monitoring/list/services', array(
'service_description' => $search . '*',
'sort' => 'service_severity',
'limit' => 10,
)
));
$pane->addComponent('Hostgroups' . $suffix, Url::fromPath('monitoring/list/hostgroups', array(
'hostgroup' => $search . '*',
'limit' => 10,
@ -40,7 +53,7 @@ class SearchController extends ActionController
'servicegroup' => $search . '*',
'limit' => 10,
)));
$dashboard->activate('Search');
$dashboard->activate($this->translate('Search'));
$this->view->dashboard = $dashboard;
$this->view->tabs = $dashboard->getTabs();
}

View File

@ -248,7 +248,7 @@ class GeneralForm extends Form
'helptext' => 'Contains the directories that will be searched for available modules, separated by ' .
' colons. Modules that don\'t exist in these directories can still be symlinked in the module ' .
' folder, but won\'t show up in the list of disabled modules.',
'value' => $cfg->get('modulePath', realpath(ICINGA_APPDIR . '/../modules'))
'value' => $cfg->get('modulePath', realpath(ICINGAWEB_APPDIR . '/../modules'))
)
);
}
@ -330,7 +330,7 @@ class GeneralForm extends Form
'label' => 'User Preference Filepath',
'required' => $backend === 'ini',
'condition' => $backend === 'ini',
'value' => $cfg->get('configPath')
'value' => $cfg->get('config_path')
)
);
@ -432,7 +432,7 @@ class GeneralForm extends Form
$cfg->preferences->type = $values['preferences_type'];
if ($cfg->preferences->type === 'ini') {
$cfg->preferences->configPath = $values['preferences_ini_path'];
$cfg->preferences->config_path = $values['preferences_ini_path'];
} elseif ($cfg->preferences->type === 'db') {
$cfg->preferences->resource = $values['preferences_db_resource'];
}

View File

@ -261,10 +261,10 @@ class GeneralForm extends Form
$this->addElement(
'checkbox',
'showBenchmark',
'show_benchmark',
array(
'label' => 'Use benchmark',
'value' => $this->getUserPreferences()->get('app.showBenchmark')
'value' => $this->getUserPreferences()->get('app.show_benchmark')
)
);
}
@ -278,11 +278,11 @@ class GeneralForm extends Form
{
$values = $this->getValues();
return array(
'app.language' => $values['default_language'] ? null : $values['language'],
'app.timezone' => $values['default_timezone'] ? null : $values['timezone'],
'app.dateFormat' => $values['default_date_format'] ? null : $values['date_format'],
'app.timeFormat' => $values['default_time_format'] ? null : $values['time_format'],
'app.showBenchmark' => $values['showBenchmark'] === '1' ? true : false
'app.language' => $values['default_language'] ? null : $values['language'],
'app.timezone' => $values['default_timezone'] ? null : $values['timezone'],
'app.dateFormat' => $values['default_date_format'] ? null : $values['date_format'],
'app.timeFormat' => $values['default_time_format'] ? null : $values['time_format'],
'app.show_benchmark' => $values['show_benchmark'] === '1' ? true : false
);
}
}

View File

@ -30,6 +30,12 @@ $isIframe = isset($_GET['_render']) && $_GET['_render'] === 'iframe';
<!-- TODO: viewport and scale settings make no sense for us, fix this -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="<?= $this->href($cssfile) ?>" media="screen" type="text/css" />
<script type="text/javascript">
(function() {
var html = document.getElementsByTagName('html')[0];
html.className = html.className.replace(/no-js/, 'js');
}());
</script>
<? if ($isIframe): ?>
<base target="_parent"/>
<? endif ?>
@ -47,7 +53,7 @@ $isIframe = isset($_GET['_render']) && $_GET['_render'] === 'iframe';
<script type="text/javascript" src="<?= $this->href($jsfile) ?>"></script>
<script type="text/javascript">
var icinga = new Icinga({
baseUrl: '<?= $this->href('/') ?>',
baseUrl: '<?= $this->href('/') ?>'
});
</script>
</body>

View File

@ -14,7 +14,7 @@ $menu = Menu::fromConfig();
?>
<div id="menu" data-base-target="_main">
<form action="<?= $this->href('search') ?>" method="get">
<input type="text" name="q" class="search autofocus" placeholder="Search..." autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />
<input type="text" name="q" class="search autofocus" placeholder="<?= $this->translate('Search...') ?>" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />
</form>
<?= $this->partial('parts/menu.phtml', array(
'items' => $menu->getChildren(),

Binary file not shown.

View File

@ -0,0 +1,487 @@
# Icinga Web 2 - Head for multiple monitoring backends.
# Copyright (C) 2014 Icinga Development Team
# This file is distributed under the same license as Icinga Web 2.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: Icinga Web 2 (0.1)\n"
"Report-Msgid-Bugs-To: dev@icinga.org\n"
"POT-Creation-Date: 2014-05-29 11:12+0000\n"
"PO-Revision-Date: 2014-05-29 13:19+0100\n"
"Last-Translator: Thomas Gelf <thomas@gelf.net>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: /usr/local/src/bugfix.master/application/views/scripts/mixedPagination.phtml:15
#, php-format
msgid "%d to %d of %d"
msgstr "%d bis %d von %d"
#: /usr/local/src/bugfix.master/application/views/scripts/pivottablePagination.phtml:9
#, php-format
msgid "%s: %d to %d of %d"
msgstr "%s: %d bis %d von %d"
#: /usr/local/src/bugfix.master/application/forms/Config/LoggingForm.php:117
msgid "Application Prefix"
msgstr "Anwendungspräfix"
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/DbBackendForm.php:78
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/LdapBackendForm.php:80
msgid "Backend Name"
msgstr "Backend-Name"
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:282
msgid "Bind DN"
msgstr "Bind DN"
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:294
msgid "Bind Password"
msgstr "Bind Kennwort"
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:358
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/BaseBackendForm.php:139
msgid "Check this box to enforce changes without connectivity validation"
msgstr "Aktiviere dieses Häkchen um die Änderungen ohne Validierung der Verbindung zu speichern"
#: /usr/local/src/bugfix.master/application/forms/Config/LoggingForm.php:73
msgid "Check this to enable logging."
msgstr "Aktiviere dieses Häkchen um das Logging zu aktivieren."
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/LdapBackendForm.php:187
msgid "Connection Validation Failed: "
msgstr "Überprüfung der Verbindung fehlgeschlagen: "
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:477
msgid "Connectivity validation failed, connection to the given resource not possible."
msgstr "Überprüfung fehlgeschlagen, konnte keine Verbindung zu der angegebenen Ressource herstellen."
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:454
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:470
msgid "Connectivity validation failed, the provided file does not exist."
msgstr "Überprüfung fehlgeschlagen, die angegebene Datei existiert nicht."
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/DbBackendForm.php:90
msgid "Database Connection"
msgstr "Datenbankverbindung"
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:183
msgid "Database Name"
msgstr "Datenbankname"
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:144
msgid "Database Type"
msgstr "Datenbanktyp"
#: /usr/local/src/bugfix.master/application/forms/Config/LoggingForm.php:89
msgid "Debug"
msgstr "Debug"
#: /usr/local/src/bugfix.master/application/forms/Config/GeneralForm.php:185
msgid "Default Language"
msgstr "Standardsprache"
#: /usr/local/src/bugfix.master/application/controllers/ErrorController.php:62
#, php-format
msgid "Enabling the \"%s\" module might help!"
msgstr "Das Modul \"%s\" zu aktivieren könnte helfen!"
#: /usr/local/src/bugfix.master/application/forms/Config/LoggingForm.php:86
msgid "Error"
msgstr "Fehler"
#: /usr/local/src/bugfix.master/application/forms/Config/LoggingForm.php:139
msgid "Facility"
msgstr "Facility"
#: /usr/local/src/bugfix.master/application/forms/Config/LoggingForm.php:102
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:383
msgid "File"
msgstr "Datei"
#: /usr/local/src/bugfix.master/application/forms/Config/LoggingForm.php:155
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:220
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:231
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:308
msgid "Filepath"
msgstr "Dateipfad"
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:357
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/BaseBackendForm.php:138
msgid "Force Changes"
msgstr "Änderungen erzwingen"
#: /usr/local/src/bugfix.master/application/views/scripts/search/hint.phtml:7
msgid "Hint"
msgstr "Hinweis"
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:160
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:260
msgid "Host"
msgstr "Host"
#: /usr/local/src/bugfix.master/application/controllers/SearchController.php:33
#: /usr/local/src/bugfix.master/application/views/scripts/pivottablePagination.phtml:28
msgid "Hosts"
msgstr "Hosts"
#: /usr/local/src/bugfix.master/application/views/scripts/search/hint.phtml:6
msgid "I'm ready to search, waiting for your input"
msgstr "Ich bin bereit zur Suche, warte auf deine Eingabe"
#: /usr/local/src/bugfix.master/application/controllers/AuthenticationController.php:63
#: /usr/local/src/bugfix.master/application/views/scripts/authentication/login.phtml:8
msgid "Icingaweb Login"
msgstr "Icingaweb Anmeldung"
#: /usr/local/src/bugfix.master/application/views/scripts/authentication/logout.phtml:17
msgid "If this message does not disappear, it might be necessary to quit the current session manually by clearing the cache, or by closing the current browser session."
msgstr "Wenn diese Nachricht nicht verschwindet könnte es nötig sein die aktuelle Sitzung manuell zu beenden indem der Cache gelöscht order die Browsersitzung geschlossen wird."
#: /usr/local/src/bugfix.master/application/controllers/AuthenticationController.php:118
msgid "Incorrect username or password"
msgstr "Benutzername oder Kennwort ungültig"
#: /usr/local/src/bugfix.master/application/forms/Config/LoggingForm.php:88
msgid "Information"
msgstr "Information"
#: /usr/local/src/bugfix.master/library/Icinga/Web/Wizard/Wizard.php:337
#: /usr/local/src/bugfix.master/library/Icinga/Web/Wizard/Wizard.php:380
msgid "Install"
msgstr "Installieren"
#: /usr/local/src/bugfix.master/application/views/scripts/install/index.phtml:29
msgid "Installation"
msgstr "Installation"
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/LdapBackendForm.php:92
msgid "LDAP Resource"
msgstr "LDAP Ressource"
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/LdapBackendForm.php:115
msgid "LDAP User Name Attribute"
msgstr "LDAP-Attribut für Benutzername"
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/LdapBackendForm.php:104
msgid "LDAP User Object Class"
msgstr "LDAP Objektklasse für Benutzer"
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:232
msgid "Location of your icinga objects.cache file"
msgstr "Pfad zur Datei objects.cache von Icinga"
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:221
msgid "Location of your icinga status.dat file"
msgstr "Pfad zur Datei status.dat von Icinga"
#: /usr/local/src/bugfix.master/application/controllers/InstallController.php:69
msgid "Logging"
msgstr "Logging"
#: /usr/local/src/bugfix.master/application/forms/Config/LoggingForm.php:72
msgid "Logging Enabled"
msgstr "Logging aktiv"
#: /usr/local/src/bugfix.master/application/forms/Config/LoggingForm.php:82
msgid "Logging Level"
msgstr "Log-Level"
#: /usr/local/src/bugfix.master/application/forms/Config/LoggingForm.php:98
msgid "Logging Type"
msgstr "Logging-Typ"
#: /usr/local/src/bugfix.master/application/views/scripts/authentication/logout.phtml:15
msgid "Logging out..."
msgstr "Abmelden..."
#: /usr/local/src/bugfix.master/application/views/scripts/authentication/logout.phtml:28
msgid "Login"
msgstr "Anmelden"
#: /usr/local/src/bugfix.master/application/layouts/scripts/body.phtml:39
#: /usr/local/src/bugfix.master/application/layouts/scripts/parts/topbar.phtml:35
msgid "Logout"
msgstr "Abmelden"
#: /usr/local/src/bugfix.master/application/views/scripts/authentication/logout.phtml:64
msgid "Logout not possible, it may be necessary to quit the session manually by clearing the cache, or closing the current browser session. Error: "
msgstr ""
#: /usr/local/src/bugfix.master/application/views/scripts/authentication/logout.phtml:69
msgid "Logout successful!"
msgstr "Abmelden erfolgreich!"
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/ReorderForm.php:137
msgid "Move down in authentication order"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/ReorderForm.php:111
msgid "Move up in authentication order"
msgstr ""
#: /usr/local/src/bugfix.master/application/views/scripts/pivottablePagination.phtml:16
msgid "Navigation"
msgstr "Navigation"
#: /usr/local/src/bugfix.master/application/views/scripts/mixedPagination.phtml:83
#: /usr/local/src/bugfix.master/application/views/scripts/mixedPagination.phtml:86
#: /usr/local/src/bugfix.master/library/Icinga/Web/Wizard/Wizard.php:337
#: /usr/local/src/bugfix.master/library/Icinga/Web/Wizard/Wizard.php:380
msgid "Next"
msgstr "Weiter"
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/DbBackendForm.php:144
msgid "No users found under the specified database backend"
msgstr ""
#: /usr/local/src/bugfix.master/application/controllers/ErrorController.php:59
msgid "Page not found."
msgstr "Seite nicht gefunden."
#: /usr/local/src/bugfix.master/application/forms/Authentication/LoginForm.php:65
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:206
msgid "Password"
msgstr "Kennwort"
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:319
msgid "Pattern"
msgstr "Muster"
#: /usr/local/src/bugfix.master/library/Icinga/Web/Form/Element/Number.php:61
msgid "Please enter a number."
msgstr "Bitte eine Nummer eingeben."
#: /usr/local/src/bugfix.master/application/views/scripts/search/hint.phtml:8
msgid "Please use the asterisk (*) as a placeholder for wildcard searches. For convenience I'll always add a wildcard after the last character you typed."
msgstr "Bitte benutze das Sternchen (*) als Jokerzeichen für eine Suche mit Platzhaltern. Der Einfachheit halber hänge ich immer einen Platzhalter hinter das letzte von dir getippte Zeichen."
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:171
msgid "Port"
msgstr "Port"
#: /usr/local/src/bugfix.master/application/layouts/scripts/body.phtml:38
#: /usr/local/src/bugfix.master/application/layouts/scripts/parts/topbar.phtml:32
msgid "Preferences"
msgstr "Einstellungen"
#: /usr/local/src/bugfix.master/application/views/scripts/mixedPagination.phtml:45
#: /usr/local/src/bugfix.master/application/views/scripts/mixedPagination.phtml:48
msgid "Prev"
msgstr "Zurück"
#: /usr/local/src/bugfix.master/library/Icinga/Web/Wizard/Wizard.php:326
#: /usr/local/src/bugfix.master/library/Icinga/Web/Wizard/Wizard.php:367
msgid "Previous"
msgstr "Vorheriges"
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:333
msgid "Resource Name"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:375
msgid "Resource Type"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:271
msgid "Root DN"
msgstr "Wurzel-DN"
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:379
msgid "SQL Database"
msgstr "SQL Datenbank"
#: /usr/local/src/bugfix.master/application/controllers/SearchController.php:22
#: /usr/local/src/bugfix.master/application/controllers/SearchController.php:29
#: /usr/local/src/bugfix.master/application/controllers/SearchController.php:30
#: /usr/local/src/bugfix.master/application/controllers/SearchController.php:56
msgid "Search"
msgstr "Suche"
#: /usr/local/src/bugfix.master/application/layouts/scripts/parts/navigation.phtml:17
msgid "Search..."
msgstr "Suche..."
#: /usr/local/src/bugfix.master/application/forms/Config/GeneralForm.php:189
msgid "Select the language to use by default. Can be overwritten by a user in his preferences."
msgstr ""
#: /usr/local/src/bugfix.master/application/controllers/SearchController.php:41
#: /usr/local/src/bugfix.master/application/views/scripts/pivottablePagination.phtml:34
msgid "Services"
msgstr "Services"
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:245
msgid "Socket"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/LoggingForm.php:140
msgid "The Syslog facility to utilize."
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/LdapBackendForm.php:116
msgid "The attribute name used for storing the user name on the ldap server"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/DbBackendForm.php:91
msgid "The database connection to use for authenticating with this provider"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:309
msgid "The filename to fetch information from"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:161
msgid "The hostname of the database."
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:261
msgid "The hostname or address of the LDAP server to use for authentication"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/LoggingForm.php:156
msgid "The logfile to write messages to."
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/LoggingForm.php:83
msgid "The maximum loglevel to emit."
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/LoggingForm.php:118
msgid "The name of the application by which to prefix syslog messages."
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:184
msgid "The name of the database to use"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/LdapBackendForm.php:81
msgid "The name of this authentication backend"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/DbBackendForm.php:79
msgid "The name of this authentication provider"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/LdapBackendForm.php:105
msgid "The object class used for storing users on the ldap server"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:207
msgid "The password to use for authentication"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:295
msgid "The password to use for querying the ldap server"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:246
msgid "The path to your livestatus socket used for querying monitoring data"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:272
msgid "The path where users can be found on the ldap server"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:172
msgid "The port to use."
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:320
msgid "The regular expression by which to identify columns"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/LdapBackendForm.php:93
msgid "The resource to use for authenticating with this provider"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:145
msgid "The type of SQL database you want to create."
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/LoggingForm.php:99
msgid "The type of logging to utilize."
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:376
msgid "The type of resource"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:334
msgid "The unique name of this resource"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:283
msgid "The user dn to use for querying the ldap server"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:195
msgid "The user name to use for authentication."
msgstr ""
#: /usr/local/src/bugfix.master/application/views/scripts/config/module.phtml:6
msgid "There is no such module installed."
msgstr "Gegenwärtig ist kein solches Modul installiert."
#: /usr/local/src/bugfix.master/application/views/scripts/config/module.phtml:32
msgid "This module has no dependencies"
msgstr "Dieses Modul hat keine Abhängigkeiten"
#: /usr/local/src/bugfix.master/library/Icinga/Application/Modules/Module.php:383
msgid "This module has no description"
msgstr "Dieses Modul hat keine Beschreibung"
#: /usr/local/src/bugfix.master/application/forms/Preference/GeneralForm.php:100
msgid "Use Default Language"
msgstr "Standardsprache verwenden"
#: /usr/local/src/bugfix.master/application/forms/Preference/GeneralForm.php:109
msgid "Use the following language to display texts and messages"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Authentication/LoginForm.php:57
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:194
msgid "Username"
msgstr "Benutzername"
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/LdapBackendForm.php:169
msgid "Using ldap is not possible, the php extension \"ldap\" is not installed."
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/Authentication/DbBackendForm.php:148
#, php-format
msgid "Using the specified backend failed: %s"
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/LoggingForm.php:87
msgid "Warning"
msgstr "Warnung"
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:435
msgid "You need to install the php extension \"mysql\" and the Zend_Pdo_Mysql classes to use MySQL database resources."
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Config/ResourceForm.php:442
msgid "You need to install the php extension \"pgsql\" and the Zend_Pdo_Pgsql classes to use PostgreSQL database resources."
msgstr ""
#: /usr/local/src/bugfix.master/application/forms/Preference/GeneralForm.php:106
msgid "Your Current Language"
msgstr "Deine aktuelle Sprache"
#: /usr/local/src/bugfix.master/library/Icinga/Util/Format.php:108
#: /usr/local/src/bugfix.master/library/Icinga/Util/Format.php:114
msgid "for"
msgstr "für"
#: /usr/local/src/bugfix.master/library/Icinga/Util/Format.php:112
#: /usr/local/src/bugfix.master/library/Icinga/Util/Format.php:131
#: /usr/local/src/bugfix.master/library/Icinga/Util/Format.php:133
msgid "since"
msgstr "seit"
#~ msgid "Icinga Users Login"
#~ msgstr "Icinga Benutzeranmeldung"

Binary file not shown.

View File

@ -0,0 +1,559 @@
# Icinga Web 2 - Head for multiple monitoring backends.
# Copyright (C) 2014 Icinga Development Team
# This file is distributed under the same license as Icinga Web 2.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: Icinga Web 2 (0.1)\n"
"Report-Msgid-Bugs-To: dev@icinga.org\n"
"POT-Creation-Date: 2014-06-03 15:23+0200\n"
"PO-Revision-Date: 2014-06-03 12:09-0300\n"
"Last-Translator: Carlos Cesario <carloscesario@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pt_BR\n"
"X-Generator: Poedit 1.5.4\n"
#: /usr/local/icingaweb/application/views/scripts/mixedPagination.phtml:15
#, php-format
msgid "%d to %d of %d"
msgstr "%d para %d de %d"
#: /usr/local/icingaweb/application/views/scripts/pivottablePagination.phtml:9
#, php-format
msgid "%s: %d to %d of %d"
msgstr "%s: %d para %d de %d"
#: /usr/local/icingaweb/application/forms/Config/LoggingForm.php:117
msgid "Application Prefix"
msgstr "Prefixo da aplicação"
#: /usr/local/icingaweb/application/forms/Config/Authentication/DbBackendForm.php:78
#: /usr/local/icingaweb/application/forms/Config/Authentication/LdapBackendForm.php:80
msgid "Backend Name"
msgstr "Nome do backend"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:282
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:282
msgid "Bind DN"
msgstr "Bind DN"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:294
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:294
msgid "Bind Password"
msgstr "Senha Bind"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:358
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:358
#: /usr/local/icingaweb/application/forms/Config/Authentication/BaseBackendForm.php:139
msgid "Check this box to enforce changes without connectivity validation"
msgstr "Marque esta caixa para aplicar as mudanças sem validação conectividade"
#: /usr/local/icingaweb/application/forms/Config/LoggingForm.php:73
msgid "Check this to enable logging."
msgstr "Marque esta opção para ativar o registro log."
#: /usr/local/icingaweb/application/forms/Config/Authentication/LdapBackendForm.php:187
msgid "Connection Validation Failed: "
msgstr "Validação de conexão falhou:"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:477
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:457
msgid ""
"Connectivity validation failed, connection to the given resource not "
"possible."
msgstr ""
"A validação de conectividade falhou, a conexão com o recurso selecionado não "
"é possível."
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:454
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:470
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:434
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:450
msgid "Connectivity validation failed, the provided file does not exist."
msgstr "A validação de conectividade falhou, o arquivo fornecido não existe."
#: /usr/local/icingaweb/application/forms/Config/Authentication/DbBackendForm.php:90
msgid "Database Connection"
msgstr "Conexão com o banco de dados"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:183
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:183
msgid "Database Name"
msgstr "Nome do banco de dados"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:144
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:144
msgid "Database Type"
msgstr "Tipo do banco de dados"
#: /usr/local/icingaweb/application/forms/Config/LoggingForm.php:89
msgid "Debug"
msgstr "Depurar"
#: /usr/local/icingaweb/application/forms/Config/GeneralForm.php:185
msgid "Default Language"
msgstr "Idioma padrão"
#: /usr/local/icingaweb/application/controllers/ErrorController.php:62
#, php-format
msgid "Enabling the \"%s\" module might help!"
msgstr "Habilitando o módulo \"%s\" pode ajudar!"
#: /usr/local/icingaweb/application/forms/Config/LoggingForm.php:86
msgid "Error"
msgstr "Erro"
#: /usr/local/icingaweb/application/forms/Config/LoggingForm.php:139
msgid "Facility"
msgstr "Facilidade"
#: /usr/local/icingaweb/application/forms/Config/LoggingForm.php:102
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:383
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:383
msgid "File"
msgstr "Arquivo"
#: /usr/local/icingaweb/application/forms/Config/LoggingForm.php:155
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:220
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:231
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:308
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:220
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:231
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:308
msgid "Filepath"
msgstr "Caminho do arquivo"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:357
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:357
#: /usr/local/icingaweb/application/forms/Config/Authentication/BaseBackendForm.php:138
msgid "Force Changes"
msgstr "Forçar mudanças"
#: /usr/local/icingaweb/application/views/scripts/search/hint.phtml:7
msgid "Hint"
msgstr "Sugestão"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:160
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:260
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:160
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:260
msgid "Host"
msgstr "Host"
#: /usr/local/icingaweb/application/views/scripts/pivottablePagination.phtml:28
#: /usr/local/icingaweb/application/controllers/SearchController.php:33
msgid "Hosts"
msgstr "Hosts"
#: /usr/local/icingaweb/application/views/scripts/search/hint.phtml:6
msgid "I'm ready to search, waiting for your input"
msgstr "Estou pronto para pesquisar, aguardando sua entrada"
#: /usr/local/icingaweb/application/views/scripts/authentication/login.phtml:8
#: /usr/local/icingaweb/application/controllers/AuthenticationController.php:63
msgid "Icingaweb Login"
msgstr "Login no Icingaweb"
#: /usr/local/icingaweb/application/views/scripts/authentication/logout.phtml:17
msgid ""
"If this message does not disappear, it might be necessary to quit the "
"current session manually by clearing the cache, or by closing the current "
"browser session."
msgstr ""
"Se esta mensagem não desaparecer, pode ser necessário sair da sessão atual "
"manualmente, limpando o cache ou fechando a sessão atual do navegador. "
#: /usr/local/icingaweb/application/controllers/AuthenticationController.php:118
msgid "Incorrect username or password"
msgstr "Usuário ou senha inválido"
#: /usr/local/icingaweb/application/forms/Config/LoggingForm.php:88
msgid "Information"
msgstr "Informação"
#: /usr/local/icingaweb/library/Icinga/Web/Wizard/Wizard.php:337
#: /usr/local/icingaweb/library/Icinga/Web/Wizard/Wizard.php:380
msgid "Install"
msgstr "Instalar"
#: /usr/local/icingaweb/application/views/scripts/install/index.phtml:29
msgid "Installation"
msgstr "Instalação"
#: /usr/local/icingaweb/application/forms/Config/Authentication/LdapBackendForm.php:92
msgid "LDAP Resource"
msgstr "Recurso LDAP"
#: /usr/local/icingaweb/application/forms/Config/Authentication/LdapBackendForm.php:115
msgid "LDAP User Name Attribute"
msgstr "Atributo LDAP Nome de usuário"
#: /usr/local/icingaweb/application/forms/Config/Authentication/LdapBackendForm.php:104
msgid "LDAP User Object Class"
msgstr "Classe LDAP Objeto de usuário"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:232
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:232
msgid "Location of your icinga objects.cache file"
msgstr "Localização do arquivo objects.cache do seu icinga"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:221
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:221
msgid "Location of your icinga status.dat file"
msgstr "Localização do arquivo status.dat do seu icinga"
#: /usr/local/icingaweb/application/controllers/InstallController.php:69
msgid "Logging"
msgstr "Registro de log"
#: /usr/local/icingaweb/application/forms/Config/LoggingForm.php:72
msgid "Logging Enabled"
msgstr "Registro de log habilitado"
#: /usr/local/icingaweb/application/forms/Config/LoggingForm.php:82
msgid "Logging Level"
msgstr "Nível do registro de log"
#: /usr/local/icingaweb/application/forms/Config/LoggingForm.php:98
msgid "Logging Type"
msgstr "Tipo do registro de log"
#: /usr/local/icingaweb/application/views/scripts/authentication/logout.phtml:15
msgid "Logging out..."
msgstr "Saída do registro de log..."
#: /usr/local/icingaweb/application/views/scripts/authentication/logout.phtml:28
msgid "Login"
msgstr "Login"
#: /usr/local/icingaweb/application/layouts/scripts/body.phtml:39
#: /usr/local/icingaweb/application/layouts/scripts/parts/topbar.phtml:35
msgid "Logout"
msgstr "Sair"
#: /usr/local/icingaweb/application/views/scripts/authentication/logout.phtml:64
msgid ""
"Logout not possible, it may be necessary to quit the session manually by "
"clearing the cache, or closing the current browser session. Error: "
msgstr ""
"Não foi possível, é necessário sair da sessão manualmente, limpando o cache "
"ou fechando a sessão atual do navegador. Erro:"
#: /usr/local/icingaweb/application/views/scripts/authentication/logout.phtml:69
msgid "Logout successful!"
msgstr "Sucesso na saída!"
#: /usr/local/icingaweb/application/forms/Config/Authentication/ReorderForm.php:137
msgid "Move down in authentication order"
msgstr "Mover para baixo na ordem de autenticação"
#: /usr/local/icingaweb/application/forms/Config/Authentication/ReorderForm.php:111
msgid "Move up in authentication order"
msgstr "Mover para cima na ordem de autenticação"
#: /usr/local/icingaweb/application/views/scripts/pivottablePagination.phtml:16
msgid "Navigation"
msgstr "Navegação"
#: /usr/local/icingaweb/application/views/scripts/mixedPagination.phtml:83
#: /usr/local/icingaweb/application/views/scripts/mixedPagination.phtml:86
#: /usr/local/icingaweb/library/Icinga/Web/Wizard/Wizard.php:337
#: /usr/local/icingaweb/library/Icinga/Web/Wizard/Wizard.php:380
msgid "Next"
msgstr "Próximo"
#: /usr/local/icingaweb/application/forms/Config/Authentication/DbBackendForm.php:144
msgid "No users found under the specified database backend"
msgstr "Nenhum usuário encontrado no backend do banco de dados especificado"
#: /usr/local/icingaweb/application/controllers/ErrorController.php:59
msgid "Page not found."
msgstr "Página não encontrada."
#: /usr/local/icingaweb/application/forms/Authentication/LoginForm.php:65
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:206
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:206
msgid "Password"
msgstr "Senha"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:319
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:319
msgid "Pattern"
msgstr "Padrão"
#: /usr/local/icingaweb/library/Icinga/Web/Form/Element/Number.php:61
msgid "Please enter a number."
msgstr "Por favor entre com um número."
#: /usr/local/icingaweb/application/views/scripts/search/hint.phtml:8
msgid ""
"Please use the asterisk (*) as a placeholder for wildcard searches. For "
"convenience I'll always add a wildcard after the last character you typed."
msgstr ""
"Por favor utilize o asterisco (*) como caractere curinga nas pesquisas. Para "
"maior comodidade vou sempre adicionar um curinga após o último caractere "
"digitado."
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:171
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:171
msgid "Port"
msgstr "Porta"
#: /usr/local/icingaweb/application/layouts/scripts/body.phtml:38
#: /usr/local/icingaweb/application/layouts/scripts/parts/topbar.phtml:32
msgid "Preferences"
msgstr "Preferências"
#: /usr/local/icingaweb/application/views/scripts/mixedPagination.phtml:45
#: /usr/local/icingaweb/application/views/scripts/mixedPagination.phtml:48
msgid "Prev"
msgstr "Ant"
#: /usr/local/icingaweb/library/Icinga/Web/Wizard/Wizard.php:326
#: /usr/local/icingaweb/library/Icinga/Web/Wizard/Wizard.php:367
msgid "Previous"
msgstr "Anterior"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:333
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:333
msgid "Resource Name"
msgstr "Nome do recurso"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:375
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:375
msgid "Resource Type"
msgstr "Tipo do recurso"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:271
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:271
msgid "Root DN"
msgstr "DN Root"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:379
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:379
msgid "SQL Database"
msgstr "Banco de dados SQL"
#: /usr/local/icingaweb/application/controllers/SearchController.php:22
#: /usr/local/icingaweb/application/controllers/SearchController.php:29
#: /usr/local/icingaweb/application/controllers/SearchController.php:30
#: /usr/local/icingaweb/application/controllers/SearchController.php:56
msgid "Search"
msgstr "Pesquisar"
#: /usr/local/icingaweb/application/layouts/scripts/parts/navigation.phtml:17
msgid "Search..."
msgstr "Pesquisar..."
#: /usr/local/icingaweb/application/forms/Config/GeneralForm.php:189
msgid ""
"Select the language to use by default. Can be overwritten by a user in his "
"preferences."
msgstr ""
"Selecione o idioma padrão a ser utilizado. Pode ser substituído por um "
"usuário em suas preferências."
#: /usr/local/icingaweb/application/views/scripts/pivottablePagination.phtml:34
#: /usr/local/icingaweb/application/controllers/SearchController.php:41
msgid "Services"
msgstr "Serviços"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:245
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:245
msgid "Socket"
msgstr "Soquete"
#: /usr/local/icingaweb/application/forms/Config/LoggingForm.php:140
msgid "The Syslog facility to utilize."
msgstr "A facilidade do SysLog a ser utilizada"
#: /usr/local/icingaweb/application/forms/Config/Authentication/LdapBackendForm.php:116
msgid "The attribute name used for storing the user name on the ldap server"
msgstr ""
"O nome do atributo utilizado para armazenar o nome do usuário no servidor "
"ldap"
#: /usr/local/icingaweb/application/forms/Config/Authentication/DbBackendForm.php:91
msgid "The database connection to use for authenticating with this provider"
msgstr ""
"A conexão com o banco a ser utilizada para autenticar com este provedor"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:309
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:309
msgid "The filename to fetch information from"
msgstr "O nome do arquivo a ser consultado"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:161
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:161
msgid "The hostname of the database."
msgstr "O nome do host do banco de dados."
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:261
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:261
msgid "The hostname or address of the LDAP server to use for authentication"
msgstr ""
"O nome do host ou endereço do servidor LDAP a ser utilizado para a "
"autenticação"
#: /usr/local/icingaweb/application/forms/Config/LoggingForm.php:156
msgid "The logfile to write messages to."
msgstr "O arquivo de log para salvar as mensagens."
#: /usr/local/icingaweb/application/forms/Config/LoggingForm.php:83
msgid "The maximum loglevel to emit."
msgstr "O nível máximo de log a ser emitido."
#: /usr/local/icingaweb/application/forms/Config/LoggingForm.php:118
msgid "The name of the application by which to prefix syslog messages."
msgstr ""
"O nome da aplicação que será adicionado como prefixo nas mensagens do syslog."
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:184
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:184
msgid "The name of the database to use"
msgstr "O nome do banco de dados a ser utilizado"
#: /usr/local/icingaweb/application/forms/Config/Authentication/LdapBackendForm.php:81
msgid "The name of this authentication backend"
msgstr "O nome deste backend de autenticação"
#: /usr/local/icingaweb/application/forms/Config/Authentication/DbBackendForm.php:79
msgid "The name of this authentication provider"
msgstr "O nome deste provedor de autenticação"
#: /usr/local/icingaweb/application/forms/Config/Authentication/LdapBackendForm.php:105
msgid "The object class used for storing users on the ldap server"
msgstr ""
"A classe de objeto a ser utilizada para armazenar os usuários no servidor "
"ldap"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:207
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:207
msgid "The password to use for authentication"
msgstr "A senha a ser utilizada para a autenticação"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:295
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:295
msgid "The password to use for querying the ldap server"
msgstr "A senha a ser utilizada para consultar o servidor ldap"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:246
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:246
msgid "The path to your livestatus socket used for querying monitoring data"
msgstr ""
"O caminho para o socket do livestatus utilizado para consultar os dados de "
"monitoramento"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:272
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:272
msgid "The path where users can be found on the ldap server"
msgstr "O caminho onde os usuários possam ser encontrados no servidor ldap"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:172
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:172
msgid "The port to use."
msgstr "A porta utilizada."
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:320
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:320
msgid "The regular expression by which to identify columns"
msgstr "A expressão regular para identificar as colunas"
#: /usr/local/icingaweb/application/forms/Config/Authentication/LdapBackendForm.php:93
msgid "The resource to use for authenticating with this provider"
msgstr "O recurso a ser utilizado para autenticação com este provedor"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:145
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:145
msgid "The type of SQL database you want to create."
msgstr "O tipo do banco de dados SQL que você quer criar."
#: /usr/local/icingaweb/application/forms/Config/LoggingForm.php:99
msgid "The type of logging to utilize."
msgstr "O tipo do registro de log a ser utilizado."
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:376
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:376
msgid "The type of resource"
msgstr "O tipo do recurso"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:334
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:334
msgid "The unique name of this resource"
msgstr "O nome único deste recurso"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:283
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:283
msgid "The user dn to use for querying the ldap server"
msgstr "O usuário DN a ser utilizado para consultar o servidor ldap."
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:195
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:195
msgid "The user name to use for authentication."
msgstr "O nome do usuário a ser utilizado para a autenticação."
#: /usr/local/icingaweb/application/views/scripts/config/module.phtml:6
msgid "There is no such module installed."
msgstr "Não existe nenhum módulo instalado."
#: /usr/local/icingaweb/application/views/scripts/config/module.phtml:32
msgid "This module has no dependencies"
msgstr "Este módulo não tem dependências"
#: /usr/local/icingaweb/library/Icinga/Application/Modules/Module.php:383
msgid "This module has no description"
msgstr "Este módulo não tem descrição"
#: /usr/local/icingaweb/application/forms/Preference/GeneralForm.php:100
msgid "Use Default Language"
msgstr "Utilizar idioma padrão"
#: /usr/local/icingaweb/application/forms/Preference/GeneralForm.php:109
msgid "Use the following language to display texts and messages"
msgstr "Utilizar o seguinte idioma para exibir textos e mensagens"
#: /usr/local/icingaweb/application/forms/Authentication/LoginForm.php:57
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:194
#: /usr/local/icingaweb/application/forms/Config/Resource/ResourceForm.php:194
msgid "Username"
msgstr "Nome do usuário"
#: /usr/local/icingaweb/application/forms/Config/Authentication/LdapBackendForm.php:169
msgid ""
"Using ldap is not possible, the php extension \"ldap\" is not installed."
msgstr ""
"A utilização do ldap não é possível, a extensão php \"ldap\" não está "
"instalada."
#: /usr/local/icingaweb/application/forms/Config/Authentication/DbBackendForm.php:148
#, php-format
msgid "Using the specified backend failed: %s"
msgstr "A utilização do backend especificado falhou: %s"
#: /usr/local/icingaweb/application/forms/Config/LoggingForm.php:87
msgid "Warning"
msgstr "Atenção"
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:435
msgid ""
"You need to install the php extension \"mysql\" and the Zend_Pdo_Mysql "
"classes to use MySQL database resources."
msgstr ""
"Você precisa instalar a extensão php \"mysql\" e as classes Zend_Pdo_Mysql "
"para usar o recurso de banco de dados MySQL."
#: /usr/local/icingaweb/application/forms/Config/ResourceForm.php:442
msgid ""
"You need to install the php extension \"pgsql\" and the Zend_Pdo_Pgsql "
"classes to use PostgreSQL database resources."
msgstr ""
"Você precisa instalar a extensão php \"pgsql\" e as classes Zend_Pdo_Pgsql "
"para usar o recurso de banco de dados PostgreSQL."
#: /usr/local/icingaweb/application/forms/Preference/GeneralForm.php:106
msgid "Your Current Language"
msgstr "Seu idioma atual"

View File

@ -5,7 +5,7 @@
</div>
</div>
<div class="form" data-base-target="layout">
<h1>Icinga Users Login</h1>
<h1><?= $this->translate('Icingaweb Login') ?></h1>
<?php
/* TODO: remove this as soon as notifications and forms are ready */
if (isset($this->errorInfo)): ?>

View File

@ -0,0 +1,56 @@
<div class="controls">
<?= $this->tabs ?>
</div>
<div class="content">
<?php if (! $module): ?>
<?= $this->translate('There is no such module installed.') ?>
<? return; endif ?>
<?php
$dependencies = $module->getDependencies();
$restrictions = $module->getProvidedRestrictions();
$permissions = $module->getProvidedPermissions();
?>
<h1><?= $this->escape($module->getTitle()) ?></h1>
<table class="avp">
<tr>
<th><?= $this->escape('Name') ?></th>
<td><?= $this->escape($module->getName()) ?></td>
</tr>
<tr>
<th><?= $this->escape('Version') ?></th>
<td><?= $this->escape($module->getVersion()) ?></td></tr>
<tr>
<th><?= $this->escape('Description') ?></th>
<td><?= nl2br($this->escape($module->getDescription())) ?></td>
</tr>
<tr>
<th><?= $this->escape('Dependencies') ?></th>
<td><?php
if (empty($dependencies)):
echo $this->translate('This module has no dependencies');
else: foreach ($dependencies as $name => $versionString): ?>
<strong><?= $this->escape($name) ?></strong><?php if ($versionString !== true): ?>: <?= $this->escape($versionString) ?><?php endif ?><br />
<?php endforeach; endif ?></td>
</tr>
<?php if (! empty($permissions)): ?>
<tr>
<th><?= $this->escape('Permissions') ?></th>
<td><?php foreach ($permissions as $permission): ?>
<strong><?= $this->escape($permission->name) ?></strong>: <?= $this->escape($permission->description) ?><br />
<?php endforeach ?></td>
</tr>
<?php endif ?>
<?php if (! empty($restrictions)): ?>
<tr>
<th><?= $this->escape('Restrictions') ?></th>
<td><?php foreach ($restrictions as $restriction): ?>
<strong><?= $this->escape($restriction->name) ?></strong>: <?= $this->escape($restriction->description) ?><br />
<?php endforeach ?></td>
</tr>
<?php endif ?>
</table>
</div>

View File

@ -1,18 +0,0 @@
<table >
<thead>
<tr style="text-align:left">
<th width="70%">Module</th>
<th width="15%">Type</th>
<th width="15%">Active</th>
</tr>
</thead>
<tbody>
<?php foreach($this->modules as $module): ?>
<tr>
<td><?= $module["name"]; ?></td>
<td><?= $module["type"]; ?></td>
<td><?= $module["active"]; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>

View File

@ -0,0 +1,41 @@
<?php
use Icinga\Web\Url;
$this->modules->limit(10);
$modules = $this->modules->paginate();
?>
<div class="controls">
<?= $this->tabs->render($this); ?>
</div>
<div class="content">
<h3>Installed Modules</h3>
<?php if (isset($this->messageBox)): ?>
<?= $this->messageBox->render() ?>
<?php endif ?>
<?= $this->paginationControl($modules, null, null, array(
'preserve' => $this->preserve
));
?>
<table class="action" data-base-target="_next">
<tbody>
<?php foreach ($modules as $module): ?>
<tr>
<td>
<?php if ($module->enabled): ?>
<?= $this->icon('success.png', 'Module is enabled') ?>
<?php else: ?>
<?= $this->icon('remove.png', 'Module is disabled') ?>
<? endif ?>
<a href="<?= $this->url('config/module/', array('name' => $module->name)) ?>"><?= $this->escape($module->name); ?></a>
(<?=
$module->enabled ? ($module->loaded ? 'enabled' : 'failed') : 'disabled' ?>)
</td>
</tr>
<? endforeach ?>
</tbody>
</table>
</div>

View File

@ -1,6 +1,22 @@
<div class="controls">
<?= $this->tabs ?>
</div>
<div class="dashboard content">
<?= $this->dashboard ?>
</div>
<?php if ($this->dashboard): ?>
<div class="dashboard content">
<?= $this->dashboard ?>
</div>
<?php else: ?>
<div class="content">
<h1>No dashboard configuration found!</h1>
<p>
<?=
$this->translate('We tried to load a dashboard configuration with no success.'
. ' Please have look that the configuration does exist:');
?>
<code>
<?= $this->escape($this->configPath) ?>.ini
</code>
</p>
</div>
<?php endif; ?>

View File

@ -12,7 +12,7 @@ if ($this->pageCount <= 1) return;
?><ul class="pagination"
<?php
$fromto = $this->translate('%d to %d of %d');
$fromto = t('%d to %d of %d');
$total = $this->totalItemCount;
$limit = $this->itemCountPerPage;
$title_prev = sprintf(
@ -42,10 +42,10 @@ if (isset($this->previous)) {
array('page' => $this->previous)
)->getAbsoluteUrl(),
$title_prev,
'« ' . $this->translate('Prev')
'« ' . t('Prev')
);
} else {
echo ' ><li class="disabled"><span>« ' . $this->translate('Prev') . '</span></li';
echo ' ><li class="disabled"><span>« ' . t('Prev') . '</span></li';
}
foreach ($this->pagesInRange as $page) {
@ -80,10 +80,10 @@ if (isset($this->next)) {
array('page' => $this->next)
)->getAbsoluteUrl(),
$title_next,
$this->translate('Next') . ' »'
t('Next') . ' »'
);
} else {
echo ' ><li class="disabled"><span>' . $this->translate('Next') . ' »</span></li';
echo ' ><li class="disabled"><span>' . t('Next') . ' »</span></li';
}
?>

View File

@ -6,14 +6,14 @@ if ($xAxisPaginator->count() <= 1 && $yAxisPaginator->count() <= 1) {
return; // Display this pagination only if there are multiple pages
}
$fromTo = $this->translate('%s: %d to %d of %d');
$fromTo = t('%s: %d to %d of %d');
$xAxisPages = $xAxisPaginator->getPages('all');
$yAxisPages = $yAxisPaginator->getPages('all');
?>
<div class="pivot-pagination">
<span><?= $this->translate('Navigation'); ?></span>
<span><?= t('Navigation'); ?></span>
<table>
<tbody>
<?php foreach ($yAxisPages->pagesInRange as $yAxisPage): ?>
@ -25,13 +25,13 @@ $yAxisPages = $yAxisPaginator->getPages('all');
array('page' => $xAxisPage . ',' . $yAxisPage)
)->getAbsoluteUrl(); ?>" title="<?= sprintf(
$fromTo,
$this->translate('Hosts'),
t('Hosts'),
($yAxisPage - 1) * $yAxisPages->itemCountPerPage + 1,
$yAxisPage === $yAxisPages->last ? $yAxisPages->totalItemCount : $yAxisPage * $yAxisPages->itemCountPerPage,
$yAxisPages->totalItemCount
) . '; ' . sprintf(
$fromTo,
$this->translate('Services'),
t('Services'),
($xAxisPage - 1) * $xAxisPages->itemCountPerPage + 1,
$xAxisPage === $xAxisPages->last ? $xAxisPages->totalItemCount : $xAxisPage * $xAxisPages->itemCountPerPage,
$xAxisPages->totalItemCount

View File

@ -0,0 +1,12 @@
<div class="controls">
<?= $this->tabs ?>
</div>
<div class="content">
<h1><?= $this->translate("I'm ready to search, waiting for your input") ?></h1>
<p><strong><?= $this->translate('Hint') ?>: </strong><?= $this->translate(
'Please use the asterisk (*) as a placeholder for wildcard searches.'
. " For convenience I'll always add a wildcard after the last character"
. ' you typed.'
) ?></p>
</div>

View File

@ -2,12 +2,6 @@
<?= $this->tabs ?>
</div>
<?php if ($this->dashboard): ?>
<div class="content dashboard">
<?= $this->dashboard ?>
</div>
<?php else: ?>
<div class="content">
<strong><?= $this->hint ?></strong>
</div>
<?php endif ?>

View File

@ -6,6 +6,11 @@
; The backends will be processed from top to bottom using the first backend for authentication which reports that
; the user trying to log in is available.
[autologin]
backend = autologin
;
; If you want to strip the domain
; strip_username_regexp = /\@[^$]+$/
[internal_ldap_authentication]
@ldap_auth_disabled@

View File

@ -11,10 +11,6 @@ timeFormat = "g:i A"
; won't show up in the list of disabled modules
; modulePath = "/vagrant/modules:/usr/share/icingaweb/modules"
; The used authentication-mode can be either "internal" to handle the authentication in IcingaWeb
; or "external" to delegate the authentication to the used WebServer
authenticationMode = "internal"
[logging]
enable = true
; Writing to a Stream
@ -43,8 +39,8 @@ level = 1
[preferences]
; Use INI file storage to save preferences to a local disk
type = "ini"
configPath = "@icingaweb_config_path@/preferences"
type = "ini"
config_path = "@icingaweb_config_path@/preferences"
; Use database storage to save preferences in either a MySQL or PostgreSQL database
;type = db

4
configure vendored
View File

@ -2950,7 +2950,7 @@ fi
#
# Create config files
#
ac_config_files="$ac_config_files Makefile config/authentication.ini config/config.ini config/resources.ini config/modules/monitoring/backends.ini config/modules/monitoring/instances.ini etc/apache/icingaweb.conf public/.htaccess public/index.php"
ac_config_files="$ac_config_files Makefile config/authentication.ini config/config.ini config/resources.ini config/modules/monitoring/backends.ini config/modules/monitoring/instances.ini etc/apache/icingaweb.conf"
#
@ -3669,8 +3669,6 @@ do
"config/modules/monitoring/backends.ini") CONFIG_FILES="$CONFIG_FILES config/modules/monitoring/backends.ini" ;;
"config/modules/monitoring/instances.ini") CONFIG_FILES="$CONFIG_FILES config/modules/monitoring/instances.ini" ;;
"etc/apache/icingaweb.conf") CONFIG_FILES="$CONFIG_FILES etc/apache/icingaweb.conf" ;;
"public/.htaccess") CONFIG_FILES="$CONFIG_FILES public/.htaccess" ;;
"public/index.php") CONFIG_FILES="$CONFIG_FILES public/index.php" ;;
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac

View File

@ -440,8 +440,6 @@ AC_CONFIG_FILES([
config/modules/monitoring/backends.ini
config/modules/monitoring/instances.ini
etc/apache/icingaweb.conf
public/.htaccess
public/index.php
])
#

View File

@ -1,12 +1,21 @@
Alias @web_path@ @prefix@/public
Alias @web_path@ "@prefix@/public"
<Directory "@prefix@/public">
Options -Indexes
AllowOverride All
Options SymLinksIfOwnerMatch
AllowOverride None
Order allow,deny
Allow from all
SetEnv ICINGAWEB_CONFIGDIR @icingaweb_config_path@
EnableSendfile Off
RewriteEngine on
RewriteBase @web_path@/
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
</Directory>

View File

@ -9,13 +9,21 @@
%define sharedir %{_datadir}/icingaweb
%define prefixdir %{_datadir}/icingaweb
%define logdir %{sharedir}/log
%define usermodparam -a -G
#%define logdir %{_localstatedir}/log/icingaweb
%if "%{_vendor}" == "suse"
%define phpname php5
%define phpzendname php5-ZendFramework
%define apache2modphpname apache2-mod_php5
%endif
%if "%{_vendor}" == "redhat"
# SLE 11 = 1110
%if 0%{?suse_version} == 1110
%define apache2modphpname apache2-mod_php53
%define usermodparam -A
%endif
%if "%{_vendor}" == "redhat" || 0%{?suse_version} == 1110
%define phpname php
%define phpzendname php-ZendFramework
%endif
@ -53,7 +61,7 @@ BuildArch: noarch
AutoReqProv: Off
%endif
Source0: icingaweb2-%{version}.tar.gz
Source0: icingaweb2-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
@ -62,9 +70,11 @@ BuildRequires: %{phpname}-devel >= 5.3.0
BuildRequires: %{phpname}-ldap
BuildRequires: %{phpname}-pdo
BuildRequires: %{phpzendname}
%if "%{_vendor}" != "suse"
BuildRequires: %{phpzendname}-Db-Adapter-Pdo
BuildRequires: %{phpzendname}-Db-Adapter-Pdo-Mysql
BuildRequires: %{phpzendname}-Db-Adapter-Pdo-Pgsql
%endif
%if "%{_vendor}" == "redhat"
%endif
@ -76,11 +86,13 @@ BuildRequires: %{phpname}-dom
%endif
Requires: %{phpname} >= 5.3.0
Requires: %{phpzendname}
Requires: %{phpzendname}
Requires: %{phpname}-ldap
Requires: %{phpname}-pdo
%if "%{_vendor}" == "redhat"
Requires: %{phpname}-common
Requires: %{phpzendname}-Db-Adapter-Pdo
Requires: %{phpzendname}-Db-Adapter-Pdo-Mysql
Requires: php-pear
%endif
%if "%{_vendor}" == "suse"
@ -90,12 +102,9 @@ Requires: %{phpname}-tokenizer
Requires: %{phpname}-gettext
Requires: %{phpname}-ctype
Requires: %{phpname}-json
Requires: apache2-mod_php5
Requires: %{apache2modphpname}
%endif
Requires: %{phpzendname}-Db-Adapter-Pdo
Requires: %{phpzendname}-Db-Adapter-Pdo-Mysql
Requires: php-Icinga
@ -137,7 +146,7 @@ IcingaWeb for RHEL and SUSE
===========================
Please check ./doc/installation.md
for requirements and database setup.
for requirements and database setup.
EOF
%install
@ -155,9 +164,8 @@ install -D -m0644 packages/rhel/etc/httpd/conf.d/icingaweb.conf %{buildroot}/%{a
%{__cp} -r application library modules public %{buildroot}/%{sharedir}/
# install index.php, .htaccess
# install index.php
install -m0644 packages/rhel/usr/share/icingaweb/public/index.php %{buildroot}/%{sharedir}/public/index.php
install -m0644 packages/rhel/usr/share/icingaweb/public/.htaccess %{buildroot}/%{sharedir}/public/.htaccess
# use the vagrant config for configuration for now - TODO
%{__cp} -r .vagrant-puppet/files/etc/icingaweb %{buildroot}/%{_sysconfdir}/
@ -174,8 +182,6 @@ install -D -m0755 bin/icingacli %{buildroot}/usr/bin/icingacli
# install sql schema files as example
# delete all *.in files
rm -f %{buildroot}/%{_datadir}/%{name}/public/index.php.in
rm -f %{buildroot}/%{_datadir}/%{name}/public/.htaccess.in
%pre
# Add apacheuser in the icingacmd group
@ -187,7 +193,7 @@ rm -f %{buildroot}/%{_datadir}/%{name}/public/.htaccess.in
getent group icingacmd > /dev/null
if [ $? -eq 0 ]; then
%{_sbindir}/usermod -a -G icingacmd %{apacheuser}
%{_sbindir}/usermod %{usermodparam} icingacmd %{apacheuser}
fi
# uncomment if building from git

View File

@ -133,18 +133,21 @@ abstract class ApplicationBootstrap
define('ICINGA_LIBDIR', $this->libDir);
}
// TODO: Make appdir configurable for packagers
$this->appDir = realpath($this->libDir. '/../application');
if (defined('ICINGAWEB_APPDIR')) {
$this->appDir = ICINGAWEB_APPDIR;
} elseif (array_key_exists('ICINGAWEB_APPDIR', $_SERVER)) {
$this->appDir = $_SERVER['ICINGAWEB_APPDIR'];
} else {
$this->appDir = realpath($this->libDir. '/../application');
}
if (!defined('ICINGA_APPDIR')) {
define('ICINGA_APPDIR', $this->appDir);
if (!defined('ICINGAWEB_APPDIR')) {
define('ICINGAWEB_APPDIR', $this->appDir);
}
if ($configDir === null) {
if (array_key_exists('ICINGAWEB_CONFIGDIR', $_SERVER)) {
$configDir = $_SERVER['ICINGAWEB_CONFIGDIR'];
} else if (array_key_exists('ICINGAWEB_CONFIGDIR', $_ENV)) {
$configDir = $_ENV['ICINGAWEB_CONFIGDIR'];
} else {
$configDir = '/etc/icingaweb';
}
@ -298,7 +301,6 @@ abstract class ApplicationBootstrap
$this->loader = new Loader();
$this->loader->registerNamespace('Icinga', $this->libDir. '/Icinga');
$this->loader->registerNamespace('Icinga\\Form', $this->appDir. '/forms');
$this->loader->register();
return $this;
@ -339,8 +341,8 @@ abstract class ApplicationBootstrap
explode(
':',
$this->config->global !== null
? $this->config->global->get('modulePath', ICINGA_APPDIR . '/../modules')
: ICINGA_APPDIR . '/../modules'
? $this->config->global->get('modulePath', ICINGAWEB_APPDIR . '/../modules')
: ICINGAWEB_APPDIR . '/../modules'
)
);
return $this;

View File

@ -124,6 +124,13 @@ class Cli extends ApplicationBootstrap
return $this->params;
}
public function dispatchModule($name, $basedir = null)
{
$this->getModuleManager()->loadModule($name, $basedir);
$this->cliLoader()->setModuleName($name);
$this->dispatch();
}
public function dispatch()
{
Benchmark::measure('Dispatching CLI command');
@ -138,7 +145,7 @@ class Cli extends ApplicationBootstrap
protected function dispatchOnce()
{
$loader = new Loader($this);
$loader = $this->cliLoader();
$loader->parseParams();
$loader->dispatch();
Benchmark::measure('All done');
@ -149,7 +156,7 @@ class Cli extends ApplicationBootstrap
protected function dispatchEndless()
{
$loader = new Loader($this);
$loader = $this->cliLoader();
$loader->parseParams();
$screen = Screen::instance();

View File

@ -82,7 +82,7 @@ class Config extends Zend_Config
$filepath = realpath($filename);
if ($filepath === false) {
$this->configFile = $filename;
} else if (is_readable($filepath)) {
} elseif (is_readable($filepath)) {
$this->configFile = $filepath;
$this->merge(new Zend_Config_Ini($filepath));
} else {
@ -102,8 +102,7 @@ class Config extends Zend_Config
public static function app($configname = 'config', $fromDisk = false)
{
if (!isset(self::$app[$configname]) || $fromDisk) {
$filename = self::$configDir . '/' . $configname . '.ini';
self::$app[$configname] = new Config($filename);
self::$app[$configname] = new Config(self::resolvePath($configname . '.ini'));
}
return self::$app[$configname];
}
@ -125,7 +124,7 @@ class Config extends Zend_Config
$moduleConfigs = self::$modules[$modulename];
if (!isset($moduleConfigs[$configname]) || $fromDisk) {
$moduleConfigs[$configname] = new Config(
self::$configDir . '/modules/' . $modulename . '/' . $configname . '.ini'
self::resolvePath('modules/' . $modulename . '/' . $configname . '.ini')
);
}
return $moduleConfigs[$configname];
@ -159,21 +158,17 @@ class Config extends Zend_Config
}
/**
* Return the input path with resolved path variables
* Prepend configuration base dir if input is relative
*
* Currently only %app% is considered a path variable and points to the application paths
*
* @param string $path The path to resolve
*
* @return string The resolved path
* @param string $path Input path
* @return string Absolute path
*/
public static function resolvePath($path)
{
try {
$appDir = realpath(Icinga::app()->getApplicationDir() . '/..');
} catch (ProgrammingError $appNotStarted) {
$appDir = realpath(__DIR__ . '/../../..');
if (strpos($path, DIRECTORY_SEPARATOR) === 0) {
return $path;
}
return str_replace('{app}', $appDir, $path);
return self::$configDir . DIRECTORY_SEPARATOR . $path;
}
}

View File

@ -4,7 +4,7 @@
namespace Icinga\Application;
use Icinga\Exception\ProgrammingError;
use Exception;
class Loader
{
@ -39,7 +39,11 @@ class Loader
public function registerNamespace($namespace, $directory)
{
if (!is_dir($directory)) {
throw new ProgrammingError('Directory does not exist: ' . $directory);
throw new Exception(sprintf(
'Namespace directory "%s" for "%s" does not exist',
$namespace,
$directory
));
}
$this->namespaces[$namespace] = $directory;

View File

@ -196,23 +196,22 @@ class Manager
/**
* Try to load the module and register it in the application
*
* @param string $name The name of the module to load
* @param mixed $moduleBase Alternative class to use instead of \Icinga\Application\Modules\Module for
* instantiating modules, used for testing
* @param string $name The name of the module to load
* @param mixed $basedir Optional module base directory
*
* @return self
* @return self
*/
public function loadModule($name, $moduleBase = null)
public function loadModule($name, $basedir = null)
{
if ($this->hasLoaded($name)) {
return $this;
}
$module = null;
if ($moduleBase === null) {
if ($basedir === null) {
$module = new Module($this->app, $name, $this->getModuleDir($name));
} else {
$module = new $moduleBase($this->app, $name, $this->getModuleDir($name));
$module = new Module($this->app, $name, $basedir);
}
$module->register();
$this->loadedModules[$name] = $module;
@ -332,6 +331,10 @@ class Manager
*/
public function getModuleDir($name, $subdir = '')
{
if ($this->hasLoaded($name)) {
return $this->getModule($name)->getBaseDir() . $subdir;
}
if ($this->hasEnabled($name)) {
return $this->enabledDirs[$name]. $subdir;
}

View File

@ -1,32 +1,12 @@
<?php
// {{{ICINGA_LICENSE_HEADER}}}
/**
* This file is part of Icinga Web 2.
*
* Icinga Web 2 - Head for multiple monitoring backends.
* Copyright (C) 2013 Icinga Development Team
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* @copyright 2013 Icinga Development Team <info@icinga.org>
* @license http://www.gnu.org/licenses/gpl-2.0.txt GPL, version 2
* @author Icinga Development Team <info@icinga.org>
*
*/
// {{{ICINGA_LICENSE_HEADER}}}
/**
* Icingaweb 2
*
* @link https://git.icinga.org/icingaweb2.git/ for the official source repository
* @copyright Copyright (c) 2013-2014 Icinga Development Team (https://www.icinga.org)
* @license http://www.gnu.org/licenses/gpl-2.0.txt GPL, version 2
*/
namespace Icinga\Application\Modules;
use Exception;
@ -211,9 +191,9 @@ class Module
/**
* Test for an enabled module by name
*
* @param string $name
* @param string $name
*
* @return boolean
* @return boolean
*/
public static function exists($name)
{
@ -223,12 +203,12 @@ class Module
/**
* Get module by name
*
* @param string $name
* @param bool $autoload
* @param string $name
* @param bool $autoload
*
* @return mixed
* @return mixed
*
* @throws \Icinga\Exception\ProgrammingError When the module is not yet loaded
* @throws ProgrammingError When the module is not yet loaded
*/
public static function get($name, $autoload = false)
{
@ -303,13 +283,23 @@ class Module
}
/**
* Get short description
* Get module description
*
* @return string
*/
public function getShortDescription()
public function getDescription()
{
return $this->metadata()->shortDescription;
return $this->metadata()->description;
}
/**
* Get module title (short description)
*
* @return string
*/
public function getTitle()
{
return $this->metadata()->title;
}
/**
@ -319,7 +309,6 @@ class Module
*/
public function getDependencies()
{
return $this->metadata()->depends;
}
@ -332,11 +321,11 @@ class Module
{
if ($this->metadata === null) {
$metadata = (object) array(
'name' => $this->getName(),
'version' => '0.0.0',
'shortDescription' => '',
'description' => '',
'depends' => array(),
'name' => $this->getName(),
'version' => '0.0.0',
'title' => null,
'description' => '',
'depends' => array(),
);
if (file_exists($this->metadataFile)) {
@ -347,15 +336,21 @@ class Module
while (false !== ($line = fgets($fh))) {
$line = rtrim($line);
if ($key === 'description' && $line[0] === ' ') {
$metadata->{$key} .= "\n" . ltrim($line);
continue;
if ($key === 'description') {
if (empty($line)) {
$metadata->description .= "\n";
continue;
} elseif ($line[0] === ' ') {
$metadata->description .= $line;
continue;
}
}
list($key, $val) = preg_split('/:\s+/', $line, 2);
$key = lcfirst($key);
switch ($key) {
case 'depends':
if (strpos($val, ' ') === false) {
$metadata->depends[$val] = true;
@ -372,9 +367,15 @@ class Module
}
}
break;
case 'description':
$metadata->shortDescription = $val;
// YES, no break here
if ($metadata->title === null) {
$metadata->title = $val;
} else {
$metadata->description = $val;
}
break;
default:
$metadata->{$key} = $val;
@ -382,6 +383,18 @@ class Module
}
}
if ($metadata->title === null) {
$metadata->title = $this->getName();
}
if ($metadata->description === '') {
// TODO: Check whether the translation module is able to
// extract this
$metadata->description = t(
'This module has no description'
);
}
$this->metadata = $metadata;
}
return $this->metadata;
@ -407,6 +420,11 @@ class Module
return $this->basedir;
}
/**
* Get the controller directory
*
* @return string
*/
public function getControllerDir()
{
return $this->controllerdir;
@ -445,21 +463,20 @@ class Module
/**
* Getter for module config object
*
* @param string $file
* @param string $file
*
* @return Config
* @return Config
*/
public function getConfig($file = null)
{
return $this->app
->getConfig()
->module($this->name, $file);
return $this->app->getConfig()->module($this->name, $file);
}
/**
* Retrieve provided permissions
*
* @param string $name Permission name
* @param string $name Permission name
*
* @return array
*/
public function getProvidedPermissions()
@ -483,7 +500,8 @@ class Module
/**
* Whether the given permission name is supported
*
* @param string $name Permission name
* @param string $name Permission name
*
* @return bool
*/
public function providesPermission($name)
@ -495,7 +513,8 @@ class Module
/**
* Whether the given restriction name is supported
*
* @param string $name Restriction name
* @param string $name Restriction name
*
* @return bool
*/
public function providesRestriction($name)
@ -507,9 +526,10 @@ class Module
/**
* Provide a named permission
*
* @param string $name Unique permission name
* @param string $name Permission description
* @return void
* @param string $name Unique permission name
* @param string $name Permission description
*
* @return void
*/
protected function providePermission($name, $description)
{
@ -527,9 +547,10 @@ class Module
/**
* Provide a named restriction
*
* @param string $name Unique restriction name
* @param string $name Restriction description
* @return void
* @param string $name Unique restriction name
* @param string $description Restriction description
*
* @return void
*/
protected function provideRestriction($name, $description)
{
@ -654,9 +675,9 @@ class Module
/**
* Include a php script if it is readable
*
* @param string $file File to include
* @param string $file File to include
*
* @return self
* @return self
*/
protected function includeScript($file)
{
@ -686,11 +707,11 @@ class Module
/**
* Register hook
*
* @param string $name
* @param string $class
* @param string $key
* @param string $name
* @param string $class
* @param string $key
*
* @return self
* @return self
*/
protected function registerHook($name, $class, $key = null)
{

View File

@ -124,6 +124,7 @@ class Web extends ApplicationBootstrap
->setupInternationalization()
->setupRequest()
->setupZendMvc()
->setupFormNamespace()
->setupModuleManager()
->loadEnabledModules()
->setupRoute()
@ -201,30 +202,18 @@ class Web extends ApplicationBootstrap
}
/**
* Create user object and inject preference interface
* Create user object
*
* @return self
* @throws ConfigurationError
*/
private function setupUser()
{
try {
$config = Config::app('authentication');
} catch (NotReadableError $e) {
Logger::error(
new Exception('Cannot load authentication configuration. An exception was thrown:', 0, $e)
);
$config = null;
}
$authenticationManager = AuthenticationManager::getInstance($config);
if ($config !== null && $config->global !== null &&
$config->global->get('authenticationMode', 'internal') === 'external'
) {
$authenticationManager->authenticateFromRemoteUser();
}
$authenticationManager = AuthenticationManager::getInstance();
if ($authenticationManager->isAuthenticated() === true) {
$this->user = $authenticationManager->getUser();
}
return $this;
}
@ -371,5 +360,19 @@ class Web extends ApplicationBootstrap
}
return $this;
}
/**
* Setup an autoloader namespace for Icinga\Form
*
* @return self
*/
private function setupFormNamespace()
{
$this->getLoader()->registerNamespace(
'Icinga\\Form',
$this->getApplicationDir('forms')
);
return $this;
}
}
// @codeCoverageIgnoreEnd

View File

@ -7,40 +7,81 @@ use Zend_Config;
use Icinga\Logger\Logger;
use Icinga\Exception\ConfigurationError;
/**
* Iterate user backends created from config
*/
class AuthChain implements Iterator
{
/**
* User backends configuration
*
* @var Zend_Config
*/
private $config;
/**
* The consecutive user backend while looping
*
* @var UserBackend
*/
private $currentBackend;
/**
* Create a new authentication chain from config
*
* @param Zend_Config $config User backends configuration
*/
public function __construct(Zend_Config $config)
{
$this->config = $config;
}
/**
* Rewind the chain
*/
public function rewind()
{
$this->config->rewind();
$this->currentBackend = null;
}
/**
* Return the current user backend
*
* @return UserBackend
*/
public function current()
{
return $this->currentBackend;
}
/**
* Return the key of the current user backend config
*
* @return string
*/
public function key()
{
return $this->config->key();
}
/**
* Move forward to the next user backend config
*/
public function next()
{
$this->config->next();
}
/**
* Check if the current user backend is valid, i.e. it's enabled and the config's valid
*
* @return bool
*/
public function valid()
{
if (!$this->config->valid()) {
// Stop when there are no more backends to check
return false;
}
$backendConfig = $this->config->current();

View File

@ -0,0 +1,89 @@
<?php
// {{{ICINGA_LICENSE_HEADER}}}
// {{{ICINGA_LICENSE_HEADER}}}
namespace Icinga\Authentication\Backend;
use Icinga\Authentication\UserBackend;
use Icinga\User;
use \Zend_Config;
/**
* Test login with external authentication mechanism, e.g. Apache
*/
class AutoLoginBackend extends UserBackend
{
/**
* Regexp expression to strip values from a username
*
* @var string
*/
private $stripUsernameRegexp;
/**
* Create new autologin backend
*
* @param Zend_Config $config
*/
public function __construct(Zend_Config $config)
{
$this->stripUsernameRegexp = $config->get('strip_username_regexp');
}
/**
* (PHP 5 &gt;= 5.1.0)<br/>
* Count elements of an object
* @link http://php.net/manual/en/countable.count.php
* @return int The custom count as an integer.
* </p>
* <p>
* The return value is cast to an integer.
*/
public function count()
{
return 1;
}
/**
* Test whether the given user exists
*
* @param User $user
*
* @return bool
*/
public function hasUser(User $user)
{
if (isset($_SERVER['PHP_AUTH_USER'])
&& isset($_SERVER['AUTH_TYPE'])
&& in_array($_SERVER['AUTH_TYPE'], array('Basic', 'Digest')) === true
) {
$username = filter_var(
$_SERVER['PHP_AUTH_USER'],
FILTER_SANITIZE_STRING,
FILTER_FLAG_ENCODE_HIGH|FILTER_FLAG_ENCODE_LOW
);
if ($username !== false) {
if ($this->stripUsernameRegexp !== null) {
$username = preg_replace($this->stripUsernameRegexp, '', $username);
}
return true;
}
}
return false;
}
/**
* Authenticate
*
* @param User $user
* @param string $password
*
* @return bool
*/
public function authenticate(User $user, $password)
{
return $this->hasUser($user);
}
}

View File

@ -34,8 +34,8 @@ use \Zend_Db_Expr;
use \Zend_Db_Select;
use Icinga\Authentication\UserBackend;
use Icinga\Data\Db\Connection;
use Icinga\Logger\Logger;
use Icinga\User;
use Icinga\Exception\AuthenticationException;
class DbUserBackend extends UserBackend
{
@ -75,6 +75,7 @@ class DbUserBackend extends UserBackend
* @param string $password
*
* @return bool|null
* @throws AuthenticationException
*/
public function authenticate(User $user, $password)
{
@ -96,13 +97,14 @@ class DbUserBackend extends UserBackend
return ($row !== false) ? true : false;
} catch (Exception $e) {
Logger::error(
throw new AuthenticationException(
sprintf(
'Failed to authenticate user "%s" with backend "%s". Exception occured: %s',
'Failed to authenticate user "%s" against backend "%s". An exception was thrown:',
$user->getUsername(),
$this->getName(),
$e->getMessage()
)
$this->getName()
),
0,
$e
);
}
}

View File

@ -31,9 +31,9 @@ namespace Icinga\Authentication\Backend;
use \Exception;
use Icinga\User;
use Icinga\Logger\Logger;
use Icinga\Authentication\UserBackend;
use Icinga\Protocol\Ldap\Connection;
use Icinga\Exception\AuthenticationException;
class LdapUserBackend extends UserBackend
{
@ -95,6 +95,7 @@ class LdapUserBackend extends UserBackend
* @param string $password
*
* @return bool|null
* @throws AuthenticationException
*/
public function authenticate(User $user, $password)
{
@ -104,13 +105,14 @@ class LdapUserBackend extends UserBackend
$password
);
} catch (Exception $e) {
Logger::error(
throw new AuthenticationException(
sprintf(
'Failed to authenticate user "%s" with backend "%s". Exception occured: %s',
'Failed to authenticate user "%s" against backend "%s". An exception was thrown:',
$user->getUsername(),
$this->getName(),
$e->getMessage()
)
$this->getName()
),
0,
$e
);
}
}

View File

@ -30,6 +30,7 @@
namespace Icinga\Authentication;
use Countable;
use Icinga\Authentication\Backend\AutoLoginBackend;
use Zend_Config;
use Icinga\Authentication\Backend\DbUserBackend;
use Icinga\Authentication\Backend\LdapUserBackend;
@ -84,6 +85,11 @@ abstract class UserBackend implements Countable
}
return new $backendConfig->class($backendConfig);
}
if ($name === 'autologin') {
$backend = new AutoLoginBackend($backendConfig);
$backend->setName($name);
return $backend;
}
if ($backendConfig->resource === null) {
throw new ConfigurationError(
'Authentication configuration for backend "' . $name

View File

@ -53,7 +53,7 @@ class Documentation
. " --debug Show debug output\n"
. " --help Show help\n"
. " --benchmark Show benchmark summary\n"
. " --watch [s] Refresh output each <s> seconds (default: 5)\n"
. " --watch [s] Refresh output every <s> seconds (default: 5)\n"
;
$d .= "\nShow help on a specific command : icingacli help <command>"
. "\nShow help on a specific module : icingacli help <module>"

View File

@ -64,7 +64,7 @@ class Loader
public function __construct(App $app)
{
$this->app = $app;
$this->coreAppDir = ICINGA_APPDIR . '/clicommands';
$this->coreAppDir = ICINGAWEB_APPDIR . '/clicommands';
}
/**
@ -109,6 +109,12 @@ class Loader
return $this->moduleName;
}
public function setModuleName($name)
{
$this->moduleName = $name;
return $this;
}
public function getCommandName()
{
return $this->commandName;
@ -176,11 +182,16 @@ class Loader
if ($params === null) {
$params = $this->app->getParams();
}
$first = $params->shift();
if (! $first) {
return;
if ($this->moduleName === null) {
$first = $params->shift();
if (! $first) {
return;
}
$found = $this->resolveName($first);
} else {
$found = $this->moduleName;
}
$found = $this->resolveName($first);
if (! $found) {
$msg = "There is no such module or command: '$first'";
printf("%s: %s\n", $this->screen()->colorize('ERROR', 'red'), $msg);
@ -419,8 +430,10 @@ class Loader
{
if ($this->modules === null) {
$this->modules = array();
$this->modules = $this->app->getModuleManager()->listEnabledModules();
sort($this->modules);
$this->modules = array_unique(array_merge(
$this->app->getModuleManager()->listEnabledModules(),
$this->app->getModuleManager()->listLoadedModules()
));
}
return $this->modules;
}

View File

@ -0,0 +1,14 @@
<?php
// {{{ICINGA_LICENSE_HEADER}}}
// {{{ICINGA_LICENSE_HEADER}}}
namespace Icinga\Exception;
use RuntimeException;
/**
* Exception thrown if an error occurs during authentication
*/
class AuthenticationException extends RuntimeException
{
}

View File

@ -11,7 +11,7 @@ use Icinga\Web\StyleSheet;
use Icinga\Web\Url;
use Icinga\Exception\ProgrammingError;
require_once 'vendor/dompdf/dompdf_config.inc.php';
require_once 'IcingaVendor/dompdf/dompdf_config.inc.php';
spl_autoload_register('DOMPDF_autoload');
@ -60,4 +60,4 @@ class Pdf extends DOMPDF
)
);
}
}
}

View File

@ -28,7 +28,7 @@ class FileWriter extends LogWriter
*/
public function __construct(Zend_Config $config)
{
$this->path = Config::resolvePath($config->target);
$this->path = $config->target;
$this->setup();
}

View File

@ -27,7 +27,7 @@ use Icinga\Application\Config as IcingaConfig;
* $store = PreferencesStore::create(
* new Zend_Config(
* 'type' => 'ini',
* 'configPath' => '/path/to/preferences'
* 'config_path' => '/path/to/preferences'
* ),
* $user // Instance of \Icinga\User
* );
@ -132,7 +132,7 @@ abstract class PreferencesStore
}
if ($type === 'Ini') {
$config->location = IcingaConfig::resolvePath($config->configPath);
$config->location = $config->config_path;
} elseif ($type === 'Db') {
$config->connection = new DbConnection(ResourceFactory::getResourceConfig($config->resource));
}

View File

@ -101,20 +101,20 @@ class Format
return self::showHourMin($duration);
}
protected static function showHourMin($sec)
protected static function showHourMin($sec, $includePrefix = false)
{
$min = floor($sec / 60);
if ($min < 60) {
return $min . 'm ' . ($sec % 60) . 's';
return ($includePrefix ? t('for') . ' ' : '') . $min . 'm ' . ($sec % 60) . 's';
}
$hour = floor($min / 60);
if ($hour < 24) {
return date('H:i', time() - $sec);
return ($includePrefix ? t('since') . ' ' : '') . date('H:i', time() - $sec);
}
return floor($hour / 24) . 'd ' . ($hour % 24) . 'h';
return ($includePrefix ? t('for') . ' ' : '') . floor($hour / 24) . 'd ' . ($hour % 24) . 'h';
}
protected static function smartTimeDiff($diff, $timestamp)
protected static function smartTimeDiff($diff, $timestamp, $includePrefix = false)
{
if ($timestamp === null || $timestamp === false) {
return '-';
@ -125,15 +125,14 @@ class Format
$prefix = '';
if ($diff < 0) {
$prefix = '-';
$diff *= -1;
}
if ($diff > 3600 * 24 * 3) {
if (abs($diff) > 3600 * 24 * 3) {
if (date('Y') === date('Y', $timestamp)) {
return date('d.m.', $timestamp);
return ($includePrefix ? t('since') . ' ' : '') . date('d.m.', $timestamp);
}
return date('m.Y', $timestamp);
return ($includePrefix ? t('since') . ' ' : '') . date('m.Y', $timestamp);
}
return $prefix . self::showHourMin($diff);
return $prefix . self::showHourMin(abs($diff), $includePrefix);
}
public static function timeSince($timestamp)
@ -141,11 +140,29 @@ class Format
return self::smartTimeDiff(time() - $timestamp, $timestamp);
}
public static function prefixedTimeSince($timestamp, $ucfirst = false)
{
$result = self::smartTimeDiff(time() - $timestamp, $timestamp, true);
if ($ucfirst) {
$result = ucfirst($result);
}
return $result;
}
public static function timeUntil($timestamp)
{
return self::smartTimeDiff($timestamp - time(), $timestamp);
}
public static function prefixedTimeUntil($timestamp, $ucfirst)
{
$result = self::smartTimeDiff($timestamp - time(), $timestamp, true);
if ($ucfirst) {
$result = ucfirst($result);
}
return $result;
}
protected static function formatForUnits($value, & $units, $base)
{
$sign = '';

View File

@ -81,6 +81,8 @@ class ActionController extends Zend_Controller_Action
private $windowId;
protected $isRedirect = false;
// TODO: This would look better if we had a ModuleActionController
public function Config($file = null)
{
@ -126,6 +128,9 @@ class ActionController extends Zend_Controller_Action
$this->windowId = $this->_request->getHeader('X-Icinga-WindowId', null);
}
$module = $request->getModuleName();
$this->view->translationDomain = $module === 'default' ? 'icinga' : $module;
if ($this->requiresConfig() === false) {
if ($this->requiresLogin() === false) {
$this->view->tabs = new Tabs();
@ -365,12 +370,16 @@ class ActionController extends Zend_Controller_Action
**/
public function redirectNow($url)
{
if ($url instanceof Url) {
$url = $url->getRelativeUrl();
$url = Url::fromPath(preg_replace('~&amp;~', '&', $url));
if ($this->_request->isXmlHttpRequest()) {
header('X-Icinga-Redirect: ' . rawurlencode($url));
// $this->getResponse()->sendHeaders() ??
// Session shutdown
exit; // Really?
} else {
$url = Url::fromPath($url)->getRelativeUrl();
$this->_helper->Redirector->gotoUrlAndExit($url->getRelativeUrl());
}
$this->_helper->Redirector->gotoUrlAndExit(preg_replace('~&amp;~', '&', $url));
$this->isRedirect = true; // pretty useless right now
}
/**
@ -393,9 +402,9 @@ class ActionController extends Zend_Controller_Action
}
if ($user = $this->getRequest()->getUser()) {
// Cast preference app.showBenchmark to bool because preferences loaded from a preferences storage are
// Cast preference app.show_benchmark to bool because preferences loaded from a preferences storage are
// always strings
if ((bool) $user->getPreferences()->get('app.showBenchmark', false) === true) {
if ((bool) $user->getPreferences()->get('app.show_benchmark', false) === true) {
Benchmark::measure('Response ready');
$layout->benchmark = $this->renderBenchmark();
}
@ -412,9 +421,9 @@ class ActionController extends Zend_Controller_Action
}
$notifications = Notification::getInstance();
if ($isXhr && $notifications->hasMessages()) {
if ($isXhr && ! $this->isRedirect && $notifications->hasMessages()) {
foreach ($notifications->getMessages() as $m) {
header('X-Icinga-Notification: ' . $m->type . ' ' . $m->message);
header('X-Icinga-Notification: ' . rawurlencode($m->type . ' ' . $m->message));
}
}
@ -436,7 +445,7 @@ class ActionController extends Zend_Controller_Action
// TODO: Innocent exception and error log for hack attempts
throw new Exception('No way, guy');
}
header('X-Icinga-Title: ' . $this->view->title . ' :: Icinga Web');
header('X-Icinga-Title: ' . rawurlencode($this->view->title . ' :: Icinga Web'));
}
// TODO: _render=layout?
if ($this->getParam('_render') === 'layout') {

View File

@ -81,7 +81,6 @@ class WritablePathValidator extends Zend_Validate_Abstract
$value = (string) $value;
$this->_setValue($value);
$value = IcingaConfig::resolvePath($value);
if ($this->requireExistence && !file_exists($value)) {
$this->_error('DOES_NOT_EXIST');
return false;

View File

@ -74,7 +74,7 @@ class JavaScript
}
}
if ($minified) {
require_once ICINGA_LIBDIR . '/vendor/JShrink/Minifier.php';
require_once 'IcingaVendor/JShrink/Minifier.php';
$out .= Minifier::minify($js, array('flaggedComments' => false));
} else {
$out .= $js;

View File

@ -67,7 +67,7 @@ class LessCompiler
*/
public function __construct()
{
require_once 'vendor/lessphp/lessc.inc.php';
require_once 'IcingaVendor/lessphp/lessc.inc.php';
$this->lessc = new lessc();
$this->lessc->setVariables(

View File

@ -112,6 +112,7 @@ class Notification
$msgs = $session->messages;
$msgs[] = $mo;
$session->messages = $msgs;
$session->write();
}
public function hasMessages()
@ -125,6 +126,7 @@ class Notification
$session = Session::getSession();
$msgs = $session->messages;
$session->messages = array();
$session->write();
return $msgs;
}

View File

@ -298,6 +298,11 @@ class Url
return $this->path . '?' . http_build_query($params, '', '&amp;') . $this->anchor;
}
public function getQueryString()
{
return http_build_query($this->params, '', '&');
}
/**
* Return the absolute url with query parameters as a string
*
@ -493,6 +498,11 @@ class Url
* @return Url
*/
public function getUrlWithout($keyOrArrayOfKeys)
{
return $this->without($keyOrArrayOfKeys);
}
public function without($keyOrArrayOfKeys)
{
$url = clone($this);
$url->remove($keyOrArrayOfKeys);

View File

@ -31,6 +31,7 @@
namespace Icinga\Web;
use Icinga\Exception\ProgrammingError;
use Icinga\Util\Translator;
use Zend_View_Abstract;
use Closure;
@ -154,6 +155,11 @@ class View extends Zend_View_Abstract
);
}
public function translate($text)
{
return Translator::translate($text, $this->translationDomain);
}
/**
* Load helpers
*/

View File

@ -15,10 +15,22 @@ $this->addHelperFunction('timeSince', function ($timestamp) {
. '</span>';
});
$this->addHelperFunction('timeUnless', function ($timestamp) {
$this->addHelperFunction('prefixedTimeSince', function ($timestamp, $ucfirst = false) {
return '<span class="timesince">'
. Format::prefixedTimeSince($timestamp, $ucfirst)
. '</span>';
});
$this->addHelperFunction('timeUntil', function ($timestamp) {
if (! $timestamp) return '';
return '<span class="timeunless">'
return '<span class="timeuntil">'
. Format::timeUntil($timestamp)
. '</span>';
});
$this->addHelperFunction('prefixedTimeUntil', function ($timestamp, $ucfirst = false) {
if (! $timestamp) return '';
return '<span class="timeuntil">'
. Format::prefixedTimeUntil($timestamp, $ucfirst)
. '</span>';
});

View File

@ -220,12 +220,17 @@ EOD;
public function render()
{
$template = $this->template;
// Locale-ignorant string cast:
$data = array();
foreach ($this->data as $dat) {
$data[] = sprintf('%F', $dat);
}
$template = preg_replace('{{url}}', $this->url, $template);
$template = preg_replace('{{width}}', $this->width, $template);
$template = preg_replace('{{height}}', $this->height, $template);
$template = preg_replace('{{title}}', $this->title, $template);
$template = preg_replace('{{style}}', $this->style, $template);
$template = preg_replace('{{data}}', implode(',', $this->data), $template);
$template = preg_replace('{{data}}', implode(',', $data), $template);
$template = preg_replace('{{colors}}', implode(',', $this->colors), $template);
return $template;
}

View File

@ -31,6 +31,7 @@ namespace Icinga\Web\Widget;
use Icinga\Application\Icinga;
use Icinga\Application\Config as IcingaConfig;
use Icinga\Exception\ConfigurationError;
use Icinga\Exception\ProgrammingError;
use Icinga\Web\Widget\AbstractWidget;
use Icinga\Web\Widget\Dashboard\Pane;
@ -305,7 +306,12 @@ class Dashboard extends AbstractWidget
$active = $this->setDefaultPane();
}
}
return $this->panes[$active];
if (isset($this->panes[$active])) {
return $this->panes[$active];
}
throw new ConfigurationError('Could not determine active pane');
}
/**

Some files were not shown because too many files have changed in this diff Show More