source: spip-zone/_plugins_/snippets/snippets/articles/importer.php @ 53451

Last change on this file since 53451 was 53451, checked in by yffic@…, 8 years ago

if (!defined("_ECRIRE_INC_VERSION")) return; sur tout fichier PHP pour sécurité future principalement

File size: 7.2 KB
Line 
1<?php
2/*
3 * snippets
4 * Gestion d'import/export XML de contenu
5 *
6 * Auteurs :
7 * Cedric Morin
8 * � 2006 - Distribue sous licence GNU/GPL
9 *
10 */
11if (!defined("_ECRIRE_INC_VERSION")) return;
12
13
14function snippets_articles_importer($id_target,$arbre,$contexte){
15        include_spip('base/serial');
16        include_spip('base/abstract_sql');
17        include_spip('inc/snippets');
18       
19        $table_prefix = $GLOBALS['table_prefix'] ;
20
21        $champs_non_importables = array("id_article","id_rubrique","id_secteur","maj","export","visites","referers","popularite","id_trad","idx","id_version","url_propre");
22        $champs_non_ajoutables = array('titre','date','date_redac','lang');
23        $champs_jointures = array('auteur','mot');
24        $champs_defaut_values = array('statut'=>'lememe');
25        $table = 'spip_articles';
26        $primary = 'id_article';
27        $fields = $GLOBALS['tables_principales']['spip_articles']['field'];
28        $tag_objets="articles";
29        $tag_objet="article";
30        $translations = array();
31       
32        $forcer_id = false ; // mettre true pour garder les meme id que dans le XML
33        $forcer_maj = false ; // mettre true pour mettre a jour un lot d'articles de meme titre que dans le spip cible
34       
35       
36        if ($arbre && isset($arbre[$tag_objets]))
37                foreach($arbre[$tag_objets] as $objets){
38                        foreach($objets[$tag_objet] as $objet){
39                        spip_log($objet['titre'],"snippets");
40                                $creation = false;
41                                $auteur_connu = false ;
42                               
43                                // mettre a jour des articles deja en bdd avec le xml fournit
44                                if($forcer_maj){
45                                $id_target = '';
46                                $id_article_trouve = sql_fetsel("id_article","spip_articles","titre=".sql_quote($objet['titre'][0])); // ajouter la rub courrante
47                                $id_target = $id_article_trouve['id_article'] ;
48                                if(!intval($id_target))
49                                        spip_log($objet['titre'][0].$id_target,"snippets_titres_erreur");
50                                }
51                               
52                                include_spip('action/editer_article');
53                                // si c'est une creation, creer le formulaire avec les infos d'entete
54                                if (!($id_objet=intval($id_target))){
55                                        if (preg_match(",id_rubrique=([0-9]*),i",$contexte,$regs))
56                                                $id_rubrique=intval($regs[1]);
57                                        $id_objet = insert_article($id_rubrique);
58                                       
59                                        // forcer l'id
60                                        if($forcer_id){
61                                        $champs_non_importables = array("id_rubrique","id_secteur","maj","export","visites","referers","popularite","id_trad","idx","id_version","url_propre");
62                                        $sql = "UPDATE ".$table_prefix."_articles SET id_article = '".$objet['id_article'][0]."' WHERE id_article = '$id_objet'";
63                                spip_query($sql); 
64                                $id_objet = $objet['id_article'][0] ;
65                                        }
66                                       
67                                        $creation = true;
68                                }
69                                // sinon on ajoute chaque champ, sauf le titre
70                                $row = spip_fetch_array(spip_query("SELECT * FROM $table WHERE $primary="._q($id_objet)));
71                                foreach (array_keys($row) as $key)
72                                        if (    !in_array($key,$champs_non_importables) 
73                                                AND !in_array($key,$champs_jointures) 
74                                                AND ($creation OR !in_array($key,$champs_non_ajoutables) OR !$row[$key])
75                                                AND isset($objet[$key])){
76                                                $v=trim(spip_xml_aplatit($objet[$key]));
77                                                $row[$key] = ($creation or $forcer_maj)?$v:($row[$key].$v);
78                                        }
79                                                               
80                                revisions_articles($id_objet , $row);
81                                $translations[] = array($table,$objet[$primary],$id_objet);
82                                // gerer l'import de liens eventuels
83                                if ($id AND isset($objet['liens'])){
84                                        foreach($objet['liens'] as $liens){
85                                                // A FAIRE
86                                        }
87                                }
88                               
89                                $id_article = $id_objet ; 
90                               
91                                if ( $objet['auteur'] AND ($creation OR $forcer_maj)){
92                                        $auteur_connu = true ;
93                                        sql_delete("spip_auteurs_articles","id_article=".sql_quote($id_article));
94                                        foreach($objet['auteur'] as $nom){
95                                        // ajouter l'auteur
96                                                spip_log($nom,"snippets");
97                                                $id_auteur = get_id_auteur($nom);
98                                         if ($id_auteur) { 
99                                         spip_log($nom.$id_auteur,"snippets");
100                                         $sql="INSERT INTO ".$table_prefix."_auteurs_articles (id_auteur, id_article) VALUES ($id_auteur, $id_article)";
101                                         spip_query($sql);                                                                             
102                                        }                                                                       
103                                        }
104                                }       
105                               
106                                if($auteur_connu){
107                                // se virer soi-meme
108                        $connect_id_auteur = $GLOBALS['visiteur_session']['id_auteur'] ;
109                        $sql = "DELETE FROM ".$table_prefix."_auteurs_articles WHERE id_auteur = '$connect_id_auteur' AND id_article = '$id_article'";
110                        spip_query($sql); 
111                        }
112                       
113                        // statut de l'article
114                        if($champs_defaut_values['statut'] != 'prepa'){
115                        $sql = "UPDATE ".$table_prefix."_articles SET statut = '".$objet['statut'][0]."' WHERE id_article = '$id_article'";
116                        spip_query($sql); 
117                        }
118                       
119                       
120                        if ( $objet['mot'] AND ($creation OR $forcer_maj)){
121                       
122                                        sql_delete("spip_mots_articles","id_article=".sql_quote($id_article));
123                                        foreach($objet['mot'] as $mot){
124                                        spip_log($mot,"snippets");
125                                        // ajouter le mot cle
126                                        $id_article = $id_objet ;
127                                        $table_prefix = $GLOBALS['table_prefix'] ;
128                                                $id_mot  = get_id_mot($mot);
129                                         if ($id_mot) {                                                 
130                                         $sql="INSERT INTO ".$table_prefix."_mots_articles (id_mot, id_article) VALUES ($id_mot, $id_article)";
131                                         spip_query($sql);                                                                             
132                                        }                                                                       
133                                        }
134                                }       
135                       
136                       
137                       
138                        if ( $objet['document'] AND ($creation OR $forcer_maj)){
139                       
140                                        sql_delete("spip_documents_liens","id_objet=".sql_quote($id_article)." and objet='article'");
141                                        foreach($objet['document'] as $doc){
142                                        spip_log("--> ".$doc,"snippets");
143                                        // ajouter le doc
144                                        list($id,$fichier,$extension,$titre,$descriptif) = explode('|',$doc) ;
145                                        spip_log("--- $id,$fichier,$extension,$titre","snippets");
146                                        spip_log("hop ".$fichier,"snippets");
147                                        $table_prefix = $GLOBALS['table_prefix'] ;
148                                                 $id_doc  = get_id_doc($fichier);
149                                         if ($id_doc) {                                                 
150                                         spip_log("hop doc".$fichier."trouve".$id_doc,"snippets");
151                                         $sql="INSERT INTO ".$table_prefix."_documents_liens (id_document, id_objet, objet) VALUES ($id_doc, $id_article,'article')";
152                                         spip_query($sql);                                                                             
153                                         }else{
154                                         // au cas ou, on creer un doc, mais il vaut mieux transferer les doc avec toutes les infos avant de snippet
155                                         $a =  array(
156                                                        'date' => 'NOW()',
157                                                        'distant' => 'non',
158                                                        'mode' => 'image',
159                                                        'titre'=> $titre,
160                                                        'descriptif'=> $descriptif,
161                                                        'extension'=> $extension,
162                                                        'fichier' => $fichier );
163                                                       
164                                                        //'largeur' => $largeur,
165                                                        //'hauteur' => $hauteur,
166                                                        //'taille' => $taille,
167                                                       
168                                                if($forcer_id) $a['id_document'] = $id ;       
169                                       
170                                        $id = sql_insertq("spip_documents", $a);
171                                        spip_log ("ajout du document $fichier $titre  (M 'image' T 'article' L '$id_article' D '$id')","snippets");
172                                       
173                                        sql_insertq("spip_documents_articles",
174                                array('id_document' => $id,
175                            'id_article' => $id_article));
176                                         
177                                         }
178                                       
179                                        }
180                                }
181               
182                       
183                       
184                        }
185                }
186        return $translations;
187}
188
189
190
191?>
Note: See TracBrowser for help on using the repository browser.