source: spip-zone/_plugins_/Association/Associaspip/formulaires/configurer_metas.php @ 48461

Last change on this file since 48461 was 48461, checked in by jeannolapin@…, 10 years ago

Associaspip Petite erreur sans effet jusque là mais on ne sait jamais.

File size: 3.6 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2010                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15function formulaires_configurer_metas_charger_dist($form)
16{
17        $f = charger_fonction('charger', "formulaires/$form", true);
18        if ($f)
19                return $f($form);
20        else {
21                $infos = formulaires_configurer_metas_infos($form);
22                if (!is_array($infos)) return $infos;
23                if (isset($infos['meta']) AND isset($GLOBALS[$infos['meta']])) 
24                    return $GLOBALS[$infos['meta']];
25                spip_log("configurer_meta, charger: table des meta pour $form inconnue" . $infos['meta']);
26                return array();
27        }
28}
29
30function formulaires_configurer_metas_verifier_dist($form)
31{
32        $f = charger_fonction('verifier', "formulaires/$form", true);
33        return $f ? $f($form) : array();
34}
35
36function formulaires_configurer_metas_traiter_dist($form)
37{
38        $f = charger_fonction('traiter', "formulaires/$form", true);
39        if ($f)
40                return $f($form);
41        else {
42                $infos = formulaires_configurer_metas_infos($form);
43                if (!is_array($infos)) return $infos; // fait ci-dessus en fait
44                $vars = formulaires_configurer_metas_recense($infos['path'], PREG_PATTERN_ORDER);
45                $meta = $infos['meta'];
46                foreach (array_unique($vars[2]) as $k) {
47                        $v = _request($k);
48                        ecrire_meta($k, is_array($v) ? serialize($v) : $v, 'oui', $meta);
49                }
50                return !isset($infos['prefix']) ? array()
51                : array('redirect' => generer_url_ecrire($infos['prefix']));
52        }
53}
54
55// version amelioree de la RegExp de cfg_formulaire.
56define('_EXTRAIRE_SAISIES', 
57        '#<(select|textarea|input)[^>]*\sname=["\'](\w+)(\[\w*\])?["\'](?: class=["\']([^\'"]*)["\'])?( multiple=)?[^>]*?>#ims');
58
59// determiner la liste des noms des saisies d'un formulaire
60// (a refaire avec SAX)
61function formulaires_configurer_metas_recense($form, $opt='')
62{
63        if (!$opt) $opt = PREG_SET_ORDER;
64        $f = file_get_contents($form);
65        if ($f AND preg_match_all(_EXTRAIRE_SAISIES, $f, $r, $opt))
66                return $r;
67        else return array();
68}
69
70// Repertoires potentiels des plugins, ce serait bien d'avoir ça ailleurs
71// ca n'est pas lie a cette balise
72// Attention a l'ordre:
73// si l'un des 3 est un sous-rep d'un autre, le mettre avant.
74
75define('_EXTRAIRE_PLUGIN', '@(' .  _DIR_PLUGINS_AUTO . '|' . _DIR_PLUGINS . '|' . _DIR_EXTENSIONS .')(.+)/formulaires/[^/]+$@');
76
77// Recuperer la description XML du plugin et normaliser
78// Si ce n'est pas un plugin, dire qu'il faut prendre la table std des meta.
79function formulaires_configurer_metas_infos($form){
80
81        $path = find_in_path($form.'.' . _EXTENSION_SQUELETTES, 'formulaires/');
82        if (!$path) return ''; // cas traite en amont normalement.
83        if (!preg_match(_EXTRAIRE_PLUGIN, $path, $m))
84                return array('path' => $path, 'meta' => 'meta');
85        $plugin = $m[2];
86        $get_infos = charger_fonction('get_infos','plugins');
87        $infos = $get_infos($plugin, false, $m[1]);
88        if (!is_array($infos))
89          return _T('erreur_plugin_nom_manquant') . ' ' . $plugin . ' ' . $path;
90        if (isset($infos['erreur'])) return $infos['erreur'][0];
91        $prefix = $infos['prefix'];
92        $infos['path'] = $path;
93        if (!isset($infos['meta'])) $infos['meta'] = ($prefix . '_metas');
94        return $infos;
95}
96?>
Note: See TracBrowser for help on using the repository browser.