sourceml devient un plugin mtweb
[mw_sourceml] / app / controllers / users / pistes.php
1 <?php
2
3   class mw_users_pistes extends mw_controller
4   {
5     var $groupes;
6     var $albums;
7     var $morceaux;
8     var $piste;
9     var $user;
10
11     var $status;
12     var $album_status_id;
13     var $morceau_status_id;
14     var $piste_status_id;
15
16     function validate(){
17       $env = $this->env();
18       $data = $env->data();
19       if(($this->status = $data->source_status()) !== false)
20       { foreach($this->status as $id_source_status => $source_status)
21         { if($source_status["nom"] == "album") $this->album_status_id = $id_source_status;
22           if($source_status["nom"] == "morceau") $this->morceau_status_id = $id_source_status;
23           if($source_status["nom"] == "piste") $this->piste_status_id = $id_source_status;
24           if(isset($this->album_status_id) && isset($this->morceau_status_id) && isset($this->piste_status_id)) break;
25         }
26         if(isset($this->album_status_id) && isset($this->morceau_status_id) && isset($this->piste_status_id))
27         { if($this->user = $env->user())
28           { if(($this->groupes = $data->groupes($this->user["id"])) !== false)
29             { $env->set_out("groupes", $this->groupes);
30               $this->albums = array();
31               $this->morceaux = array();
32               if($this->groupes["total"] > 0)
33               { foreach($this->groupes["list"] as $id_groupe => $groupe)
34                 { $this->albums[$id_groupe] = array();
35                   $select = array
36                   ( "status" => $this->album_status_id,
37                     "id_user" => $this->user["id"],
38                     "id_groupe" => $id_groupe
39                   );
40                   if(($albums = $data->sources($select)) !== false)
41                   { $this->albums[$id_groupe] = $albums["list"];
42                   }
43                   else
44                   { $this->albums = false;
45                     break;
46                   }
47
48                   $this->morceaux[$id_groupe] = array();
49                   $select = array
50                   ( "status" => $this->morceau_status_id,
51                     "id_user" => $this->user["id"],
52                     "id_groupe" => $id_groupe
53                   );
54                   if(($morceaux = $data->sources($select)) !== false)
55                   { foreach($morceaux["list"] as $id_morceau => $morceau)
56                     { if(($compositions = $data->source_compositions(array("id_source" => $id_morceau))) !== false)
57                       { if($compositions) foreach($compositions[$id_morceau] as $_id_album) { $morceaux["list"][$id_morceau]["album"] = $_id_album; break; }
58                         if(!isset($morceaux["list"][$id_morceau]["album"])) $morceaux["list"][$id_morceau]["album"] = 0;
59                       }
60                       else
61                       { $this->morceaux = false;
62                         break;
63                       }
64                     }
65                     if($this->morceaux !== false)
66                     { foreach($morceaux["list"] as $id_morceau => $morceau)
67                       { if(!isset($this->morceaux[$id_groupe][$morceau["album"]])) $this->morceaux[$id_groupe][$morceau["album"]] = array();
68                         $this->morceaux[$id_groupe][$morceau["album"]][$id_morceau] = $morceau;
69                       }
70                     }
71                   }
72                   else
73                   { $this->morceaux = false;
74                     break;
75                   }
76                   if($this->morceaux === false) break;
77                 }
78               }
79               if($this->albums !== false && $this->morceaux !== false)
80               { $env->set_out("albums", $this->albums);
81                 $env->set_out("morceaux", $this->morceaux);
82                 if($env->etat("action") == "edit" || $env->etat("action") == "del" || $env->etat("action") == "maj_xml")
83                 { if(($this->piste = $data->source($_GET[$env->param("id")], true)) !== false && $this->piste)
84                   {
85                   }
86                   else return "Impossible de lire les informations de la source";
87                 }
88                 if($env->etat("action") == "add" || $env->etat("action") == "edit")
89                 { if(($this->licences = $data->licences()) !== false)
90                   { $env->set_out("licences", $this->licences);
91                   }
92                   else return "Impossible de lire la liste des licences";
93                 }
94               }
95               else return "Impossible de lire la liste des albums";
96             }
97             else return "Impossible de lire la liste des groupes";
98           }
99           else return "Vous devez &ecirc;tre identifier pour acc&eacute;der &agrave; cette page";
100         }
101         else
102         { if(!isset($this->album_status_id)) return "Type de source inconnu: album";
103           return "Type de source inconnu: morceau";
104         }
105       }
106       else return "Impossible de lire la liste des status de source";
107       return true;
108     }
109
110     function index(){
111       $env = $this->env();
112       $data = $env->data();
113       $select = array();
114       $select["status"] = $this->piste_status_id;
115       $select["id_user"] = $this->user["id"];
116       $select["order_by"] = "ordre";
117       if(isset($_GET[$env->param("groupe")]) && $_GET[$env->param("groupe")]) $select["id_groupe"] = $_GET[$env->param("groupe")];
118       if(isset($_GET[$env->param("morceau")]) && $_GET[$env->param("morceau")]) $select["id_composition"] = $_GET[$env->param("morceau")];
119       $select["start"] = isset($_GET[$env->param("start")]) && $_GET[$env->param("start")] ? $_GET[$env->param("start")] : 0;
120       if(($pistes = $data->sources($select)) !== false)
121       { foreach($pistes["list"] as $id_piste => $piste)
122         { $pistes["list"][$id_piste]["permissions"] = $data->source_permissions($piste, $this->user["id"]);
123         }
124         if($_POST)
125         { $OK = true;
126           foreach($pistes["list"] as $id_piste => $piste)
127           { if(isset($_POST["ordre_".$id_piste]))
128             { if($data->set_source_info($piste["id"], "ordre", $_POST["ordre_".$id_piste]) === false)
129               { $OK = false;
130                 break;
131               }
132             }
133           }
134           if($OK)
135           { $get_params = array();
136             if(isset($_GET[$env->param("groupe")]) && $_GET[$env->param("groupe")]) $get_params["groupe"] = $_GET[$env->param("groupe")];
137             if(isset($_GET[$env->param("morceau")]) && $_GET[$env->param("morceau")]) $get_params["morceau"] = $_GET[$env->param("morceau")];
138             $env->redirect
139             ( $env->url("users/pistes", $get_params),
140               "l'ordre des sources a &eacute;t&eacute; enregistr&eacute;"
141             );
142           }
143           else $env->erreur("Impossible d'enregistrer l'ordre des sources");
144         }
145         $env->set_out("pistes", $pistes);
146       }
147       else $env->erreur("Impossible de lire la liste des sources");
148     }
149
150     function add(){
151       $env = $this->env();
152       $data = $env->data();
153       if($data->check_user_uploads_dir())
154       { $web_path = $env->path("web");
155         $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
156         $this->piste = $data->empty_source();
157         $users_sources_mod = $env->get_controller("users/sources");
158         $source_infos = array
159         ( "date_inscription" => date("Y")."-".date("m")."-".date("d"),
160           "ordre" => 0
161         );
162         if($_POST)
163         { if(($groupe = $data->groupe($_POST["id_groupe"])) !== false)
164           { $groupe["id_groupe_status"] = $data->id_groupe_status_admin();
165             $this->piste["groupes"] = array($groupe["id"] => $groupe);
166             $env->set_out("groupe", $groupe);
167           }
168           else
169           { $env->erreur("Impossible de lire les informations du groupe");
170             return;
171           }
172           if($_POST["morceau"])
173           { if($morceau = $data->source($_POST["morceau"], true))
174             { $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
175               if(!$morceau["permissions"]["contributeur"])
176               { $env->erreur("vous n'avez pas la permission d'ajouter une source dans ce morceau");
177                 return;
178               }
179             }
180             else
181             { $env->erreur("impossible de lire les informations du morceau");
182               return;
183             }
184             $this->piste["morceau"] = $_POST["morceau"];
185           }
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                 $this->piste["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml
192                 ( $env,
193                   $xml_url,
194                   ( $_POST["use_edit_derivation_content_".$id_source_derivation] ?
195                       $_POST["edit_derivation_content_".$id_source_derivation]
196                     : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
197                   ),
198                   $_POST["use_edit_derivation_content_".$id_source_derivation] ? true : false
199                 );
200               }
201             }
202           }
203           if(isset($_POST["is_reference"]))
204           { $xml_url = trim($_POST["reference"]);
205             $this->piste["reference"] = $users_sources_mod->get_source_from_xml
206             ( $env,
207               $xml_url,
208               ( $_POST["use_edit_reference_content"] ?
209                   $_POST["edit_reference_content"]
210                 : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
211               ),
212               $_POST["use_edit_reference_content"] ? true : false
213             );
214           }
215           else
216           { if($this->piste["titre"] = trim($_POST["titre"]))
217             { $this->piste["licence"] = array
218               ( "id" => $_POST["licence"]
219               );
220               $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
221               $source_infos["description"] = $_POST["description"];
222               foreach($_POST as $post_key => $post_value)
223               { if(substr($post_key, 0, 13) == "document_nom_")
224                 { if($id_document = substr($post_key, 13))
225                   { $this->piste["documents"][$id_document] = array
226                     ( "nom" => $_POST["document_nom_".$id_document],
227                       "url" => $_POST["document_url_".$id_document]
228                     );
229                   }
230                 }
231               }
232             }
233             else $env->message("merci de pr&eacute;ciser un titre pour la source");
234           }
235           if(!$env->out("messages") && !$env->out("erreur"))
236           { if
237             ( ( $id_source = $data->add_source
238                 ( $this->piste["groupes"],
239                   $this->piste["titre"],
240                   $this->piste_status_id,
241                   $this->piste["licence"]["id"],
242                   $this->piste["documents"],
243                   $this->piste["reference"],
244                   $this->piste["derivations"],
245                   $source_infos
246                 )
247               ) !== false
248             )
249             { if($_POST["morceau"])
250               { if($data->set_source_composition($id_source, $_POST["morceau"]))
251                 { $env->redirect
252                   ( $env->url("users/pistes"),
253                     "la source a &eacute;t&eacute; ajout&eacute;e"
254                   );
255                 }
256                 else $env->erreur("La source a &eacute;t&eacute; ajout&eacute;e mais impossible de l'associer &agrave; ce morceau");
257               }
258               else $env->redirect
259               ( $env->url("users/pistes"),
260                 "la source a &eacute;t&eacute; ajout&eacute;e"
261               );
262             }
263             else $env->erreur("Impossible d'ajouter la source");
264           }
265         }
266         $env->set_out("piste", $this->piste);
267       }
268       else $env->erreur("Impossible de creer le repertoire utilisateur");
269     }
270
271     function edit(){
272       $env = $this->env();
273       $data = $env->data();
274       $this->piste["premissions"] = $data->source_permissions($this->piste, $this->user["id"]);
275       if(!$this->piste["premissions"]["editeur"])
276       { $env->erreur("vous n'avez la permission d'editer cette source");
277         return;
278       }
279       if($data->check_user_uploads_dir())
280       { $web_path = $env->path("web");
281         $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
282         if(($compositions = $data->source_compositions(array("id_source" => $this->piste["id"]))) !== false)
283         { if($compositions) foreach($compositions[$this->piste["id"]] as $id_morceau) { $this->piste["morceau"] = $id_morceau; break; }
284           $env->set_out("groupe", $data->get_admin_groupe($this->piste["groupes"]));
285           if($_POST)
286           { $source_infos = array
287             ( "date_inscription" => $_POST["date_inscription"],
288               "ordre" => isset($this->piste["ordre"]) ? $this->piste["ordre"] : 0
289             );
290             $this->piste = $data->empty_source(array("id" => $this->piste["id"]));
291             $users_sources_mod = $env->get_controller("users/sources");
292             if(!($groupe = $data->groupe($_POST["id_groupe"])))
293             { $env->erreur("Impossible de lire les informations du groupe");
294               return;
295             }
296             $env->set_out("groupe", $groupe);
297             $groupe["id_groupe_status"] = $data->id_groupe_status_admin();
298             $this->piste["groupes"] = array($groupe["id"] => $groupe);
299             $this->piste["derivations"] = array();
300             if($_POST["morceau"])
301             { if($morceau = $data->source($_POST["morceau"], true))
302               { $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
303                 if(!$morceau["permissions"]["contributeur"])
304                 { $env->erreur("vous n'avez pas la permission d'ajouter une source dans ce morceau");
305                   return;
306                 }
307               }
308               else
309               { $env->erreur("impossible de lire les informations du morceau");
310                 return;
311               }
312               $this->piste["morceau"] = $_POST["morceau"];
313             }
314             if(isset($_POST["is_derivation"]))
315             { foreach($_POST as $key => $value)
316               { if(substr($key, 0, 14) == "derivation_id_")
317                 { $id_source_derivation = substr($key, 14);
318                   $xml_url = trim($_POST["derivation_".$id_source_derivation]);
319                   $this->piste["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml
320                   ( $env,
321                     $xml_url,
322                     ( $_POST["use_edit_derivation_content_".$id_source_derivation] ?
323                         $_POST["edit_derivation_content_".$id_source_derivation]
324                       : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
325                     ),
326                     $_POST["use_edit_derivation_content_".$id_source_derivation] ? true : false
327                   );
328                 }
329               }
330             }
331             if(isset($_POST["is_reference"]))
332             { $xml_url = trim($_POST["reference"]);
333               $this->piste["reference"] = $users_sources_mod->get_source_from_xml
334               ( $env,
335                 $xml_url,
336                 ( $_POST["use_edit_reference_content"] ?
337                     $_POST["edit_reference_content"]
338                   : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
339                 ),
340                 $_POST["use_edit_reference_content"] ? true : false
341               );
342             }
343             else
344             { if($this->piste["titre"] = trim($_POST["titre"]))
345               { $this->piste["licence"] = array
346                 ( "id" => $_POST["licence"]
347                 );
348                 $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
349                 $source_infos["description"] = $_POST["description"];
350                 foreach($_POST as $post_key => $post_value)
351                 { if(substr($post_key, 0, 13) == "document_nom_")
352                   { if($id_document = substr($post_key, 13))
353                     { $this->piste["documents"][$id_document] = array
354                       ( "nom" => $_POST["document_nom_".$id_document],
355                         "url" => $_POST["document_url_".$id_document]
356                       );
357                     }
358                   }
359                 }
360               }
361               else $env->message("merci de pr&eacute;ciser un titre pour la source");
362             }
363             if(!$env->out("messages") && !$env->out("erreur"))
364             { if
365               ( ( $data->set_source
366                   ( $this->piste["id"],
367                     $this->piste["groupes"],
368                     $this->piste["titre"],
369                     $this->piste_status_id,
370                     $this->piste["licence"]["id"],
371                     $this->piste["documents"],
372                     $this->piste["reference"],
373                     $this->piste["derivations"],
374                     $source_infos
375                   )
376                 ) !== false
377               )
378               { if($data->del_source_compositions(array("id_source" => $this->piste["id"])))
379                 { if($_POST["morceau"])
380                   { if($data->set_source_composition($this->piste["id"], $_POST["morceau"]))
381                     { $env->redirect
382                       ( $env->url("users/pistes/edit", array("id" => $this->piste["id"])),
383                         "la source a &eacute;t&eacute; modifi&eacute;e"
384                       );
385                     }
386                     else $env->erreur("La source a &eacute;t&eacute; modifi&eacute;e mais impossible de l'associer &agrave; ce morceau");
387                   }
388                   else $env->redirect
389                   ( $env->url("users/pistes/edit", array("id" => $this->piste["id"])),
390                     "la source a &eacute;t&eacute; modifi&eacute;e"
391                   );
392                 }
393                 else $env->erreur("La source a &eacute;t&eacute; modifi&eacute;e mais impossible de l'associer &agrave; ce morceau");
394               }
395               else $env->erreur("Impossible de modifier la source");
396             }
397           }
398         }
399         else $env->erreur("Impossible de lire la liste des compositions");
400         $env->set_out("piste", $this->piste);
401       }
402       else $env->erreur("Impossible de creer le repertoire utilisateur");
403     }
404
405     function maj_xml(){
406       $env = $this->env();
407       $data = $env->data();
408       $this->piste["premissions"] = $data->source_permissions($this->piste, $this->user["id"]);
409       if(!$this->piste["premissions"]["editeur"])
410       { $env->erreur("vous n'avez la permission d'editer cette source");
411         return;
412       }
413       if
414       (    isset($_GET[$env->param("id")])
415         && isset($_GET[$env->param("xml")])
416         && ($_GET[$env->param("xml")] == "derviation" ? isset($_GET[$env->param("derivation")]) : true)
417       )
418       { $xml_url = "";
419         if($_GET[$env->param("xml")] == "derivation")
420         { if(isset($this->piste["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"]))
421           $xml_url = $this->piste["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"];
422         }
423         elseif($_GET[$env->param("xml")] == "reference")
424         { if(isset($this->piste["reference"]["xml"]["url"]))
425           $xml_url = $this->piste["reference"]["xml"]["url"];
426         }
427         $erreur = "";
428         if($xml_url)
429         { if(($res = $data->maj_source_cache($xml_url)) !== false)
430           { if($res === true)
431             { if($this->piste = $data->source($this->piste["id"]))
432               { $env->redirect
433                 ( $env->url("users/pistes/edit", array("id" => $this->piste["id"])),
434                   "Les informations du fichier XML ont &eacute;t&eacute; mises &agrave; jour",
435                   2
436                 );
437                 return;
438               }
439               else $erreur =
440                "le contenu du fichier XML a &eacute;t&eacute; mis &agrave; jour"
441               .", mais impossible de lire les informations de la source";
442             }
443             else
444             { switch($res)
445               { case -1: $env->message("Impossible de lire le contenu du fichier XML"); break;
446                 case -2: $env->message("Le fichier XML indiqu&eacute; ne contient pas un fichier de source valide"); break;
447                 default: $erreur = "Erreur inconnue (?)"; break;
448               }
449             }
450           }
451           else $erreur = "Impossible de mettre &agrave; jour le contenu du fichier XML dans le cache";
452         }
453         else $env->message("Pas d'URL pour ce fichier XML. Impossible de recharger les informations");
454         if($erreur) $env->erreur($erreur);
455         else $env->run("users/pistes/edit", array("id" => $this->piste["id"]));
456       }
457       else $env->erreur("parametre de fichier xml manquant");
458     }
459
460     function del(){
461       $env = $this->env();
462       $data = $env->data();
463       $this->piste["premissions"] = $data->source_permissions($this->piste, $this->user["id"]);
464       if($this->piste["premissions"]["admin"])
465       { if($data->del_source($this->piste["id"]))
466         { $env->redirect
467           ( $env->url("users/pistes"),
468             "la source a &eacute;t&eacute; supprim&eacute;e"
469           );
470         }
471         else $env->erreur("Impossible de supprimer la source");
472       }
473       else $env->erreur("vous n'avez la permission d'effacer cette source");
474     }
475
476   }
477
478 ?>