Adapt usage of config class

refs #4354
This commit is contained in:
Eric Lippmann 2013-07-12 15:37:36 +02:00
parent 8c6f2a07ae
commit 51755209b6
19 changed files with 129 additions and 107 deletions

4
Vagrantfile vendored
View File

@ -48,6 +48,8 @@ Vagrant::Config.run do |config|
# an identifier, the second is the path on the guest to mount the # an identifier, the second is the path on the guest to mount the
# folder, and the third is the path on the host to the actual folder. # folder, and the third is the path on the host to the actual folder.
# # config.vm.share_folder "v-icinga2-web-pub", "/var/www/html/icinga2-web", "./pub" # # config.vm.share_folder "v-icinga2-web-pub", "/var/www/html/icinga2-web", "./pub"
config.vm.share_folder "v-test", "/vagrant/config", "./config", :owner => 'vagrant', :group => 'apache', :extra => 'dmode=775,fmode=775'
config.vm.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-test", "1"]
# Enable provisioning with Puppet stand alone. Puppet manifests # Enable provisioning with Puppet stand alone. Puppet manifests
# are contained in a directory path relative to this Vagrantfile. # are contained in a directory path relative to this Vagrantfile.
@ -56,7 +58,7 @@ Vagrant::Config.run do |config|
config.vm.provision :puppet do |puppet| config.vm.provision :puppet do |puppet|
puppet.module_path = ".vagrant-puppet/modules" puppet.module_path = ".vagrant-puppet/modules"
puppet.manifests_path = ".vagrant-puppet/manifests" puppet.manifests_path = ".vagrant-puppet/manifests"
#puppet.options = "-v -d" # # puppet.options = "-v -d"
end end
# The npm module jquery won't install via puppet because of an mysterious error # The npm module jquery won't install via puppet because of an mysterious error

View File

@ -66,8 +66,7 @@ class ModulesController extends ActionController
$this->manager->enableModule($this->_getParam('name')); $this->manager->enableModule($this->_getParam('name'));
$this->manager->loadModule($this->_getParam('name')); $this->manager->loadModule($this->_getParam('name'));
$this->getResponse()->setHeader('X-Icinga-Enable-Module', $this->_getParam('name')); $this->getResponse()->setHeader('X-Icinga-Enable-Module', $this->_getParam('name'));
$this->replaceLayout = true; $this->redirectNow('index?_render=body');
$this->indexAction();
} }

View File

@ -3,7 +3,7 @@
$url = Zend_Controller_Front::getInstance()->getRequest()->getRequestUri(); $url = Zend_Controller_Front::getInstance()->getRequest()->getRequestUri();
$currentKey = isset($this->navkey) ? $this->navkey : $url; $currentKey = isset($this->navkey) ? $this->navkey : $url;
$item = $this->navigation->listAll("menu"); $item = $this->navigation->keys("menu");
?> ?>
<?php if ($this->auth()->isAuthenticated()): ?> <?php if ($this->auth()->isAuthenticated()): ?>
<ul class="nav nav-tabs icinga-navigation" > <ul class="nav nav-tabs icinga-navigation" >

View File

@ -2,8 +2,8 @@
[localdb] [localdb]
type = ido type = ido
host = localhost host = localhost
user = "icinga" user = "icinga-idoutils"
pass = "icinga" pass = "***"
db = "icinga" db = "icinga"

View File

@ -44,7 +44,7 @@ abstract class ApplicationBootstrap
protected $loader; protected $loader;
protected $libdir; protected $libdir;
protected $config; protected $config;
protected $configFile; protected $configDir;
protected $appdir; protected $appdir;
protected $moduleManager; protected $moduleManager;
protected $isCli = false; protected $isCli = false;
@ -57,7 +57,7 @@ abstract class ApplicationBootstrap
* *
* @return void * @return void
*/ */
protected function __construct($configFile = null) protected function __construct($configDir)
{ {
$this->checkPrerequisites(); $this->checkPrerequisites();
$this->libdir = realpath(dirname(dirname(dirname(__FILE__)))); $this->libdir = realpath(dirname(dirname(dirname(__FILE__))));
@ -88,10 +88,7 @@ abstract class ApplicationBootstrap
) )
); );
if ($configFile === null) { $this->configDir = $configDir;
$configFile = dirname($this->libdir) . '/config/icinga.ini';
}
$this->configFile = $configFile;
require_once dirname(__FILE__) . '/functions.php'; require_once dirname(__FILE__) . '/functions.php';
} }
@ -100,7 +97,7 @@ abstract class ApplicationBootstrap
public function moduleManager() public function moduleManager()
{ {
if ($this->moduleManager === null) { if ($this->moduleManager === null) {
$this->moduleManager = new ModuleManager($this, $this->config->global->moduleFolder); $this->moduleManager = new ModuleManager($this, $this->configDir . '/enabledModules');
} }
return $this->moduleManager; return $this->moduleManager;
} }
@ -155,10 +152,10 @@ abstract class ApplicationBootstrap
return $this->config; return $this->config;
} }
public static function start($config = null) public static function start($configDir)
{ {
$class = get_called_class(); $class = get_called_class();
$obj = new $class(); $obj = new $class($configDir);
$obj->bootstrap(); $obj->bootstrap();
return $obj; return $obj;
} }
@ -217,11 +214,8 @@ abstract class ApplicationBootstrap
*/ */
protected function loadConfig() protected function loadConfig()
{ {
// TODO: add an absolutely failsafe config loader Config::$configDir = $this->configDir;
if (! @is_readable($this->configFile)) { $this->config = Config::app();
throw new \Exception('Cannot read config file: ' . $this->configFile);
}
$this->config = Config::getInstance($this->configFile);
return $this; return $this;
} }
@ -247,7 +241,7 @@ abstract class ApplicationBootstrap
*/ */
protected function configureErrorHandling() protected function configureErrorHandling()
{ {
if ($this->config->global->environment == 'development') { if ($this->config->get('global', 'environment') == 'development') {
error_reporting(E_ALL | E_NOTICE); error_reporting(E_ALL | E_NOTICE);
ini_set('display_startup_errors', 1); ini_set('display_startup_errors', 1);
ini_set('display_errors', 1); ini_set('display_errors', 1);
@ -264,7 +258,7 @@ abstract class ApplicationBootstrap
protected function setTimezone() protected function setTimezone()
{ {
date_default_timezone_set( date_default_timezone_set(
$this->config->{'global'}->get('timezone', 'UTC') $this->config->global->get('timezone', 'UTC')
); );
return $this; return $this;
} }

View File

@ -4,6 +4,7 @@
namespace Icinga\Application; namespace Icinga\Application;
use Icinga\Protocol\Ldap\Exception;
use Zend_Config_Ini; use Zend_Config_Ini;
/** /**
@ -12,52 +13,52 @@ use Zend_Config_Ini;
class Config extends Zend_Config_Ini class Config extends Zend_Config_Ini
{ {
/** /**
* Configuration directory where ALL (application and module) configuration is located. * Configuration directory where ALL (application and module) configuration is located
*
* @var string * @var string
*/ */
public static $configDir; public static $configDir;
/** /**
* The INI file this configuration has been loaded from. * The INI file this configuration has been loaded from
*
* @var string * @var string
*/ */
protected $configFile; protected $configFile;
/** /**
* Application config instances per file. * Application config instances per file
*
* @var array * @var array
*/ */
protected static $app = array(); protected static $app = array();
/** /**
* Module config instances per file. * Module config instances per file
*
* @var array * @var array
*/ */
protected static $modules = array(); protected static $modules = array();
/** /**
* Load configuration from the config file $filename. * Load configuration from the config file $filename
* *
* @see Zend_Config_Ini::__construct * @see Zend_Config_Ini::__construct
* *
* @param string $filename * @param string $filename
* @throws \Exception * @throws Exception
*/ */
public function __construct($filename) public function __construct($filename)
{ {
if (!@is_readable($filename)) { if (!@is_readable($filename)) {
throw new \Exception('Cannot read config file: ' . $filename); throw new Exception('Cannot read config file: ' . $filename);
}; };
$this->configFile = $filename; $this->configFile = $filename;
parent::__construct($filename); $section = null;
$options = array(
'allowModifications' => true
);
parent::__construct($filename, $section, $options);
} }
/** /**
* Retrieve a application config instance. * Retrieve a application config instance
* *
* @param string $configname * @param string $configname
* @return mixed * @return mixed
@ -66,13 +67,13 @@ class Config extends Zend_Config_Ini
{ {
if (!isset(self::$app[$configname])) { if (!isset(self::$app[$configname])) {
$filename = self::$configDir . '/' . $configname . '.ini'; $filename = self::$configDir . '/' . $configname . '.ini';
self::$app[$configname] = new Config($filename); self::$app[$configname] = new Config(realpath($filename));
} }
return self::$app[$configname]; return self::$app[$configname];
} }
/** /**
* Retrieve a module config instance. * Retrieve a module config instance
* *
* @param string $modulename * @param string $modulename
* @param string $configname * @param string $configname
@ -86,13 +87,17 @@ class Config extends Zend_Config_Ini
$moduleConfigs = self::$modules[$modulename]; $moduleConfigs = self::$modules[$modulename];
if (!isset($moduleConfigs[$configname])) { if (!isset($moduleConfigs[$configname])) {
$filename = self::$configDir . '/modules/' . $modulename . '/' . $configname . '.ini'; $filename = self::$configDir . '/modules/' . $modulename . '/' . $configname . '.ini';
$moduleConfigs[$configname] = new Config($filename); if (file_exists($filename)) {
$moduleConfigs[$configname] = new Config(realpath($filename));
} else {
$moduleConfigs[$configname] = null;
}
} }
return $moduleConfigs[$configname]; return $moduleConfigs[$configname];
} }
/** /**
* Retrieve names of accessible sections or properties. * Retrieve names of accessible sections or properties
* *
* @param $name * @param $name
* @return array * @return array

View File

@ -120,7 +120,9 @@ class Module
protected function registerMenuEntries() protected function registerMenuEntries()
{ {
$cfg = $this->getConfig('menu.ini'); $cfg = $this->app
->getConfig()
->module($this->name, 'menu');
$view = $this->app->getView(); $view = $this->app->getView();
if ($cfg) { if ($cfg) {
$view->view->navigation = $cfg->merge($view->view->navigation); $view->view->navigation = $cfg->merge($view->view->navigation);

View File

@ -181,7 +181,7 @@ class Web extends ApplicationBootstrap
$this->config->{'global'}->get('project', 'Icinga') $this->config->{'global'}->get('project', 'Icinga')
); );
$view->view->headTitle()->setSeparator(' :: '); $view->view->headTitle()->setSeparator(' :: ');
$view->view->navigation = $this->config->menu; $view->view->navigation = $this->config->app('menu');
$this->view = $view; $this->view = $view;
return $this; return $this;

View File

@ -91,9 +91,9 @@ class LdapUserBackend implements UserBackend
protected function selectUsername($username) protected function selectUsername($username)
{ {
return $this->connection->select() return $this->connection->select()
->from(IcingaConfig::getInstance()->authentication->users->user_class, ->from(IcingaConfig::app('authentication')->users->user_class,
array(IcingaConfig::getInstance()->authentication->users->user_name_attribute)) array(IcingaConfig::app('authentication')->users->user_name_attribute))
->where(IcingaConfig::getInstance()->authentication->users->user_name_attribute, ->where(IcingaConfig::app('authentication')->users->user_name_attribute,
$this->stripAsterisks($username)); $this->stripAsterisks($username));
} }

View File

@ -25,8 +25,8 @@
namespace Icinga\Authentication; namespace Icinga\Authentication;
use Icinga\Application\Logger as Logger; use Icinga\Application\Logger;
use Icinga\Application\Config as Config; use Icinga\Application\Config as IcingaConfig;
use Icinga\Exception\ConfigurationError as ConfigError; use Icinga\Exception\ConfigurationError as ConfigError;
/** /**
@ -81,7 +81,7 @@ class Manager
* configuration provided in the authentication.ini if no config is given) * configuration provided in the authentication.ini if no config is given)
* and with the given options. * and with the given options.
* *
* @param Icinga\Config $config The configuration to use for authentication * @param IcingaConfig $config The configuration to use for authentication
* instead of the authentication.ini * instead of the authentication.ini
* @param Array $options Additional options that affect the managers behaviour. * @param Array $options Additional options that affect the managers behaviour.
* Supported values: * Supported values:
@ -95,7 +95,7 @@ class Manager
private function __construct($config = null, array $options = array()) private function __construct($config = null, array $options = array())
{ {
if ($config === null) { if ($config === null) {
$config = Config::getInstance()->authentication; $config = IcingaConfig::app('authentication');
} }
if (isset($options["userBackendClass"])) { if (isset($options["userBackendClass"])) {
$this->userBackend = $options["userBackendClass"]; $this->userBackend = $options["userBackendClass"];

View File

@ -2,7 +2,7 @@
namespace Icinga; namespace Icinga;
use Icinga\Application\Config; use Icinga\Application\Config as IcingaConfig;
use Icinga\Authentication\Manager as AuthManager; use Icinga\Authentication\Manager as AuthManager;
class Backend class Backend
@ -14,15 +14,15 @@ class Backend
public static function getInstance($name = null) public static function getInstance($name = null)
{ {
if (! array_key_exists($name, self::$instances)) { if (! array_key_exists($name, self::$instances)) {
$config = Config::getInstance()->backends; $backends = IcingaConfig::app('backends');
if ($name === null) { if ($name === null) {
$name = AuthManager::getInstance()->getSession()->get('backend'); $name = AuthManager::getInstance()->getSession()->get('backend');
} }
if ($name === null) { if ($name === null) {
$name = array_shift(array_keys($config->toArray())); $name = array_shift(array_keys($backends->toArray()));
} }
if (isset($config->backends->$name)) { if (isset($backends->$name)) {
$config = $config->backends->$name; $config = $backends->$name;
$type = $config->type; $type = $config->type;
$type[0] = strtoupper($type[0]); $type[0] = strtoupper($type[0]);
$class = '\\Icinga\\Backend\\' . $type; $class = '\\Icinga\\Backend\\' . $type;

View File

@ -1,5 +1,26 @@
<?php <?php
// {{{ICINGA_LICENSE_HEADER}}} // {{{ICINGA_LICENSE_HEADER}}}
/**
* Icinga 2 Web - Head for multiple monitoring frontends
* 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>
* @author Icinga Development Team <info@icinga.org>
*/
// {{{ICINGA_LICENSE_HEADER}}} // {{{ICINGA_LICENSE_HEADER}}}
namespace Icinga\Web; namespace Icinga\Web;
@ -114,7 +135,7 @@ class ActionController extends ZfController
*/ */
protected function loadConfig() protected function loadConfig()
{ {
$this->config = Config::getInstance(); $this->config = Config::app();
} }
/** /**

View File

@ -5,7 +5,7 @@
*/ */
namespace Icinga\Web; namespace Icinga\Web;
use Icinga\Application\Config; use Icinga\Application\Config as IcingaConfig;
use Icinga\Application\Icinga; use Icinga\Application\Icinga;
/** /**
@ -64,7 +64,7 @@ class ModuleActionController extends ActionController
*/ */
protected function loadConfig() protected function loadConfig()
{ {
$this->config = Config::module($this->module_name); $this->config = IcingaConfig::module($this->module_name);
} }
/** /**

View File

@ -2,7 +2,7 @@
namespace Icinga\Monitoring; namespace Icinga\Monitoring;
use Icinga\Application\Config; use Icinga\Application\Config as IcingaConfig;
use Icinga\Authentication\Manager as AuthManager; use Icinga\Authentication\Manager as AuthManager;
use Exception; use Exception;
@ -36,8 +36,7 @@ class Backend
public function getBackendConfigs() public function getBackendConfigs()
{ {
if (self::$backendConfigs === null) { if (self::$backendConfigs === null) {
$config = Config::getInstance()->backends; $backends = IcingaConfig::app('backends');
$backends = $config->backends;
foreach ($backends as $name => $config) { foreach ($backends as $name => $config) {
// TODO: Check if access to this backend is allowed // TODO: Check if access to this backend is allowed
self::$backendConfigs[$name] = $config; self::$backendConfigs[$name] = $config;

View File

@ -3,7 +3,7 @@
use Icinga\Application\EmbeddedWeb; use Icinga\Application\EmbeddedWeb;
require_once dirname(__FILE__) . '/../library/Icinga/Application/EmbeddedWeb.php'; require_once dirname(__FILE__) . '/../library/Icinga/Application/EmbeddedWeb.php';
$app = EmbeddedWeb::start(); $app = EmbeddedWeb::start(dirname(__FILE__) . '/../config/');
require_once 'vendor/lessphp/lessc.inc.php'; require_once 'vendor/lessphp/lessc.inc.php';
header('Content-type: text/css'); header('Content-type: text/css');
$less = new lessc; $less = new lessc;

View File

@ -7,4 +7,4 @@ require_once dirname(__FILE__). '/../library/Icinga/Application/Web.php';
use Icinga\Application\Web; use Icinga\Application\Web;
Web::start()->dispatch(); Web::start(dirname(__FILE__) . '/../config/')->dispatch();