invitations pour acces aux sources (suite) sourceml.0.15.5
authordj3c1t <dj3c1t@free.fr>
Tue, 9 Jul 2013 21:59:53 +0000 (23:59 +0200)
committerdj3c1t <dj3c1t@free.fr>
Tue, 9 Jul 2013 21:59:53 +0000 (23:59 +0200)
app/controllers/users/sources_invitations.php [new file with mode: 0644]
app/out/default/css/actions/users_sources_invitations.css [new file with mode: 0644]
app/out/default/views/users/albums/groupes.php [new file with mode: 0644]
app/out/default/views/users/pistes/groupes.php [new file with mode: 0644]
app/out/default/views/users/source_groupes_form.php [new file with mode: 0644]
app/out/default/views/users/sources_invitations/list.php [new file with mode: 0644]

diff --git a/app/controllers/users/sources_invitations.php b/app/controllers/users/sources_invitations.php
new file mode 100644 (file)
index 0000000..40f2a2f
--- /dev/null
@@ -0,0 +1,331 @@
+<?php
+
+  class mw_users_sources_invitations extends mw_controller{
+
+    var $user;
+
+    var $status;
+    var $album_status_id;
+    var $morceau_status_id;
+    var $piste_status_id;
+
+    function validate(){
+      $env = $this->env();
+      $data = $env->data();
+      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->album_status_id)){
+        $inconnus = "";
+        if(!isset($this->album_status_id)) $inconnus .= ($inconnus ? ", " : "")."album";
+        if(!isset($this->morceau_status_id)) $inconnus .= ($inconnus ? ", " : "")."morceau";
+        if(!isset($this->piste_status_id)) $inconnus .= ($inconnus ? ", " : "")."piste";
+        return "Types de source inconnu: ".$inconnus;
+      }
+      if(!($this->user = $env->user())){
+        return "Vous devez être identifié pour accéder à cette page";
+      }
+      return true;
+    }
+
+    function index(){
+      $env = $this->env();
+      $data = $env->data();
+      if(($sources_access = $data->sources_access()) === false){
+        $env->erreur("Impossible de lire les types d'access");
+        return;
+      }
+      if(($groupes = $data->groupes($this->user["id"])) === false){
+        $env->erreur("Impossible de lire la liste des groupes");
+        return;
+      }
+      $groupes_in = "";
+      foreach($groupes["list"] as $id_groupe => $groupe) $groupes_in .= ($groupes_in ? "," : "").$id_groupe;
+      $invitations = array("list" => array(), "total" => 0);
+      if($groupes_in){
+        if(
+          (
+            $invitations = $data->list_sml_sources_invitations(
+              array(
+                "index_name" => "id",
+                "where"=> "id_author IN(".$groupes_in.") OR id_user=".$this->user["id"],
+                "order_by" => "date_invitation",
+                "order" => "DESC"
+              )
+            )
+          ) === false
+        ){
+          $env->erreur("Impossible de lire la liste des invitations");
+          return;
+        }
+      }
+      foreach($invitations["list"] as $id_invitation => $invitation){
+        if(!($user = $data->user_by_id($invitation["id_user"]))){
+          $env->erreur("impossible de lire les informations de l'utilisateur pour une invitation");
+          return;
+        }
+        $invitations["list"][$id_invitation]["user"] = $user;
+        if(!($source = $data->source($invitation["id_source"]))){
+          $env->erreur("impossible de lire les informations de la source pour une invitation");
+          return;
+        }
+        $invitations["list"][$id_invitation]["source"] = $source;
+      }
+      if(($groupes = $data->groupes()) === false){
+        $env->erreur("Impossible de lire la liste des groupes");
+        return;
+      }
+      $env->set_out("user", $this->user);
+      $env->set_out("groupes", $groupes);
+      $env->set_out("sources_access", $sources_access);
+      $env->set_out("invitations", $invitations);
+      $env->set_out("status", $this->status);
+    }
+
+    function source_groupes(){
+      $env = $this->env();
+      $data = $env->data();
+      if(!($source = $data->source($_GET[$env->param("id")], true))){
+        $env->erreur("Impossible de lire les informations de la source");
+        return;
+      }
+      $source["permissions"] = $data->source_permissions($source, $this->user["id"]);
+      if(!$source["permissions"]["admin"]){
+        $env->erreur("vous n'avez pas la permission d'editer les groupes de la source");
+        return;
+      }
+      if(($sources_access = $data->sources_access()) === false){
+        $env->erreur("Impossible de lire les types d'access");
+        return;
+      }
+      if(($groupes = $data->groupes()) === false){
+        $env->erreur("Impossible de lire la liste des groupes");
+        return;
+      }
+      if(($invitations = $data->list_sml_sources_invitations(array("index_name" => "id", "where"=> "id_source=".$source["id"]))) === false){
+        $env->erreur("Impossible de lire la liste des invitations pour cette source");
+        return;
+      }
+      foreach($invitations["list"] as $id_invitation => $invitation){
+        if(isset($groupes["list"][$invitation["id_author"]])){
+          $invitations["list"][$id_invitation]["author"] = $groupes["list"][$invitation["id_author"]];
+          unset($groupes["list"][$invitation["id_author"]]);
+          $groupes["total"]--;
+        }
+      }
+      foreach($source["groupes"] as $id_groupe => $groupe){
+        if(isset($groupes["list"][$id_groupe])){
+          unset($groupes["list"][$id_groupe]);
+          $groupes["total"]--;
+        }
+      }
+      $env->set_out("groupes", $groupes);
+      $env->set_out("sources_access", $sources_access);
+      $env->set_out("source", $source);
+      $env->set_out("invitations", $invitations);
+    }
+
+    function invite_groupe(){
+      $env = $this->env();
+      $data = $env->data();
+      if(!($source = $data->source($_GET[$env->param("id")], true))){
+        $env->erreur("Impossible de lire les informations de la source");
+        return;
+      }
+      $source["permissions"] = $data->source_permissions($source, $this->user["id"]);
+      if(!$source["permissions"]["admin"]){
+        $env->erreur("vous n'avez pas la permission d'editer les groupes de la source");
+        return;
+      }
+      if(($sources_access = $data->sources_access()) === false){
+        $env->erreur("Impossible de lire les types d'access");
+        return;
+      }
+      if(!($groupe = $data->groupe($_POST["id_groupe"]))){
+        $env->erreur("impossible de lire les informations du groupe");
+      }
+      if(!$_POST["id_sources_access"] || !isset($sources_access[$_POST["id_sources_access"]])){
+        $env->erreur("identifiant d'access de source incorrect");
+      }
+      if(
+        !$data->add_sml_sources_invitations(
+          array(
+            "id_user" => $this->user["id"],
+            "id_source" => $source["id"],
+            "id_author" => $groupe["id"],
+            "id_sources_access" => $_POST["id_sources_access"],
+            "date_invitation" => date("Y-m-d H:i:s")
+          )
+        )
+      ){
+        $env->erreur("Impossible d'ajouter l'invitation");
+        return;
+      }
+      $env->redirect(
+        $env->url("users/sources_invitations"),
+        "l'invitation a été ajoutée"
+      );
+    }
+
+    function annule_invitation_groupe(){
+      $env = $this->env();
+      $data = $env->data();
+      if(!($invitation = $data->get_sml_sources_invitations("id", $_GET[$env->param("id")]))){
+        $env->erreur("Impossible de lire les informations de l'invitation");
+        return;
+      }
+      if(!($morceau = $data->source($invitation["id_source"], true))){
+        $env->erreur("Impossible de lire les informations du morceau");
+        return;
+      }
+      $morceau["permissions"] = $data->source_permissions($morceau, $this->user["id"]);
+      if(!$morceau["permissions"]["admin"]){
+        $env->erreur("vous n'avez pas la permission d'editer les groupes du morceau");
+        return;
+      }
+      if(!$data->del_sml_sources_invitations("id", $invitation["id"])){
+        $env->erreur("Impossible d'annuler l'invitation");
+        return;
+      }
+      $env->redirect(
+        $env->url("users/sources_invitations"),
+        "l'invitation a été annulée"
+      );
+    }
+
+    function accepter_invitation_groupe(){
+      $env = $this->env();
+      $data = $env->data();
+      if(($groupes = $data->groupes($this->user["id"])) === false){
+        $env->erreur("Impossible de lire la liste des groupes");
+        return;
+      }
+      if(!($invitation = $data->get_sml_sources_invitations("id", $_GET[$env->param("id")]))){
+        $env->erreur("Impossible de lire les informations de l'invitation");
+        return;
+      }
+      if(!($source = $data->source($invitation["id_source"], true))){
+        $env->erreur("Impossible de lire les informations de la source pour cette invitation");
+        return;
+      }
+      if(!isset($groupes["list"][$invitation["id_author"]])){
+        $env->erreur("l'invitation s'adresse a un groupe qui n'appartient pas à votre utilisateur");
+        return;
+      }
+      $source["permissions"] = $data->source_permissions($source, $this->user["id"]);
+      if($source["permissions"]["contributeur"]){
+        $env->erreur("vous avez déjà accès à cette source");
+        return;
+      }
+      if(!$data->del_sml_sources_invitations("id", $invitation["id"])){
+        $env->erreur("Impossible d'effacer l'invitation");
+        return;
+      }
+      if(!$data->add_source_groupe($source["id"], $invitation["id_author"], $invitation["id_sources_access"])){
+        $env->erreur("Impossible de vous ajouter des droits sur la source");
+        return;
+      }
+      $env->redirect(
+        $env->url("users/sources_invitations"),
+        "l'invitation a été acceptée"
+      );
+    }
+
+    function refuser_invitation_groupe(){
+      $env = $this->env();
+      $data = $env->data();
+      if(($groupes = $data->groupes($this->user["id"])) === false){
+        $env->erreur("Impossible de lire la liste des groupes");
+        return;
+      }
+      if(!($invitation = $data->get_sml_sources_invitations("id", $_GET[$env->param("id")]))){
+        $env->erreur("Impossible de lire les informations de l'invitation");
+        return;
+      }
+      if(!($source = $data->source($invitation["id_source"], true))){
+        $env->erreur("Impossible de lire les informations de la source pour cette invitation");
+        return;
+      }
+      if(!isset($groupes["list"][$invitation["id_author"]])){
+        $env->erreur("l'invitation s'adresse a un groupe qui n'appartient pas à votre utilisateur");
+        return;
+      }
+      if(!$data->del_sml_sources_invitations("id", $invitation["id"])){
+        $env->erreur("Impossible d'effacer l'invitation");
+        return;
+      }
+      $env->redirect(
+        $env->url("users/sources_invitations"),
+        "l'invitation a été refusée"
+      );
+    }
+
+    function del_groupe(){
+      $env = $this->env();
+      $data = $env->data();
+      if(!($source = $data->source($_GET[$env->param("id")], true))){
+        $env->erreur("Impossible de lire les informations de la source");
+        return;
+      }
+      $source["permissions"] = $data->source_permissions($source, $this->user["id"]);
+      if(!$source["permissions"]["admin"]){
+        $env->erreur("vous n'avez pas la permission d'editer les groupes de la source");
+        return;
+      }
+      $source_class = $this->status[$source["status"]]["nom"];
+      if($source_class == "album"){
+        $redirect = $env->url("users/albums/groupes", array("id" => $source["id"]));
+      }
+      elseif($source_class == "morceau"){
+        $redirect = $env->url("users/morceaux/groupes", array("id" => $source["id"]));
+      }
+      elseif($source_class == "piste"){
+        $redirect = $env->url("users/pistes/groupes", array("id" => $source["id"]));
+      }
+      else{
+        $env->erreur("type de source inconnu");
+        return;
+      }
+      if(!($groupe = $data->groupe($_GET[$env->param("groupe")]))){
+        $env->erreur("impossible de lire les informations du groupe");
+        return;
+      }
+      $ID_UNIQUE_ADMIN = false;
+      foreach($source["groupes"] as $id_groupe => $source_groupe){
+        if($source_groupe["id_groupe_status"] == $data->id_groupe_status_admin()){
+          if(!$ID_UNIQUE_ADMIN) $ID_UNIQUE_ADMIN = $id_groupe;
+          else{
+            $ID_UNIQUE_ADMIN = true;
+            break;
+          }
+        }
+      }
+      if(!$ID_UNIQUE_ADMIN){
+        $env->erreur("aucun administrateur sur cette source");
+        return;
+      }
+      if($ID_UNIQUE_ADMIN !== true){
+        if($groupe["id"] == $ID_UNIQUE_ADMIN){
+          $env->erreur("vous ne pouvez pas enlever l'unique administrateur");
+          return;
+        }
+      }
+      if(!$data->del_source_groupe($source["id"], $groupe["id"])){
+        $env->erreur("Impossible d'enlever le groupe");
+        return;
+      }
+      $env->redirect(
+        $redirect,
+        "le groupe a été enlevé"
+      );
+    }
+
+  }
+
+?>
\ No newline at end of file
diff --git a/app/out/default/css/actions/users_sources_invitations.css b/app/out/default/css/actions/users_sources_invitations.css
new file mode 100644 (file)
index 0000000..24a7ae0
--- /dev/null
@@ -0,0 +1 @@
+@import url("../sourceml_accounts.css");
\ No newline at end of file
diff --git a/app/out/default/views/users/albums/groupes.php b/app/out/default/views/users/albums/groupes.php
new file mode 100644 (file)
index 0000000..0d06ff5
--- /dev/null
@@ -0,0 +1,8 @@
+<h2>Les groupes pour l'album <?php echo $this->out["source"]["titre"]; ?></h2>
+
+<ul class="buttons">
+  <li><a href="<?php echo $this->url("users/albums/edit", array("id" => $this->out["source"]["id"])) ?>">Retour à l'album</a></li>
+  <li><a href="<?php echo $this->url("users/albums") ?>">Retour &agrave; la liste des albums</a></li>
+</ul>
+
+<?php require $this->out_file("views/users/source_groupes_form.php"); ?>
diff --git a/app/out/default/views/users/pistes/groupes.php b/app/out/default/views/users/pistes/groupes.php
new file mode 100644 (file)
index 0000000..4fa2936
--- /dev/null
@@ -0,0 +1,8 @@
+<h2>Les groupes pour la piste <?php echo $this->out["source"]["titre"]; ?></h2>
+
+<ul class="buttons">
+  <li><a href="<?php echo $this->url("users/pistes/edit", array("id" => $this->out["source"]["id"])) ?>">Retour à la piste</a></li>
+  <li><a href="<?php echo $this->url("users/pistes") ?>">Retour &agrave; la liste des pistes</a></li>
+</ul>
+
+<?php require $this->out_file("views/users/source_groupes_form.php"); ?>
diff --git a/app/out/default/views/users/source_groupes_form.php b/app/out/default/views/users/source_groupes_form.php
new file mode 100644 (file)
index 0000000..ac773c1
--- /dev/null
@@ -0,0 +1,94 @@
+<table class="admin">
+  <tr>
+    <th>groupe</th>
+    <th>accès</th>
+    <th align="center">enlever</th>
+  </tr>
+  <?php foreach($this->out["source"]["groupes"] as $id_groupe => $groupe) : ?>
+  <tr class="hl">
+    <td>
+      <?php echo $groupe["nom"]; ?>
+    </td>
+    <td>
+      <?php echo $this->out["sources_access"][$groupe["id_groupe_status"]]["intitule"]; ?>
+    </td>
+    <td class="action">
+    <a href="<?php echo $this->url("users/sources_invitations/del_groupe", array("id" => $this->out["source"]["id"], "groupe" => $id_groupe)) ?>"
+       class="admin_link"
+       title="enlever ce groupe"><img src="<?php echo $this->out_url("icons/del.gif") ?>"
+       onclick="return confirm('enlever ce groupe ?')"/></a>
+    </td>
+  </tr>
+  <?php endforeach; ?>
+</table>
+
+<?php if($this->out["invitations"]["total"] > 0) : ?>
+<h3>Vous avez invité :</h3>
+<table class="admin">
+  <tr>
+    <th>groupe</th>
+    <th>accès</th>
+    <th align="center">action</th>
+  </tr>
+  <?php foreach($this->out["invitations"]["list"] as $id_invitation => $invitation) : ?>
+  <tr class="hl">
+    <td>
+      <?php echo $invitation["author"]["nom"]; ?>
+    </td>
+    <td>
+      <?php echo $this->out["sources_access"][$invitation["id_sources_access"]]["intitule"]; ?>
+    </td>
+    <td class="action">
+    <a href="<?php echo $this->url("users/sources_invitations/annule_invitation_groupe", array("id" => $id_invitation)) ?>"
+       class="admin_link"
+       title="annuler cette invitation"
+       onclick="return confirm('annuler cette invitation ?')"/>Annuler</a>
+    </td>
+  </tr>
+  <?php endforeach; ?>
+</table>
+<?php endif; ?>
+
+<?php if($this->out["groupes"]["total"] > 0) : ?>
+
+<h3>Inviter un groupe</h3>
+
+<form action="<?php echo $this->url("users/sources_invitations/invite_groupe", array("id" => $this->out["source"]["id"])) ?>" method="post">
+  <fieldset>
+    <ul class="form">
+      <li>
+        <label for="id_groupe">Inviter</label>
+        <div class="form_input">
+          <select name="id_groupe" id="id_groupe">
+            <?php foreach($this->out["groupes"]["list"] as $id_groupe => $groupe) : ?>
+            <option value="<?php echo $id_groupe ?>"><?php echo $groupe["nom"] ?></option>
+            <?php endforeach; ?>
+          </select>
+        </div>
+      </li>
+      <li>
+        <label for="source_access_<?php echo $id_groupe; ?>">A particper à</label>
+        <div class="form_input">
+          <strong><?php echo $this->out["source"]["titre"]; ?></strong>
+        </div>
+      </li>
+      <li>
+        <label for="source_access_<?php echo $id_groupe; ?>">En tant que</label>
+        <div class="form_input">
+          <select name="id_sources_access" id="id_sources_access">
+          <?php foreach($this->out["sources_access"] as $id_sources_access => $sources_access) : ?>
+            <option value="<?php echo $id_sources_access ?>"><?php echo $sources_access["intitule"] ?></option>
+          <?php endforeach; ?>
+          </select>
+        </div>
+      </li>  
+      <li class="buttons">
+        <div class="form_buttons">
+          <input type="submit" value="Inviter" />
+        </div>
+      </li>  
+    </ul>
+  </fieldset>
+</form>
+
+<?php endif; ?>
diff --git a/app/out/default/views/users/sources_invitations/list.php b/app/out/default/views/users/sources_invitations/list.php
new file mode 100644 (file)
index 0000000..c4574c0
--- /dev/null
@@ -0,0 +1,78 @@
+<h2>Invitations en cours</h2>
+
+<?php if($this->out["invitations"]["total"] > 0) : ?>
+<ul>
+  <?php
+
+    foreach($this->out["invitations"]["list"] as $id_invitation => $invitation) :
+    $source_type = $this->out["status"][$invitation["source"]["id_class"]]["nom"];
+    $source_url = "";
+    if($source_type == "album"){
+      $source_type = "à l'album";
+      $source_url = $this->url("sources/album/view", array("album" => $invitation["id_source"]));
+    }
+    elseif($source_type == "morceau"){
+      $source_type = "au morceau";
+      $source_url = $this->url("sources/morceau/view", array("morceau" => $invitation["id_source"]));
+    }
+    elseif($source_type == "piste"){
+      $source_type = "à la piste";
+      $source_url = $this->url("sources/piste/view", array("piste" => $invitation["id_source"]));
+    }
+    else continue;
+
+
+  ?>
+  <li class="invitation">
+    <div class="invitation_title">
+      <strong><?php echo $invitation["user"]["login"]; ?></strong>
+      invite <strong><?php echo $this->out["groupes"]["list"][$invitation["id_author"]]["nom"]; ?></strong>
+    </div>
+    <div class="invitation_date"><?php echo $invitation["date_invitation"]; ?></div>
+    <div class="invitation_content">
+      à participer <?php echo $source_type; ?>
+      <a href="<?php echo $source_url; ?>"><strong><?php echo $invitation["source"]["titre"]; ?></strong></a><br />
+      en tant que
+      <strong><?php echo $this->out["sources_access"][$invitation["id_sources_access"]]["intitule"]; ?></strong>
+    </div>
+    <ul class="buttons">
+      <?php if($this->out["user"]["id"] == $invitation["id_user"]) : ?>
+      <li>
+        <a href="<?php echo $this->url("users/sources_invitations/annule_invitation_groupe", array("id" => $id_invitation)) ?>"
+           class="admin_link"
+           title="annuler cette invitation"
+           onclick="return confirm('annuler cette invitation ?')"/>Annuler l'invitation</a>
+      </li>
+      <?php else : ?>
+      <li>
+        <a href="<?php echo $this->url("users/sources_invitations/accepter_invitation_groupe", array("id" => $id_invitation)) ?>"
+           class="admin_link"
+           title="accepter cette invitation"
+           onclick="return confirm('accepter cette invitation ?')"/>Accepter</a>
+      </li>
+      <li>
+        <a href="<?php echo $this->url("users/sources_invitations/refuser_invitation_groupe", array("id" => $id_invitation)) ?>"
+           class="admin_link"
+           title="refuser cette invitation"
+           onclick="return confirm('refuser cette invitation ?')"/>Refuser</a>
+      </li>
+      <?php endif; ?>
+    </ul>
+
+
+    </td>
+    <td>
+      
+    </td>
+    <td class="action">
+
+    </td>
+    <td class="action">
+
+    </td>
+  </li>
+  <?php endforeach; ?>
+</ul>
+<?php else : ?>
+<p>Aucune invitation</p>
+<?php endif; ?>