source: pmb4.1/trunk/fuentes/pmb/classes/cms/cms_section.class.php @ 478

Last change on this file since 478 was 478, checked in by mabarracus, 4 years ago

copy trusty code 4.1

  • Property svn:executable set to *
File size: 11.2 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.19.2.2 2014-11-21 16:13:51 dgoron 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                $rqt = "select section_title,section_resume,section_publication_state,section_start_date,section_end_date,section_num_parent,section_num_type,section_creation_date from cms_sections where id_section ='".$this->id."'";
27                $res = mysql_query($rqt);
28                if(mysql_num_rows($res)){
29                        $row = mysql_fetch_object($res);
30                        $this->num_type = $row->section_num_type;
31                        $this->title = $row->section_title;
32                        $this->resume = $row->section_resume;
33                        $this->publication_state = $row->section_publication_state;
34                        $this->start_date = $row->section_start_date;
35                        $this->end_date = $row->section_end_date;
36                        $this->num_parent = $row->section_num_parent;           
37                        $this->create_date = $row->section_creation_date;       
38                }
39                if(strpos($this->start_date,"0000-00-00")!== false){
40                        $this->start_date = "";
41                }
42                if(strpos($this->end_date,"0000-00-00")!== false){
43                        $this->end_date = "";
44                }
45               
46                $this->get_descriptors();
47                $this->get_fields_type();
48                $this->get_documents();
49        }
50       
51        public function save(){
52                if($this->id){
53                        $save = "update ";
54                        $order = "";
55                        $clause = "where id_section = '".$this->id."'";
56                }else{
57                        $save = "insert into ";
58                       
59                        //on place la nouvelle rubrique à la fin par défaut
60                        $query = "SELECT id_section FROM cms_sections WHERE section_num_parent=".addslashes($this->num_parent);
61                        $result = mysql_query($query);
62                        $order = ",section_order = '".(mysql_num_rows($result)+1)."' ";
63                       
64                        $clause = "";
65                }
66                $save.= "cms_sections set
67                section_title = '".addslashes($this->title)."',
68                section_resume = '".addslashes($this->resume)."',
69                section_publication_state ='".addslashes($this->publication_state)."',
70                section_start_date = '".addslashes($this->start_date)."',
71                section_end_date = '".addslashes($this->end_date)."',
72                section_num_parent = '".addslashes($this->num_parent)."' ,
73                section_num_type = '".$this->num_type."'  ".
74                (!$this->id ? ",section_creation_date=sysdate() " :"")."
75                $order"."
76                $clause";
77                mysql_query($save);
78                if(!$this->id) $this->id = mysql_insert_id();
79               
80                //au tour des descripteurs...
81                //on commence par tout retirer...
82                $del = "delete from cms_sections_descriptors where num_section = '".$this->id."'";
83                mysql_query($del);
84                for($i=0 ; $i<count($this->descriptors) ; $i++){
85                        $rqt = "insert into cms_sections_descriptors set num_section = '".$this->id."', num_noeud = '".$this->descriptors[$i]."',section_descriptor_order='".$i."'";
86                        mysql_query($rqt);
87                }
88               
89                //et maintenant le logo...
90                $this->save_logo();
91               
92                //enfin les éléments du type de contenu
93                $types = new cms_editorial_types("section");
94                $types->save_type_form($this->num_type,$this->id);
95                $this->maj_indexation();
96               
97                $this->save_documents();
98        }
99       
100        public function duplicate($recursive, $num_parent = 0) {
101                if (!$num_parent) $num_parent = $this->num_parent;
102                       
103                //on place la nouvelle rubrique à la fin par défaut
104                $query = "SELECT id_section FROM cms_sections WHERE section_num_parent=".addslashes($num_parent);
105                $result = mysql_query($query);
106                if ($result) $order = ",section_order = '".(mysql_num_rows($result)+1)."' ";
107                else $order = ",section_order = 1";
108               
109                $insert = "insert into cms_sections set
110                section_title = '".addslashes($this->title)."',
111                section_resume = '".addslashes($this->resume)."',
112                section_logo = '".addslashes($this->logo->data)."',
113                section_publication_state ='".addslashes($this->publication_state)."',
114                section_start_date = '".addslashes($this->start_date)."',
115                section_end_date = '".addslashes($this->end_date)."',
116                section_num_parent = '".addslashes($num_parent)."' ,
117                section_num_type = '".$this->num_type."' ,
118                section_creation_date=sysdate() ".$order;
119               
120                mysql_query($insert);
121                $id = mysql_insert_id();
122               
123                //au tour des descripteurs...
124                for($i=0 ; $i<count($this->descriptors) ; $i++){
125                        $rqt = "insert into cms_sections_descriptors set num_section = '".$id."', num_noeud = '".$this->descriptors[$i]."',section_descriptor_order='".$i."'";
126                        mysql_query($rqt);
127                }
128               
129                //on crée la nouvelle instance
130                $new_section = new cms_section($id);
131               
132                //enfin les éléments du type de contenu
133                $types = new cms_editorial_types("section");
134                $types->duplicate_type_form($this->num_type,$id);
135                $new_section->maj_indexation();
136               
137                $new_section->documents_linked = $this->documents_linked;
138                $new_section->save_documents();
139               
140                if ($recursive) {
141                        //on duplique les rubriques enfants
142                        $query = "select id_section from cms_sections where section_num_parent = ".$this->id." order by section_order";
143                        $result = mysql_query($query);
144                        if ($result && mysql_num_rows($result)) {
145                                while ($row = mysql_fetch_object($result)) {
146                                        $child = new cms_section($row->id_section);
147                                        $child->duplicate($recursive,$id);
148                                }
149                        }
150                       
151                        //on duplique les articles enfants
152                        $query = "select id_article from cms_articles where num_section = ".$this->id." order by article_order";
153                        $result = mysql_query($query);
154                        if ($result && mysql_num_rows($result)) {
155                                while ($row = mysql_fetch_object($result)) {
156                                        $article = new cms_article($row->id_article);
157                                        $article->duplicate($id);
158                                }
159                        }
160                }
161        }
162       
163        public function get_parent_selector(){
164                $opts.=$this->_recurse_parent_select();
165                return $opts;
166        }
167       
168        protected function _recurse_parent_select($parent=0,$lvl=0){
169                global $charset;
170                global $msg;
171                if($lvl==0){
172                        $opts = "
173                        <option value='0' >".htmlentities($msg['cms_editorial_form_parent_default_value'],ENT_QUOTES,$charset)."</option>";
174                }else{
175                        $opts = "";
176                }
177                $rqt = "select id_section, section_title from cms_sections where section_num_parent = '".$parent."'";
178                $res = mysql_query($rqt);
179                if(mysql_num_rows($res)){
180                        while($row = mysql_fetch_object($res)){
181                                if($this->id != $row->id_section){
182                                        $opts.="
183                                <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>";
184                                        $opts.=$this->_recurse_parent_select($row->id_section,$lvl+1);
185                                }
186                        }       
187                }
188                return $opts;   
189        }       
190
191        public function is_deletable(){
192                global $msg;
193                //on commence par regarder si la rubrique à des articles...
194                $check_article = "select count(id_article) from cms_articles where num_section ='".$this->id."'";
195                $res = mysql_query($check_article);
196                if(mysql_num_rows($res)>0){
197                        $nb_articles = mysql_result($res,0,0);
198                        if($nb_articles>0){
199                                return $msg['cms_section_cant_delete_with_articles'];
200                        };
201                }
202                //on est encore la donc pas d'articles, on regarde les rubriques filles...
203                $check_children = "select count(id_section) from cms_sections where section_num_parent ='".$this->id."'";
204                $res = mysql_query($check_children);
205                if(mysql_num_rows($res)){
206                        $nb_children = mysql_result($res,0,0);
207                        if($nb_children>0){
208                                return $msg['cms_section_has_children'];
209                        }
210                }
211                return true;
212        }
213       
214        public function format_datas($get_children= true,$get_articles = true,$filter = true){
215                if ($this->logo->data) $logo_exists = true;
216                else $logo_exists = false;
217                $documents = array();
218                foreach($this->documents_linked as $id_doc){
219                        $document = new cms_document($id_doc);
220                        $documents[] = $document->format_datas();
221                }
222                $result = array(
223                        'id' => $this->id,
224                        'num_parent' =>$this->num_parent,
225                        'title' => $this->title,
226                        'resume' => $this->resume,
227                        'logo' => array(
228                                'small_vign' => $this->logo->get_vign_url("small_vign"),
229                                'vign' =>$this->logo->get_vign_url("vign"),
230                                'large' =>$this->logo->get_vign_url("large"),
231                                'exists' => $logo_exists
232                        ),
233                        'publication_state' => $this->publication_state,
234                        'start_date' => $this->start_date,
235                        'end_date' => $this->end_date,
236                        'descriptors' => $this->descriptors,
237                        'type' => $this->type_content,
238                        'fields_type' => $this->fields_type,
239                        'create_date' => $this->create_date,
240                        'documents' => $documents,
241                        'nb_documents' => count($documents)
242                );
243                if($get_children){
244                        $result['children'] = $this->get_children($filter);
245                }
246                if($get_articles){
247                        $result['articles'] = $this->get_articles($filter);
248                }
249                return $result;
250        }
251       
252        public function get_children($filter){
253                $children = array();
254                if($this->id){
255                        $query = "select id_section from cms_sections where section_num_parent = ".$this->id;
256                        if($filter){
257                                $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))";
258                        }
259                        $query .= " order by section_order";
260                        $result = mysql_query($query);
261                        if(mysql_num_rows($result)){
262                                while ($row = mysql_fetch_object($result)){
263                                        $child = new cms_section($row->id_section);
264                                        $children[] = $child->format_datas();
265                                }
266                        }
267                }       
268                return $children;       
269        }
270       
271        public function get_articles($filter){
272                $articles = array();
273                if($this->id){
274                        $query = "select id_article from cms_articles JOIN cms_editorial_publications_states ON article_publication_state=id_publication_state where num_section = ".$this->id." and (editorial_publication_state_opac_show=1".(!$_SESSION['id_empr_session'] ? " and editorial_publication_state_auth_opac_show = 0" : "").") ";
275                        if($filter){
276                                $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())))";
277                        }
278                        $query .= " order by article_order";
279                        $result = mysql_query($query);
280                        if(mysql_num_rows($result)){
281                                while ($row = mysql_fetch_object($result)){
282                                        $article = new cms_article($row->id_article);
283                                        $articles[] = $article->format_datas();
284                                }
285                        }       
286                }
287                return $articles;                       
288        }
289       
290        public static function get_format_data_structure($get_children= true,$get_articles = true,$full=true){
291                global $msg;
292                $format = cms_editorial::get_format_data_structure("section",$full);
293                if($get_children){
294                        $format[] = array(
295                                'var' => 'children',
296                                'desc'=> $msg['cms_editorial_desc_children'],
297                                'children' => self::prefix_var_tree(cms_section::get_format_data_structure(false,false),"children[i]")
298                        );
299                }
300                if($get_articles){
301                        $format[] = array(
302                                'var' => 'articles',
303                                'desc'=> $msg['cms_editorial_desc_articles'],
304                                'children' => self::prefix_var_tree(cms_article::get_format_data_structure(),"articles[i]")
305                        );                     
306                }                       
307                return $format;
308        }
309}
Note: See TracBrowser for help on using the repository browser.