3 class sml_data_source_groupes extends mw_data
6 function init_groupe_status(){
10 function source_groupes($id_source)
11 { $env = $this->env();
12 $sgbd = $this->sgbd();
15 "SELECT #--sml_authors.*"
16 .", #--sml_sources_authors.id_sources_access as id_groupe_status"
17 ." FROM #--sml_authors, #--sml_sources_authors"
18 ." WHERE #--sml_sources_authors.id_author=#--sml_authors.id"
19 ." AND #--sml_sources_authors.id_source=".$this->eq($id_source)
21 $rst = $sgbd->query($sql);
23 while($v_rst = $sgbd->fetch_assoc($rst))
24 { $v_rst["image_uri"] =
26 $env->path("content")."uploads/".$v_rst["image"]
29 $groupes[$v_rst["id"]] = $v_rst;
31 $sgbd->free_result($rst);
33 catch(Exception $e) { return false; }
37 function groupes_sources($params){
38 if(!isset($params["groupes"])) return false;
39 if(!isset($params["id_source_access"])) return false;
40 $satisfy_all_groupes_access = true;
41 if(isset($params["satisfy_all_groupes_access"])){
42 $satisfy_all_groupes_access = $params["satisfy_all_groupes_access"] ? true : false;
44 $source_access_ids = "";
45 if($params["id_source_access"] == $this->id_groupe_status_contributeur()){
47 $this->id_groupe_status_contributeur()
48 .", ".$this->id_groupe_status_editeur()
49 .", ".$this->id_groupe_status_admin();
51 elseif($params["id_source_access"] == $this->id_groupe_status_editeur()){
53 $this->id_groupe_status_editeur()
54 .", ".$this->id_groupe_status_admin();
56 elseif($params["id_source_access"] == $this->id_groupe_status_admin()){
58 $this->id_groupe_status_admin();
60 if(!$source_access_ids) return false;
62 if(!($groupes = $params["groupes"])) return $sources;
64 foreach($groupes as $i => $groupe) $author_ids .= ($author_ids ? ", " : "").$groupe["id"];
65 $sgbd = $this->sgbd();
68 "SELECT #--sml_sources.*, #--sml_sources_authors.id_author"
69 ." FROM #--sml_sources, #--sml_sources_authors"
70 ." WHERE #--sml_sources.id=#--sml_sources_authors.id_source"
71 ." AND #--sml_sources_authors.id_sources_access IN(".$source_access_ids.")"
72 ." AND #--sml_sources_authors.id_author IN(".$author_ids.")";
73 if(isset($params["id_class"])){
74 $sql .= " AND #--sml_sources.id_class=".$this->eq($params["id_class"]);
76 $rst = $sgbd->query($sql);
77 while($v_rst = $sgbd->fetch_assoc($rst)){
78 if(!isset($sources[$v_rst["id"]])){
79 $sources[$v_rst["id"]] = $v_rst;
80 $sources[$v_rst["id"]]["authors"] = array();
82 $sources[$v_rst["id"]]["authors"][] = $v_rst["id_author"];
84 $sgbd->free_result($rst);
85 foreach($sources as $id_source => $source){
86 if($satisfy_all_groupes_access){
87 if(count($source["authors"]) < count($groupes)){
88 unset($sources[$id_source]);
92 if(!($sources[$id_source] = $this->load_source($source))) return false;
95 catch(Exception $e) { $sources = false; }
99 function source_has_groupe($id_source, $id_groupe){
100 $sgbd = $this->sgbd();
104 "SELECT count(*) as n FROM #--sml_sources_authors"
105 ." WHERE id_source=".$this->eq($id_source)
106 ." AND id_author=".$this->eq($id_groupe);
107 $rst = $sgbd->query($sql);
108 if($v_rst = $sgbd->fetch_assoc($rst)) $HAS_THIS_GROUP = $v_rst["n"];
109 $sgbd->free_result($rst);
111 catch(Exception $e) { $HAS_THIS_GROUP = false; }
112 return $HAS_THIS_GROUP;
115 function add_source_groupe($id_source, $id_groupe, $id_groupe_status)
116 { $sgbd = $this->sgbd();
119 "INSERT INTO #--sml_sources_authors(id_source, id_author, id_sources_access) VALUES"
120 ."( ".$this->eq($id_source)
121 .", ".$this->eq($id_groupe)
122 .", ".$this->eq($id_groupe_status)
126 catch(Exception $e) { return false; }
130 function set_source_groupe($id, $id_groupe_status)
131 { if(($groupe = $this->groupe($id)) !== false)
132 { $sgbd = $this->sgbd();
135 "UPDATE #--sml_sources_authors SET"
136 ." id_sources_access=".$this->eq($id_groupe_status)
140 catch(Exception $e) { return false; }
146 function del_source_groupes($id_source)
147 { $sgbd = $this->sgbd();
149 $sql = "DELETE FROM #--sml_sources_authors WHERE id_source=".$this->eq($id_source);
152 catch(Exception $e) { return false; }
156 function del_source_groupe($id_source, $id_author){
157 $sgbd = $this->sgbd();
160 "DELETE FROM #--sml_sources_authors"
161 ." WHERE id_source=".$this->eq($id_source)
162 ." AND id_author=".$this->eq($id_author);
165 catch(Exception $e) { return false; }
169 // --------------------------------------------------------------------
171 function sources_access(){
172 $sgbd = $this->sgbd();
173 $sources_access = array();
175 $sql = "SELECT * FROM #--sml_sources_access";
176 $rst = $sgbd->query($sql);
177 while($v_rst = $sgbd->fetch_assoc($rst)) $sources_access[$v_rst["id"]] = $v_rst;
178 $sgbd->free_result($rst);
180 catch(Exception $e) { $sources_access = false; }
181 return $sources_access;
184 function id_groupe_status_admin() { return 1; }
185 function id_groupe_status_editeur() { return 2; }
186 function id_groupe_status_contributeur() { return 3; }
188 function get_admin_groupe($groupes)
190 if(is_array($groupes)) foreach($groupes as $source_groupe)
191 { if($source_groupe["id_groupe_status"] == $this->id_groupe_status_admin())
192 { $groupe = $source_groupe;
199 function get_editor_groupes($groupes){
200 $editor_groupes = array();
201 if(is_array($groupes)) foreach($groupes as $source_groupe){
203 $source_groupe["id_groupe_status"] == $this->id_groupe_status_admin()
204 || $source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur()
206 $editor_groupes[] = $source_groupe;
209 return $editor_groupes;
212 function source_permissions($source, $id_user)
213 { $permissions = array
216 "contributeur" => false
218 foreach($source["groupes"] as $id_groupe => $source_groupe)
219 { if($source_groupe["id_user"] == $id_user)
220 { if($source_groupe["id_groupe_status"] == $this->id_groupe_status_admin())
221 { $permissions["admin"] = true;
222 $permissions["editeur"] = true;
223 $permissions["contributeur"] = true;
225 elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur())
226 { $permissions["editeur"] = true;
227 $permissions["contributeur"] = true;
229 elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_contributeur())
230 { $permissions["contributeur"] = true;
237 // --------------------------------------------------------------------
239 function sources_invitations($groupes, $id_user){
241 foreach($groupes as $id_groupe => $groupe) $groupes_in .= ($groupes_in ? "," : "").$id_groupe;
242 return $this->list_sml_sources_invitations(
244 "index_name" => "id",
245 "where"=> ($groupes_in ? "id_author IN(".$groupes_in.") OR " : "")."id_user=".$id_user,
246 "order_by" => "date_invitation",