2012-08-04 10:40:48 +00:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* This file is part of MySQLDumper released under the GNU/GPL 2 license
|
|
|
|
* http://www.mysqldumper.net
|
|
|
|
*
|
|
|
|
* @package MySQLDumper
|
|
|
|
* @subpackage Config_IoHandler
|
|
|
|
* @version SVN: $Rev$
|
|
|
|
* @author $Author$
|
|
|
|
*/
|
|
|
|
/**
|
|
|
|
* Class to handle input/output for configuration params.
|
|
|
|
*
|
|
|
|
* @package MySQLDumper
|
|
|
|
* @subpackage Config_IoHandler
|
|
|
|
*/
|
|
|
|
class Msd_Config_IoHandler_Default implements Msd_Config_IoHandler_Interface
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Array with directories, where config files are located.
|
|
|
|
*
|
|
|
|
* @var array
|
|
|
|
*/
|
|
|
|
private $_configDirectories = array();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Handler for .ini files.
|
|
|
|
*
|
|
|
|
* @var Msd_Ini
|
|
|
|
*/
|
|
|
|
private $_iniConfig = null;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Name of the .ini file, where the config is stored.
|
|
|
|
*
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
private $_configFilename = null;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Configuration namespace in session.
|
|
|
|
*
|
|
|
|
* @var Zend_Session_Namespace
|
|
|
|
*/
|
|
|
|
private $_sessionNamespace = null;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Class constructor
|
|
|
|
*
|
|
|
|
* @param array $handlerOptions
|
|
|
|
*
|
|
|
|
* @return Msd_Config_IoHandler_Default
|
|
|
|
*/
|
|
|
|
public function __construct($handlerOptions = array())
|
|
|
|
{
|
|
|
|
if (isset($handlerOptions['directories'])) {
|
|
|
|
$this->_configDirectories = (array) $handlerOptions['directories'];
|
|
|
|
}
|
|
|
|
|
|
|
|
// Create new namespace for session access.
|
2012-08-22 16:43:15 +00:00
|
|
|
$this->_sessionNamespace = new Zend_Session_Namespace('config');
|
2012-08-04 10:40:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Loads and returns a configuration from session or .ini file.
|
|
|
|
* If the config is read from .ini file, it is also stored to session.
|
|
|
|
*
|
|
|
|
* @param string $configFilename Name of the .ini file, where the config is stored.
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
public function load($configFilename)
|
|
|
|
{
|
|
|
|
// Retrieve config from session
|
|
|
|
$config = (array) $this->_sessionNamespace->config;
|
|
|
|
$this->_configFilename = $configFilename;
|
|
|
|
|
|
|
|
// Check whether the configuration has been loaded.
|
|
|
|
if (count($config) == 0) {
|
|
|
|
|
|
|
|
// Search for the config file in the given directories.
|
2012-08-21 20:22:56 +00:00
|
|
|
$this->_initIni($config);
|
2012-08-04 10:40:48 +00:00
|
|
|
$config = $this->_iniConfig->getIniData();
|
|
|
|
// Put configuration into session.
|
|
|
|
$this->_sessionNamespace->config = $config;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $config;
|
|
|
|
}
|
|
|
|
|
2012-08-21 20:22:56 +00:00
|
|
|
/**
|
|
|
|
* Set configuration file name
|
|
|
|
*
|
|
|
|
* @param string $configFilename File name of configuration file (without path)
|
|
|
|
*/
|
|
|
|
public function setConfigFilename($configFilename)
|
|
|
|
{
|
|
|
|
$this->_configFilename = $configFilename;
|
|
|
|
}
|
|
|
|
|
2012-08-04 10:40:48 +00:00
|
|
|
/**
|
|
|
|
* Saves the configuration to session and .ini file.
|
|
|
|
*
|
2012-08-22 16:43:15 +00:00
|
|
|
* @param array $config Configuration to save.
|
|
|
|
*
|
|
|
|
* @throws Msd_Config_Exception
|
2012-08-04 10:40:48 +00:00
|
|
|
*
|
|
|
|
* @return bool
|
|
|
|
*/
|
|
|
|
public function save($config)
|
|
|
|
{
|
|
|
|
if ($this->_iniConfig === null) {
|
2012-08-21 20:22:56 +00:00
|
|
|
$this->_initIni($config);
|
2012-08-04 10:40:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Save config to .ini file
|
|
|
|
$this->_iniConfig->setIniData($config);
|
2012-08-22 16:43:15 +00:00
|
|
|
|
|
|
|
// Save config to session
|
|
|
|
$this->_sessionNamespace->config = $config;
|
|
|
|
if (!isset($this->_configDirectories[0])) {
|
|
|
|
throw new Msd_Config_Exception('No directory for saving the configuration set!');
|
|
|
|
}
|
|
|
|
$configDirectory = $this->_configDirectories[0];
|
|
|
|
return $this->_iniConfig->saveFile($configDirectory . '/' . $this->_configFilename);
|
2012-08-04 10:40:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Initializes the .ini file handler and sets the full filename of the .ini file.
|
|
|
|
*
|
2012-08-22 16:43:15 +00:00
|
|
|
* @param array $config Configuration as array
|
2012-08-21 20:22:56 +00:00
|
|
|
*
|
2012-08-04 10:40:48 +00:00
|
|
|
* @return void
|
|
|
|
*/
|
2012-08-21 20:22:56 +00:00
|
|
|
private function _initIni($config)
|
2012-08-04 10:40:48 +00:00
|
|
|
{
|
|
|
|
foreach ($this->_configDirectories as $configDir) {
|
|
|
|
$filename = rtrim($configDir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $this->_configFilename;
|
|
|
|
if (file_exists($filename)) {
|
2012-08-22 16:43:15 +00:00
|
|
|
$this->_configFilename = basename($filename);
|
2012-08-04 10:40:48 +00:00
|
|
|
$this->_iniConfig = new Msd_Ini($filename);
|
2012-08-21 20:22:56 +00:00
|
|
|
return;
|
2012-08-04 10:40:48 +00:00
|
|
|
}
|
|
|
|
}
|
2012-08-21 20:22:56 +00:00
|
|
|
$this->_iniConfig = new Msd_Ini();
|
|
|
|
$this->_iniConfig->setIniData($config);
|
2012-08-04 10:40:48 +00:00
|
|
|
}
|
|
|
|
}
|