php__pgma/Pgma_Model.php
Frederic G. Marand 8140b57b6c Use the new Server_Controller class to fill the main navigation list
Fixed the top-level widget name to match Glade_Window.php
Improved comments
2008-05-25 20:31:40 +00:00

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);
}
}