3 class sml_data_source_groupes extends mw_data{
5 function init_groupe_status(){
9 function source_groupes($id_source)
10 { $env = $this->env();
11 $sgbd = $this->sgbd();
13 $groupes_status = array();
14 if($rst = $sgbd->open_data("sml_sources_authors"))
15 { while($v_rst = $sgbd->fetch_data($rst))
16 { if(isset($v_rst) && isset($v_rst["id_author"]) && isset($v_rst["id_source"]) && isset($v_rst["id_sources_access"]))
17 { if($v_rst["id_source"] == $id_source) $groupes_status[$v_rst["id_author"]] = $v_rst["id_sources_access"];
20 { $groupes_status = false;
24 $sgbd->close_data($rst);
26 else $groupes_status = false;
27 if($groupes_status === false) return false;
28 if($rst = $sgbd->open_data("sml_authors"))
29 { while($v_rst = $sgbd->fetch_data($rst))
30 { if(isset($v_rst) && isset($v_rst["id"]))
31 { if(isset($groupes_status[$v_rst["id"]]))
32 { $groupes[$v_rst["id"]] = $v_rst;
33 $groupes[$v_rst["id"]]["id_groupe_status"] = $groupes_status[$v_rst["id"]];
34 $groupes[$v_rst["id"]]["image_uri"] =
36 $env->path("content")."uploads/".$v_rst["image"]
46 $sgbd->close_data($rst);
48 else $groupes = false;
52 function groupes_sources($params){
53 if(!isset($params["groupes"])) return false;
54 if(!isset($params["id_source_access"])) return false;
55 $satisfy_all_groupes_access = true;
56 if(isset($params["satisfy_all_groupes_access"])){
57 $satisfy_all_groupes_access = $params["satisfy_all_groupes_access"] ? true : false;
59 $source_access_ids = array();
60 if($params["id_source_access"] == $this->id_groupe_status_contributeur()){
61 $source_access_ids[$this->id_groupe_status_contributeur()] = true;
62 $source_access_ids[$this->id_groupe_status_editeur()] = true;
63 $source_access_ids[$this->id_groupe_status_admin()] = true;
65 elseif($params["id_source_access"] == $this->id_groupe_status_editeur()){
66 $source_access_ids[$this->id_groupe_status_editeur()] = true;
67 $source_access_ids[$this->id_groupe_status_admin()] = true;
69 elseif($params["id_source_access"] == $this->id_groupe_status_admin()){
70 $source_access_ids[$this->id_groupe_status_admin()] = true;
72 if(!$source_access_ids) return false;
74 if(!($groupes = $params["groupes"])) return $sources;
75 $author_ids = array();
76 foreach($groupes as $i => $groupe) $author_ids[$groupe["id"]] = true;
77 $sgbd = $this->sgbd();
79 if($rst = $sgbd->open_data("sml_sources_authors")){
80 while(($_sources !== false) && $v_rst = $sgbd->fetch_data($rst)){
84 && isset($v_rst["id_author"])
85 && isset($v_rst["id_source"])
86 && isset($v_rst["id_sources_access"])
89 isset($source_access_ids[$v_rst["id_sources_access"]])
90 && isset($author_ids[$v_rst["id_author"]])
92 $_sources[$v_rst["id_source"]] = array(
93 "id_source" => $v_rst["id_source"],
94 "id_author" => $v_rst["id_author"],
99 else $_sources = false;
101 $sgbd->close_data($rst);
103 else $_sources = false;
104 if($_sources === false) return false;
105 if($rst = $sgbd->open_data("sml_sources")){
106 while(($sources !== false) && $v_rst = $sgbd->fetch_data($rst)){
107 if(isset($v_rst) && isset($v_rst["id"])){
108 if(isset($_sources[$v_rst["id"]])){
109 if(!isset($params["id_class"]) || (isset($v_rst["id_class"]) && ($v_rst["id_class"] == $params["id_class"]))){
110 if(!isset($sources[$v_rst["id"]])){
111 $sources[$v_rst["id"]] = $v_rst;
112 $sources[$v_rst["id"]]["authors"] = array();
114 $sources[$v_rst["id"]]["authors"][] = $_sources[$v_rst["id"]]["id_author"];
118 else $sources = false;
120 $sgbd->close_data($rst);
122 else $sources = false;
123 if($_sources === false) return false;
124 foreach($sources as $id_source => $source){
125 if($satisfy_all_groupes_access){
126 if(count($source["authors"]) < count($groupes)){
127 unset($sources[$id_source]);
131 if(!($sources[$id_source] = $this->load_source($source))) return false;
136 function source_has_groupe($id_source, $id_groupe){
137 $sgbd = $this->sgbd();
139 if($rst = $sgbd->open_data("sml_sources_authors")){
140 while(($HAS_THIS_GROUP !== false) && $v_rst = $sgbd->fetch_data($rst)){
141 if(isset($v_rst) && isset($v_rst["id"]) && isset($v_rst["id_author"]) && isset($v_rst["id_source"])){
143 ($v_rst["id_source"] == $id_source)
144 && ($v_rst["id_author"] == $id_groupe)
149 else $HAS_THIS_GROUP = false;
151 $sgbd->close_data($rst);
153 else $HAS_THIS_GROUP = false;
154 return $HAS_THIS_GROUP;
157 function add_source_groupe($id_source, $id_groupe, $id_groupe_status)
158 { $sgbd = $this->sgbd();
161 ( "sml_sources_authors",
163 ( "id_source" => $id_source,
164 "id_author" => $id_groupe,
165 "id_sources_access" => $id_groupe_status
174 function set_source_groupe($id, $id_groupe_status)
175 { if(($groupe = $this->groupe($id)) !== false)
178 ( "sml_sources_authors",
181 "id_sources_access" => $id_groupe_status
191 function del_source_groupes($id_source){
192 $sgbd = $this->sgbd();
194 if($rst = $sgbd->open_data("sml_sources_authors")){
195 while($OK && $v_rst = $sgbd->fetch_data($rst)){
196 if(isset($v_rst) && isset($v_rst["id"]) && isset($v_rst["id_source"])){
197 if($v_rst["id_source"] == $id_source) if(!$sgbd->del_data("sml_sources_authors", $v_rst["id"])) $OK = false;
201 $sgbd->close_data($rst);
207 function del_source_groupe($id_source, $id_author){
208 $sgbd = $this->sgbd();
210 if($rst = $sgbd->open_data("sml_sources_authors")){
211 while($OK && $v_rst = $sgbd->fetch_data($rst)){
212 if(isset($v_rst) && isset($v_rst["id"]) && isset($v_rst["id_author"]) && isset($v_rst["id_source"])){
214 ($v_rst["id_source"] == $id_source)
215 && ($v_rst["id_author"] == $id_author)
216 && !$sgbd->del_data("sml_sources_authors", $v_rst["id"])
221 $sgbd->close_data($rst);
227 // --------------------------------------------------------------------
229 function sources_access(){
230 $sgbd = $this->sgbd();
231 $sources_access = array();
232 $sgbd = $this->sgbd();
234 if($rst = $sgbd->open_data("sml_sources_access")){
235 while($OK && $v_rst = $sgbd->fetch_data($rst)){
236 if(isset($v_rst) && isset($v_rst["id"])){
237 $sources_access[$v_rst["id"]] = $v_rst;
241 $sgbd->close_data($rst);
244 return $sources_access;
247 function id_groupe_status_admin() { return 1; }
248 function id_groupe_status_editeur() { return 2; }
249 function id_groupe_status_contributeur() { return 3; }
251 function get_admin_groupe($groupes)
253 if(is_array($groupes)) foreach($groupes as $source_groupe)
254 { if($source_groupe["id_groupe_status"] == $this->id_groupe_status_admin())
255 { $groupe = $source_groupe;
262 function get_editor_groupes($groupes){
263 $editor_groupes = array();
264 if(is_array($groupes)) foreach($groupes as $source_groupe){
266 $source_groupe["id_groupe_status"] == $this->id_groupe_status_admin()
267 || $source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur()
269 $editor_groupes[] = $source_groupe;
272 return $editor_groupes;
275 function source_permissions($source, $id_user)
276 { $permissions = array
279 "contributeur" => false
281 foreach($source["groupes"] as $id_groupe => $source_groupe)
282 { if($source_groupe["id_user"] == $id_user)
283 { if($source_groupe["id_groupe_status"] == $this->id_groupe_status_admin())
284 { $permissions["admin"] = true;
285 $permissions["editeur"] = true;
286 $permissions["contributeur"] = true;
288 elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur())
289 { $permissions["editeur"] = true;
290 $permissions["contributeur"] = true;
292 elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_contributeur())
293 { $permissions["contributeur"] = true;
300 // --------------------------------------------------------------------
302 function sources_invitations($groupes, $id_user){
303 $sgbd = $this->sgbd();
304 $invitations = array("list" => array(), "total" => 0);
305 $groupes_in = array();
306 foreach($groupes as $id_groupe => $groupe) $groupes_in[$id_groupe] = true;
307 if($rst = $sgbd->open_data("sml_sources_invitations")){
308 while($v_rst = $sgbd->fetch_data($rst)){
310 if(!isset($v_rst["id"])) continue;
314 isset($v_rst["id_author"])
315 && isset($groupes_in[$v_rst["id_author"]])
322 && isset($v_rst["id_user"])
323 && $id_user == $v_rst["id_user"]
328 $invitations["list"][$v_rst["id"]] = $v_rst;
329 $invitations["total"]++;
333 $invitations = false;
337 $sgbd->close_data($rst);
339 else $invitations = false;