3 class sml_data_source_groupes extends mw_data{
5 public function init_groupe_status(){
9 public function source_groupes($id_source){
11 $sgbd = $this->sgbd();
14 "SELECT #--sml_authors.*"
15 .", #--sml_sources_authors.id_sources_access as id_groupe_status"
16 ." FROM #--sml_authors, #--sml_sources_authors"
17 ." WHERE #--sml_sources_authors.id_author=#--sml_authors.id"
18 ." AND #--sml_sources_authors.id_source=".$this->eq($id_source)
20 $rst = $sgbd->query($sql);
22 while($v_rst = $sgbd->fetch_assoc($rst)){
23 $v_rst["image_uri"] = (
25 $env->path("content")."uploads/".$v_rst["image"]
28 $groupes[$v_rst["id"]] = $v_rst;
30 $sgbd->free_result($rst);
38 public function groupes_sources($params){
39 if(!isset($params["groupes"])) return false;
40 if(!isset($params["id_source_access"])) return false;
41 $satisfy_all_groupes_access = true;
42 if(isset($params["satisfy_all_groupes_access"])){
43 $satisfy_all_groupes_access = $params["satisfy_all_groupes_access"] ? true : false;
45 $source_access_ids = "";
46 if($params["id_source_access"] == $this->id_groupe_status_contributeur()){
48 $this->id_groupe_status_contributeur()
49 .", ".$this->id_groupe_status_editeur()
50 .", ".$this->id_groupe_status_admin();
52 elseif($params["id_source_access"] == $this->id_groupe_status_editeur()){
54 $this->id_groupe_status_editeur()
55 .", ".$this->id_groupe_status_admin();
57 elseif($params["id_source_access"] == $this->id_groupe_status_admin()){
59 $this->id_groupe_status_admin();
61 if(!$source_access_ids) return false;
63 if(!($groupes = $params["groupes"])) return $sources;
65 foreach($groupes as $i => $groupe) $author_ids .= ($author_ids ? ", " : "").$groupe["id"];
66 $sgbd = $this->sgbd();
69 "SELECT #--sml_sources.*, #--sml_sources_authors.id_author"
70 ." FROM #--sml_sources, #--sml_sources_authors"
71 ." WHERE #--sml_sources.id=#--sml_sources_authors.id_source"
72 ." AND #--sml_sources_authors.id_sources_access IN(".$source_access_ids.")"
73 ." AND #--sml_sources_authors.id_author IN(".$author_ids.")";
74 if(isset($params["id_class"])){
75 $sql .= " AND #--sml_sources.id_class=".$this->eq($params["id_class"]);
77 $rst = $sgbd->query($sql);
78 while($v_rst = $sgbd->fetch_assoc($rst)){
79 if(!isset($sources[$v_rst["id"]])){
80 $sources[$v_rst["id"]] = $v_rst;
81 $sources[$v_rst["id"]]["authors"] = array();
83 $sources[$v_rst["id"]]["authors"][] = $v_rst["id_author"];
85 $sgbd->free_result($rst);
86 foreach($sources as $id_source => $source){
87 if($satisfy_all_groupes_access){
88 if(count($source["authors"]) < count($groupes)){
89 unset($sources[$id_source]);
93 if(!($sources[$id_source] = $this->load_source($source))) return false;
102 public function source_has_groupe($id_source, $id_groupe){
103 $sgbd = $this->sgbd();
107 "SELECT count(*) as n FROM #--sml_sources_authors"
108 ." WHERE id_source=".$this->eq($id_source)
109 ." AND id_author=".$this->eq($id_groupe);
110 $rst = $sgbd->query($sql);
111 if($v_rst = $sgbd->fetch_assoc($rst)) $HAS_THIS_GROUP = $v_rst["n"];
112 $sgbd->free_result($rst);
115 $HAS_THIS_GROUP = false;
117 return $HAS_THIS_GROUP;
120 public function add_source_groupe($id_source, $id_groupe, $id_groupe_status){
121 $sgbd = $this->sgbd();
124 "INSERT INTO #--sml_sources_authors(id_source, id_author, id_sources_access) VALUES"
125 ."( ".$this->eq($id_source)
126 .", ".$this->eq($id_groupe)
127 .", ".$this->eq($id_groupe_status)
137 public function set_source_groupe($id, $id_groupe_status){
138 if(($groupe = $this->groupe($id)) !== false){
139 $sgbd = $this->sgbd();
142 "UPDATE #--sml_sources_authors SET"
143 ." id_sources_access=".$this->eq($id_groupe_status)
155 public function del_source_groupes($id_source){
156 $sgbd = $this->sgbd();
158 $sql = "DELETE FROM #--sml_sources_authors WHERE id_source=".$this->eq($id_source);
167 public function del_source_groupe($id_source, $id_author){
168 $sgbd = $this->sgbd();
171 "DELETE FROM #--sml_sources_authors"
172 ." WHERE id_source=".$this->eq($id_source)
173 ." AND id_author=".$this->eq($id_author);
182 // --------------------------------------------------------------------
184 public function sources_access(){
185 $sgbd = $this->sgbd();
186 $sources_access = array();
188 $sql = "SELECT * FROM #--sml_sources_access";
189 $rst = $sgbd->query($sql);
190 while($v_rst = $sgbd->fetch_assoc($rst)) $sources_access[$v_rst["id"]] = $v_rst;
191 $sgbd->free_result($rst);
194 $sources_access = false;
196 return $sources_access;
199 public function id_groupe_status_admin(){
203 public function id_groupe_status_editeur(){
207 public function id_groupe_status_contributeur(){
211 public function get_admin_groupe($groupes){
213 if(is_array($groupes)) foreach($groupes as $source_groupe){
214 if($source_groupe["id_groupe_status"] == $this->id_groupe_status_admin()){
215 $groupe = $source_groupe;
222 public function get_editor_groupes($groupes){
223 $editor_groupes = array();
224 if(is_array($groupes)) foreach($groupes as $source_groupe){
226 $source_groupe["id_groupe_status"] == $this->id_groupe_status_admin()
227 || $source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur()
229 $editor_groupes[] = $source_groupe;
232 return $editor_groupes;
235 public function source_permissions($source, $id_user){
236 $permissions = array(
239 "contributeur" => false
241 foreach($source["groupes"] as $id_groupe => $source_groupe){
242 if($source_groupe["id_user"] == $id_user){
243 if($source_groupe["id_groupe_status"] == $this->id_groupe_status_admin()){
244 $permissions["admin"] = true;
245 $permissions["editeur"] = true;
246 $permissions["contributeur"] = true;
248 elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur()){
249 $permissions["editeur"] = true;
250 $permissions["contributeur"] = true;
252 elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_contributeur()){
253 $permissions["contributeur"] = true;
260 // --------------------------------------------------------------------
262 public function sources_invitations($groupes, $id_user){
264 foreach($groupes as $id_groupe => $groupe) $groupes_in .= ($groupes_in ? "," : "").$id_groupe;
265 return $this->list_sml_sources_invitations(
267 "index_name" => "id",
268 "where"=> ($groupes_in ? "id_author IN(".$groupes_in.") OR " : "")."id_user=".$id_user,
269 "order_by" => "date_invitation",