X-Git-Url: http://git.dj3c1t.com/?a=blobdiff_plain;f=app%2Fdata%2Fmodules%2Fsql%2Fsml_data_source_groupes.php;h=45d07b15a736044ed4bb996780845d2b6340e507;hb=ce50b139cfeb948f0a773ccd7bd7d6a800b06692;hp=de997f9056c573f80c6cdf63d6b65ec935298bab;hpb=9391cb9ccb3dd2884e7be2f15aa729733288f1e5;p=mw_sourceml diff --git a/app/data/modules/sql/sml_data_source_groupes.php b/app/data/modules/sql/sml_data_source_groupes.php index de997f9..45d07b1 100644 --- a/app/data/modules/sql/sml_data_source_groupes.php +++ b/app/data/modules/sql/sml_data_source_groupes.php @@ -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)) @@ -33,6 +34,84 @@ 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 source_has_groupe($id_source, $id_groupe){ + $sgbd = $this->sgbd(); + $HAS_THIS_GROUP = 0; + try{ + $sql = + "SELECT count(*) as n FROM #--sml_sources_authors" + ." WHERE id_source=".$this->eq($id_source) + ." AND id_author=".$this->eq($id_groupe); + $rst = $sgbd->query($sql); + if($v_rst = $sgbd->fetch_assoc($rst)) $HAS_THIS_GROUP = $v_rst["n"]; + $sgbd->free_result($rst); + } + catch(Exception $e) { $HAS_THIS_GROUP = false; } + return $HAS_THIS_GROUP; + } + function add_source_groupe($id_source, $id_groupe, $id_groupe_status) { $sgbd = $this->sgbd(); try{ @@ -74,10 +153,13 @@ return true; } - function del_source_groupe($id) - { $sgbd = $this->sgbd(); + function del_source_groupe($id_source, $id_author){ + $sgbd = $this->sgbd(); try{ - $sql = "DELETE FROM #--sml_sources_authors WHERE id=".$this->eq($id); + $sql = + "DELETE FROM #--sml_sources_authors" + ." WHERE id_source=".$this->eq($id_source) + ." AND id_author=".$this->eq($id_author); $sgbd->query($sql); } catch(Exception $e) { return false; } @@ -86,6 +168,19 @@ // -------------------------------------------------------------------- + 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; } @@ -101,6 +196,19 @@ 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,