Allow to define Icinga Web 2's base directory while bootstrapping

This commit is contained in:
Eric Lippmann 2014-11-12 15:52:43 +01:00
parent 8b1419bb04
commit ec6b56a060
1 changed files with 52 additions and 24 deletions
library/Icinga/Application

View File

@ -6,7 +6,6 @@ namespace Icinga\Application;
use ErrorException; use ErrorException;
use Exception; use Exception;
use LogicException;
use Icinga\Application\Modules\Manager as ModuleManager; use Icinga\Application\Modules\Manager as ModuleManager;
use Icinga\Data\ResourceFactory; use Icinga\Data\ResourceFactory;
use Icinga\Exception\ConfigurationError; use Icinga\Exception\ConfigurationError;
@ -40,6 +39,15 @@ use Icinga\Exception\IcingaException;
*/ */
abstract class ApplicationBootstrap abstract class ApplicationBootstrap
{ {
/**
* Base directory
*
* Parent folder for at least application, bin, modules, library/vendor and public
*
* @var string
*/
protected $baseDir;
/** /**
* Icinga auto loader * Icinga auto loader
* *
@ -98,9 +106,16 @@ abstract class ApplicationBootstrap
/** /**
* Constructor * Constructor
*
* @param string $baseDir Icinga Web 2 base directory
* @param string $configDir Path to Icinga Web 2's configuration files
*/ */
protected function __construct($configDir = null) protected function __construct($baseDir = null, $configDir = null)
{ {
if ($baseDir === null) {
$baseDir = dirname($this->getBootstrapDirecory());
}
$this->baseDir = $baseDir;
if (! defined('ICINGAWEB_BASEDIR')) { if (! defined('ICINGAWEB_BASEDIR')) {
define('ICINGAWEB_BASEDIR', dirname($this->getBootstrapDirecory())); define('ICINGAWEB_BASEDIR', dirname($this->getBootstrapDirecory()));
} }
@ -187,6 +202,35 @@ abstract class ApplicationBootstrap
return $this->isWeb; return $this->isWeb;
} }
/**
* Helper to glue directories together
*
* @param string $dir
* @param string $subdir
*
* @return string
*/
private function getDirWithSubDir($dir, $subdir = null)
{
if ($subdir !== null) {
$dir .= '/' . ltrim($subdir, '/');
}
return $dir;
}
/**
* Get the base directory
*
* @param string $subDir Optional sub directory to get
*
* @return string
*/
public function getBaseDir($subDir = null)
{
return $this->getDirWithSubDir($subDir);
}
/** /**
* Getter for application dir * Getter for application dir
* *
@ -226,32 +270,16 @@ abstract class ApplicationBootstrap
} }
/** /**
* Helper to glue directories together * Start the bootstrap
* *
* @param string $dir * @param string $baseDir Icinga Web 2 base directory
* @param string $subdir * @param string $configDir Path to Icinga Web 2's configuration files
* *
* @return string * @return static
*/ */
private function getDirWithSubDir($dir, $subdir = null) public static function start($baseDir = null, $configDir = null)
{ {
if ($subdir !== null) { $application = new static($baseDir, $configDir);
$dir .= '/' . ltrim($subdir, '/');
}
return $dir;
}
/**
* Starting concrete bootstrap classes
*
* @param string $configDir
*
* @return ApplicationBootstrap
*/
public static function start($configDir = null)
{
$application = new static($configDir);
$application->bootstrap(); $application->bootstrap();
return $application; return $application;
} }