190 lines
3.9 KiB
PHP
190 lines
3.9 KiB
PHP
<?php
|
|
|
|
namespace Garradin\Plugin\Facturation;
|
|
|
|
use Garradin\DB;
|
|
use Garradin\UserException;
|
|
use Garradin\Utils;
|
|
use Garradin\Plugin\Facturation\Facture;
|
|
|
|
class Config
|
|
{
|
|
protected $fields_types = null;
|
|
protected $config = null;
|
|
protected $modified = [];
|
|
|
|
static protected $_instance = null;
|
|
|
|
/**
|
|
* Singleton simple
|
|
* @return Config
|
|
*/
|
|
static public function getInstance()
|
|
{
|
|
return self::$_instance ?: self::$_instance = new Config;
|
|
}
|
|
|
|
static public function deleteInstance()
|
|
{
|
|
self::$_instance = null;
|
|
}
|
|
|
|
/**
|
|
* Empêche de cloner l'objet
|
|
* @return void
|
|
*/
|
|
private function __clone()
|
|
{
|
|
}
|
|
|
|
public function __construct()
|
|
{
|
|
// Définition des types de données stockées
|
|
$string = '';
|
|
$bool = false;
|
|
// $int = 0;
|
|
// $float = 0.0;
|
|
// $array = [];
|
|
// $object = new \stdClass;
|
|
|
|
$this->fields_types = [
|
|
'siret_asso' => $string,
|
|
'validate_cp' => $bool,
|
|
'unique_client_name' => $bool,
|
|
'footer' => $string
|
|
];
|
|
|
|
$db = DB::getInstance();
|
|
|
|
$this->config = $db->getAssoc('SELECT cle, valeur FROM plugin_facturation_config ORDER BY cle;');
|
|
|
|
foreach ($this->config as $key=>&$value)
|
|
{
|
|
if (!array_key_exists($key, $this->fields_types))
|
|
{
|
|
// Ancienne clé de config qui n'est plus utilisée
|
|
continue;
|
|
}
|
|
|
|
if (is_array($this->fields_types[$key]))
|
|
{
|
|
$value = explode(',', $value);
|
|
}
|
|
else
|
|
{
|
|
settype($value, gettype($this->fields_types[$key]));
|
|
}
|
|
}
|
|
}
|
|
|
|
public function save()
|
|
{
|
|
if (empty($this->modified))
|
|
return true;
|
|
|
|
$values = [];
|
|
$db = DB::getInstance();
|
|
// $db->begin();
|
|
|
|
foreach ($this->modified as $key=>$modified)
|
|
{
|
|
$value = $this->config[$key];
|
|
var_dump($value);
|
|
|
|
if (is_array($value))
|
|
{
|
|
$value = implode(',', $value);
|
|
}
|
|
elseif (is_object($value))
|
|
{
|
|
$value = (string) $value;
|
|
}
|
|
|
|
$db->exec('INSERT OR REPLACE INTO plugin_facturation_config (cle, valeur) VALUES (\''.$key.'\', \''.$value.'\');');
|
|
}
|
|
|
|
// $db->commit();
|
|
|
|
$this->modified = [];
|
|
|
|
return true;
|
|
}
|
|
|
|
public function set($key, $value)
|
|
{
|
|
if (!array_key_exists($key, $this->fields_types))
|
|
{
|
|
throw new \OutOfBoundsException('Ce champ est inconnu.');
|
|
}
|
|
|
|
if (is_array($this->fields_types[$key]))
|
|
{
|
|
$value = !empty($value) ? (array) $value : [];
|
|
}
|
|
elseif (is_int($this->fields_types[$key]))
|
|
{
|
|
$value = (int) $value;
|
|
}
|
|
elseif (is_float($this->fields_types[$key]))
|
|
{
|
|
$value = (float) $value;
|
|
}
|
|
elseif (is_bool($this->fields_types[$key]))
|
|
{
|
|
$value = (bool) $value;
|
|
}
|
|
elseif (is_string($this->fields_types[$key]))
|
|
{
|
|
$value = (string) $value;
|
|
}
|
|
|
|
// switch ($key)
|
|
// {
|
|
// case 'siret_asso':
|
|
// {
|
|
// if (!trim($value))
|
|
// {
|
|
// throw new UserException('Le nom de l\'association ne peut rester vide.');
|
|
// }
|
|
// break;
|
|
// }
|
|
// case 'footer':
|
|
// break;
|
|
// default:
|
|
// break;
|
|
// }
|
|
|
|
if (!isset($this->config[$key]) || $value !== $this->config[$key])
|
|
{
|
|
$this->config[$key] = $value;
|
|
$this->modified[$key] = true;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public function get($key)
|
|
{
|
|
if (!array_key_exists($key, $this->fields_types))
|
|
{
|
|
throw new \OutOfBoundsException('Ce champ est inconnu.');
|
|
}
|
|
|
|
if (!array_key_exists($key, $this->config))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
return $this->config[$key];
|
|
}
|
|
|
|
public function getFieldsTypes()
|
|
{
|
|
return $this->fields_types;
|
|
}
|
|
|
|
public function getConfig()
|
|
{
|
|
return $this->config;
|
|
}
|
|
} |