algo data groupes_sources
[mw_sourceml] / app / data / modules / xml / sml_data_source_groupes.php
1 <?php
2
3   class sml_data_source_groupes extends mw_data{
4
5     function init_groupe_status(){
6       return true;
7     }
8
9     function source_groupes($id_source)
10     { $env = $this->env();
11       $sgbd = $this->sgbd();
12       $groupes = array();
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"];
18           }
19           else
20           { $groupes_status = false;
21             break;
22           }
23         }
24         $sgbd->close_data($rst);
25       }
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"] =
35               ( isset($v_rst["image"]) && $v_rst["image"] ?
36                 $env->path("content")."uploads/".$v_rst["image"]
37                 : ""
38               );
39             }
40           }
41           else
42           { $groupes = false;
43             break;
44           }
45         }
46         $sgbd->close_data($rst);
47       }
48       else $groupes = false;
49       return $groupes;
50     }
51
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;
58       }
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;
64       }
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;
68       }
69       elseif($params["id_source_access"] == $this->id_groupe_status_admin()){
70         $source_access_ids[$this->id_groupe_status_admin()] = true;
71       }
72       if(!$source_access_ids) return false;
73       $sources = array();
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();
78       $authors = array();
79       if($rst = $sgbd->open_data("sml_sources_authors")){
80         while(($authors !== false) && $v_rst = $sgbd->fetch_data($rst)){
81           if(isset($v_rst)){
82             if(
83                   isset($v_rst["id"])
84               &&  isset($v_rst["id_author"])
85               &&  isset($v_rst["id_source"])
86               &&  isset($v_rst["id_sources_access"])
87             ){
88               if(
89                     isset($source_access_ids[$v_rst["id_sources_access"]])
90                 &&  isset($author_ids[$v_rst["id_author"]])
91               ){
92                 if(!isset($authors[$v_rst["id_source"]])){
93                   $authors[$v_rst["id_source"]] = array();
94                 }
95                 $authors[$v_rst["id_source"]][] = $v_rst["id_author"];
96               }
97             }
98           }
99           else $authors = false;
100         }
101         $sgbd->close_data($rst);
102       }
103       else $authors = false;
104       if($authors === 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($authors[$v_rst["id"]])){
109               if(!isset($params["id_class"]) || (isset($v_rst["id_class"]) && ($v_rst["id_class"] == $params["id_class"]))){
110                 $sources[$v_rst["id"]] = $v_rst;
111                 $sources[$v_rst["id"]]["authors"] = $authors[$v_rst["id"]];
112               }
113             }
114           }
115           else $sources = false;
116         }
117         $sgbd->close_data($rst);
118       }
119       else $sources = false;
120       if($sources === false) return false;
121       foreach($sources as $id_source => $source){
122         if($satisfy_all_groupes_access){
123           if(count($source["authors"]) < count($groupes)){
124             unset($sources[$id_source]);
125             continue;
126           }
127         }
128         if(!($sources[$id_source] = $this->load_source($source))) return false;
129       }
130       return $sources;
131     }
132
133     function source_has_groupe($id_source, $id_groupe){
134       $sgbd = $this->sgbd();
135       $HAS_THIS_GROUP = 0;
136       if($rst = $sgbd->open_data("sml_sources_authors")){
137         while(($HAS_THIS_GROUP !== false) && $v_rst = $sgbd->fetch_data($rst)){
138           if(isset($v_rst) && isset($v_rst["id"]) && isset($v_rst["id_author"]) && isset($v_rst["id_source"])){
139             if(
140                   ($v_rst["id_source"] == $id_source)
141               &&  ($v_rst["id_author"] == $id_groupe)
142             ){
143               $HAS_THIS_GROUP++;
144             }
145           }
146           else $HAS_THIS_GROUP = false;
147         }
148         $sgbd->close_data($rst);
149       }
150       else $HAS_THIS_GROUP = false;
151       return $HAS_THIS_GROUP;
152     }
153
154     function add_source_groupe($id_source, $id_groupe, $id_groupe_status)
155     { $sgbd = $this->sgbd();
156       if
157       ( $sgbd->add_data
158         ( "sml_sources_authors",
159           array
160           ( "id_source" => $id_source,
161             "id_author" => $id_groupe,
162             "id_sources_access" => $id_groupe_status
163           )
164         )
165       )
166       { return true;
167       }
168       return false;
169     }
170
171     function set_source_groupe($id, $id_groupe_status)
172     { if(($groupe = $this->groupe($id)) !== false)
173       { if
174         ( $sgbd->set_data
175           ( "sml_sources_authors",
176             $id,
177             array(
178               "id_sources_access" => $id_groupe_status
179             )
180           )
181         )
182         { return true;
183         }
184       }
185       return false;
186     }
187
188     function del_source_groupes($id_source){
189       $sgbd = $this->sgbd();
190       $OK = true;
191       if($rst = $sgbd->open_data("sml_sources_authors")){
192         while($OK && $v_rst = $sgbd->fetch_data($rst)){
193           if(isset($v_rst) && isset($v_rst["id"]) && isset($v_rst["id_source"])){
194             if($v_rst["id_source"] == $id_source) if(!$sgbd->del_data("sml_sources_authors", $v_rst["id"])) $OK = false;
195           }
196           else $OK = false;
197         }
198         $sgbd->close_data($rst);
199       }
200       else $OK = false;
201       return $OK;
202     }
203
204     function del_source_groupe($id_source, $id_author){
205       $sgbd = $this->sgbd();
206       $OK = true;
207       if($rst = $sgbd->open_data("sml_sources_authors")){
208         while($OK && $v_rst = $sgbd->fetch_data($rst)){
209           if(isset($v_rst) && isset($v_rst["id"]) && isset($v_rst["id_author"]) && isset($v_rst["id_source"])){
210             if(
211                   ($v_rst["id_source"] == $id_source)
212               &&  ($v_rst["id_author"] == $id_author)
213               &&  !$sgbd->del_data("sml_sources_authors", $v_rst["id"])
214             ) $OK = false;
215           }
216           else $OK = false;
217         }
218         $sgbd->close_data($rst);
219       }
220       else $OK = false;
221       return $OK;
222     }
223
224 // --------------------------------------------------------------------
225
226     function sources_access(){
227       $sgbd = $this->sgbd();
228       $sources_access = array();
229       $sgbd = $this->sgbd();
230       $OK = true;
231       if($rst = $sgbd->open_data("sml_sources_access")){
232         while($OK && $v_rst = $sgbd->fetch_data($rst)){
233           if(isset($v_rst) && isset($v_rst["id"])){
234             $sources_access[$v_rst["id"]] = $v_rst;
235           }
236           else $OK = false;
237         }
238         $sgbd->close_data($rst);
239       }
240       else $OK = false;
241       return $sources_access;
242     }
243
244     function id_groupe_status_admin()        { return 1; }
245     function id_groupe_status_editeur()      { return 2; }
246     function id_groupe_status_contributeur() { return 3; }
247
248     function get_admin_groupe($groupes)
249     { $groupe = array();
250       if(is_array($groupes)) foreach($groupes as $source_groupe)
251       { if($source_groupe["id_groupe_status"] == $this->id_groupe_status_admin())
252         { $groupe = $source_groupe;
253           break;
254         }
255       }
256       return $groupe;
257     }
258
259     function get_editor_groupes($groupes){
260       $editor_groupes = array();
261       if(is_array($groupes)) foreach($groupes as $source_groupe){
262         if(
263               $source_groupe["id_groupe_status"] == $this->id_groupe_status_admin()
264           ||  $source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur()
265         ){
266           $editor_groupes[] = $source_groupe;
267         }
268       }
269       return $editor_groupes;
270     }
271
272     function source_permissions($source, $id_user)
273     { $permissions = array
274       ( "admin" => false,
275         "editeur" => false,
276         "contributeur" => false
277       );
278       foreach($source["groupes"] as $id_groupe => $source_groupe)
279       { if($source_groupe["id_user"] == $id_user)
280         { if($source_groupe["id_groupe_status"] == $this->id_groupe_status_admin())
281           { $permissions["admin"] = true;
282             $permissions["editeur"] = true;
283             $permissions["contributeur"] = true;
284           }
285           elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur())
286           { $permissions["editeur"] = true;
287             $permissions["contributeur"] = true;
288           }
289           elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_contributeur())
290           { $permissions["contributeur"] = true;
291           }
292         }
293       }
294       return $permissions;
295     }
296
297 // --------------------------------------------------------------------
298
299     function sources_invitations($groupes, $id_user){
300       $sgbd = $this->sgbd();
301       $invitations = array("list" => array(), "total" => 0);
302       $groupes_in = array();
303       foreach($groupes as $id_groupe => $groupe) $groupes_in[$id_groupe] = true;
304       if($rst = $sgbd->open_data("sml_sources_invitations")){
305         while($v_rst = $sgbd->fetch_data($rst)){
306           if(isset($v_rst)){
307             if(!isset($v_rst["id"])) continue;
308             $MATCH = false;
309             if($groupes_in){
310               if(
311                     isset($v_rst["id_author"])
312                 &&  isset($groupes_in[$v_rst["id_author"]])
313               ){
314                 $MATCH = true;
315               }
316             }
317             if(
318                   !$MATCH
319               &&  isset($v_rst["id_user"])
320               &&  $id_user == $v_rst["id_user"]
321             ){
322               $MATCH = true;
323             }
324             if($MATCH){
325               $invitations["list"][$v_rst["id"]] = $v_rst;
326               $invitations["total"]++;
327             }
328           }
329           else{
330             $invitations = false;
331             break;
332           }
333         }
334         $sgbd->close_data($rst);
335       }
336       else $invitations = false;
337       return $invitations;
338     }
339
340   }
341
342 ?>