-
Notifications
You must be signed in to change notification settings - Fork 7.6k
Database Config
Derek Jones edited this page Jul 5, 2012
·
5 revisions
Category:Library::Database | Category:Library::Community
Since CodeIgniter config class doesn't handles sql based configuration variables, i came up with this simple library.
<?php if(!defined('BASEPATH')) exit('No direct script access allowed');
class Site_Config
{
private $CI;
public function __construct()
{
$this->CI =& get_instance();
$this->_table = 'settings';
if(!$this->read()) $this->install();
}
public function __destruct()
{
unset($this->CI);
}
public function save($cfg)
{
foreach($cfg as $item => $value) {
$this->CI->config->set_item($item, $value);
}
$config =& get_config();
$this->CI->db->where('id', '1');
$this->CI->db->update($this->_table, array('cfg' => addslashes(serialize($config))));
return ($this->CI->db->affected_rows() != 0) ? TRUE : FALSE;
}
private function read()
{
$this->CI->db->select('cfg')->limit(1);
$query = $this->CI->db->get($this->_table);
if($query->num_rows() > 0) {
$load = $query->row();
$cfg = unserialize(stripslashes($load->cfg));
foreach($cfg as $item => $value) $this->CI->config->set_item($item, $value);
return TRUE;
}
return FALSE;
}
private function install()
{
$config =& get_config();
$this->CI->db->insert($this->_table, array('id' =>1, 'cfg' => addslashes(serialize($config))));
}
}
?>
This is the needed table schema.
CREATE TABLE IF NOT EXISTS `settings` (
`id` int(10) unsigned NOT NULL auto_increment,
`cfg` text NOT NULL,
KEY `id` (`id`)
);