Fixed the top-level widget name to match Glade_Window.php Improved comments
119 lines
2.7 KiB
PHP
119 lines
2.7 KiB
PHP
<?php
|
|
/**
|
|
* Php-Gtk MySQL administrator - Main application data storage
|
|
*
|
|
* This is just an active wrapper around a plain INI file named the
|
|
* same as the main program. INI information is made available as
|
|
* a two-level array in the $properties member.
|
|
*
|
|
*
|
|
* Configuration is loaded upon construction, and saved if changed
|
|
* upon destruction. Changes are detected by a hash.
|
|
*
|
|
* @license CeCILL 2.0
|
|
* @copyright 2008 Ouest Systemes Informatiques
|
|
* @author Frederic G. MARAND
|
|
* @version $Id: Pgma_Model.php,v 1.2 2008-05-25 20:31:40 cvs Exp $
|
|
*/
|
|
|
|
class Pgma_Model
|
|
{
|
|
/**
|
|
* Program properties. This is an array of sections and value
|
|
* from the <program>.ini file
|
|
* Sections include:
|
|
* - Layout
|
|
*
|
|
* @var array
|
|
*/
|
|
public $properties;
|
|
/**
|
|
* Sign properties to detect any change
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $hash;
|
|
|
|
/**
|
|
* Obtain the file name of the configuration
|
|
* file, without the directory
|
|
*
|
|
* Why static ? Because it is instance-independent
|
|
*
|
|
* @return string
|
|
*/
|
|
static protected function getConfigFileName()
|
|
{
|
|
/**
|
|
* Why not just use basename ? Because in PHP-GTK
|
|
* the PHP filename extension can be any .php*,
|
|
*/
|
|
$name = $_SERVER['SCRIPT_NAME'];
|
|
$name = pathinfo($name, PATHINFO_FILENAME);
|
|
$name .= '.ini';
|
|
return $name;
|
|
}
|
|
|
|
/**
|
|
* Auto-load configuration
|
|
*
|
|
* @return void
|
|
*/
|
|
function __construct()
|
|
{
|
|
$name = self::getConfigFileName();
|
|
$this->properties = file_exists($name) ? parse_ini_file($name, TRUE) : NULL;
|
|
$this->hash = md5(var_export($this->properties, TRUE));
|
|
}
|
|
|
|
/**
|
|
* Auto-save configuration
|
|
*
|
|
* @return void
|
|
*/
|
|
function __destruct()
|
|
{
|
|
/**
|
|
* No need to save if properties haven't been changed
|
|
*/
|
|
if ($this->hash == md5(var_export($this->properties, TRUE)))
|
|
{
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
echo "Saving application settings\n";
|
|
}
|
|
|
|
$name = self::getConfigFileName();
|
|
$s = '';
|
|
foreach ($this->properties as $sectionKey => $sectionValue)
|
|
{
|
|
$s .= "[$sectionKey]" . PHP_EOL;
|
|
foreach ($sectionValue as $key => $value)
|
|
{
|
|
$s .= $key . ' = ';
|
|
if (is_bool($value))
|
|
{
|
|
$s .= $value ? 'TRUE' : 'FALSE';
|
|
}
|
|
elseif (is_numeric($value))
|
|
{
|
|
$s .= $value;
|
|
}
|
|
elseif (is_string($value))
|
|
{
|
|
$s .= '"' . $value . '"';
|
|
}
|
|
else
|
|
{
|
|
die('Unsupported property type for '
|
|
. "$sectionKey/$key: " . gettype($value)
|
|
);
|
|
}
|
|
$s .= PHP_EOL;
|
|
}
|
|
}
|
|
file_put_contents($name, $s);
|
|
}
|
|
}
|