syntaxe POO (visibilite) et maj indentation
[mw_sourceml] / app / controllers / users / albums.php
1 <?php
2
3   class mw_users_albums extends mw_controller{
4
5     public $user;
6     public $status;
7     public $album_status_id;
8
9     public function validate(){
10       $env = $this->env();
11       $data = $env->data();
12       if(($this->status = $data->source_status()) === false){
13         return "Impossible de lire la liste des status de source";
14       }
15       foreach($this->status as $id_source_status => $source_status){
16         if($source_status["nom"] == "album"){
17           $this->album_status_id = $id_source_status;
18           break;
19         }
20       }
21       if(!isset($this->album_status_id)){
22         return "Type de source inconnu: album";
23       }
24       if(!($this->user = $env->user())){
25         return "Vous devez être identifié pour accéder à cette page";
26       }
27       return true;
28     }
29
30     public function index(){
31       $env = $this->env();
32       $data = $env->data();
33       if(($groupes = $data->groupes($this->user["id"])) === false){
34         $env->erreur("Impossible de lire la liste des groupes");
35         return;
36       }
37       $id_groupe = false;
38       if(isset($_GET[$env->param("groupe")])){
39         $id_groupe = $_GET[$env->param("groupe")];
40         if(!isset($groupes["list"][$id_groupe])){
41           $env->erreur("Impossible de lire les informations du groupe");
42           return;
43         }
44       }
45       $select = array(
46         "status" => $this->album_status_id,
47         "id_user" => $this->user["id"],
48         "order_by" => "ordre",
49         "start" => isset($_GET[$env->param("start")]) && $_GET[$env->param("start")] ? $_GET[$env->param("start")] : 0
50       );
51       if($id_groupe) $select["id_groupe"] = $id_groupe;
52       if(($albums = $data->sources($select)) === false){
53         $env->erreur("impossible de lire la liste des albums");
54         return;
55       }
56       foreach($albums["list"] as $id_album => $album){
57         $albums["list"][$id_album]["permissions"] = $data->source_permissions($album, $this->user["id"]);
58       }
59       if($_POST){
60         foreach($albums["list"] as $id_album => $album){
61           if(isset($_POST["ordre_".$id_album])){
62             if($data->set_source_info($album["id"], "ordre", $_POST["ordre_".$id_album]) === false){
63               $env->erreur("Impossible d'enregistrer l'ordre des albums");
64               return;
65             }
66           }
67         }
68         $get_params = array();
69         if($id_groupe) $get_params["groupe"] = $id_groupe;
70         $env->redirect(
71           $env->url("users/albums", $get_params),
72           "l'ordre des albums a été enregistré"
73         );
74       }
75       $env->set_out("groupes", $groupes);
76       $env->set_out("albums", $albums);
77     }
78
79     public function add(){
80       $env = $this->env();
81       $data = $env->data();
82       $album = $data->empty_source();
83       $source_infos = array(
84         "date_inscription" => date("Y-m-d"),
85         "ordre" => 0
86       );
87       $groupe = false;
88       if(($groupes = $data->groupes($this->user["id"])) === false){
89         $env->erreur("Impossible de lire la liste des groupes");
90         return;
91       }
92       if(($licences = $data->licences()) === false){
93         return "Impossible de lire la liste des licences";
94       }
95       if(!$data->check_user_uploads_dir()){
96         $env->erreur("Impossible de creer le repertoire utilisateur");
97         return;
98       }
99       $web_path = $env->path("web");
100       $upload_dir = $env->path("content")."uploads/".$this->user["id"];
101       $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
102       $users_sources_mod = $env->get_controller("users/sources");
103       if($_POST){
104         if(!($groupe = $data->groupe($_POST["id_groupe"]))){
105           $env->erreur("Impossible de lire les informations du groupe");
106           return;
107         }
108         $groupe["id_groupe_status"] = $data->id_groupe_status_admin();
109         $album["groupes"] = array($groupe["id"] => $groupe);
110         if(!($album["titre"] = trim($_POST["titre"]))){
111           $env->message("merci de pr&eacute;ciser un titre pour l'album");
112         }
113         $album["licence"] = array(
114           "id" => $_POST["licence"]
115         );
116         $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
117         $source_infos["description"] = $_POST["description"];
118         foreach($_POST as $post_key => $post_value){
119           if(substr($post_key, 0, 13) == "document_nom_"){
120             if($id_document = substr($post_key, 13)){
121               $album["documents"][$id_document] = array(
122                 "nom" => $_POST["document_nom_".$id_document],
123                 "url" => $_POST["document_url_".$id_document]
124               );
125             }
126           }
127         }
128         if(!$env->messages()){
129           if(($image = $data->upload("image", $upload_dir)) === false){
130             $env->erreur("erreur lors de l'envoi de l'image. l'album n'a pas été ajouté");
131             return;
132           }
133           if($image) $source_infos["image"] = $this->user["id"]."/".$image;
134           if(
135             (
136               $id_source = $data->add_source(
137                 $album["groupes"],
138                 $album["titre"],
139                 $this->album_status_id,
140                 $album["licence"]["id"],
141                 $album["documents"],
142                 $album["reference"],
143                 $album["derivations"],
144                 $source_infos
145               )
146             ) === false
147           ){
148             $env->erreur("Impossible d'ajouter l'album");
149             return;
150           }
151           $env->redirect(
152             $env->url("users/albums/edit", array("id" => $id_source)),
153             "l'album a été ajouté"
154           );
155         }
156       }
157       $env->set_out("groupes", $groupes);
158       $env->set_out("licences", $licences);
159       $env->set_out("album", $album);
160       $env->set_out("source_infos", $source_infos);
161       $env->set_out("groupe", $groupe);
162     }
163
164     public function edit(){
165       $env = $this->env();
166       $data = $env->data();
167       if(($groupes = $data->groupes($this->user["id"])) === false){
168         $env->erreur("Impossible de lire la liste des groupes");
169         return;
170       }
171       if(($licences = $data->licences()) === false){
172         $env->erreur("Impossible de lire la liste des licences");
173         return;
174       }
175       if(($sources_access = $data->sources_access()) === false){
176         $env->erreur("Impossible de lire les types d'access");
177         return;
178       }
179       if(!($album = $data->source($_GET[$env->param("id")], true))){
180         $env->erreur("Impossible de lire les informations de l'album");
181         return;
182       }
183       $album["permissions"] = $data->source_permissions($album, $this->user["id"]);
184       if(!$album["permissions"]["editeur"]){
185         $env->erreur("vous n'avez pas la permission d'editer cet album");
186         return;
187       }
188       if(!$data->check_user_uploads_dir()){
189         $env->erreur("Impossible de creer le repertoire utilisateur");
190         return;
191       }
192       $web_path = $env->path("web");
193       $upload_dir = $env->path("content")."uploads/".$this->user["id"];
194       $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
195       if($_POST){
196         $source_infos = array(
197           "date_inscription" => $_POST["date_inscription"],
198           "ordre" => isset($album["ordre"]) ? $album["ordre"] : 0
199         );
200         $album = $data->empty_source(
201           array(
202             "id" => $album["id"],
203             "groupes" => $album["groupes"],
204             "image" => isset($album["image"]) ? $album["image"] : ""
205           )
206         );
207         $users_sources_mod = $env->get_controller("users/sources");
208         if(!($album["titre"] = trim($_POST["titre"]))){
209           $env->message("merci de pr&eacute;ciser un titre pour l'album");
210         }
211         $album["licence"] = array(
212           "id" => $_POST["licence"]
213         );
214         $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
215         $source_infos["description"] = $_POST["description"];
216         foreach($_POST as $post_key => $post_value){
217           if(substr($post_key, 0, 13) == "document_nom_"){
218             if($id_document = substr($post_key, 13)){
219               $album["documents"][$id_document] = array(
220                 "nom" => $_POST["document_nom_".$id_document],
221                 "url" => $_POST["document_url_".$id_document]
222               );
223             }
224           }
225         }
226         if(!$env->messages()){
227           if(isset($_POST["del_image"])){
228             if($album["image"]){
229               if(!@unlink($env->path("content")."uploads/".$album["image"])){
230                 $env->erreur("Impossible d'effacer l'image");
231                 return;
232               }
233             }
234             $album["image"] = "";
235           }
236           else{
237             if(($up_image = $data->upload("image", $upload_dir)) === false){
238               $env->erreur("Impossible d'uploader l'image");
239               return;
240             }
241             if($up_image) $album["image"] = $this->user["id"]."/".$up_image;
242           }
243           if($album["image"]) $source_infos["image"] = $album["image"];
244           if(
245             (
246               $data->set_source(
247                 $album["id"],
248                 $album["groupes"],
249                 $album["titre"],
250                 $this->album_status_id,
251                 $album["licence"]["id"],
252                 $album["documents"],
253                 $album["reference"],
254                 $album["derivations"],
255                 $source_infos
256               )
257             ) === false
258           ){
259             $env->erreur("Impossible de modifier l'album");
260             return;
261           }
262           $env->redirect(
263             $env->url("users/albums/edit", array("id" => $album["id"])),
264             "l'album a été modifié"
265           );
266         }
267       }
268       $env->set_out("groupes", $groupes);
269       $env->set_out("sources_access", $sources_access);
270       $env->set_out("licences", $licences);
271       $env->set_out("album", $album);
272     }
273
274     public function del(){
275       $env = $this->env();
276       $data = $env->data();
277       if(!($album = $data->source($_GET[$env->param("id")], true))){
278         $env->erreur("Impossible de lire les informations de l'album");
279         return;
280       }
281       $album["permissions"] = $data->source_permissions($album, $this->user["id"]);
282       if(!$album["permissions"]["admin"]){
283         $env->erreur("vous n'avez pas la permission d'effacer cet album");
284         return;
285       }
286       if(!$data->del_source($album["id"])){
287         $env->erreur("Impossible de supprimer l'album");
288         return;
289       }
290       $env->redirect(
291         $env->url("users/albums"),
292         "l'album a été supprimé"
293       );
294     }
295
296     public function groupes(){
297       $env = $this->env();
298       if(
299             !($sources_invitations_controller = $env->get_controller("users/sources_invitations"))
300         ||  !$sources_invitations_controller->validate()
301       ){
302         $env->erreur("impossible de valider le controleur users/sources_invitations");
303         return;
304       }
305       $sources_invitations_controller->source_groupes();
306     }
307
308   }