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