syntaxe POO (visibilite) et maj indentation
[mw_sourceml] / app / data / modules / sql / 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       try{
13         $sql =
14          "SELECT #--sml_authors.*"
15          .", #--sml_sources_authors.id_sources_access as id_groupe_status"
16         ." FROM #--sml_authors, #--sml_sources_authors"
17         ." WHERE #--sml_sources_authors.id_author=#--sml_authors.id"
18         ." AND #--sml_sources_authors.id_source=".$this->eq($id_source)
19         ." ORDER BY nom";
20         $rst = $sgbd->query($sql);
21         $groupes = array();
22         while($v_rst = $sgbd->fetch_assoc($rst)){
23           $v_rst["image_uri"] = (
24             $v_rst["image"] ?
25             $env->path("content")."uploads/".$v_rst["image"]
26             : ""
27           );
28           $groupes[$v_rst["id"]] = $v_rst;
29         }
30         $sgbd->free_result($rst);
31       }
32       catch(Exception $e){
33         return false;
34       }
35       return $groupes;
36     }
37
38     public function groupes_sources($params){
39       if(!isset($params["groupes"])) return false;
40       if(!isset($params["id_source_access"])) return false;
41       $satisfy_all_groupes_access = true;
42       if(isset($params["satisfy_all_groupes_access"])){
43         $satisfy_all_groupes_access = $params["satisfy_all_groupes_access"] ? true : false;
44       }
45       $source_access_ids = "";
46       if($params["id_source_access"] == $this->id_groupe_status_contributeur()){
47         $source_access_ids =
48          $this->id_groupe_status_contributeur()
49         .", ".$this->id_groupe_status_editeur()
50         .", ".$this->id_groupe_status_admin();
51       }
52       elseif($params["id_source_access"] == $this->id_groupe_status_editeur()){
53         $source_access_ids =
54          $this->id_groupe_status_editeur()
55         .", ".$this->id_groupe_status_admin();
56       }
57       elseif($params["id_source_access"] == $this->id_groupe_status_admin()){
58         $source_access_ids =
59          $this->id_groupe_status_admin();
60       }
61       if(!$source_access_ids) return false;
62       $sources = array();
63       if(!($groupes = $params["groupes"])) return $sources;
64       $author_ids = "";
65       foreach($groupes as $i => $groupe) $author_ids .= ($author_ids ? ", " : "").$groupe["id"];
66       $sgbd = $this->sgbd();
67       try{
68         $sql =
69          "SELECT #--sml_sources.*, #--sml_sources_authors.id_author"
70         ." FROM #--sml_sources, #--sml_sources_authors"
71         ." WHERE #--sml_sources.id=#--sml_sources_authors.id_source"
72         ." AND #--sml_sources_authors.id_sources_access IN(".$source_access_ids.")"
73         ." AND #--sml_sources_authors.id_author IN(".$author_ids.")";
74         if(isset($params["id_class"])){
75           $sql .= " AND #--sml_sources.id_class=".$this->eq($params["id_class"]);
76         }
77         $rst = $sgbd->query($sql);
78         while($v_rst = $sgbd->fetch_assoc($rst)){
79           if(!isset($sources[$v_rst["id"]])){
80             $sources[$v_rst["id"]] = $v_rst;
81             $sources[$v_rst["id"]]["authors"] = array();
82           }
83           $sources[$v_rst["id"]]["authors"][] = $v_rst["id_author"];
84         }
85         $sgbd->free_result($rst);
86         foreach($sources as $id_source => $source){
87           if($satisfy_all_groupes_access){
88             if(count($source["authors"]) < count($groupes)){
89               unset($sources[$id_source]);
90               continue;
91             }
92           }
93           if(!($sources[$id_source] = $this->load_source($source))) return false;
94         }
95       }
96       catch(Exception $e){
97         $sources = false;
98       }
99       return $sources;
100     }
101
102     public function source_has_groupe($id_source, $id_groupe){
103       $sgbd = $this->sgbd();
104       $HAS_THIS_GROUP = 0;
105       try{
106         $sql =
107          "SELECT count(*) as n FROM #--sml_sources_authors"
108         ." WHERE id_source=".$this->eq($id_source)
109         ." AND id_author=".$this->eq($id_groupe);
110         $rst = $sgbd->query($sql);
111         if($v_rst = $sgbd->fetch_assoc($rst)) $HAS_THIS_GROUP = $v_rst["n"];
112         $sgbd->free_result($rst);
113       }
114       catch(Exception $e){
115         $HAS_THIS_GROUP = false;
116       }
117       return $HAS_THIS_GROUP;
118     }
119
120     public function add_source_groupe($id_source, $id_groupe, $id_groupe_status){
121       $sgbd = $this->sgbd();
122       try{
123         $sql =
124          "INSERT INTO #--sml_sources_authors(id_source, id_author, id_sources_access) VALUES"
125         ."( ".$this->eq($id_source)
126         .", ".$this->eq($id_groupe)
127         .", ".$this->eq($id_groupe_status)
128         .")";
129         $sgbd->query($sql);
130       }
131       catch(Exception $e){
132         return false;
133       }
134       return true;
135     }
136
137     public function set_source_groupe($id, $id_groupe_status){
138       if(($groupe = $this->groupe($id)) !== false){
139         $sgbd = $this->sgbd();
140         try{
141           $sql =
142            "UPDATE #--sml_sources_authors SET"
143           ."  id_sources_access=".$this->eq($id_groupe_status)
144           ." WHERE id=".$id;
145           $sgbd->query($sql);
146         }
147         catch(Exception $e){
148           return false;
149         }
150         return true;
151       }
152       return false;
153     }
154
155     public function del_source_groupes($id_source){
156       $sgbd = $this->sgbd();
157       try{
158         $sql = "DELETE FROM #--sml_sources_authors WHERE id_source=".$this->eq($id_source);
159         $sgbd->query($sql);
160       }
161       catch(Exception $e){
162         return false;
163       }
164       return true;
165     }
166
167     public function del_source_groupe($id_source, $id_author){
168       $sgbd = $this->sgbd();
169       try{
170         $sql =
171          "DELETE FROM #--sml_sources_authors"
172         ." WHERE id_source=".$this->eq($id_source)
173         ." AND id_author=".$this->eq($id_author);
174         $sgbd->query($sql);
175       }
176       catch(Exception $e){
177         return false;
178       }
179       return true;
180     }
181
182 // --------------------------------------------------------------------
183
184     public function sources_access(){
185       $sgbd = $this->sgbd();
186       $sources_access = array();
187       try{
188         $sql = "SELECT * FROM #--sml_sources_access";
189         $rst = $sgbd->query($sql);
190         while($v_rst = $sgbd->fetch_assoc($rst)) $sources_access[$v_rst["id"]] = $v_rst;
191         $sgbd->free_result($rst);
192       }
193       catch(Exception $e){
194         $sources_access = false;
195       }
196       return $sources_access;
197     }
198
199     public function id_groupe_status_admin(){
200       return 1;
201     }
202
203     public function id_groupe_status_editeur(){
204       return 2;
205     }
206
207     public function id_groupe_status_contributeur(){
208       return 3;
209     }
210
211     public function get_admin_groupe($groupes){
212       $groupe = array();
213       if(is_array($groupes)) foreach($groupes as $source_groupe){
214         if($source_groupe["id_groupe_status"] == $this->id_groupe_status_admin()){
215           $groupe = $source_groupe;
216           break;
217         }
218       }
219       return $groupe;
220     }
221
222     public function get_editor_groupes($groupes){
223       $editor_groupes = array();
224       if(is_array($groupes)) foreach($groupes as $source_groupe){
225         if(
226               $source_groupe["id_groupe_status"] == $this->id_groupe_status_admin()
227           ||  $source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur()
228         ){
229           $editor_groupes[] = $source_groupe;
230         }
231       }
232       return $editor_groupes;
233     }
234
235     public function source_permissions($source, $id_user){
236       $permissions = array(
237         "admin" => false,
238         "editeur" => false,
239         "contributeur" => false
240       );
241       foreach($source["groupes"] as $id_groupe => $source_groupe){
242         if($source_groupe["id_user"] == $id_user){
243           if($source_groupe["id_groupe_status"] == $this->id_groupe_status_admin()){
244             $permissions["admin"] = true;
245             $permissions["editeur"] = true;
246             $permissions["contributeur"] = true;
247           }
248           elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur()){
249             $permissions["editeur"] = true;
250             $permissions["contributeur"] = true;
251           }
252           elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_contributeur()){
253             $permissions["contributeur"] = true;
254           }
255         }
256       }
257       return $permissions;
258     }
259
260 // --------------------------------------------------------------------
261
262     public function sources_invitations($groupes, $id_user){
263       $groupes_in = "";
264       foreach($groupes as $id_groupe => $groupe) $groupes_in .= ($groupes_in ? "," : "").$id_groupe;
265       return $this->list_sml_sources_invitations(
266         array(
267           "index_name" => "id",
268           "where"=> ($groupes_in ? "id_author IN(".$groupes_in.") OR " : "")."id_user=".$id_user,
269           "order_by" => "date_invitation",
270           "order" => "DESC"
271         )
272       );
273     }
274
275   }