3 class mw_users_pistes extends mw_controller{
7 public $album_status_id;
8 public $morceau_status_id;
9 public $piste_status_id;
11 public function validate(){
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($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;
24 !isset($this->album_status_id)
25 || !isset($this->morceau_status_id)
26 || !isset($this->piste_status_id)
28 return "liste des status de source incomplète";
30 if(!($this->user = $env->user())){
31 return "Vous devez être identifié pour accéder à cette page";
36 public function index(){
39 if(($groupes = $data->groupes($this->user["id"])) === false){
40 $env->erreur("Impossible de lire la liste des groupes");
43 $morceaux_groupes = $groupes["list"];
45 if(isset($_GET[$env->param("groupe")])){
46 $id_groupe = $_GET[$env->param("groupe")];
47 if(!isset($groupes["list"][$id_groupe])){
48 $env->erreur("Impossible de lire les informations du groupe");
53 $morceaux_groupes = array($id_groupe => $groupes["list"][$id_groupe]);
57 $morceaux = $data->groupes_sources(
59 "groupes" => $morceaux_groupes,
60 "id_class" => $this->morceau_status_id,
61 // on veut les morceaux pour lesquels au moins un groupe (et pas tous) ...
62 "satisfy_all_groupes_access" => false,
63 // ... a le droit de contribution
64 "id_source_access" => $data->id_groupe_status_contributeur()
68 ) return "impossible de lire la liste des morceaux";
69 if($id_morceau = isset($_GET[$env->param("morceau")]) ? $_GET[$env->param("morceau")] : false){
70 if(!($morceau = $data->source($id_morceau, true))){
71 $env->erreur("Impossible de lire les informations du morceau");
76 "status" => $this->piste_status_id,
77 "id_user" => $this->user["id"],
78 "order_by" => "ordre",
79 "start" => isset($_GET[$env->param("start")]) && $_GET[$env->param("start")] ? $_GET[$env->param("start")] : 0
81 if($id_groupe) $select["id_groupe"] = $id_groupe;
82 if($id_morceau !== false) $select["id_composition"] = $id_morceau;
83 if(($pistes = $data->sources($select)) === false){
84 $env->erreur("impossible de lire la liste des pistes");
87 foreach($pistes["list"] as $id_piste => $piste){
88 $pistes["list"][$id_piste]["permissions"] = $data->source_permissions($piste, $this->user["id"]);
91 foreach($pistes["list"] as $id_piste => $piste){
92 if(isset($_POST["ordre_".$id_piste])){
93 if($data->set_source_info($piste["id"], "ordre", $_POST["ordre_".$id_piste]) === false){
94 $env->erreur("Impossible d'enregistrer l'ordre des pistes");
99 $get_params = array();
100 if($id_groupe) $get_params["groupe"] = $id_groupe;
101 if($id_morceau) $get_params["morceau"] = $id_morceau;
103 $env->url("users/pistes", $get_params),
104 "l'ordre des pistes a été enregistré"
107 $env->set_out("groupes", $groupes);
108 $env->set_out("morceaux", $morceaux);
109 $env->set_out("pistes", $pistes);
112 public function add(){
114 $data = $env->data();
115 $piste = $data->empty_source();
116 $source_infos = array(
117 "date_inscription" => date("Y-m-d"),
122 if(($groupes = $data->groupes($this->user["id"])) === false){
123 $env->erreur("Impossible de lire la liste des groupes");
127 if($groupes["total"] > 0){
129 "status" => $this->morceau_status_id,
130 "id_user" => $this->user["id"],
131 "is_reference" => false
133 foreach($groupes["list"] as $id_groupe => $groupe){
134 $select["id_groupe"] = $id_groupe;
135 if(($groupes_morceaux = $data->sources($select)) === false){
136 $env->erreur("impossible de lire la liste des morceaux");
139 $morceaux[$id_groupe] = $groupes_morceaux["list"];
142 if(($licences = $data->licences()) === false){
143 return "Impossible de lire la liste des licences";
145 if(!$data->check_user_uploads_dir()){
146 $env->erreur("Impossible de creer le repertoire utilisateur");
149 $web_path = $env->path("web");
150 $upload_dir = $env->path("content")."uploads/".$this->user["id"];
151 $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
152 $users_sources_mod = $env->get_controller("users/sources");
153 if(isset($_POST["button_derive"])){
155 ($origin_source_id = $_POST["button_derive"])
156 && ($origin_source_xml_url = $data->source_xml_url($origin_source_id))
157 && ($origin_source_xml_content = $data->get_source_xml($origin_source_id))
159 $piste["derivations"][$origin_source_id] = $users_sources_mod->get_source_from_xml(
161 $origin_source_xml_url,
162 $origin_source_xml_content,
168 if(!($groupe = $data->groupe($_POST["id_groupe"]))){
169 $env->erreur("Impossible de lire les informations du groupe");
172 $groupe["id_groupe_status"] = $data->id_groupe_status_admin();
173 $piste["groupes"] = array($groupe["id"] => $groupe);
174 if($_POST["morceau"]){
175 if(!($morceau = $data->source($_POST["morceau"], true))){
176 $env->erreur("Impossible de lire les informations du morceau");
179 $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
180 if(!$morceau["permissions"]["contributeur"]){
181 $env->erreur("vous n'avez pas la permission d'ajouter une piste dans ce morceau");
184 $piste["morceau"] = $morceau["id"];
186 if(isset($_POST["is_derivation"])){
187 foreach($_POST as $key => $value){
188 if(substr($key, 0, 14) == "derivation_id_"){
189 $id_source_derivation = substr($key, 14);
190 $xml_url = trim($_POST["derivation_".$id_source_derivation]);
191 $piste["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml(
195 isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ?
196 $_POST["edit_derivation_content_".$id_source_derivation]
197 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
199 isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ? true : false
204 if(isset($_POST["is_reference"])){
205 $xml_url = trim($_POST["reference"]);
206 $piste["reference"] = $users_sources_mod->get_source_from_xml(
210 isset($_POST["use_edit_reference_content"]) ?
211 $_POST["edit_reference_content"]
212 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
214 isset($_POST["use_edit_reference_content"]) ? true : false
218 if(!($piste["titre"] = trim($_POST["titre"]))){
219 $env->message("merci de préciser un titre pour la piste");
221 $piste["licence"] = array(
222 "id" => $_POST["licence"]
224 $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
225 $source_infos["description"] = $_POST["description"];
226 $piste["description"] = $source_infos["description"];
227 $piste["date_creation"] = $source_infos["date_creation"];
228 foreach($_POST as $post_key => $post_value){
229 if(substr($post_key, 0, 13) == "document_nom_"){
230 if($id_document = substr($post_key, 13)){
231 $piste["documents"][$id_document] = array(
232 "nom" => $_POST["document_nom_".$id_document],
233 "url" => $_POST["document_url_".$id_document]
239 if(!$env->messages()){
240 if(($image = $data->upload("image", $upload_dir)) === false){
241 $env->erreur("erreur lors de l'envoi de l'image. la piste n'a pas été ajoutée");
244 if($image) $source_infos["image"] = $this->user["id"]."/".$image;
247 $id_source = $data->add_source(
250 $this->piste_status_id,
251 isset($piste["licence"]["id"]) ? $piste["licence"]["id"] : null,
254 $piste["derivations"],
259 $env->erreur("Impossible d'ajouter la piste");
263 if(!$data->set_source_composition($id_source, $morceau["id"])){
264 $env->erreur("La piste a été ajoutée mais impossible de l'associer au morceau");
269 $env->url("users/pistes/edit", array("id" => $id_source)),
270 "la piste a été ajoutée"
274 $env->set_out("groupes", $groupes);
275 $env->set_out("morceaux", $morceaux);
276 $env->set_out("licences", $licences);
277 $env->set_out("piste", $piste);
278 $env->set_out("source_infos", $source_infos);
279 $env->set_out("groupe", $groupe);
280 $env->set_out("morceau", $morceau);
283 public function edit(){
285 $data = $env->data();
286 if(($groupes = $data->groupes($this->user["id"])) === false){
287 $env->erreur("Impossible de lire la liste des groupes");
290 if(($licences = $data->licences()) === false){
291 $env->erreur("Impossible de lire la liste des licences");
294 if(($sources_access = $data->sources_access()) === false){
295 $env->erreur("Impossible de lire les types d'access");
298 if(!($piste = $data->source($_GET[$env->param("id")], true))){
299 $env->erreur("Impossible de lire les informations de la piste");
302 $piste["permissions"] = $data->source_permissions($piste, $this->user["id"]);
303 if(!$piste["permissions"]["editeur"]){
304 $env->erreur("vous n'avez pas la permission d'editer cette piste");
309 $morceaux = $data->groupes_sources(
311 "groupes" => $piste["groupes"],
312 "id_class" => $this->morceau_status_id,
313 // on veut les morceaux pour lesquels chaque groupe du morceau ...
314 "satisfy_all_groupes_access" => true,
315 // ... a le droit de contribution
316 "id_source_access" => $data->id_groupe_status_contributeur()
320 ) return "impossible de lire la liste des morceaux";
321 if(!$data->check_user_uploads_dir()){
322 $env->erreur("Impossible de creer le repertoire utilisateur");
325 $web_path = $env->path("web");
326 $upload_dir = $env->path("content")."uploads/".$this->user["id"];
327 $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
328 if(($compositions = $data->source_compositions(array("id_source" => $piste["id"]))) === false){
329 $env->erreur("Impossible de lire la liste des compositions");
332 if($compositions) foreach($compositions[$piste["id"]] as $id_morceau){
333 $piste["morceau"] = $id_morceau;
337 $permissions = $piste["permissions"];
338 $image = isset($piste["image"]) ? $piste["image"] : null;
339 $image_uri = isset($piste["image_uri"]) ? $piste["image_uri"] : null;
340 $source_infos = array(
341 "date_inscription" => $_POST["date_inscription"],
342 "ordre" => isset($piste["ordre"]) ? $piste["ordre"] : 0
344 $piste = $data->empty_source(
346 "id" => $piste["id"],
347 "groupes" => $piste["groupes"],
348 "image" => isset($piste["image"]) ? $piste["image"] : ""
351 $piste["permissions"] = $permissions;
352 $piste["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
353 $piste["image"] = $image;
354 $piste["image_uri"] = $image_uri;
355 $users_sources_mod = $env->get_controller("users/sources");
356 if($_POST["morceau"]){
357 if($morceau = $data->source($_POST["morceau"], true)){
358 $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
359 if(!$morceau["permissions"]["contributeur"]){
360 $env->erreur("vous n'avez pas la permission d'ajouter une piste dans ce morceau");
365 $env->erreur("Impossible de lire les informations du morceau");
368 $piste["morceau"] = $morceau["id"];
370 if(isset($_POST["is_derivation"])){
371 foreach($_POST as $key => $value){
372 if(substr($key, 0, 14) == "derivation_id_"){
373 $id_source_derivation = substr($key, 14);
374 $xml_url = trim($_POST["derivation_".$id_source_derivation]);
375 $piste["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml(
379 isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ?
380 $_POST["edit_derivation_content_".$id_source_derivation]
381 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
383 isset($_POST["use_edit_derivation_content_".$id_source_derivation]) ? true : false
388 if(isset($_POST["is_reference"])){
389 $xml_url = trim($_POST["reference"]);
390 $piste["reference"] = $users_sources_mod->get_source_from_xml(
394 isset($_POST["use_edit_reference_content"]) ?
395 $_POST["edit_reference_content"]
396 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
398 isset($_POST["use_edit_reference_content"]) ? true : false
402 if(!($piste["titre"] = trim($_POST["titre"]))){
403 $env->message("merci de préciser un titre pour la piste");
405 $piste["licence"] = array(
406 "id" => $_POST["licence"]
408 $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
409 $source_infos["description"] = $_POST["description"];
410 $piste["description"] = $source_infos["description"];
411 foreach($_POST as $post_key => $post_value){
412 if(substr($post_key, 0, 13) == "document_nom_"){
413 if($id_document = substr($post_key, 13)){
414 $piste["documents"][$id_document] = array(
415 "nom" => $_POST["document_nom_".$id_document],
416 "url" => $_POST["document_url_".$id_document]
422 if(!$env->messages()){
423 if(isset($_POST["del_image"])){
425 if(!@unlink($env->path("content")."uploads/".$piste["image"])){
426 $env->erreur("Impossible d'effacer l'image de la piste");
430 $piste["image"] = "";
433 if(($up_image = $data->upload("image", $upload_dir)) === false){
434 $env->erreur("Impossible d'uploader l'image");
437 if($up_image) $piste["image"] = $this->user["id"]."/".$up_image;
439 if($piste["image"]) $source_infos["image"] = $piste["image"];
446 $this->piste_status_id,
447 $piste["licence"]["id"],
450 $piste["derivations"],
455 $env->erreur("Impossible de modifier la piste");
458 if(!$data->del_source_compositions(array("id_source" => $piste["id"]))){
459 $env->erreur("La piste a été modifiée mais impossible de l'associer à ce morceau");
462 if($_POST["morceau"]){
463 if(!$data->set_source_composition($piste["id"], $_POST["morceau"])){
464 $env->erreur("La piste a été modifiée mais impossible de l'associer à ce morceau");
469 $env->url("users/pistes/edit", array("id" => $piste["id"])),
470 "la piste a été modifiée"
474 $env->set_out("groupes", $groupes);
475 $env->set_out("sources_access", $sources_access);
476 $env->set_out("licences", $licences);
477 $env->set_out("morceaux", $morceaux);
478 $env->set_out("piste", $piste);
481 public function maj_xml(){
483 $data = $env->data();
484 if(!($piste = $data->source($_GET[$env->param("id")], true))){
485 $env->erreur("Impossible de lire les informations de la piste");
488 $piste["permissions"] = $data->source_permissions($piste, $this->user["id"]);
489 if(!$piste["permissions"]["editeur"]){
490 $env->erreur("vous n'avez pas la permission d'editer cette piste");
495 ( !isset($_GET[$env->param("id")])
496 || !isset($_GET[$env->param("xml")])
497 || ($_GET[$env->param("xml")] == "derviation" && !isset($_GET[$env->param("derivation")]))
499 $env->erreur("parametre de fichier xml manquant");
503 if($_GET[$env->param("xml")] == "derivation"){
504 if(isset($piste["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"]))
505 $xml_url = $piste["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"];
507 elseif($_GET[$env->param("xml")] == "reference"){
508 if(isset($piste["reference"]["xml"]["url"]))
509 $xml_url = $piste["reference"]["xml"]["url"];
512 $env->message("Pas d'URL pour ce fichier XML. Impossible de recharger les informations");
515 if(!$env->messages()){
516 if(($res = $data->maj_source_cache($xml_url)) === false){
517 $env->erreur("Impossible de mettre à jour le contenu du fichier XML dans le cache");
521 if($piste = $data->source($piste["id"])){
523 $env->url("users/pistes/edit", array("id" => $piste["id"])),
524 "Les informations du fichier XML ont été mises à jour",
530 "le contenu du fichier XML a été mis à jour"
531 .", mais impossible de lire les informations de la piste"
537 case -1: $env->message("Impossible de lire le contenu du fichier XML"); break;
538 case -2: $env->message("Le fichier XML indiqué ne contient pas un fichier de source valide"); break;
539 default: $env->erreur("Erreur inconnue (?)"); return;
542 $env->run("users/pistes/edit", array("get" => array("id" => $piste["id"])));
545 public function del(){
547 $data = $env->data();
548 if(!($piste = $data->source($_GET[$env->param("id")], true))){
549 $env->erreur("Impossible de lire les informations de la piste");
552 $piste["permissions"] = $data->source_permissions($piste, $this->user["id"]);
553 if(!$piste["permissions"]["admin"]){
554 $env->erreur("vous n'avez pas la permission d'effacer cette piste");
557 if(!$data->del_source($piste["id"])){
558 $env->erreur("Impossible de supprimer la piste");
562 $env->url("users/pistes"),
563 "la piste a été supprimée"
567 public function groupes(){
570 !($sources_invitations_controller = $env->get_controller("users/sources_invitations"))
571 || !$sources_invitations_controller->validate()
573 $env->erreur("impossible de valider le controleur users/sources_invitations");
576 $sources_invitations_controller->source_groupes();