Skip to content

Commit

Permalink
Move settings class
Browse files Browse the repository at this point in the history
  • Loading branch information
timw4mail committed Apr 12, 2012
1 parent 74e8f99 commit 773e7b8
Showing 1 changed file with 240 additions and 0 deletions.
240 changes: 240 additions & 0 deletions classes/settings.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,240 @@
<?php
/**
* OpenSQLManager
*
* Free Database manager for Open Source Databases
*
* @author Timothy J. Warren
* @copyright Copyright (c) 2012
* @link https://github.com/aviat4ion/OpenSQLManager
* @license http://philsturgeon.co.uk/code/dbad-license
*/

// --------------------------------------------------------------------------

/**
* Class for manipulating datbase connections, and program settings
*
* Use JSON for compatibility
*/
class Settings {

private $current;
private static $instance;

public static function &get_instance()
{
if( ! isset(self::$instance))
{
$name = __CLASS__;
self::$instance = new $name();
}

return self::$instance;
}

/**
* Load the settings file - private so it can't be loaded
* directly - the settings should be safe!
*/
private function __construct()
{
if ( ! defined('SETTINGS_DIR'))
{
define('SETTINGS_DIR', '.');
}

$path = SETTINGS_DIR.'/settings.json';

if( ! is_file($path))
{
//Create the file!
touch($path);
$this->current = new stdClass();
}
else
{
$this->current = json_decode(file_get_contents($path));
}

// Add the DB object under the settings if it doesn't already exist
if( ! isset($this->current->dbs))
{
$this->current->dbs = new stdClass();
}

}

// --------------------------------------------------------------------------

/**
* Output the settings on destruct
*/
public function __destruct()
{
$file_string = (defined('JSON_PRETTY_PRINT'))
? json_encode($this->current, JSON_PRETTY_PRINT)
: json_encode($this->current);

file_put_contents(SETTINGS_DIR . '/settings.json', $file_string);
}

// --------------------------------------------------------------------------

/**
* Magic method to simplify isset checking for config options
*
* @param string $key
* @return mixed
*/
public function __get($key)
{
return (isset($this->current->{$key}) && $key != "dbs")
? $this->current->{$key}
: NULL;
}

// --------------------------------------------------------------------------

/**
* Magic method to simplify setting config options
*
* @param string $key
* @param mixed
*/
public function __set($key, $val)
{
//Don't allow direct db config changes
if($key == "dbs")
{
return FALSE;
}

return $this->current->{$key} = $val;
}

// --------------------------------------------------------------------------

/**
* Add a database connection
*
* @param string $name
* @param array $params
*/
public function add_db($name, $params)
{
// Return on bad data
if (empty($name) || empty($params))
{
return FALSE;
}

if( ! isset($this->current->dbs->{$name}))
{
$params['name'] = $name;

$this->current->dbs->{$name} = array();
$this->current->dbs->{$name} = $params;
}
else
{
return FALSE;
}

// Save the json
$this->__destruct();
}

// --------------------------------------------------------------------------

/**
* Edit a database connection
*
* @param array $params
*/
public function edit_db($name, $params)
{
// Return on bad data
if (empty($name) || empty($params))
{
return FALSE;
}

if (isset($this->current->dbs->{$name}) && ($name === $params['name']))
{
$this->current->dbs->{$name} = $params;
}
elseif ($name !== $params['name'])
{
unset($this->current->dbs->{$name});

if ( ! isset($this->current->dbs->{$params['name']}))
{
$this->current->dbs->{$params['name']} = $params;
}
else
{
return FALSE;
}
}
else
{
return FALSE;
}

// Save the json
$this->__destruct();

return TRUE;
}

// --------------------------------------------------------------------------

/**
* Remove a database connection
*
* @param string $name
*/
public function remove_db($name)
{
if( ! isset($this->current->dbs->{$name}))
{
return FALSE;
}

// Remove the db name from the object
unset($this->current->dbs->{$name});

// Save the json
$this->__destruct();
}

// --------------------------------------------------------------------------

/**
* Retreive all db connections
*
* @return array
*/
public function get_dbs()
{
return $this->current->dbs;
}

// --------------------------------------------------------------------------

/**
* Retreive a specific database connection
*
* @param string $name
* @return object
*/
public function get_db($name)
{
return (isset($this->current->dbs->{$name}))
? $this->current->dbs->{$name}
: FALSE;
}

}
// End of settings.php

0 comments on commit 773e7b8

Please sign in to comment.