correction bug source_groupes (data XML)
[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               ( $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       $_sources = array();
79       if($rst = $sgbd->open_data("sml_sources_authors")){
80         while(($_sources !== 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                 $_sources[$v_rst["id_source"]] = array(
93                   "id_source" => $v_rst["id_source"],
94                   "id_author" => $v_rst["id_author"],
95                 );
96               }
97             }
98           }
99           else $_sources = false;
100         }
101         $sgbd->close_data($rst);
102       }
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();
113                 }
114                 $sources[$v_rst["id"]]["authors"][] = $_sources[$v_rst["id"]]["id_author"];
115               }
116             }
117           }
118           else $sources = false;
119         }
120         $sgbd->close_data($rst);
121       }
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]);
128             continue;
129           }
130         }
131         if(!($sources[$id_source] = $this->load_source($source))) return false;
132       }
133       return $sources;
134     }
135
136     function source_has_groupe($id_source, $id_groupe){
137       $sgbd = $this->sgbd();
138       $HAS_THIS_GROUP = 0;
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"])){
142             if(
143                   ($v_rst["id_source"] == $id_source)
144               &&  ($v_rst["id_author"] == $id_groupe)
145             ){
146               $HAS_THIS_GROUP++;
147             }
148           }
149           else $HAS_THIS_GROUP = false;
150         }
151         $sgbd->close_data($rst);
152       }
153       else $HAS_THIS_GROUP = false;
154       return $HAS_THIS_GROUP;
155     }
156
157     function add_source_groupe($id_source, $id_groupe, $id_groupe_status)
158     { $sgbd = $this->sgbd();
159       if
160       ( $sgbd->add_data
161         ( "sml_sources_authors",
162           array
163           ( "id_source" => $id_source,
164             "id_author" => $id_groupe,
165             "id_sources_access" => $id_groupe_status
166           )
167         )
168       )
169       { return true;
170       }
171       return false;
172     }
173
174     function set_source_groupe($id, $id_groupe_status)
175     { if(($groupe = $this->groupe($id)) !== false)
176       { if
177         ( $sgbd->set_data
178           ( "sml_sources_authors",
179             $id,
180             array(
181               "id_sources_access" => $id_groupe_status
182             )
183           )
184         )
185         { return true;
186         }
187       }
188       return false;
189     }
190
191     function del_source_groupes($id_source){
192       $sgbd = $this->sgbd();
193       $OK = true;
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;
198           }
199           else $OK = false;
200         }
201         $sgbd->close_data($rst);
202       }
203       else $OK = false;
204       return $OK;
205     }
206
207     function del_source_groupe($id_source, $id_author){
208       $sgbd = $this->sgbd();
209       $OK = true;
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"])){
213             if(
214                   ($v_rst["id_source"] == $id_source)
215               &&  ($v_rst["id_author"] == $id_author)
216               &&  !$sgbd->del_data("sml_sources_authors", $v_rst["id"])
217             ) $OK = false;
218           }
219           else $OK = false;
220         }
221         $sgbd->close_data($rst);
222       }
223       else $OK = false;
224       return $OK;
225     }
226
227 // --------------------------------------------------------------------
228
229     function sources_access(){
230       $sgbd = $this->sgbd();
231       $sources_access = array();
232       $sgbd = $this->sgbd();
233       $OK = true;
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;
238           }
239           else $OK = false;
240         }
241         $sgbd->close_data($rst);
242       }
243       else $OK = false;
244       return $sources_access;
245     }
246
247     function id_groupe_status_admin()        { return 1; }
248     function id_groupe_status_editeur()      { return 2; }
249     function id_groupe_status_contributeur() { return 3; }
250
251     function get_admin_groupe($groupes)
252     { $groupe = array();
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;
256           break;
257         }
258       }
259       return $groupe;
260     }
261
262     function get_editor_groupes($groupes){
263       $editor_groupes = array();
264       if(is_array($groupes)) foreach($groupes as $source_groupe){
265         if(
266               $source_groupe["id_groupe_status"] == $this->id_groupe_status_admin()
267           ||  $source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur()
268         ){
269           $editor_groupes[] = $source_groupe;
270         }
271       }
272       return $editor_groupes;
273     }
274
275     function source_permissions($source, $id_user)
276     { $permissions = array
277       ( "admin" => false,
278         "editeur" => false,
279         "contributeur" => false
280       );
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;
287           }
288           elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur())
289           { $permissions["editeur"] = true;
290             $permissions["contributeur"] = true;
291           }
292           elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_contributeur())
293           { $permissions["contributeur"] = true;
294           }
295         }
296       }
297       return $permissions;
298     }
299
300 // --------------------------------------------------------------------
301
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)){
309           if(isset($v_rst)){
310             if(!isset($v_rst["id"])) continue;
311             $MATCH = false;
312             if($groupes_in){
313               if(
314                     isset($v_rst["id_author"])
315                 &&  isset($groupes_in[$v_rst["id_author"]])
316               ){
317                 $MATCH = true;
318               }
319             }
320             if(
321                   !$MATCH
322               &&  isset($v_rst["id_user"])
323               &&  $id_user == $v_rst["id_user"]
324             ){
325               $MATCH = true;
326             }
327             if($MATCH){
328               $invitations["list"][$v_rst["id"]] = $v_rst;
329               $invitations["total"]++;
330             }
331           }
332           else{
333             $invitations = false;
334             break;
335           }
336         }
337         $sgbd->close_data($rst);
338       }
339       else $invitations = false;
340       return $invitations;
341     }
342
343   }
344
345 ?>