[SPIP] ~maj 3.0.10 --> 3.0.14
[lhc/web/www.git] / www / prive / formulaires / configurer_metas.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2014 *
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
13 if (!defined('_ECRIRE_INC_VERSION')) return;
14
15 function 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 return $GLOBALS[$infos['meta']];
24 }
25 }
26
27 function formulaires_configurer_metas_verifier_dist($form)
28 {
29 $f = charger_fonction('verifier', "formulaires/$form", true);
30 return $f ? $f($form) : array();
31 }
32
33 function formulaires_configurer_metas_traiter_dist($form)
34 {
35 $f = charger_fonction('traiter', "formulaires/$form", true);
36 if ($f)
37 return $f($form);
38 else {
39 $infos = formulaires_configurer_metas_infos($form);
40 if (!is_array($infos)) return $infos; // fait ci-dessus en fait
41 $vars = formulaires_configurer_metas_recense($infos['path'], PREG_PATTERN_ORDER);
42 $meta = $infos['meta'];
43 foreach (array_unique($vars[2]) as $k) {
44 $v = _request($k);
45 ecrire_meta($k, is_array($v) ? serialise($v) : $v, 'oui', $meta);
46 }
47 return !isset($infos['prefix']) ? array()
48 : array('redirect' => generer_url_ecrire($infos['prefix']));
49 }
50 }
51
52 // version amelioree de la RegExp de cfg_formulaire.
53 define('_EXTRAIRE_SAISIES',
54 '#<(select|textarea|input)[^>]*\sname=["\'](\w+)(\[\w*\])?["\'](?: class=["\']([^\'"]*)["\'])?( multiple=)?[^>]*?>#ims');
55
56 // determiner la liste des noms des saisies d'un formulaire
57 // (a refaire avec SAX)
58 function formulaires_configurer_metas_recense($form, $opt='')
59 {
60 if (!$opt) $opt = PREG_SET_ORDER;
61 $f = file_get_contents($form);
62 if ($f AND preg_match_all(_EXTRAIRE_SAISIES, $f, $r, $opt))
63 return $r;
64 else return array();
65 }
66
67 // Repertoires potentiels des plugins, ce serait bien d'avoir ça ailleurs
68 // ca n'est pas lie a cette balise
69 // Attention a l'ordre:
70 // si l'un des 3 est un sous-rep d'un autre, le mettre avant.
71
72 define('_EXTRAIRE_PLUGIN', '@(' . _DIR_PLUGINS_AUTO . '|' . _DIR_PLUGINS . '|' . _DIR_PLUGINS_DIST .')/?([^/]+)/@');
73
74 // Recuperer la version compilee de plugin.xml et normaliser
75 // Si ce n'est pas un plugin, dire qu'il faut prendre la table std des meta.
76 function formulaires_configurer_metas_infos($form){
77
78 $path = find_in_path($form.'.' . _EXTENSION_SQUELETTES, 'formulaires/');
79 if (!$path) return ''; // cas traite en amont normalement.
80 if (!preg_match(_EXTRAIRE_PLUGIN, $path, $m))
81 return array('path' => $path, 'meta' => 'meta');
82 $plugin = $m[2];
83 $get_infos = charger_fonction('get_infos','plugins');
84 $infos = $get_infos($plugin, false, $m[1]);
85 if (!is_array($infos)) return _T('erreur_plugin_nom_manquant');
86 if (isset($infos['erreur'])) return $infos['erreur'][0];
87 $prefix = $infos['prefix'];
88 $infos['path'] = $path;
89 if (!isset($infos['meta'])) $infos['meta'] = ($prefix . '_metas');
90 return $infos;
91 }
92 ?>