Ajout du support des écritures ventilées.
[garradin.git] / www / admin / config / membres.php
1 <?php
2 namespace Garradin;
3
4 require_once __DIR__ . '/_inc.php';
5
6 $error = false;
7
8 // Restauration de ce qui était en session
9 if ($champs = $membres->sessionGet('champs_membres'))
10 {
11 $champs = new Champs_Membres($champs);
12 }
13 else
14 {
15 // Il est nécessaire de créer une nouvelle instance ici, sinon
16 // l'enregistrement des modifs ne marchera pas car les deux instances seront identiques.
17 // Càd si on utilise directement l'instance de $config, elle sera modifiée directement
18 // du coup quand on essaiera de comparer si ça a changé ça comparera deux fois la même chose
19 // donc ça n'aura pas changé forcément.
20 $champs = new Champs_Membres($config->get('champs_membres'));
21 }
22
23 if (isset($_GET['ok']))
24 {
25 $error = 'OK';
26 }
27
28 $debug = "_POST=".print_r($_POST, true);
29
30 if (!empty($_POST['save']) || !empty($_POST['add']) || !empty($_POST['review']) || !empty($_POST['reset']))
31 {
32 if (!utils::CSRF_check('config_membres'))
33 {
34 $error = 'Une erreur est survenue, merci de renvoyer le formulaire.';
35 }
36 else
37 {
38 if (!empty($_POST['reset']))
39 {
40 $membres->sessionStore('champs_membres', null);
41 utils::redirect('/admin/config/membres.php');
42 }
43 elseif (!empty($_POST['review']))
44 {
45 try {
46 $nouveau_champs = utils::post('champs');
47
48 foreach ($nouveau_champs as $key=>&$cfg)
49 {
50 $cfg['type'] = $champs->get($key, 'type');
51 }
52
53 $champs->setAll($nouveau_champs);
54 $membres->sessionStore('champs_membres', (string)$champs);
55
56 utils::redirect('/admin/config/membres.php?review');
57 }
58 catch (UserException $e)
59 {
60 $error = $e->getMessage();
61 }
62 }
63 elseif (!empty($_POST['add']))
64 {
65 try {
66 if (utils::post('preset'))
67 {
68 $presets = Champs_Membres::listUnusedPresets($champs);
69 if (!array_key_exists(utils::post('preset'), $presets))
70 {
71 throw new UserException('Le champ pré-défini demandé ne fait pas partie des champs disponibles.');
72 }
73
74 $champs->add(utils::post('preset'), $presets[utils::post('preset')]);
75 }
76 elseif (utils::post('new'))
77 {
78 $presets = Champs_Membres::importPresets();
79 $new = utils::post('new');
80
81 if (array_key_exists($new, $presets))
82 {
83 throw new UserException('Le champ personnalisé ne peut avoir le même nom qu\'un champ pré-défini.');
84 }
85
86 $config = [
87 'type' => utils::post('new_type'),
88 'title' => utils::post('new_title'),
89 'editable' => true,
90 'mandatory' => false,
91 ];
92
93 if ($config['type'] == 'select' || $config['type'] == 'multiple')
94 {
95 $config['options'] = ['Première option'];
96 }
97
98 $champs->add($new, $config);
99 }
100
101 $membres->sessionStore('champs_membres', (string) $champs);
102
103 utils::redirect('/admin/config/membres.php?added');
104 }
105 catch (UserException $e)
106 {
107 $error = $e->getMessage();
108 }
109 }
110 elseif (!empty($_POST['save']))
111 {
112 try {
113 $champs->save();
114 $membres->sessionStore('champs_membres', null);
115 utils::redirect('/admin/config/membres.php?ok');
116 }
117 catch (UserException $e)
118 {
119 $error = $e->getMessage();
120 }
121 }
122 }
123 }
124
125 $tpl->assign('error', $error);
126 $tpl->assign('debug', $debug);
127 $tpl->assign('review', isset($_GET['review']) ? true : false);
128
129 $types = $champs->getTypes();
130
131 $tpl->assign('champs', $champs->getAll());
132 $tpl->assign('types', $types);
133 $tpl->assign('presets', Champs_Membres::listUnusedPresets($champs));
134 $tpl->assign('new', utils::post('new'));
135
136 $tpl->register_modifier('get_type', function ($type) use ($types) {
137 return $types[$type];
138 });
139
140 $tpl->assign('csrf_name', utils::CSRF_field_name('config_membres'));
141 $tpl->assign('csrf_value', utils::CSRF_create('config_membres'));
142
143 $tpl->display('admin/config/membres.tpl');
144
145 ?>