[PLUGINS] +set de base
[lhc/web/www.git] / www / plugins / rss_article_3_0 / genie / rssarticle_copie.php
1 <?php
2 /**
3 * Plugin RSS article pour Spip 3.0
4 * Licence GPL
5 *
6 *
7 */
8
9 // TODO
10 // - gerer les mots-clés hors enclosure ?
11 include_spip("inc/mail");
12 include_spip('inc/filtres');
13 include_spip('inc/distant');
14 include_spip('inc/chercher_logo');
15 include_spip('inc/rubriques');
16 include_spip('inc/config');
17
18 function genie_rssarticle_copie_dist($t){
19
20 // configuration (ou valeurs par defaut)
21 if (lire_config('rssarticle/import_statut')=="publie") $import_statut="publie"; else $import_statut="prop";
22 if (lire_config('rssarticle/mode')=="auto") $mode_auto=true; else $mode_auto=false;
23 if (lire_config('rssarticle/email_alerte')=="on") $email_alerte=true; else $email_alerte=false;
24 if (lire_config('rssarticle/copie_logo')=="on") $copie_logo=true; else $copie_logo=false;
25 $email_suivi = lire_config('rssarticle/email_suivi');
26
27 // autres valeurs
28 $accepter_forum = substr($GLOBALS['meta']['forums_publics'],0,3);
29
30 // principe de pile:
31 // on boucle sur les derniers articles syndiques pour les retirer ensuite
32 // bourrin voir les requetes avec jointure du Miroir ou du site Rezo
33 $log = "";
34 $log_c = 0;
35
36 // boucle sur les sites publies
37 if ($mode_auto) $u = sql_select("id_syndic,id_rubrique,id_secteur","spip_syndic","statut='publie'"); // tous
38 else $u = sql_select("id_syndic,id_rubrique,id_secteur","spip_syndic","statut='publie' AND rssarticle='oui'");
39
40 while ($b = sql_fetch($u)) {
41 $id_syndic = (int) $b['id_syndic'];
42 $id_rubrique = (int) $b['id_rubrique'];
43 $id_secteur = (int) $b['id_secteur'];
44
45 // sur chaque site copie les derniers syndication
46 $s = sql_select("*", "spip_syndic_articles", "statut='publie' AND id_syndic='$id_syndic'","","maj DESC","10"); // par flot de 10 articles / site pour limiter la charge
47 while ($a = sql_fetch($s)) {
48 $titre = $a['titre'];
49 $id_syndic_article = $a['id_syndic_article'];
50
51 // article avec mm titre existe ? (test doublons)
52 if (!$row = sql_fetsel("id_article","spip_articles","titre=".sql_quote($titre))) {
53
54 $texte = $a['descriptif'];
55 $lang = $a['lang'];
56 $url = $a['url'];
57 $tags = $a['tags'];
58 $lsDate = $a['date'];
59
60
61 if ($lang=="")
62 $lang = $GLOBALS['spip_lang'];
63
64 // cas particulier:
65 // site multilingue avec la configuration: 1 lang par rubrique
66 // on force l'article a avoir la langue de la rubrique ds lequel il est importee(pour omaidi)
67 if ($GLOBALS['meta']['multi_rubriques']=='oui') {
68 $s_lang = sql_select("lang", "spip_rubriques", "id_rubrique=$id_rubrique");
69 while ($a_lang = sql_fetch($s_lang))
70 $lang = $a_lang['lang'];
71 }
72
73 //$lsDate = date('Y-m-d H:i:s');
74 // creation de l'article
75 $id_article = sql_insertq( 'spip_articles', array(
76 'titre'=>$titre, 'id_rubrique'=>$id_rubrique,
77 'texte'=>$texte, 'statut'=>$import_statut, 'id_secteur'=>$id_secteur,
78 'date'=> $lsDate, 'accepter_forum'=>$accepter_forum, 'lang'=>$lang, 'url_site'=>$url));
79
80 // lier article et site
81 sql_insertq( 'spip_articles_syndic', array('id_article'=>$id_article, 'id_syndic'=>$id_syndic));
82
83 // gestion auteur
84 $auteurs= explode(", ",$a['lesauteurs']);
85 foreach ($auteurs as $k => $auteur) {
86 if ($current_id_auteur = rssarticle_get_id_auteur($auteur))
87 sql_insertq( 'spip_auteurs_liens', array('id_auteur'=>$current_id_auteur, 'id_objet'=>$id_article, 'objet'=>'article'));
88 }
89
90 // tags a convertir en documents distants
91 $doc_distants = extraire_enclosures($tags);
92 foreach ($doc_distants as $k=>$doc_distant) {
93 $infos = recuperer_infos_distantes($doc_distant);
94 if ($infos['extension']) {
95 $ext = $infos['extension'];
96 $taille = $infos['tailles'];
97 $row = sql_fetsel("inclus", "spip_types_documents", "extension=" . sql_quote($ext) . " AND upload='oui'"); // extension autorisee ?
98 if ($row) {
99 $id_document = sql_insertq( 'spip_documents', array(
100 'extension'=>$ext,
101 'date'=> $lsDate,
102 'fichier'=> $doc_distant,
103 'taille'=> $taille,
104 'mode' => 'document',
105 'distant' => 'oui'));
106
107 sql_insertq( 'spip_documents_liens', array(
108 'id_document' =>$id_document,
109 'id_objet'=> $id_article,
110 'objet'=> 'article',
111 'vu'=> 'non'));
112 }
113 }
114
115 }
116
117 // logo
118 if ($copie_logo) {
119 if ($logo_site = inc_chercher_logo_dist($id_syndic,"id_syndic")) {
120 $logo_article = "arton$id_article.".$logo_site[3];
121 @copy($logo_site[0],_DIR_LOGOS."$logo_article");
122 }
123 }
124
125 $log_c++;
126 $log .= "\n - $titre";
127
128 // on "depublie" l'article syndique qui vient d'etre copie
129 sql_update("spip_syndic_articles", array('statut' => '"refuse"'), "id_syndic_article=$id_syndic_article");
130
131 // Mise à jour des dates de rubriques après création d'un article dedans
132 if ($id_article) {
133 if (function_exists('calculer_rubriques'))
134 calculer_rubriques();
135 if (function_exists('calculer_langues_rubriques'))
136 calculer_langues_rubriques();
137 if (function_exists('propager_les_secteurs'))
138 propager_les_secteurs();
139 }
140
141 } // test doublons
142 }
143 } // FIN PILE
144
145
146 // log et alerte email
147 $log .= "\n\n---------\nPlugin Copie RSS en Articles: $log_c articles copies\n";
148 spip_log($log);
149 $log .= $GLOBALS['meta']['adresse_site']."/ecrire/?exec=accueil";
150
151 if ($email_alerte && $email_suivi !="" && $log_c > 0)
152 envoyer_mail($email_suivi,"Copie RSS en Articles", $log);
153
154 // maintenance generale
155 // mode auto: on efface les syndic_articles de plus de 2 mois pour soulager le systeme (cf genie/syndic)
156 // attention: on efface sur l'ensemble des sites syndiques ss tenir compte de l'option
157 if ($mode_auto) sql_delete('spip_syndic_articles', "maj < DATE_SUB(NOW(), INTERVAL 2 MONTH) AND date < DATE_SUB(NOW(), INTERVAL 2 MONTH)");
158
159 return 1;
160 }
161
162
163 //
164 // recupere id d'un auteur selon son nom sinon le creer
165 function rssarticle_get_id_auteur($nom) {
166 if (trim($nom)=="")
167 return false;
168
169 if ($row = sql_fetsel(array("id_auteur"),"spip_auteurs","nom=".sql_quote($nom)))
170 return $row['id_auteur'];
171
172 // auteur inconnu, on le cree ...
173 return sql_insertq('spip_auteurs',array('nom'=>$nom,'statut'=>'1comite'));
174 }
175
176 //
177 // extraire les documents taggues enclosure
178 // voir http://doc.spip.org/@afficher_enclosures
179 function extraire_enclosures($tags) {
180 $s = array();
181 foreach (extraire_balises($tags, 'a') as $tag) {
182 if (extraire_attribut($tag, 'rel') == 'enclosure'
183 AND $t = extraire_attribut($tag, 'href')) {
184 $s[] = $t;
185 }
186 }
187 return $s;
188 }
189
190 /*
191 UPDATE `spip_syndic_articles` SET statut="publie";
192 TRUNCATE TABLE `spip_articles`;
193 DELETE FROM `spip_auteurs_liens` WHERE id_auteur > 1;
194 DELETE FROM `spip_auteurs` WHERE id_auteur > 1;
195 */
196
197 ?>