source: spip-zone/_plugins_/breves_vers_articles/breves_vers_articles_fonctions.php @ 48030

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

Ajout d'options dans l'interface d'administration : gestion du statut des breves converties ; et choix de la rubrique d'origine de la bréve

File size: 6.8 KB
Line 
1<?php
2//
3// Auteur : Didier, JLuc, www.ouhpla.net
4//
5// Licence GPL
6//
7//
8// Transforme les brèves de tout le site en articles,
9// les met dans une même rubrique
10// et leur attribue optionnellement un même auteur
11
12include_spip('base/breves_vers_articles_base');
13
14
15function breves_vers_articles($id_breve, $id_rubrique, $id_auteur, $statut_br) {
16        $nouvel_article = array();
17        $message = "";
18       
19        // Si on a deja fait le process sur la breve, en phase de test par exemple, alors on saute.
20        $id_article = sql_getfetsel('id_article', TABLE_BREVES_ARTICLES, 'id_breve='.$id_breve);
21        if($id_article!=false) {
22                return 'Breve n°'.$id_breve.'deja traitée, vers l\'article '.$id_article;
23        }
24       
25        if(!$resultats = sql_select('*', 'spip_breves', 'id_breve='.$id_breve)) {
26                return ' erreur sur sql_select, avec n°breve:'.$id_breve.'<br>'.sql_error();
27        }
28        if(sql_count($resultats)<1) {
29                return ' Pas de brève n°'.$id_breve.' trouvée';
30        }
31
32        $res = sql_fetch($resultats);
33
34        // une breve = > date_heure titre texte lien_titre lien_url statut id_rubrique
35       
36        // un article => surtitre titre soustitre id_rubrique descriptif chapo texte ps date statut id_secteur
37        //               maj export date_redac visites referers popularite accepter_forum date_modif
38        //               lang langue_choisie id_trad nom_site url_site
39
40        $nouvel_article['titre'] = $res['titre'];
41
42        $nouvel_article['texte'] = $res['texte'];
43
44        $nouvel_article['date'] = $res['date_heure'];
45        $nouvel_article['date_modif'] = $res['date_heure'];
46        $nouvel_article['date_redac'] = $res['date_heure'];
47
48        $nouvel_article['nom_site'] = $res['lien_titre'];
49
50        $nouvel_article['url_site'] = $res['lien_url'];
51
52        $nouvel_article['statut'] = $res['statut'];
53
54        if($id_rubrique==false) {
55                // Le nouvel article est créé dans la rubrique d'origine de la bréve
56                $id_rubrique = $res['id_rubrique'];
57        }
58        // Sinon, tous les nouveux articles sont créés dans une rubrique unique ; rien à faire dans ce cas
59       
60        $nouvel_article['id_rubrique'] = $id_rubrique;
61        $secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique='.intval($id_rubrique));
62        $nouvel_article['id_secteur'] = $secteur;
63       
64
65        // recherche du titre du secteur de la breve
66        $secteur = sql_getfetsel('titre', 'spip_rubriques', 'id_rubrique='.$res['id_rubrique']);
67        $nouvel_article['surtitre'] = $secteur;
68       
69        // champs par defaut sur la création d'un article
70        $nouvel_article['accepter_forum'] = 'pos';
71        $nouvel_article['lang'] = 'fr';
72        $nouvel_article['langue_choisie'] = 'oui';
73        $nouvel_article['id_trad'] = '0';
74        $nouvel_article['id_version'] = '1';
75        $nouvel_article['export'] = 'oui';
76       
77        $id_article = sql_insertq('spip_articles', $nouvel_article);
78        $message.="<br>Bréve n°".$id_breve." vers l'article ".$id_article;
79
80        // relation article <=> auteur
81        if($id_auteur != '')
82                sql_insertq('spip_auteurs_articles', array('id_auteur' => $id_auteur, 'id_article' => $id_article));
83
84        // on s'occupe du logo
85        $logobr = IMG_SPIP_PATH."/breveon".$id_breve;
86        $logoart = IMG_SPIP_PATH."/arton".$id_article;
87       
88        $ext = "";
89        if(file_exists($logobr.".jpg")) $ext = ".jpg";
90        else if(file_exists($logobr.".png")) $ext = ".png";
91        else if(file_exists($logobr.".gif")) $ext = ".gif";
92//      else $message.= '<br>impossible de trouver le logo pour la breve :'.$id_breve;
93
94        if($ext!="") if(!rename($logobr.$ext, $logoart.$ext)) $message.="<br>impossible de renommer:".$logobr.$ext;
95
96        // on s'occupe des mots clés
97        $mots = sql_select('id_mot', 'spip_mots_breves', 'id_breve='.$id_breve);
98        while($motscles = sql_fetch($mots)) {           
99                sql_insertq('spip_mots_articles', array('id_mot' => $motscles['id_mot'], 'id_article' => $id_article));
100        }
101
102        // on s'occupe des forums : ok
103       
104        $desc_forum = sql_showtable('spip_forum', true);
105        if($desc_forum['field']['id_breve']) {
106        // Utilisation d'une table forum classique
107                $forums = sql_select('id_forum', 'spip_forum', 'id_breve='.$id_breve);
108                while($forum = sql_fetch($forums)) {           
109                        sql_updateq('spip_forum', array('id_breve' => '', 'id_article' => $id_article), 'id_forum='.$forum['id_forum']);
110                }
111        }
112        else if($desc_forum['field']['id_objet']){
113        // Utilisation de la version objet de gestion des forums
114                $forums = sql_select('id_forum', 'spip_forum', 'objet="breve" AND id_objet='.$id_breve);
115                while($forum = sql_fetch($forums)) {           
116                        sql_updateq('spip_forum', array('id_objet' => $id_article, 'objet' => 'article'), 'id_forum='.$forum['id_forum']);
117                }
118        }
119        else
120                $message .= "<br>Impossible de determiner quelle gestion est utilisée sur les forums (id_breve ou id_objet)";
121       
122        // Gestion du statut de la bréve
123        switch($statut_br) {
124                case 'idem':
125                        // Rien à faire
126                        break;
127                case 'prop':
128                        sql_updateq('spip_breves', array('statut' => 'prop'), 'id_breve='.$id_breve);
129                        break;
130                case 'refus':
131                        sql_updateq('spip_breves', array('statut' => 'refuse'), 'id_breve='.$id_breve);
132                        break;
133        }
134
135        // correspondance id_breve <-> id_article
136        sql_insertq(TABLE_BREVES_ARTICLES, array('id_breve' => $id_breve, 'id_article' => $id_article));
137
138        return $message;
139}
140
141
142function trouve_idarticle($masque) {
143        $id_article = sql_getfetsel('id_article', TABLE_BREVES_ARTICLES, 'id_breve='.$masque[2]);
144       
145        if($id_article != false)
146                return '['.$masque[1].'->article'.$id_article.']';
147
148        else {
149                echo "<br><b>Pas de breve:".$masque[2]." trouvée dans la table ".TABLE_BREVES_ARTICLES."</b><br>";
150                return '['.$masque[1].'->breve'.$masque[2].']';
151        }
152}
153
154function traite_table_champ($table, $id, $champs) {
155       
156        $select = $id;
157        foreach ($champs as $i => $nom_champ) {
158                $select .= ', '.$nom_champ;
159        }
160       
161        $pattern = '/\[([^]]*)-\>br[ev]{0,3}([0-9 ]+)\]/';
162
163        if($resultats = sql_select($select, $table)) {
164                while($res = sql_fetch($resultats)) {
165
166                        // on parcourt tous les champs pour la recherche de liens vers les breves
167                        foreach ($champs as $i => $nom_champ) {
168                                $string = $res[$nom_champ];
169                                if($string!='') {
170                                        $count = 0;
171                                        $new_string = preg_replace_callback($pattern, 'trouve_idarticle', $string, -1, $count);
172       
173                                        if($new_string == NULL)
174                                                echo "<br><b>Erreur sur preg_replace_callback ... sur champ:$nom_champ et id:$res[$id]</b><br>";
175                                        else if($count==0) {
176                                                // echo "Rien à faire ...";
177                                        }
178                                        else {
179                                                // echo "table:$table,id:".$res[$id].", String <br>$string<br>devient<br>".$new_string."<br>";
180
181                                                sql_updateq($table, array($nom_champ => $new_string), $id.'='.$res[$id]);
182                                        }
183                                }
184                        }
185                }
186
187        }
188        else
189                echo 'Erreur sur sql_select<br>'.sql_error();
190}
191
192
193// Fonction de recherche des liens vers une breve
194// Changer ces liens qui pointaient vers la breve vers l'article (issu de la bréve)
195function modif_liens() {
196        traite_table_champ('spip_articles', 'id_article', array("surtitre","titre","soustitre","texte","chapo","ps"));
197        traite_table_champ('spip_rubriques', 'id_rubrique', array("titre","descriptif","texte"));
198        traite_table_champ('spip_auteurs', 'id_auteur', array("bio"));
199        traite_table_champ('spip_forum', 'id_forum', array("texte"));
200        traite_table_champ('spip_syndic', 'id_syndic', array("descriptif"));
201}
202
203?>
Note: See TracBrowser for help on using the repository browser.