3 class sml_data_source_groupes extends mw_data{
5 public function init_groupe_status(){
9 public function source_groupes($id_source){
11 $sgbd = $this->sgbd();
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"];
20 $groupes_status = false;
24 $sgbd->close_data($rst);
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"]
46 $sgbd->close_data($rst);
48 else $groupes = false;
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;
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;
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;
69 elseif($params["id_source_access"] == $this->id_groupe_status_admin()){
70 $source_access_ids[$this->id_groupe_status_admin()] = true;
72 if(!$source_access_ids) return false;
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();
79 if($rst = $sgbd->open_data("sml_sources_authors")){
80 while(($authors !== false) && $v_rst = $sgbd->fetch_data($rst)){
84 && isset($v_rst["id_author"])
85 && isset($v_rst["id_source"])
86 && isset($v_rst["id_sources_access"])
89 isset($source_access_ids[$v_rst["id_sources_access"]])
90 && isset($author_ids[$v_rst["id_author"]])
92 if(!isset($authors[$v_rst["id_source"]])){
93 $authors[$v_rst["id_source"]] = array();
95 $authors[$v_rst["id_source"]][] = $v_rst["id_author"];
99 else $authors = false;
101 $sgbd->close_data($rst);
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"]];
115 else $sources = false;
117 $sgbd->close_data($rst);
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]);
128 if(!($sources[$id_source] = $this->load_source($source))) return false;
133 public function source_has_groupe($id_source, $id_groupe){
134 $sgbd = $this->sgbd();
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"])){
140 ($v_rst["id_source"] == $id_source)
141 && ($v_rst["id_author"] == $id_groupe)
146 else $HAS_THIS_GROUP = false;
148 $sgbd->close_data($rst);
150 else $HAS_THIS_GROUP = false;
151 return $HAS_THIS_GROUP;
154 public function add_source_groupe($id_source, $id_groupe, $id_groupe_status){
155 $sgbd = $this->sgbd();
158 "sml_sources_authors",
160 "id_source" => $id_source,
161 "id_author" => $id_groupe,
162 "id_sources_access" => $id_groupe_status
171 public function set_source_groupe($id, $id_groupe_status){
172 if(($groupe = $this->groupe($id)) !== false){
175 "sml_sources_authors",
178 "id_sources_access" => $id_groupe_status
188 public function del_source_groupes($id_source){
189 $sgbd = $this->sgbd();
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;
198 $sgbd->close_data($rst);
204 public function del_source_groupe($id_source, $id_author){
205 $sgbd = $this->sgbd();
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"])){
211 ($v_rst["id_source"] == $id_source)
212 && ($v_rst["id_author"] == $id_author)
213 && !$sgbd->del_data("sml_sources_authors", $v_rst["id"])
218 $sgbd->close_data($rst);
224 // --------------------------------------------------------------------
226 public function sources_access(){
227 $sgbd = $this->sgbd();
228 $sources_access = array();
229 $sgbd = $this->sgbd();
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;
238 $sgbd->close_data($rst);
241 return $sources_access;
244 public function id_groupe_status_admin(){
247 public function id_groupe_status_editeur(){
250 public function id_groupe_status_contributeur(){
254 public function get_admin_groupe($groupes){
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;
265 public function get_editor_groupes($groupes){
266 $editor_groupes = array();
267 if(is_array($groupes)) foreach($groupes as $source_groupe){
269 $source_groupe["id_groupe_status"] == $this->id_groupe_status_admin()
270 || $source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur()
272 $editor_groupes[] = $source_groupe;
275 return $editor_groupes;
278 public function source_permissions($source, $id_user){
279 $permissions = array(
282 "contributeur" => false
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;
291 elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_editeur()){
292 $permissions["editeur"] = true;
293 $permissions["contributeur"] = true;
295 elseif($source_groupe["id_groupe_status"] == $this->id_groupe_status_contributeur()){
296 $permissions["contributeur"] = true;
303 // --------------------------------------------------------------------
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)){
313 if(!isset($v_rst["id"])) continue;
317 isset($v_rst["id_author"])
318 && isset($groupes_in[$v_rst["id_author"]])
325 && isset($v_rst["id_user"])
326 && $id_user == $v_rst["id_user"]
331 $invitations["list"][$v_rst["id"]] = $v_rst;
332 $invitations["total"]++;
336 $invitations = false;
340 $sgbd->close_data($rst);
342 else $invitations = false;