| Current Path : /home/etiennec/www/oldsite/plugins/auto/cfg/inc/ |
| Current File : /home/etiennec/www/oldsite/plugins/auto/cfg/inc/cfg_config.php |
<?php
/**
* Plugin générique de configuration pour SPIP
*
* @license GNU/GPL
* @package plugins
* @subpackage cfg
* @category outils
* @copyright (c) toggg, marcimat 2007-2008
* @link http://www.spip-contrib.net/
* @version $Id: cfg_config.php 42951 2010-12-16 00:00:13Z root $
*/
/**
* charge le depot qui va bien en fonction de l'argument demande
*
* exemples :
* - meta::description
* - metapack::prefixe_plugin
* - metapack::prefixe/casier/champ
* - tablepack::auteur@extra:8/prefixe/casier/champ
* - tablepack::~id_auteur@extra/prefixe/casier/champ
*
* en l'absence du nom de depot (gauche des ::) cette fonction prendra comme suit :
* - ~ en premier caractere : tablepack
* - : present avant un / : tablepack
* - sinon metapack
*
* @param string $args
* @return Object
*/
function cfg_charger_depot($args){
$r = explode('::',$args,2);
if (count($r) > 1)
list($depot,$args) = $r;
else {
// si un seul argument, il faut trouver le depot
$depot = cfg_charger_depot_args($args);
}
$depot = new cfg_depot($depot);
$depot->charger_args($args);
return $depot;
}
function cfg_charger_depot_args($args){
if ($args[0] == '~'){
return'tablepack';
} elseif (
(list($head, ) = explode('/',$args,2)) &&
(strpos($head,':') !== false)) {
return'tablepack';
} else {
if (strpos($args,'/') !== false)
return'metapack';
else
return'meta';
}
}
/**
* cette classe charge les fonctions de lecture et ecriture d'un depot (dans depots/)
*
* Ces depots ont une version qui evoluera en fonction si des changements d'api apparaissent
*
* version 2 (fonctions)
* - charger_args
* - lire, ecrire, effacer
*
* @package plugins
* @subpackage cfg
*/
class cfg_depot{
/**
* Le nom de la classe du dépôt
* @var string
*/
var $nom;
/**
* Le dépôt
* @var Object
*/
var $depot;
/*
*
* Constructeur de la classe
*
* 'depot' est le nom du fichier php stocke dans /depots/{depot}.php
* qui contient une classe 'cfg_depot_{depot}'
*
* $params est un tableau de parametres passes a la classe cfg_depot_{depot} qui peut contenir :
* <code>
* 'champs' => array(
* 'nom'=>array(
* 'balise' => 'select|textarea|input', // nom de la balise
* 'type' => 'checkbox|hidden|text...', // type d'un input
* 'tableau' => bool, // est-ce un champ tableau name="champ[]" ?
* 'cfg' => 'xx', // classe css commencant par css_xx
* 'id' => y, // cle du tableau 'champs_id' (emplacement qui possede ce champ)
* ),
* 'champs_id' => array(
* cle => 'nom' // nom d'un champ de type id
* ),
* 'param' => array(
* 'parametre_cfg' => 'valeur' // les parametres <!-- param=valeur --> passes dans les formulaires cfg
* ),
* 'val' => array(
* 'nom' => 'valeur' // les valeurs des champs sont stockes dedans
* )
* );
* </code>
*
* @param string $depot
* @param Array $params
*/
function cfg_depot($depot='metapack', $params=array()){
if (!isset($params['param'])) {
$params['param'] = array();
}
include_spip('depots/'.$depot);
if (!class_exists($class = 'cfg_depot_'.$depot)) {
die("CFG ne trouve pas le dépot $depot");
}
$this->depot = new $class($params);
$this->version = $this->depot->version;
$this->nom = $depot;
}
/**
* ajoute les parametres transmis dans l'objet du depot
*
* @param Array $params
*/
function add_params($params){
foreach ($params as $o=>$v) {
$this->depot->$o = $v;
}
}
/**
* récupérer les enregistrements des différents champs.
* @param Array $params
* @return Array
*/
function lire($params = array()){
$this->add_params($params);
return $this->depot->lire(); // array($ok, $val, $messages)
}
/**
* ecrit chaque enregistrement pour chaque champ.
* @param Array $params
* @return Array
*/
function ecrire($params = array()){
$this->add_params($params);
return $this->depot->ecrire(); // array($ok, $val, $messages)
}
/**
* supprime chaque enregistrement pour chaque champ.
* @param Array $params
* @return Array
*/
function effacer($params = array()){
$this->add_params($params);
return $this->depot->effacer(); // array($ok, $val, $messages)
}
/**
* Lecture de la configuration
*
* @param boolean $unserialize
* @return string
*/
function lire_config($unserialize=true){
list($ok, $s) = $this->depot->lire($unserialize);
if ($ok && ($nom = $this->nom_champ())) {
return $s[$nom];
} elseif ($ok) {
return $s;
}
}
/**
* enregistrer une configuration
*
* @param mixed $valeur
* @return boolean
*/
function ecrire_config($valeur){
if ($nom = $this->nom_champ()) {
$this->depot->val = array($nom=>$valeur);
} else {
$this->depot->val = $valeur;
}
list($ok, $s) = $this->depot->ecrire();
return $ok;
}
/**
* supprimer une config
*
* @return boolean
*/
function effacer_config(){
if ($nom = $this->nom_champ()){
$this->depot->val[$nom] = false;
} else {
$this->depot->val = null;
}
list($ok, $s) = $this->depot->effacer();
return $ok;
}
/**
* le nom d'un champ s'il est dans le dépôt
* @return boolean|string
*/
function nom_champ(){
if (count($this->depot->champs)==1){
foreach ($this->depot->champs as $nom=>$def){
return $nom;
}
}
return false;
}
/**
* charge les arguments d'un lire/ecrire/effacer_config
* dans le depot : lire_config($args = 'metapack::prefixe/casier/champ');
*
* @param Array $args
* @return boolean
*/
function charger_args($args){
if (method_exists($this->depot, 'charger_args')){
return $this->depot->charger_args($args);
}
return false;
}
}
/**
* Lecture de la configuration
*
* lire_config() permet de recuperer une config depuis le php<br>
* memes arguments que la balise (forcement)<br>
* $cfg: la config, lire_config('montruc') est un tableau<br>
* lire_config('montruc/sub') est l'element "sub" de cette config
* comme la balise pour ~, ~id_auteur ou table:id<br>
*
* $unserialize est mis par l'histoire, et affecte le depot 'meta'
*
* @param string $cfg la config
* @param mixed $def un defaut optionnel
* @param boolean $unserialize n'affecte que le depot 'meta'
* @return string
*/
if (!function_exists('lire_config')) {
function lire_config($cfg='', $def=null, $unserialize=true) {
$depot = cfg_charger_depot($cfg);
$r = $depot->lire_config($unserialize);
if (is_null($r)) return $def;
return $r;
}
}
/**
* enregistrer une configuration
*
* @param string $cfg
* @param mixed $valeur
* @return boolean
*/
if (!function_exists('ecrire_config')) {
function ecrire_config($cfg='', $valeur=null){
$depot = cfg_charger_depot($cfg);
return $depot->ecrire_config($valeur);
}
}
/**
* supprimer une config
*
* @param string $cfg
* @return boolean
*/
if (!function_exists('effacer_config')) {
function effacer_config($cfg=''){
$depot = cfg_charger_depot($cfg);
return $depot->effacer_config();
}
}
?>