3b99ecd1f7521f20c965a9d9b8de91f949f88296
[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-2017 *
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')) {
14 return;
15 }
16
17 function formulaires_configurer_metas_charger_dist($form) {
18 $f = charger_fonction('charger', "formulaires/$form", true);
19 if ($f) {
20 return $f($form);
21 } else {
22 $infos = formulaires_configurer_metas_infos($form);
23 if (!is_array($infos)) {
24 return $infos;
25 }
26
27 return $GLOBALS[$infos['meta']];
28 }
29 }
30
31 function formulaires_configurer_metas_verifier_dist($form) {
32 $f = charger_fonction('verifier', "formulaires/$form", true);
33
34 return $f ? $f($form) : array();
35 }
36
37 function formulaires_configurer_metas_traiter_dist($form) {
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)) {
44 return $infos;
45 } // fait ci-dessus en fait
46 $vars = formulaires_configurer_metas_recense($infos['path'], PREG_PATTERN_ORDER);
47 $meta = $infos['meta'];
48 foreach (array_unique($vars[2]) as $k) {
49 $v = _request($k);
50 ecrire_meta($k, is_array($v) ? serialise($v) : $v, 'oui', $meta);
51 }
52
53 return !isset($infos['prefix']) ? array()
54 : array('redirect' => generer_url_ecrire($infos['prefix']));
55 }
56 }
57
58 // version amelioree de la RegExp de cfg_formulaire.
59 define(
60 '_EXTRAIRE_SAISIES',
61 '#<(select|textarea|input)[^>]*\sname=["\'](\w+)(\[\w*\])?["\'](?: class=["\']([^\'"]*)["\'])?( multiple=)?[^>]*?>#ims'
62 );
63
64 // determiner la liste des noms des saisies d'un formulaire
65 // (a refaire avec SAX)
66 function formulaires_configurer_metas_recense($form, $opt = '') {
67 if (!$opt) {
68 $opt = PREG_SET_ORDER;
69 }
70 $f = file_get_contents($form);
71 if ($f and preg_match_all(_EXTRAIRE_SAISIES, $f, $r, $opt)) {
72 return $r;
73 } else {
74 return array();
75 }
76 }
77
78 // Repertoires potentiels des plugins, ce serait bien d'avoir ça ailleurs
79 // ca n'est pas lie a cette balise
80 // Attention a l'ordre:
81 // si l'un des 3 est un sous-rep d'un autre, le mettre avant.
82
83 define('_EXTRAIRE_PLUGIN', '@(' . _DIR_PLUGINS_AUTO . '|' . _DIR_PLUGINS . '|' . _DIR_PLUGINS_DIST . ')/?([^/]+)/@');
84
85 // Recuperer la version compilee de plugin.xml et normaliser
86 // Si ce n'est pas un plugin, dire qu'il faut prendre la table std des meta.
87 function formulaires_configurer_metas_infos($form) {
88
89 $path = find_in_path($form . '.' . _EXTENSION_SQUELETTES, 'formulaires/');
90 if (!$path) {
91 return '';
92 } // cas traite en amont normalement.
93 if (!preg_match(_EXTRAIRE_PLUGIN, $path, $m)) {
94 return array('path' => $path, 'meta' => 'meta');
95 }
96 $plugin = $m[2];
97 $get_infos = charger_fonction('get_infos', 'plugins');
98 $infos = $get_infos($plugin, false, $m[1]);
99 if (!is_array($infos)) {
100 return _T('erreur_plugin_nom_manquant');
101 }
102 if (isset($infos['erreur'])) {
103 return $infos['erreur'][0];
104 }
105 $prefix = $infos['prefix'];
106 $infos['path'] = $path;
107 if (!isset($infos['meta'])) {
108 $infos['meta'] = ($prefix . '_metas');
109 }
110
111 return $infos;
112 }