syntaxe POO (visibilite) et maj indentation
[mw_sourceml] / app / controllers / users / sources_invitations.php
1 <?php
2
3   class mw_users_sources_invitations extends mw_controller{
4
5     public $user;
6     public $status;
7     public $album_status_id;
8     public $morceau_status_id;
9     public $piste_status_id;
10
11     public function validate(){
12       $env = $this->env();
13       $data = $env->data();
14       if(($this->status = $data->source_status()) === false){
15         return "Impossible de lire la liste des status de source";
16       }
17       foreach($this->status as $id_source_status => $source_status){
18         if($source_status["nom"] == "album") $this->album_status_id = $id_source_status;
19         if($source_status["nom"] == "morceau") $this->morceau_status_id = $id_source_status;
20         if($source_status["nom"] == "piste") $this->piste_status_id = $id_source_status;
21         if(isset($this->album_status_id) && isset($this->morceau_status_id) && isset($this->piste_status_id)) break;
22       }
23       if(!isset($this->album_status_id) || !isset($this->morceau_status_id) || !isset($this->album_status_id)){
24         $inconnus = "";
25         if(!isset($this->album_status_id)) $inconnus .= ($inconnus ? ", " : "")."album";
26         if(!isset($this->morceau_status_id)) $inconnus .= ($inconnus ? ", " : "")."morceau";
27         if(!isset($this->piste_status_id)) $inconnus .= ($inconnus ? ", " : "")."piste";
28         return "Types de source inconnu: ".$inconnus;
29       }
30       if(!($this->user = $env->user())){
31         return "Vous devez être identifié pour accéder à cette page";
32       }
33       return true;
34     }
35
36     public function index(){
37       $env = $this->env();
38       $data = $env->data();
39       if(($sources_access = $data->sources_access()) === false){
40         $env->erreur("Impossible de lire les types d'access");
41         return;
42       }
43       if(($groupes = $data->groupes($this->user["id"])) === false){
44         $env->erreur("Impossible de lire la liste des groupes");
45         return;
46       }
47       if(($invitations = $data->sources_invitations($groupes["list"], $this->user["id"])) === false){
48         $env->erreur("Impossible de lire la liste des invitations");
49         return;
50       }
51       foreach($invitations["list"] as $id_invitation => $invitation){
52         if(!($user = $data->user_by_id($invitation["id_user"]))){
53           $env->erreur("impossible de lire les informations de l'utilisateur pour une invitation");
54           return;
55         }
56         $invitations["list"][$id_invitation]["user"] = $user;
57         if(!($source = $data->source($invitation["id_source"]))){
58           $env->erreur("impossible de lire les informations de la source pour une invitation");
59           return;
60         }
61         $invitations["list"][$id_invitation]["source"] = $source;
62       }
63       if(($groupes = $data->groupes()) === false){
64         $env->erreur("Impossible de lire la liste des groupes");
65         return;
66       }
67       $env->set_out("user", $this->user);
68       $env->set_out("groupes", $groupes);
69       $env->set_out("sources_access", $sources_access);
70       $env->set_out("invitations", $invitations);
71       $env->set_out("status", $this->status);
72     }
73
74     public function source_groupes(){
75       $env = $this->env();
76       $data = $env->data();
77       if(!($source = $data->source($_GET[$env->param("id")], true))){
78         $env->erreur("Impossible de lire les informations de la source");
79         return;
80       }
81       $source["permissions"] = $data->source_permissions($source, $this->user["id"]);
82       if(!$source["permissions"]["admin"]){
83         $env->erreur("vous n'avez pas la permission d'editer les groupes de la source");
84         return;
85       }
86       if(($sources_access = $data->sources_access()) === false){
87         $env->erreur("Impossible de lire les types d'access");
88         return;
89       }
90       if(($groupes = $data->groupes()) === false){
91         $env->erreur("Impossible de lire la liste des groupes");
92         return;
93       }
94       if(
95         (
96           $invitations = $data->list_sml_sources_invitations(
97             array(
98               "index_name" => "id",
99               "filters" => array(
100                 array("id_source", "eq", $source["id"])
101               )
102             )
103           )
104         ) === false
105       ){
106         $env->erreur("Impossible de lire la liste des invitations pour cette source");
107         return;
108       }
109       foreach($invitations["list"] as $id_invitation => $invitation){
110         if(isset($groupes["list"][$invitation["id_author"]])){
111           $invitations["list"][$id_invitation]["author"] = $groupes["list"][$invitation["id_author"]];
112           unset($groupes["list"][$invitation["id_author"]]);
113           $groupes["total"]--;
114         }
115       }
116       foreach($source["groupes"] as $id_groupe => $groupe){
117         if(isset($groupes["list"][$id_groupe])){
118           unset($groupes["list"][$id_groupe]);
119           $groupes["total"]--;
120         }
121       }
122       $env->set_out("groupes", $groupes);
123       $env->set_out("sources_access", $sources_access);
124       $env->set_out("source", $source);
125       $env->set_out("invitations", $invitations);
126     }
127
128     public function invite_groupe(){
129       $env = $this->env();
130       $data = $env->data();
131       if(!($source = $data->source($_GET[$env->param("id")], true))){
132         $env->erreur("Impossible de lire les informations de la source");
133         return;
134       }
135       $source["permissions"] = $data->source_permissions($source, $this->user["id"]);
136       if(!$source["permissions"]["admin"]){
137         $env->erreur("vous n'avez pas la permission d'editer les groupes de la source");
138         return;
139       }
140       if(($sources_access = $data->sources_access()) === false){
141         $env->erreur("Impossible de lire les types d'access");
142         return;
143       }
144       if(!($groupe = $data->groupe($_POST["id_groupe"]))){
145         $env->erreur("impossible de lire les informations du groupe");
146       }
147       if(!$_POST["id_sources_access"] || !isset($sources_access[$_POST["id_sources_access"]])){
148         $env->erreur("identifiant d'access de source incorrect");
149       }
150       if(
151         !$data->add_sml_sources_invitations(
152           array(
153             "id_user" => $this->user["id"],
154             "id_source" => $source["id"],
155             "id_author" => $groupe["id"],
156             "id_sources_access" => $_POST["id_sources_access"],
157             "date_invitation" => date("Y-m-d H:i:s")
158           )
159         )
160       ){
161         $env->erreur("Impossible d'ajouter l'invitation");
162         return;
163       }
164       $env->redirect(
165         $env->url("users/sources_invitations"),
166         "l'invitation a été ajoutée"
167       );
168     }
169
170     public function annule_invitation_groupe(){
171       $env = $this->env();
172       $data = $env->data();
173       if(!($invitation = $data->get_sml_sources_invitations("id", $_GET[$env->param("id")]))){
174         $env->erreur("Impossible de lire les informations de l'invitation");
175         return;
176       }
177       if(!($morceau = $data->source($invitation["id_source"], true))){
178         $env->erreur("Impossible de lire les informations du morceau");
179         return;
180       }
181       $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
182       if(!$morceau["permissions"]["admin"]){
183         $env->erreur("vous n'avez pas la permission d'editer les groupes du morceau");
184         return;
185       }
186       if(!$data->del_sml_sources_invitations("id", $invitation["id"])){
187         $env->erreur("Impossible d'annuler l'invitation");
188         return;
189       }
190       $env->redirect(
191         $env->url("users/sources_invitations"),
192         "l'invitation a été annulée"
193       );
194     }
195
196     public function accepter_invitation_groupe(){
197       $env = $this->env();
198       $data = $env->data();
199       if(($groupes = $data->groupes($this->user["id"])) === false){
200         $env->erreur("Impossible de lire la liste des groupes");
201         return;
202       }
203       if(!($invitation = $data->get_sml_sources_invitations("id", $_GET[$env->param("id")]))){
204         $env->erreur("Impossible de lire les informations de l'invitation");
205         return;
206       }
207       if(!($source = $data->source($invitation["id_source"], true))){
208         $env->erreur("Impossible de lire les informations de la source pour cette invitation");
209         return;
210       }
211       if(!isset($groupes["list"][$invitation["id_author"]])){
212         $env->erreur("l'invitation s'adresse a un groupe qui n'appartient pas à votre utilisateur");
213         return;
214       }
215       if(($HAS_THIS_GROUP = $data->source_has_groupe($source["id"], $invitation["id_author"])) === false){
216         $env->erreur("Impossible de savoir si ce groupe a déjà accès à cette source");
217         return;
218       }
219       if($HAS_THIS_GROUP){
220         $env->erreur("le groupe a déjà accès à cette source");
221         return;
222       }
223       if(!$data->del_sml_sources_invitations("id", $invitation["id"])){
224         $env->erreur("Impossible d'effacer l'invitation");
225         return;
226       }
227       if(!$data->add_source_groupe($source["id"], $invitation["id_author"], $invitation["id_sources_access"])){
228         $env->erreur("Impossible de vous ajouter des droits sur la source");
229         return;
230       }
231       $env->redirect(
232         $env->url("users/sources_invitations"),
233         "l'invitation a été acceptée"
234       );
235     }
236
237     public function refuser_invitation_groupe(){
238       $env = $this->env();
239       $data = $env->data();
240       if(($groupes = $data->groupes($this->user["id"])) === false){
241         $env->erreur("Impossible de lire la liste des groupes");
242         return;
243       }
244       if(!($invitation = $data->get_sml_sources_invitations("id", $_GET[$env->param("id")]))){
245         $env->erreur("Impossible de lire les informations de l'invitation");
246         return;
247       }
248       if(!($source = $data->source($invitation["id_source"], true))){
249         $env->erreur("Impossible de lire les informations de la source pour cette invitation");
250         return;
251       }
252       if(!isset($groupes["list"][$invitation["id_author"]])){
253         $env->erreur("l'invitation s'adresse a un groupe qui n'appartient pas à votre utilisateur");
254         return;
255       }
256       if(!$data->del_sml_sources_invitations("id", $invitation["id"])){
257         $env->erreur("Impossible d'effacer l'invitation");
258         return;
259       }
260       $env->redirect(
261         $env->url("users/sources_invitations"),
262         "l'invitation a été refusée"
263       );
264     }
265
266     public function del_groupe(){
267       $env = $this->env();
268       $data = $env->data();
269       if(!($source = $data->source($_GET[$env->param("id")], true))){
270         $env->erreur("Impossible de lire les informations de la source");
271         return;
272       }
273       $source["permissions"] = $data->source_permissions($source, $this->user["id"]);
274       if(!$source["permissions"]["admin"]){
275         $env->erreur("vous n'avez pas la permission d'editer les groupes de la source");
276         return;
277       }
278       $source_class = $this->status[$source["status"]]["nom"];
279       if($source_class == "album"){
280         $redirect = $env->url("users/albums/groupes", array("id" => $source["id"]));
281       }
282       elseif($source_class == "morceau"){
283         $redirect = $env->url("users/morceaux/groupes", array("id" => $source["id"]));
284       }
285       elseif($source_class == "piste"){
286         $redirect = $env->url("users/pistes/groupes", array("id" => $source["id"]));
287       }
288       else{
289         $env->erreur("type de source inconnu");
290         return;
291       }
292       if(!($groupe = $data->groupe($_GET[$env->param("groupe")]))){
293         $env->erreur("impossible de lire les informations du groupe");
294         return;
295       }
296       $ID_UNIQUE_ADMIN = false;
297       foreach($source["groupes"] as $id_groupe => $source_groupe){
298         if($source_groupe["id_groupe_status"] == $data->id_groupe_status_admin()){
299           if(!$ID_UNIQUE_ADMIN) $ID_UNIQUE_ADMIN = $id_groupe;
300           else{
301             $ID_UNIQUE_ADMIN = true;
302             break;
303           }
304         }
305       }
306       if(!$ID_UNIQUE_ADMIN){
307         $env->erreur("aucun administrateur sur cette source");
308         return;
309       }
310       if($ID_UNIQUE_ADMIN !== true){
311         if($groupe["id"] == $ID_UNIQUE_ADMIN){
312           $env->erreur("vous ne pouvez pas enlever l'unique administrateur");
313           return;
314         }
315       }
316       if(!$data->del_source_groupe($source["id"], $groupe["id"])){
317         $env->erreur("Impossible d'enlever le groupe");
318         return;
319       }
320       $env->redirect(
321         $redirect,
322         "le groupe a été enlevé"
323       );
324     }
325
326   }