init
[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 if (!empty($_POST['save']) || !empty($_POST['add']) || !empty($_POST['review']) || !empty($_POST['reset']))
29 {
30 if (!utils::CSRF_check('config_membres'))
31 {
32 $error = 'Une erreur est survenue, merci de renvoyer le formulaire.';
33 }
34 else
35 {
36 if (!empty($_POST['reset']))
37 {
38 $membres->sessionStore('champs_membres', null);
39 utils::redirect('/admin/config/membres.php');
40 }
41 elseif (!empty($_POST['review']))
42 {
43 try {
44 $nouveau_champs = utils::post('champs');
45
46 foreach ($nouveau_champs as $key=>&$cfg)
47 {
48 $cfg['type'] = $champs->get($key, 'type');
49 }
50
51 $champs->setAll($nouveau_champs);
52 $membres->sessionStore('champs_membres', (string)$champs);
53
54 utils::redirect('/admin/config/membres.php?review');
55 }
56 catch (UserException $e)
57 {
58 $error = $e->getMessage();
59 }
60 }
61 elseif (!empty($_POST['add']))
62 {
63 try {
64 if (utils::post('preset'))
65 {
66 $presets = Champs_Membres::listUnusedPresets($champs);
67 if (!array_key_exists(utils::post('preset'), $presets))
68 {
69 throw new UserException('Le champ pré-défini demandé ne fait pas partie des champs disponibles.');
70 }
71
72 $champs->add(utils::post('preset'), $presets[utils::post('preset')]);
73 }
74 elseif (utils::post('new'))
75 {
76 $presets = Champs_Membres::importPresets();
77 $new = utils::post('new');
78
79 if (array_key_exists($new, $presets))
80 {
81 throw new UserException('Le champ personnalisé ne peut avoir le même nom qu\'un champ pré-défini.');
82 }
83
84 $config = [
85 'type' => utils::post('new_type'),
86 'title' => utils::post('new_title'),
87 'editable' => true,
88 'mandatory' => false,
89 ];
90
91 if ($config['type'] == 'select' || $config['type'] == 'multiple')
92 {
93 $config['options'] = ['Première option'];
94 }
95
96 $champs->add($new, $config);
97 }
98
99 $membres->sessionStore('champs_membres', (string) $champs);
100
101 utils::redirect('/admin/config/membres.php?added');
102 }
103 catch (UserException $e)
104 {
105 $error = $e->getMessage();
106 }
107 }
108 elseif (!empty($_POST['save']))
109 {
110 try {
111 $champs->save();
112 $membres->sessionStore('champs_membres', null);
113 utils::redirect('/admin/config/membres.php?ok');
114 }
115 catch (UserException $e)
116 {
117 $error = $e->getMessage();
118 }
119 }
120 }
121 }
122
123 $tpl->assign('error', $error);
124 $tpl->assign('review', isset($_GET['review']) ? true : false);
125
126 $types = $champs->getTypes();
127
128 $tpl->assign('champs', $champs->getAll());
129 $tpl->assign('types', $types);
130 $tpl->assign('presets', Champs_Membres::listUnusedPresets($champs));
131 $tpl->assign('new', utils::post('new'));
132
133 $tpl->register_modifier('get_type', function ($type) use ($types) {
134 return $types[$type];
135 });
136
137 $tpl->assign('csrf_name', utils::CSRF_field_name('config_membres'));
138 $tpl->assign('csrf_value', utils::CSRF_create('config_membres'));
139
140 $tpl->display('admin/config/membres.tpl');
141
142 ?>