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