source: pmb4.2/trunk/fuentes/pmb/classes/cms/cms_article.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: 7.7 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_article.class.php,v 1.19.4.3 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
11
12
13class cms_article extends cms_editorial {
14       
15        public function __construct($id=0,$num_parent=0){
16                //on gère les propriétés communes dans la classe parente
17                parent::__construct($id,"article",$num_parent);
18
19                $this->opt_elements = array(
20                        'contenu' => true
21                );
22        }
23       
24        protected function fetch_data(){
25                global $dbh,$lang;
26               
27                if(!$this->id)
28                        return false;
29               
30                // les infos générales...       
31                $rqt = "select * from cms_articles where id_article ='".$this->id."'";
32                $res = pmb_mysql_query($rqt,$dbh);
33                if(pmb_mysql_num_rows($res)){
34                        $row = pmb_mysql_fetch_object($res);
35                        $this->num_type = $row->article_num_type;
36                        $this->title = $row->article_title;
37                        $this->resume = $row->article_resume;
38                        $this->contenu = $row->article_contenu;
39                        $this->publication_state = $row->article_publication_state;
40                        $this->start_date = $row->article_start_date;
41                        $this->end_date = $row->article_end_date;
42                        $this->num_parent = $row->num_section;         
43                        $this->create_date = $row->article_creation_date;
44                        $this->last_update_date = $row->article_update_timestamp;
45                }
46                if(strpos($this->start_date,"0000-00-00")!== false){
47                        $this->start_date = "";
48                }
49                if(strpos($this->end_date,"0000-00-00")!== false){
50                        $this->end_date = "";
51                }
52
53                $this->get_descriptors();
54                $this->get_fields_type();
55                $this->get_documents();
56        }
57
58        public function save(){
59                global $dbh;
60               
61                $audit_id = $this->id;
62                if($this->id){
63                        $save = "update ";
64                        $order = "";
65                        $clause = "where id_article = '".$this->id."'";
66                }else{
67                        $save = "insert into ";
68                       
69                        //on place le nouvel article à la fin par défaut
70                        $query = "SELECT id_article FROM cms_articles WHERE num_section=".addslashes($this->num_parent);
71                        $result = pmb_mysql_query($query,$dbh);
72                        $order = ",article_order = '".(pmb_mysql_num_rows($result)+1)."' ";
73                       
74                        $clause = "";
75                }
76                $save.= "cms_articles set
77                article_title = '".addslashes($this->title)."',
78                article_resume = '".addslashes($this->resume)."',
79                article_contenu = '".addslashes($this->contenu)."',
80                article_publication_state ='".addslashes($this->publication_state)."',
81                article_start_date = '".addslashes($this->start_date)."',
82                article_end_date = '".addslashes($this->end_date)."',
83                num_section = '".addslashes($this->num_parent)."',
84                article_num_type = '".$this->num_type."' ".
85                (!$this->id ? ",article_creation_date=sysdate() " :"")."
86                $order"."
87                $clause";
88                pmb_mysql_query($save,$dbh);
89                if(!$this->id) $this->id = pmb_mysql_insert_id();
90                //au tour des descripteurs...
91                //on commence par tout retirer...
92                $del = "delete from cms_articles_descriptors where num_article = '".$this->id."'";
93                pmb_mysql_query($del,$dbh);
94                for($i=0 ; $i<count($this->descriptors) ; $i++){
95                        $rqt = "insert into cms_articles_descriptors set num_article = '".$this->id."', num_noeud = '".$this->descriptors[$i]."',article_descriptor_order='".$i."'";
96                        pmb_mysql_query($rqt,$dbh);
97                }
98                       
99                //et maintenant le logo...
100                $this->save_logo();
101               
102                //enfin les éléments du type de contenu
103                $types = new cms_editorial_types("article");
104                $types->save_type_form($this->num_type,$this->id);
105                $this->maj_indexation();
106               
107                $this->save_documents();
108               
109                //bouton pour le cache
110                $upd = "UPDATE cms_articles SET article_update_timestamp = now() WHERE id_article = '".$this->id."'";
111                pmb_mysql_query($upd,$dbh);
112               
113                //Audit
114                if (!$audit_id) {
115                        audit::insert_creation (AUDIT_EDITORIAL_ARTICLE, $this->id) ;
116                } else {
117                        audit::insert_modif (AUDIT_EDITORIAL_ARTICLE, $this->id) ;
118                }
119        }
120
121        public function duplicate($num_parent = 0) {
122                global $dbh;
123                if (!$num_parent) $num_parent = $this->num_parent;
124                       
125                //on place le nouvel article à la fin par défaut
126                $query = "SELECT id_article FROM cms_articles WHERE num_section=".addslashes($num_parent);
127                $result = pmb_mysql_query($query);
128                if ($result) $order = ",article_order = '".(pmb_mysql_num_rows($result)+1)."' ";
129                else $order = ",article_order = 1";
130               
131                $insert = "insert into cms_articles set
132                article_title = '".addslashes($this->title)."',
133                article_resume = '".addslashes($this->resume)."',
134                article_contenu = '".addslashes($this->contenu)."',
135                article_logo = '".addslashes($this->logo->data)."',
136                article_publication_state ='".addslashes($this->publication_state)."',
137                article_start_date = '".addslashes($this->start_date)."',
138                article_end_date = '".addslashes($this->end_date)."',
139                num_section = '".addslashes($num_parent)."',
140                article_num_type = '".$this->num_type."',
141                article_creation_date=sysdate() ".$order;
142               
143                pmb_mysql_query($insert,$dbh);
144                $id = pmb_mysql_insert_id();
145               
146                //au tour des descripteurs...
147                for($i=0 ; $i<count($this->descriptors) ; $i++){
148                        $rqt = "insert into cms_articles_descriptors set num_article = '".$id."', num_noeud = '".$this->descriptors[$i]."',article_descriptor_order='".$i."'";
149                        pmb_mysql_query($rqt,$dbh);
150                }
151               
152                //on crée la nouvelle instance
153                $new_article = new cms_article($id);
154               
155                //enfin les éléments du type de contenu
156                $types = new cms_editorial_types("article");
157                $types->duplicate_type_form($this->num_type,$id,$this->id);
158                $new_article->maj_indexation();
159               
160                $new_article->documents_linked = $this->documents_linked;
161                $new_article->save_documents();
162               
163                //audit
164                audit::insert_creation (AUDIT_EDITORIAL_ARTICLE, $id) ;
165        }
166       
167        public function get_parent_selector(){
168                $opts.=$this->_recurse_parent_select();
169                return $opts;
170        }
171       
172        protected function _recurse_parent_select($parent=0,$lvl=0){
173                global $charset;
174                global $msg;
175                global $dbh;
176                $opts = "";
177                $rqt = "select id_section, section_title from cms_sections where section_num_parent = '".$parent."'";
178                $res = pmb_mysql_query($rqt,$dbh);
179                if(pmb_mysql_num_rows($res)){
180                        while($row = pmb_mysql_fetch_object($res)){
181                                $opts.="
182                                <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>";
183                                $opts.=$this->_recurse_parent_select($row->id_section,$lvl+1);
184                        }       
185                }
186                return $opts;   
187        }
188       
189        public function update_parent_section($num_section,$order=0){
190                global $dbh;
191                $this->num_section = $num_section;
192                $update = "update cms_articles set num_section ='".$num_section."', article_order = '".$order."' where id_article = '".$this->id."'";
193                pmb_mysql_query($update,$dbh);
194        }
195       
196        protected function is_deletable(){
197                return true;
198        }
199       
200        public function format_datas(){
201                $parent = new cms_section($this->num_parent);
202                $documents = array();
203                foreach($this->documents_linked as $id_doc){
204                        $document = new cms_document($id_doc);
205                        $documents[] = $document->format_datas();
206                }
207                return array(
208                        'id' => $this->id,
209                        'parent' => $parent->format_datas(false,false),
210                        'title' => $this->title,
211                        'resume' => $this->resume,
212                        'logo' => $this->logo->format_datas(),
213                        'publication_state' => $this->publication_state,
214                        'start_date' => format_date($this->start_date),
215                        'end_date' => format_date($this->end_date),
216                        'descriptors' => $this->descriptors,
217                        'content' => $this->contenu,
218                        'type' => $this->type_content,
219                        'fields_type' => $this->fields_type,
220                        'create_date' => $this->create_date,
221                        'documents' => $documents,
222                        'nb_documents' => count($documents),
223                        'last_update_date' => format_date($this->last_update_date)
224                );
225        }
226       
227        public static function get_format_data_structure($type="article",$full=true){
228                return cms_editorial::get_format_data_structure($type,$full);
229        }
230}
Note: See TracBrowser for help on using the repository browser.