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 $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
146 $users_sources_mod = $env->get_controller("users/sources");
148 if(!($groupe = $data->groupe($_POST["id_groupe"]))){
149 $env->erreur("Impossible de lire les informations du groupe");
152 $groupe["id_groupe_status"] = $data->id_groupe_status_admin();
153 $morceau["groupes"] = array($groupe["id"] => $groupe);
155 if(!($album = $data->source($_POST["album"], true))){
156 $env->erreur("Impossible de lire les informations de l'album");
159 $album["permissions"] = $data->source_permissions($album, $this->user["id"]);
160 if(!$album["permissions"]["contributeur"]){
161 $env->erreur("vous n'avez pas la permission d'ajouter un morceau dans cet album");
164 $morceau["album"] = $album["id"];
166 if(isset($_POST["is_derivation"])){
167 foreach($_POST as $key => $value){
168 if(substr($key, 0, 14) == "derivation_id_"){
169 $id_source_derivation = substr($key, 14);
170 $xml_url = trim($_POST["derivation_".$id_source_derivation]);
171 $morceau["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml(
175 $_POST["use_edit_derivation_content_".$id_source_derivation] ?
176 $_POST["edit_derivation_content_".$id_source_derivation]
177 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
179 $_POST["use_edit_derivation_content_".$id_source_derivation] ? true : false
184 if(isset($_POST["is_reference"])){
185 $xml_url = trim($_POST["reference"]);
186 $morceau["reference"] = $users_sources_mod->get_source_from_xml(
190 $_POST["use_edit_reference_content"] ?
191 $_POST["edit_reference_content"]
192 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
194 $_POST["use_edit_reference_content"] ? true : false
198 if(!($morceau["titre"] = trim($_POST["titre"]))){
199 $env->message("merci de préciser un titre pour le morceau");
201 $morceau["licence"] = array(
202 "id" => $_POST["licence"]
204 $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
205 $source_infos["description"] = $_POST["description"];
206 foreach($_POST as $post_key => $post_value){
207 if(substr($post_key, 0, 13) == "document_nom_"){
208 if($id_document = substr($post_key, 13)){
209 $morceau["documents"][$id_document] = array(
210 "nom" => $_POST["document_nom_".$id_document],
211 "url" => $_POST["document_url_".$id_document]
217 if(!$env->messages()){
220 $id_source = $data->add_source(
223 $this->morceau_status_id,
224 $morceau["licence"]["id"],
225 $morceau["documents"],
226 $morceau["reference"],
227 $morceau["derivations"],
232 $env->erreur("Impossible d'ajouter le morceau");
236 if(!$data->set_source_composition($id_source, $album["id"])){
237 $env->erreur("Le morceau a été ajouté mais impossible de l'associer à l'album");
242 $env->url("users/morceaux"),
243 "le morceau a été ajouté"
247 $env->set_out("groupes", $groupes);
248 $env->set_out("albums", $albums);
249 $env->set_out("licences", $licences);
250 $env->set_out("morceau", $morceau);
251 $env->set_out("source_infos", $source_infos);
252 $env->set_out("groupe", $groupe);
253 $env->set_out("album", $album);
258 $data = $env->data();
259 if(($groupes = $data->groupes($this->user["id"])) === false){
260 $env->erreur("Impossible de lire la liste des groupes");
263 if(($licences = $data->licences()) === false){
264 $env->erreur("Impossible de lire la liste des licences");
267 if(($sources_access = $data->sources_access()) === false){
268 $env->erreur("Impossible de lire les types d'access");
271 if(!($morceau = $data->source($_GET[$env->param("id")], true))){
272 $env->erreur("Impossible de lire les informations du morceau");
275 $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
276 if(!$morceau["permissions"]["editeur"]){
277 $env->erreur("vous n'avez pas la permission d'editer ce morceau");
282 $albums = $data->groupes_sources(
284 "groupes" => $morceau["groupes"],
285 "id_class" => $this->album_status_id,
286 // on veut les albums pour lesquels chaque groupe du morceau ...
287 "satisfy_all_groupes_access" => true,
288 // ... a le droit de contribution
289 "id_source_access" => $data->id_groupe_status_contributeur()
293 ) return "impossible de lire la liste des albums";
294 if(!$data->check_user_uploads_dir()){
295 $env->erreur("Impossible de creer le repertoire utilisateur");
298 $web_path = $env->path("web");
299 $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
300 if(($compositions = $data->source_compositions(array("id_source" => $morceau["id"]))) === false){
301 $env->erreur("Impossible de lire la liste des compositions");
304 if($compositions) foreach($compositions[$morceau["id"]] as $id_album) { $morceau["album"] = $id_album; break; }
306 $source_infos = array(
307 "date_inscription" => $_POST["date_inscription"],
308 "ordre" => isset($morceau["ordre"]) ? $morceau["ordre"] : 0
310 $morceau = $data->empty_source(
312 "id" => $morceau["id"],
313 "groupes" => $morceau["groupes"]
316 $users_sources_mod = $env->get_controller("users/sources");
318 if($album = $data->source($_POST["album"], true)){
319 $album["permissions"] = $data->source_permissions($album, $this->user["id"]);
320 if(!$album["permissions"]["contributeur"]){
321 $env->erreur("vous n'avez pas la permission d'ajouter un morceau dans cet album");
326 $env->erreur("Impossible de lire les informations de l'album");
329 $morceau["album"] = $album["id"];
331 if(isset($_POST["is_derivation"])){
332 foreach($_POST as $key => $value){
333 if(substr($key, 0, 14) == "derivation_id_"){
334 $id_source_derivation = substr($key, 14);
335 $xml_url = trim($_POST["derivation_".$id_source_derivation]);
336 $morceau["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml(
340 $_POST["use_edit_derivation_content_".$id_source_derivation] ?
341 $_POST["edit_derivation_content_".$id_source_derivation]
342 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
344 $_POST["use_edit_derivation_content_".$id_source_derivation] ? true : false
349 if(isset($_POST["is_reference"])){
350 $xml_url = trim($_POST["reference"]);
351 $morceau["reference"] = $users_sources_mod->get_source_from_xml(
355 $_POST["use_edit_reference_content"] ?
356 $_POST["edit_reference_content"]
357 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
359 $_POST["use_edit_reference_content"] ? true : false
363 if(!($morceau["titre"] = trim($_POST["titre"]))){
364 $env->message("merci de préciser un titre pour le morceau");
366 $morceau["licence"] = array(
367 "id" => $_POST["licence"]
369 $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
370 $source_infos["description"] = $_POST["description"];
371 foreach($_POST as $post_key => $post_value){
372 if(substr($post_key, 0, 13) == "document_nom_"){
373 if($id_document = substr($post_key, 13)){
374 $morceau["documents"][$id_document] = array(
375 "nom" => $_POST["document_nom_".$id_document],
376 "url" => $_POST["document_url_".$id_document]
382 if(!$env->messages()){
389 $this->morceau_status_id,
390 $morceau["licence"]["id"],
391 $morceau["documents"],
392 $morceau["reference"],
393 $morceau["derivations"],
398 $env->erreur("Impossible de modifier le morceau");
401 if(!$data->del_source_compositions(array("id_source" => $morceau["id"]))){
402 $env->erreur("Le morceau a été modifié mais impossible de l'associer à cet album");
406 if(!$data->set_source_composition($morceau["id"], $_POST["album"])){
407 $env->erreur("Le morceau a été modifié mais impossible de l'associer à cet album");
412 $env->url("users/morceaux/edit", array("id" => $morceau["id"])),
413 "le morceau a été modifié"
417 $env->set_out("groupes", $groupes);
418 $env->set_out("sources_access", $sources_access);
419 $env->set_out("licences", $licences);
420 $env->set_out("albums", $albums);
421 $env->set_out("morceau", $morceau);
425 $data = $env->data();
426 if(!($morceau = $data->source($_GET[$env->param("id")], true))){
427 $env->erreur("Impossible de lire les informations du morceau");
430 $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
431 if(!$morceau["permissions"]["editeur"]){
432 $env->erreur("vous n'avez pas la permission d'editer ce morceau");
436 ( isset($_GET[$env->param("id")])
437 && isset($_GET[$env->param("xml")])
438 && ($_GET[$env->param("xml")] == "derviation" ? isset($_GET[$env->param("derivation")]) : true)
440 $env->erreur("parametre de fichier xml manquant");
444 if($_GET[$env->param("xml")] == "derivation"){
445 if(isset($morceau["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"]))
446 $xml_url = $morceau["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"];
448 elseif($_GET[$env->param("xml")] == "reference"){
449 if(isset($morceau["reference"]["xml"]["url"]))
450 $xml_url = $morceau["reference"]["xml"]["url"];
453 $env->message("Pas d'URL pour ce fichier XML. Impossible de recharger les informations");
456 if(!$env->messages()){
457 if(($res = $data->maj_source_cache($xml_url)) === false){
458 $env->erreur("Impossible de mettre à jour le contenu du fichier XML dans le cache");
462 if($morceau = $data->source($morceau["id"])){
464 $env->url("users/morceaux/edit", array("id" => $morceau["id"])),
465 "Les informations du fichier XML ont été mises à jour",
471 "le contenu du fichier XML a été mis à jour"
472 .", mais impossible de lire les informations du morceau"
478 case -1: $env->message("Impossible de lire le contenu du fichier XML"); break;
479 case -2: $env->message("Le fichier XML indiqué ne contient pas un fichier de source valide"); break;
480 default: $env->erreur("Erreur inconnue (?)"); return;
483 $env->run("users/morceaux/edit", array("get" => array("id" => $morceau["id"])));
488 $data = $env->data();
489 if(!($morceau = $data->source($_GET[$env->param("id")], true))){
490 $env->erreur("Impossible de lire les informations du morceau");
493 $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
494 if(!$morceau["permissions"]["admin"]){
495 $env->erreur("vous n'avez pas la permission d'effacer ce morceau");
498 if(!$data->del_source($morceau["id"])){
499 $env->erreur("Impossible de supprimer le morceau");
503 $env->url("users/morceaux"),
504 "le morceau a été supprimé"