syntaxe POO (visibilite) et maj indentation
[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     public function init_groupe_status(){
6       return true;
7     }
8
9     public 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     public 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     public 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     public 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     public 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     public 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     public 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     public 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     public function id_groupe_status_admin(){
245       return 1;
246     }
247     public function id_groupe_status_editeur(){
248       return 2;
249     }
250     public function id_groupe_status_contributeur(){
251       return 3;
252     }
253
254     public function get_admin_groupe($groupes){
255       $groupe = array();
256       if(is_array($groupes)) foreach($groupes as $source_groupe){
257         if($source_groupe["id_groupe_status"] == $this->id_groupe_status_admin()){
258           $groupe = $source_groupe;
259           break;
260         }
261       }
262       return $groupe;
263     }
264
265     public function get_editor_groupes($groupes){
266       $editor_groupes = array();
267       if(is_array($groupes)) foreach($groupes as $source_groupe){
268         if(
269               $source_groupe["id_groupe_status"] == $this->id_groupe_status_admin()
270           ||  $source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur()
271         ){
272           $editor_groupes[] = $source_groupe;
273         }
274       }
275       return $editor_groupes;
276     }
277
278     public function source_permissions($source, $id_user){
279       $permissions = array(
280         "admin" => false,
281         "editeur" => false,
282         "contributeur" => false
283       );
284       foreach($source["groupes"] as $id_groupe => $source_groupe){
285         if($source_groupe["id_user"] == $id_user){
286           if($source_groupe["id_groupe_status"] == $this->id_groupe_status_admin()){
287             $permissions["admin"] = true;
288             $permissions["editeur"] = true;
289             $permissions["contributeur"] = true;
290           }
291           elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur()){
292             $permissions["editeur"] = true;
293             $permissions["contributeur"] = true;
294           }
295           elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_contributeur()){
296             $permissions["contributeur"] = true;
297           }
298         }
299       }
300       return $permissions;
301     }
302
303 // --------------------------------------------------------------------
304
305     public function sources_invitations($groupes, $id_user){
306       $sgbd = $this->sgbd();
307       $invitations = array("list" => array(), "total" => 0);
308       $groupes_in = array();
309       foreach($groupes as $id_groupe => $groupe) $groupes_in[$id_groupe] = true;
310       if($rst = $sgbd->open_data("sml_sources_invitations")){
311         while($v_rst = $sgbd->fetch_data($rst)){
312           if(isset($v_rst)){
313             if(!isset($v_rst["id"])) continue;
314             $MATCH = false;
315             if($groupes_in){
316               if(
317                     isset($v_rst["id_author"])
318                 &&  isset($groupes_in[$v_rst["id_author"]])
319               ){
320                 $MATCH = true;
321               }
322             }
323             if(
324                   !$MATCH
325               &&  isset($v_rst["id_user"])
326               &&  $id_user == $v_rst["id_user"]
327             ){
328               $MATCH = true;
329             }
330             if($MATCH){
331               $invitations["list"][$v_rst["id"]] = $v_rst;
332               $invitations["total"]++;
333             }
334           }
335           else{
336             $invitations = false;
337             break;
338           }
339         }
340         $sgbd->close_data($rst);
341       }
342       else $invitations = false;
343       return $invitations;
344     }
345
346   }