plusieurs auteurs pour les sources
[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 add_source_groupe($id_source, $id_groupe, $id_groupe_status)
100     { $sgbd = $this->sgbd();
101       try{
102         $sql =
103          "INSERT INTO #--sml_sources_authors(id_source, id_author, id_sources_access) VALUES"
104         ."( ".$this->eq($id_source)
105         .", ".$this->eq($id_groupe)
106         .", ".$this->eq($id_groupe_status)
107         .")";
108         $sgbd->query($sql);
109       }
110       catch(Exception $e) { return false; }
111       return true;
112     }
113
114     function set_source_groupe($id, $id_groupe_status)
115     { if(($groupe = $this->groupe($id)) !== false)
116       { $sgbd = $this->sgbd();
117         try{
118           $sql =
119            "UPDATE #--sml_sources_authors SET"
120           ."  id_sources_access=".$this->eq($id_groupe_status)
121           ." WHERE id=".$id;
122           $sgbd->query($sql);
123         }
124         catch(Exception $e) { return false; }
125         return true;
126       }
127       return false;
128     }
129
130     function del_source_groupes($id_source)
131     { $sgbd = $this->sgbd();
132       try{
133         $sql = "DELETE FROM #--sml_sources_authors WHERE id_source=".$this->eq($id_source);
134         $sgbd->query($sql);
135       }
136       catch(Exception $e) { return false; }
137       return true;
138     }
139
140     function del_source_groupe($id)
141     { $sgbd = $this->sgbd();
142       try{
143         $sql = "DELETE FROM #--sml_sources_authors WHERE id=".$this->eq($id);
144         $sgbd->query($sql);
145       }
146       catch(Exception $e) { return false; }
147       return true;
148     }
149
150 // --------------------------------------------------------------------
151
152     function sources_access(){
153       $sgbd = $this->sgbd();
154       $sources_access = array();
155       try{
156         $sql = "SELECT * FROM #--sml_sources_access";
157         $rst = $sgbd->query($sql);
158         while($v_rst = $sgbd->fetch_assoc($rst)) $sources_access[$v_rst["id"]] = $v_rst;
159         $sgbd->free_result($rst);
160       }
161       catch(Exception $e) { $sources_access = false; }
162       return $sources_access;
163     }
164
165     function id_groupe_status_admin()        { return 1; }
166     function id_groupe_status_editeur()      { return 2; }
167     function id_groupe_status_contributeur() { return 3; }
168
169     function get_admin_groupe($groupes)
170     { $groupe = array();
171       if(is_array($groupes)) foreach($groupes as $source_groupe)
172       { if($source_groupe["id_groupe_status"] == $this->id_groupe_status_admin())
173         { $groupe = $source_groupe;
174           break;
175         }
176       }
177       return $groupe;
178     }
179
180     function get_editor_groupes($groupes){
181       $editor_groupes = array();
182       if(is_array($groupes)) foreach($groupes as $source_groupe)
183       { if(
184               $source_groupe["id_groupe_status"] == $this->id_groupe_status_admin()
185           ||  $source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur()
186         ){
187           $editor_groupes[] = $source_groupe;
188         }
189       }
190       return $editor_groupes;
191     }
192
193     function source_permissions($source, $id_user)
194     { $permissions = array
195       ( "admin" => false,
196         "editeur" => false,
197         "contributeur" => false
198       );
199       foreach($source["groupes"] as $id_groupe => $source_groupe)
200       { if($source_groupe["id_user"] == $id_user)
201         { if($source_groupe["id_groupe_status"] == $this->id_groupe_status_admin())
202           { $permissions["admin"] = true;
203             $permissions["editeur"] = true;
204             $permissions["contributeur"] = true;
205           }
206           elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur())
207           { $permissions["editeur"] = true;
208             $permissions["contributeur"] = true;
209           }
210           elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_contributeur())
211           { $permissions["contributeur"] = true;
212           }
213         }
214       }
215       return $permissions;
216     }
217
218   }
219
220 ?>