X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=www%2Fecrire%2Finc%2Fcvt_configurer.php;fp=www%2Fecrire%2Finc%2Fcvt_configurer.php;h=432cf26537e35433278818a026b73daa8b148240;hb=a33c2ba9d919664b3bb0f565f8e9a8b9d8530cdb;hp=0000000000000000000000000000000000000000;hpb=8945248b3d948385798d9aa355c70e7089aca2b3;p=lhc%2Fweb%2Fclavette_www.git diff --git a/www/ecrire/inc/cvt_configurer.php b/www/ecrire/inc/cvt_configurer.php new file mode 100644 index 0000000..432cf26 --- /dev/null +++ b/www/ecrire/inc/cvt_configurer.php @@ -0,0 +1,234 @@ +"; + } + } + } + return $flux; +} + +/** + * Proposer un traitement par defaut pour les #FORMULAIRE_CONFIGURER_XXX + * + * @param array $flux + * @return array + */ +function cvtconf_formulaire_traiter($flux){ + if ($form = $flux['args']['form'] + AND strncmp($form,'configurer_',11)==0 // un #FORMULAIRE_CONFIGURER_XXX + AND !charger_fonction("traiter","formulaires/$form/",true) // sans fonction traiter() + ) { + $trace = cvtconf_formulaires_configurer_enregistre($form,$flux['args']['args']); + $flux['data'] = array('message_ok'=>_T('config_info_enregistree').$trace,'editable'=>true); + } + return $flux; +} + +/** + * Enregistrer les donnees d'un formulaire $form appele avec les arguments $args + * Cette fonction peut etre appellee manuellement et explicitement depuis la fonction traiter() + * d'un formulaire configurer_xxx dont on veut personaliser le traitement + * sans reecrire le stockage des donnees + * + * @param string $form + * nom du formulaire "configurer_xxx" + * @param array $args + * arguments de l'appel de la fonction traiter ($args = func_get_args();) + * @return string + */ +function cvtconf_formulaires_configurer_enregistre($form,$args){ + $valeurs = array(); + // charger les valeurs + // ce qui permet de prendre en charge une fonction charger() existante + // qui prend alors la main sur l'auto detection + if ($charger_valeurs = charger_fonction("charger","formulaires/$form/",true)) + $valeurs = call_user_func_array($charger_valeurs,$args); + $valeurs = pipeline( + 'formulaire_charger', + array( + 'args'=>array('form'=>$form,'args'=>$args,'je_suis_poste'=>false), + 'data'=>$valeurs) + ); + // ne pas stocker editable ! + unset($valeurs['editable']); + + // recuperer les valeurs postees + $store = array(); + foreach($valeurs as $k=>$v){ + if (substr($k,0,1)!=='_') + $store[$k] = _request($k); + } + + return cvtconf_configurer_stocker($form,$valeurs,$store); +} + +/** + * Definir la regle de conteneur, en fonction de la presence + * des + * _meta_table : nom de la table meta ou stocker (par defaut 'meta') + * _meta_casier : nom du casier dans lequel serializer (par defaut xx de formulaire_configurer_xx) + * _meta_prefixe : prefixer les meta (alternative au casier) dans la table des meta (par defaur rien) + * _meta_stockage : Methode externe de stockage. Aucune n'est fournie par le core. + * + * @param string $form + * @param array $valeurs + * @return array + */ +function cvtconf_definir_configurer_conteneur($form,$valeurs) { + // stocker en base + // par defaut, dans un casier serialize dans spip_meta (idem CFG) + $casier = substr($form,11); + $table = 'meta'; + $prefixe = ''; + $stockage = ''; + + if (isset($valeurs['_meta_casier'])) $casier = $valeurs['_meta_casier']; + if (isset($valeurs['_meta_prefixe'])) $prefixe = $valeurs['_meta_prefixe']; + if (isset($valeurs['_meta_stockage'])) $stockage = $valeurs['_meta_stockage'] . '::'; + + // si on indique juste une table, il faut vider les autres proprietes + // car par defaut on utilise ni casier ni prefixe dans ce cas + if (isset($valeurs['_meta_table'])) { + $table = $valeurs['_meta_table']; + $casier = (isset($valeurs['_meta_casier'])?$valeurs['_meta_casier']:''); + } + + return array($table,$casier,$prefixe,$stockage); +} + +/** + * Retrouver les champs d'un formulaire en parcourant son squelette + * et en extrayant les balises input, textarea, select + * + * @param string $form + * @return array + */ +function cvtconf_formulaires_configurer_recense($form){ + $valeurs = array('editable'=>' '); + + // sinon cas analyse du squelette + if ($f = find_in_path($form.'.' . _EXTENSION_SQUELETTES, 'formulaires/') + AND lire_fichier($f, $contenu)) { + + for ($i=0;$i<2;$i++) { + // a la seconde iteration, evaluer le fond avec les valeurs deja trouvees + // permet de trouver aussi les name="#GET{truc}" + if ($i==1) $contenu = recuperer_fond("formulaires/$form",$valeurs); + + $balises = array_merge(extraire_balises($contenu,'input'), + extraire_balises($contenu,'textarea'), + extraire_balises($contenu,'select')); + + foreach($balises as $b) { + if ($n = extraire_attribut($b, 'name') + AND preg_match(",^([\w\-]+)(\[\w*\])?$,",$n,$r) + AND !in_array($n,array('formulaire_action','formulaire_action_args')) + AND extraire_attribut($b,'type')!=='submit') { + $valeurs[$r[1]] = ''; + // recuperer les valeurs _meta_xx qui peuvent etre fournies + // en input hidden dans le squelette + if (strncmp($r[1],'_meta_',6)==0) + $valeurs[$r[1]] = extraire_attribut($b,'value'); + } + } + } + } + + + cvtconf_configurer_lire_meta($form,$valeurs); + return $valeurs; +} + +/** + * Stocker les metas + * @param string $form + * @param array $valeurs + * @param array $store + * @return string + */ +function cvtconf_configurer_stocker($form,$valeurs,$store) { + $trace = ''; + list($table,$casier,$prefixe,$stockage) = cvtconf_definir_configurer_conteneur($form,$valeurs); + // stocker en base + // par defaut, dans un casier serialize dans spip_meta (idem CFG) + if (!isset($GLOBALS[$table])) + lire_metas($table); + + $prefixe = ($prefixe?$prefixe.'_':''); + $table = ($table) ? "/$table/" : ""; + $casier = ($casier) ? rtrim($casier,'/').'/' : ""; // slash final, sinon rien + + foreach($store as $k=>$v){ + ecrire_config("$stockage$table$prefixe$casier$k", $v); + if (_request('var_mode')=='configurer' AND autoriser('webmestre')){ + $trace .= "
table $table : ".$prefixe.$k." = $v;"; + } + } + return $trace; +} + +/** + * Lecture en base des metas d'un form + * @param string $form + * @param array $valeurs + */ +function cvtconf_configurer_lire_meta($form,&$valeurs) { + list($table,$casier,$prefixe,$stockage) = cvtconf_definir_configurer_conteneur($form,$valeurs); + + $table = ($table) ? "/$table/" : ""; + $prefixe = ($prefixe?$prefixe.'_':''); + if ($casier) { + $meta = lire_config("$stockage$table$prefixe$casier"); + $prefixe = ''; + } + else { + $table = rtrim($table, '/'); + $meta = lire_config("$stockage$table"); + } + + foreach($valeurs as $k=>$v){ + if (substr($k,0,1)!=='_') + $valeurs[$k] = (isset($meta[$prefixe.$k])?$meta[$prefixe.$k]:''); + } +} + + +?>