3 class mw_users_morceaux extends mw_controller{
9 var $morceau_status_id;
14 if(($this->status = $data->source_status()) === false){
15 return "Impossible de lire la liste des status de source";
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(isset($this->album_status_id) && isset($this->morceau_status_id)) break;
22 if(!isset($this->album_status_id) || !isset($this->morceau_status_id)){
23 if(!isset($this->album_status_id)) return "Type de source inconnu: album";
24 return "Type de source inconnu: morceau";
26 if(!($this->user = $env->user())){
27 return "Vous devez être identifié pour accéder à cette page";
35 if(($groupes = $data->groupes($this->user["id"])) === false){
36 $env->erreur("Impossible de lire la liste des groupes");
39 $albums_groupes = $groupes["list"];
41 if(isset($_GET[$env->param("groupe")])){
42 $id_groupe = $_GET[$env->param("groupe")];
43 if(!isset($groupes["list"][$id_groupe])){
44 $env->erreur("Impossible de lire les informations du groupe");
49 $albums_groupes = array($id_groupe => $groupes["list"][$id_groupe]);
53 $albums = $data->groupes_sources(
55 "groupes" => $albums_groupes,
56 "id_class" => $this->album_status_id,
57 // on veut les albums pour lesquels au moins un groupe (et pas tous) ...
58 "satisfy_all_groupes_access" => false,
59 // ... a le droit de contribution
60 "id_source_access" => $data->id_groupe_status_contributeur()
64 ) return "impossible de lire la liste des albums";
65 if($id_album = isset($_GET[$env->param("album")]) ? $_GET[$env->param("album")] : false){
66 if(!($album = $data->source($id_album, true))){
67 $env->erreur("Impossible de lire les informations de l'album");
72 "status" => $this->morceau_status_id,
73 "id_user" => $this->user["id"],
74 "order_by" => "ordre",
75 "start" => isset($_GET[$env->param("start")]) && $_GET[$env->param("start")] ? $_GET[$env->param("start")] : 0
77 if($id_groupe) $select["id_groupe"] = $id_groupe;
78 if($id_album !== false) $select["id_composition"] = $id_album;
79 if(($morceaux = $data->sources($select)) === false){
80 $env->erreur("impossible de lire la liste des morceaux");
83 foreach($morceaux["list"] as $id_morceau => $morceau){
84 $morceaux["list"][$id_morceau]["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
87 foreach($morceaux["list"] as $id_morceau => $morceau){
88 if(isset($_POST["ordre_".$id_morceau])){
89 if($data->set_source_info($morceau["id"], "ordre", $_POST["ordre_".$id_morceau]) === false){
90 $env->erreur("Impossible d'enregistrer l'ordre des morceaux");
95 $get_params = array();
96 if($id_groupe) $get_params["groupe"] = $id_groupe;
97 if($id_album) $get_params["album"] = $id_album;
99 $env->url("users/morceaux", $get_params),
100 "l'ordre des morceaux a été enregistré"
103 $env->set_out("groupes", $groupes);
104 $env->set_out("albums", $albums);
105 $env->set_out("morceaux", $morceaux);
110 $data = $env->data();
111 $morceau = $data->empty_source();
112 $source_infos = array(
113 "date_inscription" => date("Y-m-d"),
118 if(($groupes = $data->groupes($this->user["id"])) === false){
119 $env->erreur("Impossible de lire la liste des groupes");
123 if($groupes["total"] > 0){
125 "status" => $this->album_status_id,
126 "id_user" => $this->user["id"]
128 foreach($groupes["list"] as $id_groupe => $groupe){
129 $select["id_groupe"] = $id_groupe;
130 if(($groupes_albums = $data->sources($select)) === false){
131 $env->erreur("impossible de lire la liste des albums");
134 $albums[$id_groupe] = $groupes_albums["list"];
137 if(($licences = $data->licences()) === false){
138 return "Impossible de lire la liste des licences";
140 if(!$data->check_user_uploads_dir()){
141 $env->erreur("Impossible de creer le repertoire utilisateur");
144 $web_path = $env->path("web");
145 $upload_dir = $env->path("content")."uploads/".$this->user["id"];
146 $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
147 $users_sources_mod = $env->get_controller("users/sources");
148 if(isset($_POST["button_derive"])){
150 ($origin_source_id = $_POST["button_derive"])
151 && ($origin_source_xml_url = $data->source_xml_url($origin_source_id))
152 && ($origin_source_xml_content = $data->get_source_xml($origin_source_id))
154 $morceau["derivations"][$origin_source_id] = $users_sources_mod->get_source_from_xml(
156 $origin_source_xml_url,
157 $origin_source_xml_content,
163 if(!($groupe = $data->groupe($_POST["id_groupe"]))){
164 $env->erreur("Impossible de lire les informations du groupe");
167 $groupe["id_groupe_status"] = $data->id_groupe_status_admin();
168 $morceau["groupes"] = array($groupe["id"] => $groupe);
170 if(!($album = $data->source($_POST["album"], true))){
171 $env->erreur("Impossible de lire les informations de l'album");
174 $album["permissions"] = $data->source_permissions($album, $this->user["id"]);
175 if(!$album["permissions"]["contributeur"]){
176 $env->erreur("vous n'avez pas la permission d'ajouter un morceau dans cet album");
179 $morceau["album"] = $album["id"];
181 if(isset($_POST["is_derivation"])){
182 foreach($_POST as $key => $value){
183 if(substr($key, 0, 14) == "derivation_id_"){
184 $id_source_derivation = substr($key, 14);
185 $xml_url = trim($_POST["derivation_".$id_source_derivation]);
186 $morceau["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml(
190 isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ?
191 $_POST["edit_derivation_content_".$id_source_derivation]
192 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
194 isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ? true : false
199 if(isset($_POST["is_reference"])){
200 $xml_url = trim($_POST["reference"]);
201 $morceau["reference"] = $users_sources_mod->get_source_from_xml(
205 isset($_POST["use_edit_reference_content"]) ?
206 $_POST["edit_reference_content"]
207 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
209 isset($_POST["use_edit_reference_content"]) ? true : false
213 if(!($morceau["titre"] = trim($_POST["titre"]))){
214 $env->message("merci de préciser un titre pour le morceau");
216 $morceau["licence"] = array(
217 "id" => $_POST["licence"]
219 $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
220 $source_infos["description"] = $_POST["description"];
221 $morceau["description"] = $source_infos["description"];
222 $morceau["date_creation"] = $source_infos["date_creation"];
223 foreach($_POST as $post_key => $post_value){
224 if(substr($post_key, 0, 13) == "document_nom_"){
225 if($id_document = substr($post_key, 13)){
226 $morceau["documents"][$id_document] = array(
227 "nom" => $_POST["document_nom_".$id_document],
228 "url" => $_POST["document_url_".$id_document]
234 if(!$env->messages()){
235 if(($image = $data->upload("image", $upload_dir)) === false){
236 $env->erreur("erreur lors de l'envoi de l'image. le morceau n'a pas été ajouté");
239 if($image) $source_infos["image"] = $this->user["id"]."/".$image;
242 $id_source = $data->add_source(
245 $this->morceau_status_id,
246 $morceau["licence"]["id"],
247 $morceau["documents"],
248 $morceau["reference"],
249 $morceau["derivations"],
254 $env->erreur("Impossible d'ajouter le morceau");
258 if(!$data->set_source_composition($id_source, $album["id"])){
259 $env->erreur("Le morceau a été ajouté mais impossible de l'associer à l'album");
264 $env->url("users/morceaux"),
265 "le morceau a été ajouté"
269 $env->set_out("groupes", $groupes);
270 $env->set_out("albums", $albums);
271 $env->set_out("licences", $licences);
272 $env->set_out("morceau", $morceau);
273 $env->set_out("source_infos", $source_infos);
274 $env->set_out("groupe", $groupe);
275 $env->set_out("album", $album);
280 $data = $env->data();
281 if(($groupes = $data->groupes($this->user["id"])) === false){
282 $env->erreur("Impossible de lire la liste des groupes");
285 if(($licences = $data->licences()) === false){
286 $env->erreur("Impossible de lire la liste des licences");
289 if(($sources_access = $data->sources_access()) === false){
290 $env->erreur("Impossible de lire les types d'access");
293 if(!($morceau = $data->source($_GET[$env->param("id")], true))){
294 $env->erreur("Impossible de lire les informations du morceau");
297 $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
298 if(!$morceau["permissions"]["editeur"]){
299 $env->erreur("vous n'avez pas la permission d'editer ce morceau");
304 $albums = $data->groupes_sources(
306 "groupes" => $morceau["groupes"],
307 "id_class" => $this->album_status_id,
308 // on veut les albums pour lesquels chaque groupe du morceau ...
309 "satisfy_all_groupes_access" => true,
310 // ... a le droit de contribution
311 "id_source_access" => $data->id_groupe_status_contributeur()
315 ) return "impossible de lire la liste des albums";
316 if(!$data->check_user_uploads_dir()){
317 $env->erreur("Impossible de creer le repertoire utilisateur");
320 $web_path = $env->path("web");
321 $upload_dir = $env->path("content")."uploads/".$this->user["id"];
322 $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
323 if(($compositions = $data->source_compositions(array("id_source" => $morceau["id"]))) === false){
324 $env->erreur("Impossible de lire la liste des compositions");
327 if($compositions) foreach($compositions[$morceau["id"]] as $id_album) { $morceau["album"] = $id_album; break; }
329 $source_infos = array(
330 "date_inscription" => $_POST["date_inscription"],
331 "ordre" => isset($morceau["ordre"]) ? $morceau["ordre"] : 0
333 $permissions = $morceau["permissions"];
334 $image = isset($morceau["image"]) ? $morceau["image"] : null;
335 $image_uri = isset($morceau["image_uri"]) ? $morceau["image_uri"] : null;
336 $image_uri = $morceau["image_uri"];
337 $morceau = $data->empty_source(
339 "id" => $morceau["id"],
340 "groupes" => $morceau["groupes"],
341 "image" => isset($morceau["image"]) ? $morceau["image"] : ""
344 $morceau["permissions"] = $permissions;
345 $morceau["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
346 $morceau["image"] = $image;
347 $morceau["image_uri"] = $image_uri;
348 $users_sources_mod = $env->get_controller("users/sources");
350 if($album = $data->source($_POST["album"], true)){
351 $album["permissions"] = $data->source_permissions($album, $this->user["id"]);
352 if(!$album["permissions"]["contributeur"]){
353 $env->erreur("vous n'avez pas la permission d'ajouter un morceau dans cet album");
358 $env->erreur("Impossible de lire les informations de l'album");
361 $morceau["album"] = $album["id"];
363 if(isset($_POST["is_derivation"])){
364 foreach($_POST as $key => $value){
365 if(substr($key, 0, 14) == "derivation_id_"){
366 $id_source_derivation = substr($key, 14);
367 $xml_url = trim($_POST["derivation_".$id_source_derivation]);
368 $morceau["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml(
372 isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ?
373 $_POST["edit_derivation_content_".$id_source_derivation]
374 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
376 isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ? true : false
381 if(isset($_POST["is_reference"])){
382 $xml_url = trim($_POST["reference"]);
383 $morceau["reference"] = $users_sources_mod->get_source_from_xml(
387 isset($_POST["use_edit_reference_content"]) ?
388 $_POST["edit_reference_content"]
389 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
391 isset($_POST["use_edit_reference_content"]) ? true : false
395 if(!($morceau["titre"] = trim($_POST["titre"]))){
396 $env->message("merci de préciser un titre pour le morceau");
398 $morceau["licence"] = array(
399 "id" => $_POST["licence"]
401 $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
402 $source_infos["description"] = $_POST["description"];
403 $morceau["description"] = $source_infos["description"];
404 foreach($_POST as $post_key => $post_value){
405 if(substr($post_key, 0, 13) == "document_nom_"){
406 if($id_document = substr($post_key, 13)){
407 $morceau["documents"][$id_document] = array(
408 "nom" => $_POST["document_nom_".$id_document],
409 "url" => $_POST["document_url_".$id_document]
415 if(!$env->messages()){
416 if(isset($_POST["del_image"])){
417 if($morceau["image"]){
418 if(!@unlink($env->path("content")."uploads/".$morceau["image"])){
419 $env->erreur("Impossible d'effacer l'image du morceau");
423 $morceau["image"] = "";
426 if(($up_image = $data->upload("image", $upload_dir)) === false){
427 $env->erreur("Impossible d'uploader l'image");
430 if($up_image) $morceau["image"] = $this->user["id"]."/".$up_image;
432 if($morceau["image"]) $source_infos["image"] = $morceau["image"];
439 $this->morceau_status_id,
440 $morceau["licence"]["id"],
441 $morceau["documents"],
442 $morceau["reference"],
443 $morceau["derivations"],
448 $env->erreur("Impossible de modifier le morceau");
451 if(!$data->del_source_compositions(array("id_source" => $morceau["id"]))){
452 $env->erreur("Le morceau a été modifié mais impossible de l'associer à cet album");
456 if(!$data->set_source_composition($morceau["id"], $_POST["album"])){
457 $env->erreur("Le morceau a été modifié mais impossible de l'associer à cet album");
462 $env->url("users/morceaux/edit", array("id" => $morceau["id"])),
463 "le morceau a été modifié"
467 $env->set_out("groupes", $groupes);
468 $env->set_out("sources_access", $sources_access);
469 $env->set_out("licences", $licences);
470 $env->set_out("albums", $albums);
471 $env->set_out("morceau", $morceau);
476 $data = $env->data();
477 if(!($morceau = $data->source($_GET[$env->param("id")], true))){
478 $env->erreur("Impossible de lire les informations du morceau");
481 $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
482 if(!$morceau["permissions"]["editeur"]){
483 $env->erreur("vous n'avez pas la permission d'editer ce morceau");
487 ( !isset($_GET[$env->param("id")])
488 || !isset($_GET[$env->param("xml")])
489 || ($_GET[$env->param("xml")] == "derviation" && !isset($_GET[$env->param("derivation")]))
491 $env->erreur("parametre de fichier xml manquant");
495 if($_GET[$env->param("xml")] == "derivation"){
496 if(isset($morceau["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"]))
497 $xml_url = $morceau["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"];
499 elseif($_GET[$env->param("xml")] == "reference"){
500 if(isset($morceau["reference"]["xml"]["url"]))
501 $xml_url = $morceau["reference"]["xml"]["url"];
504 $env->message("Pas d'URL pour ce fichier XML. Impossible de recharger les informations");
507 if(!$env->messages()){
508 if(($res = $data->maj_source_cache($xml_url)) === false){
509 $env->erreur("Impossible de mettre à jour le contenu du fichier XML dans le cache");
513 if($morceau = $data->source($morceau["id"])){
515 $env->url("users/morceaux/edit", array("id" => $morceau["id"])),
516 "Les informations du fichier XML ont été mises à jour",
522 "le contenu du fichier XML a été mis à jour"
523 .", mais impossible de lire les informations du morceau"
529 case -1: $env->message("Impossible de lire le contenu du fichier XML"); break;
530 case -2: $env->message("Le fichier XML indiqué ne contient pas un fichier de source valide"); break;
531 default: $env->erreur("Erreur inconnue (?)"); return;
534 $env->run("users/morceaux/edit", array("get" => array("id" => $morceau["id"])));
539 $data = $env->data();
540 if(!($morceau = $data->source($_GET[$env->param("id")], true))){
541 $env->erreur("Impossible de lire les informations du morceau");
544 $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
545 if(!$morceau["permissions"]["admin"]){
546 $env->erreur("vous n'avez pas la permission d'effacer ce morceau");
549 if(!$data->del_source($morceau["id"])){
550 $env->erreur("Impossible de supprimer le morceau");
554 $env->url("users/morceaux"),
555 "le morceau a été supprimé"
562 !($sources_invitations_controller = $env->get_controller("users/sources_invitations"))
563 || !$sources_invitations_controller->validate()
565 $env->erreur("impossible de valider le controleur users/sources_invitations");
568 $sources_invitations_controller->source_groupes();