env(); $sgbd = $this->sgbd(); try{ $sql = "SELECT #--sml_authors.*" .", #--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) ." ORDER BY nom"; $rst = $sgbd->query($sql); $groupes = array(); while($v_rst = $sgbd->fetch_assoc($rst)) { $v_rst["image_uri"] = ( $v_rst["image"] ? $env->path("content")."uploads/".$v_rst["image"] : "" ); $groupes[$v_rst["id"]] = $v_rst; } $sgbd->free_result($rst); } catch(Exception $e) { return false; } 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{ $sql = "INSERT INTO #--sml_sources_authors(id_source, id_author, id_sources_access) VALUES" ."( ".$this->eq($id_source) .", ".$this->eq($id_groupe) .", ".$this->eq($id_groupe_status) .")"; $sgbd->query($sql); } catch(Exception $e) { return false; } return true; } function set_source_groupe($id, $id_groupe_status) { if(($groupe = $this->groupe($id)) !== false) { $sgbd = $this->sgbd(); try{ $sql = "UPDATE #--sml_sources_authors SET" ." id_sources_access=".$this->eq($id_groupe_status) ." WHERE id=".$id; $sgbd->query($sql); } catch(Exception $e) { return false; } return true; } return false; } function del_source_groupes($id_source) { $sgbd = $this->sgbd(); try{ $sql = "DELETE FROM #--sml_sources_authors WHERE id_source=".$this->eq($id_source); $sgbd->query($sql); } catch(Exception $e) { return false; } return true; } function del_source_groupe($id_source, $id_author){ $sgbd = $this->sgbd(); try{ $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; } return true; } // -------------------------------------------------------------------- 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; } function get_admin_groupe($groupes) { $groupe = array(); if(is_array($groupes)) foreach($groupes as $source_groupe) { if($source_groupe["id_groupe_status"] == $this->id_groupe_status_admin()) { $groupe = $source_groupe; break; } } 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, "editeur" => false, "contributeur" => false ); foreach($source["groupes"] as $id_groupe => $source_groupe) { if($source_groupe["id_user"] == $id_user) { if($source_groupe["id_groupe_status"] == $this->id_groupe_status_admin()) { $permissions["admin"] = true; $permissions["editeur"] = true; $permissions["contributeur"] = true; } elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur()) { $permissions["editeur"] = true; $permissions["contributeur"] = true; } elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_contributeur()) { $permissions["contributeur"] = true; } } } return $permissions; } } ?>