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