source: pmb4.2/trunk/fuentes/pmb/classes/cms/cms_section.class.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 12.5 KB
Line 
1<?php
2// +-------------------------------------------------+
3// | 2002-2011 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: cms_section.class.php,v 1.24.4.4 2015-11-26 08:38:53 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9require_once($class_path."/cms/cms_editorial.class.php");
10
11class cms_section extends cms_editorial {
12        public $num_parent;             // id du parent
13        function __construct($id=0,$num_parent=0){
14                //on gère les propriétés communes dans la classe parente
15                parent::__construct($id,"section");
16
17                if($this->id == 0){
18                        $this->num_parent = $num_parent;
19                }
20                $this->opt_elements =array(
21                        'contenu' => false,
22                );
23        }
24
25        protected function fetch_data(){
26                global $dbh;
27                $rqt = "select section_title,section_resume,section_publication_state,section_start_date,section_end_date,section_num_parent,section_num_type,section_creation_date,section_update_timestamp from cms_sections where id_section ='".$this->id."'";
28                $res = pmb_mysql_query($rqt,$dbh);
29                if(pmb_mysql_num_rows($res)){
30                        $row = pmb_mysql_fetch_object($res);
31                        $this->num_type = $row->section_num_type;
32                        $this->title = $row->section_title;
33                        $this->resume = $row->section_resume;
34                        $this->publication_state = $row->section_publication_state;
35                        $this->start_date = $row->section_start_date;
36                        $this->end_date = $row->section_end_date;
37                        $this->num_parent = $row->section_num_parent;           
38                        $this->create_date = $row->section_creation_date;       
39                        $this->last_update_date = $row->section_update_timestamp;       
40                }
41                if(strpos($this->start_date,"0000-00-00")!== false){
42                        $this->start_date = "";
43                }
44                if(strpos($this->end_date,"0000-00-00")!== false){
45                        $this->end_date = "";
46                }
47               
48                $this->get_descriptors();
49                $this->get_fields_type();
50                $this->get_documents();
51        }
52       
53        public function save(){
54                global $dbh;
55               
56                $audit_id = $this->id;
57                if($this->id){
58                        $save = "update ";
59                        $order = "";
60                        $clause = "where id_section = '".$this->id."'";
61                }else{
62                        $save = "insert into ";
63                       
64                        //on place la nouvelle rubrique à la fin par défaut
65                        $query = "SELECT id_section FROM cms_sections WHERE section_num_parent=".addslashes($this->num_parent);
66                        $result = pmb_mysql_query($query,$dbh);
67                        $order = ",section_order = '".(pmb_mysql_num_rows($result)+1)."' ";
68                       
69                        $clause = "";
70                }
71                $save.= "cms_sections set
72                section_title = '".addslashes($this->title)."',
73                section_resume = '".addslashes($this->resume)."',
74                section_publication_state ='".addslashes($this->publication_state)."',
75                section_start_date = '".addslashes($this->start_date)."',
76                section_end_date = '".addslashes($this->end_date)."',
77                section_num_parent = '".addslashes($this->num_parent)."' ,
78                section_num_type = '".$this->num_type."'  ".
79                (!$this->id ? ",section_creation_date=sysdate() " :"")."
80                $order"."
81                $clause";
82                pmb_mysql_query($save,$dbh);
83                if(!$this->id) $this->id = pmb_mysql_insert_id();
84               
85                //au tour des descripteurs...
86                //on commence par tout retirer...
87                $del = "delete from cms_sections_descriptors where num_section = '".$this->id."'";
88                pmb_mysql_query($del,$dbh);
89                for($i=0 ; $i<count($this->descriptors) ; $i++){
90                        $rqt = "insert into cms_sections_descriptors set num_section = '".$this->id."', num_noeud = '".$this->descriptors[$i]."',section_descriptor_order='".$i."'";
91                        pmb_mysql_query($rqt,$dbh);
92                }
93               
94                //et maintenant le logo...
95                $this->save_logo();
96               
97                //enfin les éléments du type de contenu
98                $types = new cms_editorial_types("section");
99                $types->save_type_form($this->num_type,$this->id);
100                $this->maj_indexation();
101               
102                $this->save_documents();
103               
104                //bouton pour le cache
105                $upd = "UPDATE cms_sections SET section_update_timestamp = now() WHERE id_section = '".$this->id."'";
106                pmb_mysql_query($upd,$dbh);
107               
108                //Audit
109                if (!$audit_id) {
110                        audit::insert_creation (AUDIT_EDITORIAL_SECTION, $this->id) ;
111                } else {
112                        audit::insert_modif (AUDIT_EDITORIAL_SECTION, $this->id) ;
113                }
114        }
115       
116        public function duplicate($recursive, $num_parent = 0) {
117                global $dbh;
118                if (!$num_parent) $num_parent = $this->num_parent;
119                       
120                //on place la nouvelle rubrique à la fin par défaut
121                $query = "SELECT id_section FROM cms_sections WHERE section_num_parent=".addslashes($num_parent);
122                $result = pmb_mysql_query($query,$dbh);
123                if ($result) $order = ",section_order = '".(pmb_mysql_num_rows($result)+1)."' ";
124                else $order = ",section_order = 1";
125               
126                $insert = "insert into cms_sections set
127                section_title = '".addslashes($this->title)."',
128                section_resume = '".addslashes($this->resume)."',
129                section_logo = '".addslashes($this->logo->data)."',
130                section_publication_state ='".addslashes($this->publication_state)."',
131                section_start_date = '".addslashes($this->start_date)."',
132                section_end_date = '".addslashes($this->end_date)."',
133                section_num_parent = '".addslashes($num_parent)."' ,
134                section_num_type = '".$this->num_type."' ,
135                section_creation_date=sysdate() ".$order;
136               
137                pmb_mysql_query($insert,$dbh);
138                $id = pmb_mysql_insert_id();
139               
140                //au tour des descripteurs...
141                for($i=0 ; $i<count($this->descriptors) ; $i++){
142                        $rqt = "insert into cms_sections_descriptors set num_section = '".$id."', num_noeud = '".$this->descriptors[$i]."',section_descriptor_order='".$i."'";
143                        pmb_mysql_query($rqt,$dbh);
144                }
145               
146                //on crée la nouvelle instance
147                $new_section = new cms_section($id);
148               
149                //enfin les éléments du type de contenu
150                $types = new cms_editorial_types("section");
151                $types->duplicate_type_form($this->num_type,$id,$this->id);
152                $new_section->maj_indexation();
153               
154                $new_section->documents_linked = $this->documents_linked;
155                $new_section->save_documents();
156               
157                //audit
158                audit::insert_creation (AUDIT_EDITORIAL_SECTION, $id) ;
159               
160                if ($recursive) {
161                        //on duplique les rubriques enfants
162                        $query = "select id_section from cms_sections where section_num_parent = ".$this->id." order by section_order";
163                        $result = pmb_mysql_query($query,$dbh);
164                        if ($result && pmb_mysql_num_rows($result)) {
165                                while ($row = pmb_mysql_fetch_object($result)) {
166                                        $child = new cms_section($row->id_section);
167                                        $child->duplicate($recursive,$id);
168                                }
169                        }
170                       
171                        //on duplique les articles enfants
172                        $query = "select id_article from cms_articles where num_section = ".$this->id." order by article_order";
173                        $result = pmb_mysql_query($query,$dbh);
174                        if ($result && pmb_mysql_num_rows($result)) {
175                                while ($row = pmb_mysql_fetch_object($result)) {
176                                        $article = new cms_article($row->id_article);
177                                        $article->duplicate($id);
178                                }
179                        }
180                }
181        }
182       
183        public function get_parent_selector(){
184                $opts.=$this->_recurse_parent_select();
185                return $opts;
186        }
187       
188        protected function _recurse_parent_select($parent=0,$lvl=0){
189                global $charset;
190                global $msg;
191                global $dbh;
192                if($lvl==0){
193                        $opts = "
194                        <option value='0' >".htmlentities($msg['cms_editorial_form_parent_default_value'],ENT_QUOTES,$charset)."</option>";
195                }else{
196                        $opts = "";
197                }
198                $rqt = "select id_section, section_title from cms_sections where section_num_parent = '".$parent."'";
199                $res = pmb_mysql_query($rqt,$dbh);
200                if(pmb_mysql_num_rows($res)){
201                        while($row = pmb_mysql_fetch_object($res)){
202                                if($this->id != $row->id_section){
203                                        $opts.="
204                                <option value='".$row->id_section."'".($this->num_parent == $row->id_section ? " selected='selected'" : "").">".str_repeat("&nbsp;&nbsp;",$lvl).htmlentities($row->section_title,ENT_QUOTES,$charset)."</option>";
205                                        $opts.=$this->_recurse_parent_select($row->id_section,$lvl+1);
206                                }
207                        }       
208                }
209                return $opts;   
210        }       
211
212        public function is_deletable(){
213                global $msg,$dbh;
214                //on commence par regarder si la rubrique à des articles...
215                $check_article = "select count(id_article) from cms_articles where num_section ='".$this->id."'";
216                $res = pmb_mysql_query($check_article,$dbh);
217                if(pmb_mysql_num_rows($res)>0){
218                        $nb_articles = pmb_mysql_result($res,0,0);
219                        if($nb_articles>0){
220                                return $msg['cms_section_with_articles'];
221                        };
222                }
223                //on est encore la donc pas d'articles, on regarde les rubriques filles...
224                $check_children = "select count(id_section) from cms_sections where section_num_parent ='".$this->id."'";
225                $res = pmb_mysql_query($check_children,$dbh);
226                if(pmb_mysql_num_rows($res)){
227                        $nb_children = pmb_mysql_result($res,0,0);
228                        if($nb_children>0){
229                                return $msg['cms_section_has_children'];
230                        }
231                }
232                return true;
233        }
234       
235        public function format_datas($get_children= true,$get_articles = true,$filter = true, $get_parent=false){
236                $documents = array();
237                foreach($this->documents_linked as $id_doc){
238                        $document = new cms_document($id_doc);
239                        $documents[] = $document->format_datas();
240                }
241                $result = array(
242                        'id' => $this->id,
243                        'num_parent' =>$this->num_parent,
244                        'title' => $this->title,
245                        'resume' => $this->resume,
246                        'logo' => $this->logo->format_datas(),
247                        'publication_state' => $this->publication_state,
248                        'start_date' => $this->start_date,
249                        'end_date' => $this->end_date,
250                        'descriptors' => $this->descriptors,
251                        'type' => $this->type_content,
252                        'fields_type' => $this->fields_type,
253                        'create_date' => $this->create_date,
254                        'documents' => $documents,
255                        'nb_documents' => count($documents),
256                        'last_update_date' => format_date($this->last_update_date)
257                );
258                if($get_children){
259                        $result['children'] = $this->get_children($filter);
260                }
261                if($get_articles){
262                        $result['articles'] = $this->get_articles($filter);
263                }
264                if ($get_parent && $result['num_parent']) {
265                        $cms_parent_section = new cms_section($result['num_parent']);
266                        $result['parent'] = $cms_parent_section->format_datas(false, false);
267                }
268                return $result;
269        }
270       
271        public function get_children($filter){
272                global $dbh;
273                $children = array();
274                if($this->id){
275                        $query = "select id_section from cms_sections JOIN cms_editorial_publications_states ON section_publication_state=id_publication_state where section_num_parent = ".$this->id;
276                        if($filter){
277                                $query.= " and ((section_start_date != 0 and to_days(section_start_date)<=to_days(now()) and to_days(section_end_date)>=to_days(now()))||(section_start_date != 0 and section_end_date =0 and to_days(section_start_date)<=to_days(now()))||(section_start_date = 0 and to_days(section_end_date)>=to_days(now()))||(section_start_date = 0 and section_end_date = 0)) and (editorial_publication_state_opac_show=1".(!$_SESSION['id_empr_session'] ? " and editorial_publication_state_auth_opac_show = 0" : "").") ";;
278                        }
279                        $query .= " order by section_order";
280                        $result = pmb_mysql_query($query,$dbh);
281                        if(pmb_mysql_num_rows($result)){
282                                while ($row = pmb_mysql_fetch_object($result)){
283                                        $child = new cms_section($row->id_section);
284                                        $children[] = $child->format_datas();
285                                }
286                        }
287                }       
288                return $children;       
289        }
290       
291        public function get_articles($filter){
292                global $dbh;
293                $articles = array();
294                if($this->id){
295                        $query = "select id_article from cms_articles JOIN cms_editorial_publications_states ON article_publication_state=id_publication_state where num_section = ".$this->id;
296                        if($filter){
297                                $query.= " and ((article_start_date != 0 and to_days(article_start_date)<=to_days(now()) and to_days(article_end_date)>=to_days(now()))||(article_start_date != 0 and article_end_date =0 and to_days(article_start_date)<=to_days(now()))||(article_start_date=0 and article_end_date=0)||(article_start_date = 0 and to_days(article_end_date)>=to_days(now()))) and (editorial_publication_state_opac_show=1".(!$_SESSION['id_empr_session'] ? " and editorial_publication_state_auth_opac_show = 0" : "").") ";
298                        }
299                        $query .= " order by article_order";
300                        $result = pmb_mysql_query($query,$dbh);
301                        if(pmb_mysql_num_rows($result)){
302                                while ($row = pmb_mysql_fetch_object($result)){
303                                        $article = new cms_article($row->id_article);
304                                        $articles[] = $article->format_datas();
305                                }
306                        }       
307                }
308                return $articles;                       
309        }
310       
311        public static function get_format_data_structure($get_children= true,$get_articles = true,$full=true, $get_parent = false){
312                global $msg;
313                $format = cms_editorial::get_format_data_structure("section",$full);
314                if ($get_parent) {
315                        $format[] = array(
316                                'var' => "parent",
317                                'desc' => $msg['cms_editorial_desc_parent_section'],
318                                'children' => self::prefix_var_tree(cms_section::get_format_data_structure(false, false),"parent")
319                        );
320                }
321                if($get_children){
322                        $format[] = array(
323                                'var' => 'children',
324                                'desc'=> $msg['cms_editorial_desc_children'],
325                                'children' => self::prefix_var_tree(cms_section::get_format_data_structure(false,false),"children[i]")
326                        );
327                }
328                if($get_articles){
329                        $format[] = array(
330                                'var' => 'articles',
331                                'desc'=> $msg['cms_editorial_desc_articles'],
332                                'children' => self::prefix_var_tree(cms_article::get_format_data_structure(),"articles[i]")
333                        );                     
334                }                       
335                return $format;
336        }
337}
Note: See TracBrowser for help on using the repository browser.