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

Last change on this file since 34591 was 34591, checked in by booz@…, 10 years ago

on peut exporter des rubriques avec auteur mots cles et documents dans les articles

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