X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fplugins%2Fauto%2Fcfg%2Fdepots%2Ftable.php;fp=www%2Fplugins%2Fauto%2Fcfg%2Fdepots%2Ftable.php;h=7ae2ec932818c10125d884f16f59b3d529f1ea41;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/plugins/auto/cfg/depots/table.php b/www/plugins/auto/cfg/depots/table.php new file mode 100644 index 0000000..7ae2ec9 --- /dev/null +++ b/www/plugins/auto/cfg/depots/table.php @@ -0,0 +1,336 @@ +array(), 'message_erreur'=>array(), 'erreurs'=>array()); + + /** + * Arbre + * @var Array + */ + var $_arbre = array(); + + /** + * Le WHERE permettant de retrouver l'Arbre + * @var Array + */ + var $_id = array(); + + /** + * Base de l'arbre + * @var Array + */ + var $_base = null; + + /** + * Où on est dans l'arbre $this->_arbre + * @var &Array + */ + var $_ici = null; + + /** + * version du depot + * @var int + */ + var $version = 2; + + /** + * Dépôt dans les attributs de la classe + * + * @param Array $params + */ + function cfg_depot_table($params=array()){ + foreach ($params as $o=>$v) { + $this->$o = $v; + } + } + + /** + * charge la base (racine) et le point de l'arbre sur lequel on se trouve (ici) + * + * @param boolean $creer # inutilisé + */ + function charger($creer = false){ + + if (!$this->param['table']) { + $this->messages['message_erreur'][] = _T('cfg:nom_table_manquant'); + return false; + } + + // colid : nom de la colonne primary key + list($this->param['table'], $colid) = $this->get_table_id($this->param['table']); + + // renseigner les liens id=valeur + $id = explode('/',$this->param['cfg_id']); + foreach ($colid as $n=>$c) { + if (isset($id[$n])) { + $this->_id[$c] = $id[$n]; + } + } + + if (!$this->param['cfg_id'] AND !($this->param['autoriser_absence_id'] == 'oui')) { + $this->messages['message_erreur'][] = _T('cfg:id_manquant'); + return false; + } + + // select + $this->_select = array(); + if ($this->champs){ + foreach ($this->champs as $nom => $def) { + if (isset($def['id'])) { + continue; + } + $this->_select[] = $nom; + } + } else { + $this->_select[] = '*'; + } + + // where + $this->_where = array(); + foreach ($this->_id as $nom => $id) { + $this->_where[] = $nom . '=' . sql_quote($id); + } + + $this->_base = ($d = sql_fetsel( + $this->_select, + $this->param['table'], + $this->_where)) ? $d : array(); + + $this->_existe = count($this->_base); + + $this->_ici = &$this->_base; + return true; + } + + /** + * recuperer les valeurs. + * + * @return Array + */ + function lire() { + // charger + if (!$this->charger()){ + return array(false, $this->val, $this->messages); + } + + // utile ?? + if ($this->param['cfg_id']) { + $cles = explode('/', $this->param['cfg_id']); + foreach ($this->champs_id as $i => $name) { + $this->_ici[$name] = $cles[$i]; + } + } + + // s'il y a des champs demandes, ne retourner que ceux-ci + if (count($this->champs)){ + $val = array(); + foreach ($this->champs as $name => $def) { + $val[$name] = $this->_ici[$name]; + } + $this->_ici = $val; + } + return array(true, $this->_ici); + } + + + /** + * ecrit chaque enregistrement pour chaque champ. + * + * @return Array + */ + function ecrire() + { + // charger + if (!$this->charger()){ + return array(false, $this->val, $this->messages); + } + + if ($this->champs){ + foreach ($this->champs as $name => $def) { + if (isset($def['id'])) continue; + $this->_ici[$name] = $this->val[$name]; + } + } else { + $this->_ici = $this->val; + } + + // update + if ($this->_existe) { + $ok = sql_updateq($this->param['table'], $this->_ici, $this->_where ); + } else { + $ok = $id = sql_insertq($this->param['table'], $this->_ici); + } + + // remettre l'id + if ($ok && (count($this->champs_id)==1)) { + $this->_ici[$nomid = $this->champs_id[0]] = $this->_existe ? $this->val[$nomid] : $ok; + } + + return array($ok, $this->_ici); + } + + + /** + * supprime chaque enregistrement pour chaque champ. + * + * @return Array + */ + function effacer(){ + // charger + if (!$this->charger()){ + return array(false, $this->val, $this->messages); + } + + $ok = !$this->_existe || sql_delete($this->param['table'], $this->_where ); + return array($ok, array()); + } + + + /** + * charger les arguments + * - lire_config(table::table@colonne:id + * - lire_config(table::table:id + * + * @param string $args + * @return boolean + */ + function charger_args($args){ + + list($table, $id) = explode(':',$args,2); + list($table, $colonne) = explode('@',$table); + list($table, $colid) = $this->get_table_id($table); + + $this->param['cfg_id'] = $id; + $this->param['champs'] = $colonne ? array($colonne=>true) : ''; + $this->param['table'] = $table ? $table : 'spip_cfg'; + + // renseigner les liens id=valeur + $id = explode(':',$id); + foreach ($colid as $n=>$c) { + if (isset($id[$n])) { + $this->_id[$c] = $id[$n]; + } + } + + return true; + } + + + /** + * se positionner dans le tableau arborescent + * + * @param &Array $base + * @param string $chemin + * @return &Array + */ + function & monte_arbre(&$base, $chemin){ + if (!$chemin) { + return $base; + } + if (!is_array($chemin)) { + $chemin = explode('/', $chemin); + } + if (!is_array($base)) { + $base = array(); + } + + foreach ($chemin as $dossier) { + if (!isset($base[$dossier])) { + $base[$dossier] = array(); + } + $this->_arbre[] = array(&$base, $dossier); + $base = &$base[$dossier]; + } + + return $base; + } + + + /** + * Cherche le vrai nom d'une table + * ainsi que ses cles primaires + * + * @param string $table + * @return Array + */ + function get_table_id($table) { + static $catab = array( + 'tables_principales' => 'base/serial', + 'tables_auxiliaires' => 'base/auxiliaires', + ); + $try = array($table, 'spip_' . $table); + foreach ($catab as $categ => $catinc) { + include_spip($catinc); + foreach ($try as $nom) { + if (isset($GLOBALS[$categ][$nom])) { + return array($nom, + preg_split('/\s*,\s*/', $GLOBALS[$categ][$nom]['key']['PRIMARY KEY'])); + } + } + } + if ($try = table_objet($table)) { + return array('spip_' . $try, array(id_table_objet($table))); + } + return array(false, false); + } + +} + + + + + + + +?>