plusieurs auteurs pour les sources
[mw_sourceml] / app / controllers / users / pistes.php
index 8d3d1ea..0ef6007 100644 (file)
@@ -1,11 +1,7 @@
 <?php
 
-  class mw_users_pistes extends mw_controller
-  {
-    var $groupes;
-    var $albums;
-    var $morceaux;
-    var $piste;
+  class mw_users_pistes extends mw_controller{
+
     var $user;
 
     var $status;
     function validate(){
       $env = $this->env();
       $data = $env->data();
-      if(($this->status = $data->source_status()) !== false)
-      { foreach($this->status as $id_source_status => $source_status)
-        { if($source_status["nom"] == "album") $this->album_status_id = $id_source_status;
-          if($source_status["nom"] == "morceau") $this->morceau_status_id = $id_source_status;
-          if($source_status["nom"] == "piste") $this->piste_status_id = $id_source_status;
-          if(isset($this->album_status_id) && isset($this->morceau_status_id) && isset($this->piste_status_id)) break;
-        }
-        if(isset($this->album_status_id) && isset($this->morceau_status_id) && isset($this->piste_status_id))
-        { if($this->user = $env->user())
-          { if(($this->groupes = $data->groupes($this->user["id"])) !== false)
-            { $env->set_out("groupes", $this->groupes);
-              $this->albums = array();
-              $this->morceaux = array();
-              if($this->groupes["total"] > 0)
-              { foreach($this->groupes["list"] as $id_groupe => $groupe)
-                { $this->albums[$id_groupe] = array();
-                  $select = array
-                  ( "status" => $this->album_status_id,
-                    "id_user" => $this->user["id"],
-                    "id_groupe" => $id_groupe
-                  );
-                  if(($albums = $data->sources($select)) !== false)
-                  { $this->albums[$id_groupe] = $albums["list"];
-                  }
-                  else
-                  { $this->albums = false;
-                    break;
-                  }
-
-                  $this->morceaux[$id_groupe] = array();
-                  $select = array
-                  ( "status" => $this->morceau_status_id,
-                    "id_user" => $this->user["id"],
-                    "id_groupe" => $id_groupe
-                  );
-                  if(($morceaux = $data->sources($select)) !== false)
-                  { foreach($morceaux["list"] as $id_morceau => $morceau)
-                    { if(($compositions = $data->source_compositions(array("id_source" => $id_morceau))) !== false)
-                      { if($compositions) foreach($compositions[$id_morceau] as $_id_album) { $morceaux["list"][$id_morceau]["album"] = $_id_album; break; }
-                        if(!isset($morceaux["list"][$id_morceau]["album"])) $morceaux["list"][$id_morceau]["album"] = 0;
-                      }
-                      else
-                      { $this->morceaux = false;
-                        break;
-                      }
-                    }
-                    if($this->morceaux !== false)
-                    { foreach($morceaux["list"] as $id_morceau => $morceau)
-                      { if(!isset($this->morceaux[$id_groupe][$morceau["album"]])) $this->morceaux[$id_groupe][$morceau["album"]] = array();
-                        $this->morceaux[$id_groupe][$morceau["album"]][$id_morceau] = $morceau;
-                      }
-                    }
-                  }
-                  else
-                  { $this->morceaux = false;
-                    break;
-                  }
-                  if($this->morceaux === false) break;
-                }
-              }
-              if($this->albums !== false && $this->morceaux !== false)
-              { $env->set_out("albums", $this->albums);
-                $env->set_out("morceaux", $this->morceaux);
-                if($env->etat("action") == "edit" || $env->etat("action") == "del" || $env->etat("action") == "maj_xml")
-                { if(($this->piste = $data->source($_GET[$env->param("id")], true)) !== false && $this->piste)
-                  {
-                  }
-                  else return "Impossible de lire les informations de la source";
-                }
-                if($env->etat("action") == "add" || $env->etat("action") == "edit")
-                { if(($this->licences = $data->licences()) !== false)
-                  { $env->set_out("licences", $this->licences);
-                  }
-                  else return "Impossible de lire la liste des licences";
-                }
-              }
-              else return "Impossible de lire la liste des albums";
-            }
-            else return "Impossible de lire la liste des groupes";
-          }
-          else return "Vous devez &ecirc;tre identifier pour acc&eacute;der &agrave; cette page";
-        }
-        else
-        { if(!isset($this->album_status_id)) return "Type de source inconnu: album";
-          return "Type de source inconnu: morceau";
-        }
+      if(($this->status = $data->source_status()) === false){
+        return "Impossible de lire la liste des status de source";
+      }
+      foreach($this->status as $id_source_status => $source_status){
+        if($source_status["nom"] == "album") $this->album_status_id = $id_source_status;
+        if($source_status["nom"] == "morceau") $this->morceau_status_id = $id_source_status;
+        if($source_status["nom"] == "piste") $this->piste_status_id = $id_source_status;
+        if(isset($this->album_status_id) && isset($this->morceau_status_id) && isset($this->piste_status_id)) break;
+      }
+      if(
+            !isset($this->album_status_id)
+        ||  !isset($this->morceau_status_id)
+        ||  !isset($this->piste_status_id)
+      ){
+        return "liste des status de source incomplète";
+      }
+      if(!($this->user = $env->user())){
+        return "Vous devez être identifié pour accéder à cette page";
       }
-      else return "Impossible de lire la liste des status de source";
       return true;
     }
 
     function index(){
       $env = $this->env();
       $data = $env->data();
-      $select = array();
-      $select["status"] = $this->piste_status_id;
-      $select["id_user"] = $this->user["id"];
-      $select["order_by"] = "ordre";
-      if(isset($_GET[$env->param("groupe")]) && $_GET[$env->param("groupe")]) $select["id_groupe"] = $_GET[$env->param("groupe")];
-      if(isset($_GET[$env->param("morceau")]) && $_GET[$env->param("morceau")]) $select["id_composition"] = $_GET[$env->param("morceau")];
-      $select["start"] = isset($_GET[$env->param("start")]) && $_GET[$env->param("start")] ? $_GET[$env->param("start")] : 0;
-      if(($pistes = $data->sources($select)) !== false)
-      { foreach($pistes["list"] as $id_piste => $piste)
-        { $pistes["list"][$id_piste]["permissions"] = $data->source_permissions($piste, $this->user["id"]);
+      if(($groupes = $data->groupes($this->user["id"])) === false){
+        $env->erreur("Impossible de lire la liste des groupes");
+        return;
+      }
+      $morceaux_groupes = $groupes["list"];
+      $id_groupe = false;
+      if(isset($_GET[$env->param("groupe")])){
+        $id_groupe = $_GET[$env->param("groupe")];
+        if(!isset($groupes["list"][$id_groupe])){
+          $env->erreur("Impossible de lire les informations du groupe");
+          return;
         }
-        if($_POST)
-        { $OK = true;
-          foreach($pistes["list"] as $id_piste => $piste)
-          { if(isset($_POST["ordre_".$id_piste]))
-            { if($data->set_source_info($piste["id"], "ordre", $_POST["ordre_".$id_piste]) === false)
-              { $OK = false;
-                break;
-              }
+      }
+      if($id_groupe){
+        $morceaux_groupes = array($id_groupe => $groupes["list"][$id_groupe]);
+      }
+      if(
+        (
+          $morceaux = $data->groupes_sources(
+            array(
+              "groupes" => $morceaux_groupes,
+              "id_class" => $this->morceau_status_id,
+              // on veut les morceaux pour lesquels au moins un groupe (et pas tous) ...
+              "satisfy_all_groupes_access" => false,
+              // ... a le droit de contribution
+              "id_source_access" => $data->id_groupe_status_contributeur()
+            )
+          )
+        ) === false
+      ) return "impossible de lire la liste des morceaux";
+      if($id_morceau = isset($_GET[$env->param("morceau")]) ? $_GET[$env->param("morceau")] : false){
+        if(!($morceau = $data->source($id_morceau, true))){
+          $env->erreur("Impossible de lire les informations du morceau");
+          return;
+        }
+      }
+      $select = array(
+        "status" => $this->piste_status_id,
+        "id_user" => $this->user["id"],
+        "order_by" => "ordre",
+        "start" => isset($_GET[$env->param("start")]) && $_GET[$env->param("start")] ? $_GET[$env->param("start")] : 0
+      );
+      if($id_groupe) $select["id_groupe"] = $id_groupe;
+      if($id_morceau !== false) $select["id_composition"] = $id_morceau;
+      if(($pistes = $data->sources($select)) === false){
+        $env->erreur("impossible de lire la liste des pistes");
+        return;
+      }
+      foreach($pistes["list"] as $id_piste => $piste){
+        $pistes["list"][$id_piste]["permissions"] = $data->source_permissions($piste, $this->user["id"]);
+      }
+      if($_POST){
+        foreach($pistes["list"] as $id_piste => $piste){
+          if(isset($_POST["ordre_".$id_piste])){
+            if($data->set_source_info($piste["id"], "ordre", $_POST["ordre_".$id_piste]) === false){
+              $env->erreur("Impossible d'enregistrer l'ordre des pistes");
+              return;
             }
           }
-          if($OK)
-          { $get_params = array();
-            if(isset($_GET[$env->param("groupe")]) && $_GET[$env->param("groupe")]) $get_params["groupe"] = $_GET[$env->param("groupe")];
-            if(isset($_GET[$env->param("morceau")]) && $_GET[$env->param("morceau")]) $get_params["morceau"] = $_GET[$env->param("morceau")];
-            $env->redirect
-            ( $env->url("users/pistes", $get_params),
-              "l'ordre des sources a &eacute;t&eacute; enregistr&eacute;"
-            );
-          }
-          else $env->erreur("Impossible d'enregistrer l'ordre des sources");
         }
-        $env->set_out("pistes", $pistes);
+        $get_params = array();
+        if($id_groupe) $get_params["groupe"] = $id_groupe;
+        if($id_morceau) $get_params["morceau"] = $id_morceau;
+        $env->redirect(
+          $env->url("users/pistes", $get_params),
+          "l'ordre des pistes a été enregistré"
+        );
       }
-      else $env->erreur("Impossible de lire la liste des sources");
+      $env->set_out("groupes", $groupes);
+      $env->set_out("morceaux", $morceaux);
+      $env->set_out("pistes", $pistes);
     }
 
     function add(){
       $env = $this->env();
       $data = $env->data();
-      if($data->check_user_uploads_dir())
-      { $web_path = $env->path("web");
-        $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
-        $this->piste = $data->empty_source();
-        $users_sources_mod = $env->get_controller("users/sources");
-        $source_infos = array
-        ( "date_inscription" => date("Y")."-".date("m")."-".date("d"),
-          "ordre" => 0
+      $piste = $data->empty_source();
+      $source_infos = array(
+        "date_inscription" => date("Y-m-d"),
+        "ordre" => 0
+      );
+      $groupe = false;
+      $morceau = false;
+      if(($groupes = $data->groupes($this->user["id"])) === false){
+        $env->erreur("Impossible de lire la liste des groupes");
+        return;
+      }
+      $morceaux = array();
+      if($groupes["total"] > 0){
+        $select = array(
+          "status" => $this->morceau_status_id,
+          "id_user" => $this->user["id"]
         );
-        if($_POST)
-        { if(($groupe = $data->groupe($_POST["id_groupe"])) !== false)
-          { $groupe["id_groupe_status"] = $data->id_groupe_status_admin();
-            $this->piste["groupes"] = array($groupe["id"] => $groupe);
-            $env->set_out("groupe", $groupe);
+        foreach($groupes["list"] as $id_groupe => $groupe){
+          $select["id_groupe"] = $id_groupe;
+          if(($groupes_morceaux = $data->sources($select)) === false){
+            $env->erreur("impossible de lire la liste des morceaux");
+            return;
+          }
+          $morceaux[$id_groupe] = $groupes_morceaux["list"];
+        }
+      }
+      if(($licences = $data->licences()) === false){
+        return "Impossible de lire la liste des licences";
+      }
+      if(!$data->check_user_uploads_dir()){
+        $env->erreur("Impossible de creer le repertoire utilisateur");
+        return;
+      }
+      $web_path = $env->path("web");
+      $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
+      $users_sources_mod = $env->get_controller("users/sources");
+      if($_POST){
+        if(!($groupe = $data->groupe($_POST["id_groupe"]))){
+          $env->erreur("Impossible de lire les informations du groupe");
+          return;
+        }
+        $groupe["id_groupe_status"] = $data->id_groupe_status_admin();
+        $piste["groupes"] = array($groupe["id"] => $groupe);
+        if($_POST["morceau"]){
+          if(!($morceau = $data->source($_POST["morceau"], true))){
+            $env->erreur("Impossible de lire les informations du morceau");
+            return;
           }
-          else
-          { $env->erreur("Impossible de lire les informations du groupe");
+          $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
+          if(!$morceau["permissions"]["contributeur"]){
+            $env->erreur("vous n'avez pas la permission d'ajouter une piste dans ce morceau");
             return;
           }
-          if($_POST["morceau"])
-          { if($morceau = $data->source($_POST["morceau"], true))
-            { $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
-              if(!$morceau["permissions"]["contributeur"])
-              { $env->erreur("vous n'avez pas la permission d'ajouter une source dans ce morceau");
-                return;
-              }
-            }
-            else
-            { $env->erreur("impossible de lire les informations du morceau");
-              return;
+          $piste["morceau"] = $morceau["id"];
+        }
+        if(isset($_POST["is_derivation"])){
+          foreach($_POST as $key => $value){
+            if(substr($key, 0, 14) == "derivation_id_"){
+              $id_source_derivation = substr($key, 14);
+              $xml_url = trim($_POST["derivation_".$id_source_derivation]);
+              $piste["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml(
+                $env,
+                $xml_url,
+                (
+                  $_POST["use_edit_derivation_content_".$id_source_derivation] ?
+                    $_POST["edit_derivation_content_".$id_source_derivation]
+                  : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
+                ),
+                $_POST["use_edit_derivation_content_".$id_source_derivation] ? true : false
+              );
             }
-            $this->piste["morceau"] = $_POST["morceau"];
           }
-          if(isset($_POST["is_derivation"]))
-          { foreach($_POST as $key => $value)
-            { if(substr($key, 0, 14) == "derivation_id_")
-              { $id_source_derivation = substr($key, 14);
-                $xml_url = trim($_POST["derivation_".$id_source_derivation]);
-                $this->piste["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml
-                ( $env,
-                  $xml_url,
-                  ( $_POST["use_edit_derivation_content_".$id_source_derivation] ?
-                      $_POST["edit_derivation_content_".$id_source_derivation]
-                    : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
-                  ),
-                  $_POST["use_edit_derivation_content_".$id_source_derivation] ? true : false
+        }
+        if(isset($_POST["is_reference"])){
+          $xml_url = trim($_POST["reference"]);
+          $piste["reference"] = $users_sources_mod->get_source_from_xml(
+            $env,
+            $xml_url,
+            (
+              $_POST["use_edit_reference_content"] ?
+                $_POST["edit_reference_content"]
+              : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
+            ),
+            $_POST["use_edit_reference_content"] ? true : false
+          );
+        }
+        else{
+          if(!($piste["titre"] = trim($_POST["titre"]))){
+            $env->message("merci de pr&eacute;ciser un titre pour la piste");
+          }
+          $piste["licence"] = array(
+            "id" => $_POST["licence"]
+          );
+          $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
+          $source_infos["description"] = $_POST["description"];
+          foreach($_POST as $post_key => $post_value){
+            if(substr($post_key, 0, 13) == "document_nom_"){
+              if($id_document = substr($post_key, 13)){
+                $piste["documents"][$id_document] = array(
+                  "nom" => $_POST["document_nom_".$id_document],
+                  "url" => $_POST["document_url_".$id_document]
                 );
               }
             }
           }
-          if(isset($_POST["is_reference"]))
-          { $xml_url = trim($_POST["reference"]);
-            $this->piste["reference"] = $users_sources_mod->get_source_from_xml
-            ( $env,
-              $xml_url,
-              ( $_POST["use_edit_reference_content"] ?
-                  $_POST["edit_reference_content"]
-                : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
-              ),
-              $_POST["use_edit_reference_content"] ? true : false
-            );
-          }
-          else
-          { if($this->piste["titre"] = trim($_POST["titre"]))
-            { $this->piste["licence"] = array
-              ( "id" => $_POST["licence"]
-              );
-              $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
-              $source_infos["description"] = $_POST["description"];
-              foreach($_POST as $post_key => $post_value)
-              { if(substr($post_key, 0, 13) == "document_nom_")
-                { if($id_document = substr($post_key, 13))
-                  { $this->piste["documents"][$id_document] = array
-                    ( "nom" => $_POST["document_nom_".$id_document],
-                      "url" => $_POST["document_url_".$id_document]
-                    );
-                  }
-                }
-              }
-            }
-            else $env->message("merci de pr&eacute;ciser un titre pour la source");
+        }
+        if(!$env->messages()){
+          if(
+            (
+              $id_source = $data->add_source(
+                $piste["groupes"],
+                $piste["titre"],
+                $this->piste_status_id,
+                $piste["licence"]["id"],
+                $piste["documents"],
+                $piste["reference"],
+                $piste["derivations"],
+                $source_infos
+              )
+            ) === false
+          ){
+            $env->erreur("Impossible d'ajouter la piste");
+            return;
           }
-          if(!$env->out("messages") && !$env->out("erreur"))
-          { if
-            ( ( $id_source = $data->add_source
-                ( $this->piste["groupes"],
-                  $this->piste["titre"],
-                  $this->piste_status_id,
-                  $this->piste["licence"]["id"],
-                  $this->piste["documents"],
-                  $this->piste["reference"],
-                  $this->piste["derivations"],
-                  $source_infos
-                )
-              ) !== false
-            )
-            { if($_POST["morceau"])
-              { if($data->set_source_composition($id_source, $_POST["morceau"]))
-                { $env->redirect
-                  ( $env->url("users/pistes"),
-                    "la source a &eacute;t&eacute; ajout&eacute;e"
-                  );
-                }
-                else $env->erreur("La source a &eacute;t&eacute; ajout&eacute;e mais impossible de l'associer &agrave; ce morceau");
-              }
-              else $env->redirect
-              ( $env->url("users/pistes"),
-                "la source a &eacute;t&eacute; ajout&eacute;e"
-              );
+          if($morceau){
+            if(!$data->set_source_composition($id_source, $morceau["id"])){
+              $env->erreur("La piste a été ajoutée mais impossible de l'associer au morceau");
+              return;
             }
-            else $env->erreur("Impossible d'ajouter la source");
           }
+          $env->redirect(
+            $env->url("users/pistes"),
+            "la piste a été ajoutée"
+          );
         }
-        $env->set_out("piste", $this->piste);
       }
-      else $env->erreur("Impossible de creer le repertoire utilisateur");
+      $env->set_out("groupes", $groupes);
+      $env->set_out("morceaux", $morceaux);
+      $env->set_out("licences", $licences);
+      $env->set_out("piste", $piste);
+      $env->set_out("source_infos", $source_infos);
+      $env->set_out("groupe", $groupe);
+      $env->set_out("morceau", $morceau);
     }
 
     function edit(){
       $env = $this->env();
       $data = $env->data();
-      $this->piste["premissions"] = $data->source_permissions($this->piste, $this->user["id"]);
-      if(!$this->piste["premissions"]["editeur"])
-      { $env->erreur("vous n'avez la permission d'editer cette source");
+      if(($groupes = $data->groupes($this->user["id"])) === false){
+        $env->erreur("Impossible de lire la liste des groupes");
         return;
       }
-      if($data->check_user_uploads_dir())
-      { $web_path = $env->path("web");
-        $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
-        if(($compositions = $data->source_compositions(array("id_source" => $this->piste["id"]))) !== false)
-        { if($compositions) foreach($compositions[$this->piste["id"]] as $id_morceau) { $this->piste["morceau"] = $id_morceau; break; }
-          $env->set_out("groupe", $data->get_admin_groupe($this->piste["groupes"]));
-          if($_POST)
-          { $source_infos = array
-            ( "date_inscription" => $_POST["date_inscription"],
-              "ordre" => isset($this->piste["ordre"]) ? $this->piste["ordre"] : 0
-            );
-            $this->piste = $data->empty_source(array("id" => $this->piste["id"]));
-            $users_sources_mod = $env->get_controller("users/sources");
-            if(!($groupe = $data->groupe($_POST["id_groupe"])))
-            { $env->erreur("Impossible de lire les informations du groupe");
+      if(($licences = $data->licences()) === false){
+        $env->erreur("Impossible de lire la liste des licences");
+        return;
+      }
+      if(($sources_access = $data->sources_access()) === false){
+        $env->erreur("Impossible de lire les types d'access");
+        return;
+      }
+      if(!($piste = $data->source($_GET[$env->param("id")], true))){
+        $env->erreur("Impossible de lire les informations de la piste");
+        return;
+      }
+      $piste["permissions"] = $data->source_permissions($piste, $this->user["id"]);
+      if(!$piste["permissions"]["editeur"]){
+        $env->erreur("vous n'avez pas la permission d'editer cette piste");
+        return;
+      }
+      if(
+        (
+          $morceaux = $data->groupes_sources(
+            array(
+              "groupes" => $piste["groupes"],
+              "id_class" => $this->morceau_status_id,
+              // on veut les morceaux pour lesquels chaque groupe du morceau ...
+              "satisfy_all_groupes_access" => true,
+              // ... a le droit de contribution
+              "id_source_access" => $data->id_groupe_status_contributeur()
+            )
+          )
+        ) === false
+      ) return "impossible de lire la liste des morceaux";
+      if(!$data->check_user_uploads_dir()){
+        $env->erreur("Impossible de creer le repertoire utilisateur");
+        return;
+      }
+      $web_path = $env->path("web");
+      $_SESSION["upload_dir"] = $web_path.($web_path ? "" : "/").$env->path("content")."uploads/".$this->user["id"];
+      if(($compositions = $data->source_compositions(array("id_source" => $piste["id"]))) === false){
+        $env->erreur("Impossible de lire la liste des compositions");
+        return;
+      }
+      if($compositions) foreach($compositions[$piste["id"]] as $id_morceau) { $piste["morceau"] = $id_morceau; break; }
+      if($_POST){
+        $source_infos = array(
+          "date_inscription" => $_POST["date_inscription"],
+          "ordre" => isset($piste["ordre"]) ? $piste["ordre"] : 0
+        );
+        $piste = $data->empty_source(
+          array(
+            "id" => $piste["id"],
+            "groupes" => $piste["groupes"]
+          )
+        );
+        $users_sources_mod = $env->get_controller("users/sources");
+        if($_POST["morceau"]){
+          if($morceau = $data->source($_POST["morceau"], true)){
+            $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
+            if(!$morceau["permissions"]["contributeur"]){
+              $env->erreur("vous n'avez pas la permission d'ajouter une  piste dans ce morceau");
               return;
             }
-            $env->set_out("groupe", $groupe);
-            $groupe["id_groupe_status"] = $data->id_groupe_status_admin();
-            $this->piste["groupes"] = array($groupe["id"] => $groupe);
-            $this->piste["derivations"] = array();
-            if($_POST["morceau"])
-            { if($morceau = $data->source($_POST["morceau"], true))
-              { $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
-                if(!$morceau["permissions"]["contributeur"])
-                { $env->erreur("vous n'avez pas la permission d'ajouter une source dans ce morceau");
-                  return;
-                }
-              }
-              else
-              { $env->erreur("impossible de lire les informations du morceau");
-                return;
-              }
-              $this->piste["morceau"] = $_POST["morceau"];
-            }
-            if(isset($_POST["is_derivation"]))
-            { foreach($_POST as $key => $value)
-              { if(substr($key, 0, 14) == "derivation_id_")
-                { $id_source_derivation = substr($key, 14);
-                  $xml_url = trim($_POST["derivation_".$id_source_derivation]);
-                  $this->piste["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml
-                  ( $env,
-                    $xml_url,
-                    ( $_POST["use_edit_derivation_content_".$id_source_derivation] ?
-                        $_POST["edit_derivation_content_".$id_source_derivation]
-                      : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
-                    ),
-                    $_POST["use_edit_derivation_content_".$id_source_derivation] ? true : false
-                  );
-                }
-              }
-            }
-            if(isset($_POST["is_reference"]))
-            { $xml_url = trim($_POST["reference"]);
-              $this->piste["reference"] = $users_sources_mod->get_source_from_xml
-              ( $env,
+          }
+          else{
+            $env->erreur("Impossible de lire les informations du morceau");
+            return;
+          }
+          $piste["morceau"] = $morceau["id"];
+        }
+        if(isset($_POST["is_derivation"])){
+          foreach($_POST as $key => $value){
+            if(substr($key, 0, 14) == "derivation_id_"){
+              $id_source_derivation = substr($key, 14);
+              $xml_url = trim($_POST["derivation_".$id_source_derivation]);
+              $piste["derivations"][$id_source_derivation] = $users_sources_mod->get_source_from_xml(
+                $env,
                 $xml_url,
-                ( $_POST["use_edit_reference_content"] ?
-                    $_POST["edit_reference_content"]
+                (
+                  $_POST["use_edit_derivation_content_".$id_source_derivation] ?
+                    $_POST["edit_derivation_content_".$id_source_derivation]
                   : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
                 ),
-                $_POST["use_edit_reference_content"] ? true : false
+                $_POST["use_edit_derivation_content_".$id_source_derivation] ? true : false
               );
             }
-            else
-            { if($this->piste["titre"] = trim($_POST["titre"]))
-              { $this->piste["licence"] = array
-                ( "id" => $_POST["licence"]
+          }
+        }
+        if(isset($_POST["is_reference"])){
+          $xml_url = trim($_POST["reference"]);
+          $piste["reference"] = $users_sources_mod->get_source_from_xml(
+            $env,
+            $xml_url,
+            (
+              $_POST["use_edit_reference_content"] ?
+                $_POST["edit_reference_content"]
+              : ($xml_url ? $data->get_source_xml_from_url($xml_url) : "")
+            ),
+            $_POST["use_edit_reference_content"] ? true : false
+          );
+        }
+        else{
+          if(!($piste["titre"] = trim($_POST["titre"]))){
+            $env->message("merci de pr&eacute;ciser un titre pour la piste");
+          }
+          $piste["licence"] = array(
+            "id" => $_POST["licence"]
+          );
+          $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
+          $source_infos["description"] = $_POST["description"];
+          foreach($_POST as $post_key => $post_value){
+            if(substr($post_key, 0, 13) == "document_nom_"){
+              if($id_document = substr($post_key, 13)){
+                $piste["documents"][$id_document] = array(
+                  "nom" => $_POST["document_nom_".$id_document],
+                  "url" => $_POST["document_url_".$id_document]
                 );
-                $source_infos["date_creation"] = $_POST["annee_date_creation"]."-".$_POST["mois_date_creation"]."-".$_POST["jour_date_creation"];
-                $source_infos["description"] = $_POST["description"];
-                foreach($_POST as $post_key => $post_value)
-                { if(substr($post_key, 0, 13) == "document_nom_")
-                  { if($id_document = substr($post_key, 13))
-                    { $this->piste["documents"][$id_document] = array
-                      ( "nom" => $_POST["document_nom_".$id_document],
-                        "url" => $_POST["document_url_".$id_document]
-                      );
-                    }
-                  }
-                }
               }
-              else $env->message("merci de pr&eacute;ciser un titre pour la source");
             }
-            if(!$env->out("messages") && !$env->out("erreur"))
-            { if
-              ( ( $data->set_source
-                  ( $this->piste["id"],
-                    $this->piste["groupes"],
-                    $this->piste["titre"],
-                    $this->piste_status_id,
-                    $this->piste["licence"]["id"],
-                    $this->piste["documents"],
-                    $this->piste["reference"],
-                    $this->piste["derivations"],
-                    $source_infos
-                  )
-                ) !== false
+          }
+        }
+        if(!$env->messages()){
+          if(
+            (
+              $data->set_source(
+                $piste["id"],
+                $piste["groupes"],
+                $piste["titre"],
+                $this->piste_status_id,
+                $piste["licence"]["id"],
+                $piste["documents"],
+                $piste["reference"],
+                $piste["derivations"],
+                $source_infos
               )
-              { if($data->del_source_compositions(array("id_source" => $this->piste["id"])))
-                { if($_POST["morceau"])
-                  { if($data->set_source_composition($this->piste["id"], $_POST["morceau"]))
-                    { $env->redirect
-                      ( $env->url("users/pistes/edit", array("id" => $this->piste["id"])),
-                        "la source a &eacute;t&eacute; modifi&eacute;e"
-                      );
-                    }
-                    else $env->erreur("La source a &eacute;t&eacute; modifi&eacute;e mais impossible de l'associer &agrave; ce morceau");
-                  }
-                  else $env->redirect
-                  ( $env->url("users/pistes/edit", array("id" => $this->piste["id"])),
-                    "la source a &eacute;t&eacute; modifi&eacute;e"
-                  );
-                }
-                else $env->erreur("La source a &eacute;t&eacute; modifi&eacute;e mais impossible de l'associer &agrave; ce morceau");
-              }
-              else $env->erreur("Impossible de modifier la source");
+            ) === false
+          ){
+            $env->erreur("Impossible de modifier la piste");
+            return;
+          }
+          if(!$data->del_source_compositions(array("id_source" => $piste["id"]))){
+            $env->erreur("La piste a été modifiée mais impossible de l'associer à ce morceau");
+            return;
+          }
+          if($_POST["morceau"]){
+            if(!$data->set_source_composition($piste["id"], $_POST["morceau"])){
+              $env->erreur("La piste a été modifiée mais impossible de l'associer à ce morceau");
+              return;
             }
           }
+          $env->redirect(
+            $env->url("users/pistes/edit", array("id" => $piste["id"])),
+            "la piste a été modifiée"
+          );
         }
-        else $env->erreur("Impossible de lire la liste des compositions");
-        $env->set_out("piste", $this->piste);
       }
-      else $env->erreur("Impossible de creer le repertoire utilisateur");
+      $env->set_out("groupes", $groupes);
+      $env->set_out("sources_access", $sources_access);
+      $env->set_out("licences", $licences);
+      $env->set_out("morceaux", $morceaux);
+      $env->set_out("piste", $piste);
     }
 
     function maj_xml(){
-      $env = $this->env();
       $data = $env->data();
-      $this->piste["premissions"] = $data->source_permissions($this->piste, $this->user["id"]);
-      if(!$this->piste["premissions"]["editeur"])
-      { $env->erreur("vous n'avez la permission d'editer cette source");
+      if(!($piste = $data->source($_GET[$env->param("id")], true))){
+        $env->erreur("Impossible de lire les informations de la piste");
+        return;
+      }
+      $piste["permissions"] = $data->source_permissions($piste, $this->user["id"]);
+      if(!$piste["permissions"]["editeur"]){
+        $env->erreur("vous n'avez pas la permission d'editer cette piste");
         return;
       }
       if
       (    isset($_GET[$env->param("id")])
         && isset($_GET[$env->param("xml")])
         && ($_GET[$env->param("xml")] == "derviation" ? isset($_GET[$env->param("derivation")]) : true)
-      )
-      { $xml_url = "";
-        if($_GET[$env->param("xml")] == "derivation")
-        { if(isset($this->piste["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"]))
-          $xml_url = $this->piste["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"];
-        }
-        elseif($_GET[$env->param("xml")] == "reference")
-        { if(isset($this->piste["reference"]["xml"]["url"]))
-          $xml_url = $this->piste["reference"]["xml"]["url"];
+      ){
+        $env->erreur("parametre de fichier xml manquant");
+        return;
+      }
+      $xml_url = "";
+      if($_GET[$env->param("xml")] == "derivation"){
+        if(isset($piste["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"]))
+        $xml_url = $piste["derivations"][$_GET[$env->param("derivation")]]["xml"]["url"];
+      }
+      elseif($_GET[$env->param("xml")] == "reference"){
+        if(isset($piste["reference"]["xml"]["url"]))
+        $xml_url = $piste["reference"]["xml"]["url"];
+      }
+      if(!$xml_url){
+        $env->message("Pas d'URL pour ce fichier XML. Impossible de recharger les informations");
+        return;
+      }
+      if(!$env->messages()){
+        if(($res = $data->maj_source_cache($xml_url)) === false){
+          $env->erreur("Impossible de mettre à jour le contenu du fichier XML dans le cache");
+          return;
         }
-        $erreur = "";
-        if($xml_url)
-        { if(($res = $data->maj_source_cache($xml_url)) !== false)
-          { if($res === true)
-            { if($this->piste = $data->source($this->piste["id"]))
-              { $env->redirect
-                ( $env->url("users/pistes/edit", array("id" => $this->piste["id"])),
-                  "Les informations du fichier XML ont &eacute;t&eacute; mises &agrave; jour",
-                  2
-                );
-                return;
-              }
-              else $erreur =
-               "le contenu du fichier XML a &eacute;t&eacute; mis &agrave; jour"
-              .", mais impossible de lire les informations de la source";
-            }
-            else
-            { switch($res)
-              { case -1: $env->message("Impossible de lire le contenu du fichier XML"); break;
-                case -2: $env->message("Le fichier XML indiqu&eacute; ne contient pas un fichier de source valide"); break;
-                default: $erreur = "Erreur inconnue (?)"; break;
-              }
-            }
+        if($res === true){
+          if($piste = $data->source($piste["id"])){
+            $env->redirect(
+              $env->url("users/pistes/edit", array("id" => $piste["id"])),
+              "Les informations du fichier XML ont été mises à jour",
+              2
+            );
+          }
+          else{
+            $env->erreur(
+             "le contenu du fichier XML a &eacute;t&eacute; mis &agrave; jour"
+            .", mais impossible de lire les informations de la piste"
+            );
           }
-          else $erreur = "Impossible de mettre &agrave; jour le contenu du fichier XML dans le cache";
+          return;
+        }
+        switch($res){
+          case -1: $env->message("Impossible de lire le contenu du fichier XML"); break;
+          case -2: $env->message("Le fichier XML indiqu&eacute; ne contient pas un fichier de source valide"); break;
+          default: $env->erreur("Erreur inconnue (?)"); return;
         }
-        else $env->message("Pas d'URL pour ce fichier XML. Impossible de recharger les informations");
-        if($erreur) $env->erreur($erreur);
-        else $env->run("users/pistes/edit", array("id" => $this->piste["id"]));
       }
-      else $env->erreur("parametre de fichier xml manquant");
+      $env->run("users/pistes/edit", array("get" => array("id" => $piste["id"])));
     }
 
     function del(){
       $env = $this->env();
       $data = $env->data();
-      $this->piste["premissions"] = $data->source_permissions($this->piste, $this->user["id"]);
-      if($this->piste["premissions"]["admin"])
-      { if($data->del_source($this->piste["id"]))
-        { $env->redirect
-          ( $env->url("users/pistes"),
-            "la source a &eacute;t&eacute; supprim&eacute;e"
-          );
-        }
-        else $env->erreur("Impossible de supprimer la source");
+      if(!($piste = $data->source($_GET[$env->param("id")], true))){
+        $env->erreur("Impossible de lire les informations de la piste");
+        return;
+      }
+      $piste["permissions"] = $data->source_permissions($piste, $this->user["id"]);
+      if(!$piste["permissions"]["admin"]){
+        $env->erreur("vous n'avez pas la permission d'effacer cette piste");
+        return;
+      }
+      if(!$data->del_source($piste["id"])){
+        $env->erreur("Impossible de supprimer la piste");
+        return;
       }
-      else $env->erreur("vous n'avez la permission d'effacer cette source");
+      $env->redirect(
+        $env->url("users/pistes"),
+        "la piste a été supprimée"
+      );
     }
 
   }