plusieurs auteurs pour les sources
[mw_sourceml] / app / data / modules / sql / sml_data_source_groupes.php
index de997f9..44dec36 100644 (file)
@@ -16,7 +16,8 @@
          .", #--sml_sources_authors.id_sources_access as id_groupe_status"
         ." FROM #--sml_authors, #--sml_sources_authors"
         ." WHERE #--sml_sources_authors.id_author=#--sml_authors.id"
-        ." AND #--sml_sources_authors.id_source=".$this->eq($id_source);
+        ." AND #--sml_sources_authors.id_source=".$this->eq($id_source)
+        ." ORDER BY nom";
         $rst = $sgbd->query($sql);
         $groupes = array();
         while($v_rst = $sgbd->fetch_assoc($rst))
       return $groupes;
     }
 
+    function groupes_sources($params){
+      if(!isset($params["groupes"])) return false;
+      if(!isset($params["id_source_access"])) return false;
+      $satisfy_all_groupes_access = true;
+      if(isset($params["satisfy_all_groupes_access"])){
+        $satisfy_all_groupes_access = $params["satisfy_all_groupes_access"] ? true : false;
+      }
+      $source_access_ids = "";
+      if($params["id_source_access"] == $this->id_groupe_status_contributeur()){
+        $source_access_ids =
+         $this->id_groupe_status_contributeur()
+        .", ".$this->id_groupe_status_editeur()
+        .", ".$this->id_groupe_status_admin();
+      }
+      elseif($params["id_source_access"] == $this->id_groupe_status_editeur()){
+        $source_access_ids =
+         $this->id_groupe_status_editeur()
+        .", ".$this->id_groupe_status_admin();
+      }
+      elseif($params["id_source_access"] == $this->id_groupe_status_admin()){
+        $source_access_ids =
+         $this->id_groupe_status_admin();
+      }
+      if(!$source_access_ids) return false;
+      $sources = array();
+      if(!($groupes = $params["groupes"])) return $sources;
+      $author_ids = "";
+      foreach($groupes as $i => $groupe) $author_ids .= ($author_ids ? ", " : "").$groupe["id"];
+      $sgbd = $this->sgbd();
+      try{
+        $sql =
+         "SELECT #--sml_sources.*, #--sml_sources_authors.id_author"
+        ." FROM #--sml_sources, #--sml_sources_authors"
+        ." WHERE #--sml_sources.id=#--sml_sources_authors.id_source"
+        ." AND #--sml_sources_authors.id_sources_access IN(".$source_access_ids.")"
+        ." AND #--sml_sources_authors.id_author IN(".$author_ids.")";
+        if(isset($params["id_class"])){
+          $sql .= " AND #--sml_sources.id_class=".$this->eq($params["id_class"]);
+        }
+        $rst = $sgbd->query($sql);
+        while($v_rst = $sgbd->fetch_assoc($rst)){
+          if(!isset($sources[$v_rst["id"]])){
+            $sources[$v_rst["id"]] = $v_rst;
+            $sources[$v_rst["id"]]["authors"] = array();
+          }
+          $sources[$v_rst["id"]]["authors"][] = $v_rst["id_author"];
+        }
+        $sgbd->free_result($rst);
+        foreach($sources as $id_source => $source){
+          if($satisfy_all_groupes_access){
+            if(count($source["authors"]) < count($groupes)){
+              unset($sources[$id_source]);
+              continue;
+            }
+          }
+          if(!($sources[$id_source] = $this->load_source($source))) return false;
+        }
+      }
+      catch(Exception $e) { $sources = false; }
+      return $sources;
+    }
+
     function add_source_groupe($id_source, $id_groupe, $id_groupe_status)
     { $sgbd = $this->sgbd();
       try{
 
 // --------------------------------------------------------------------
 
+    function sources_access(){
+      $sgbd = $this->sgbd();
+      $sources_access = array();
+      try{
+        $sql = "SELECT * FROM #--sml_sources_access";
+        $rst = $sgbd->query($sql);
+        while($v_rst = $sgbd->fetch_assoc($rst)) $sources_access[$v_rst["id"]] = $v_rst;
+        $sgbd->free_result($rst);
+      }
+      catch(Exception $e) { $sources_access = false; }
+      return $sources_access;
+    }
+
     function id_groupe_status_admin()        { return 1; }
     function id_groupe_status_editeur()      { return 2; }
     function id_groupe_status_contributeur() { return 3; }
       return $groupe;
     }
 
+    function get_editor_groupes($groupes){
+      $editor_groupes = array();
+      if(is_array($groupes)) foreach($groupes as $source_groupe)
+      { if(
+              $source_groupe["id_groupe_status"] == $this->id_groupe_status_admin()
+          ||  $source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur()
+        ){
+          $editor_groupes[] = $source_groupe;
+        }
+      }
+      return $editor_groupes;
+    }
+
     function source_permissions($source, $id_user)
     { $permissions = array
       ( "admin" => false,