init
[garradin.git] / include / class.membres_categories.php
1 <?php
2
3 namespace Garradin;
4
5 class Membres_Categories
6 {
7 protected $droits = [
8 'inscription'=> Membres::DROIT_AUCUN,
9 'connexion' => Membres::DROIT_ACCES,
10 'membres' => Membres::DROIT_ACCES,
11 'compta' => Membres::DROIT_ACCES,
12 'wiki' => Membres::DROIT_ACCES,
13 'config' => Membres::DROIT_AUCUN,
14 ];
15
16 static public function getDroitsDefaut()
17 {
18 return $this->droits;
19 }
20
21 protected function _checkData(&$data)
22 {
23 $db = DB::getInstance();
24
25 if (!isset($data['nom']) || !trim($data['nom']))
26 {
27 throw new UserException('Le nom de catégorie ne peut rester vide.');
28 }
29
30 if (!empty($data['id_cotisation_obligatoire'])
31 && !$db->simpleQuerySingle('SELECT 1 FROM cotisations WHERE id = ?;',
32 false, (int)$data['id_cotisation_obligatoire']))
33 {
34 throw new UserException('Numéro de cotisation inconnu.');
35 }
36
37 if (isset($data['id_cotisation_obligatoire']) && empty($data['id_cotisation_obligatoire']))
38 {
39 $data['id_cotisation_obligatoire'] = null;
40 }
41 }
42
43 public function add($data)
44 {
45 $this->_checkData($data);
46
47 if (!isset($data['description']))
48 {
49 $data['description'] = '';
50 }
51
52 foreach ($this->droits as $key=>$value)
53 {
54 if (!isset($data['droit_'.$key]))
55 $data['droit_'.$key] = $value;
56 else
57 $data['droit_'.$key] = (int)$data['droit_'.$key];
58 }
59
60 $db = DB::getInstance();
61 $db->simpleInsert('membres_categories', $data);
62
63 return $db->lastInsertRowID();
64 }
65
66 public function edit($id, $data)
67 {
68 $this->_checkData($data);
69
70 foreach ($this->droits as $key=>$value)
71 {
72 if (isset($data['droit_'.$key]))
73 $data['droit_'.$key] = (int)$data['droit_'.$key];
74 }
75
76 if (!isset($data['cacher']) || $data['cacher'] != 1)
77 $data['cacher'] = 0;
78
79 $db = DB::getInstance();
80 return $db->simpleUpdate('membres_categories', $data, 'id = '.(int)$id);
81 }
82
83 public function get($id)
84 {
85 $db = DB::getInstance();
86
87 return $db->simpleQuerySingle('SELECT * FROM membres_categories WHERE id = ?;',
88 true, (int) $id);
89 }
90
91 public function remove($id)
92 {
93 $db = DB::getInstance();
94 $config = Config::getInstance();
95
96 if ($id == $config->get('categorie_membres'))
97 {
98 throw new UserException('Il est interdit de supprimer la catégorie définie par défaut dans la configuration.');
99 }
100
101 if ($db->simpleQuerySingle('SELECT 1 FROM membres WHERE id_categorie = ?;', false, (int)$id))
102 {
103 throw new UserException('La catégorie contient encore des membres, il n\'est pas possible de la supprimer.');
104 }
105
106 $db->simpleUpdate(
107 'wiki_pages',
108 [
109 'droit_lecture' => Wiki::LECTURE_NORMAL,
110 'droit_ecriture' => Wiki::ECRITURE_NORMAL,
111 ],
112 'droit_lecture = '.(int)$id.' OR droit_ecriture = '.(int)$id
113 );
114
115 return $db->simpleExec('DELETE FROM membres_categories WHERE id = ?;', (int) $id);
116 }
117
118 public function listSimple()
119 {
120 $db = DB::getInstance();
121 return $db->queryFetchAssoc('SELECT id, nom FROM membres_categories ORDER BY nom;');
122 }
123
124 public function listComplete()
125 {
126 $db = DB::getInstance();
127 return $db->queryFetch('SELECT * FROM membres_categories ORDER BY nom;');
128 }
129
130 public function listCompleteWithStats()
131 {
132 $db = DB::getInstance();
133 return $db->queryFetch('SELECT *, (SELECT COUNT(*) FROM membres WHERE id_categorie = membres_categories.id) AS nombre FROM membres_categories ORDER BY nom;');
134 }
135
136
137 public function listHidden()
138 {
139 $db = DB::getInstance();
140 return $db->queryFetchAssoc('SELECT id, nom FROM membres_categories WHERE cacher = 1;');
141 }
142
143 public function listNotHidden()
144 {
145 $db = DB::getInstance();
146 return $db->queryFetchAssoc('SELECT id, nom FROM membres_categories WHERE cacher = 0;');
147 }
148 }
149
150 ?>