[PLUGINS] +clavettes et dependances
[lhc/web/clavette_www.git] / www / plugins / rss_article_3_0 / genie / rssarticle_copie.php
diff --git a/www/plugins/rss_article_3_0/genie/rssarticle_copie.php b/www/plugins/rss_article_3_0/genie/rssarticle_copie.php
new file mode 100644 (file)
index 0000000..5f5a1e8
--- /dev/null
@@ -0,0 +1,268 @@
+<?php\r
+/**\r
+ * Plugin RSS article pour Spip 3.0\r
+ * Licence GPL\r
+ * \r
+ *\r
+ */\r
+\r
+// TODO\r
+// - gerer les mots-clés hors enclosure ?\r
+include_spip("inc/mail");\r
+include_spip('inc/filtres'); \r
+include_spip('inc/distant');\r
+include_spip('inc/chercher_logo');\r
+include_spip('inc/rubriques');\r
+include_spip('inc/config');\r
+\r
+function genie_rssarticle_copie_dist($t){  \r
+\r
+  // configuration (ou valeurs par defaut)    \r
+  if (lire_config('rssarticle/import_statut')=="publie")       $import_statut="publie"; else  $import_statut="prop";     \r
+  if (lire_config('rssarticle/mode')=="auto")       $mode_auto=true; else  $mode_auto=false;  \r
+  if (lire_config('rssarticle/email_alerte')=="on") $email_alerte=true; else  $email_alerte=false;\r
+  if (lire_config('rssarticle/copie_logo')=="on")   $copie_logo=true; else  $copie_logo=false; \r
+  if (lire_config('rssarticle/html2spip')=="on")   $html2spip=true; else  $html2spip=false; \r
+  $email_suivi = lire_config('rssarticle/email_suivi'); \r
+  \r
+  // autres valeurs\r
+  $accepter_forum =    substr($GLOBALS['meta']['forums_publics'],0,3);\r
+  \r
+  // principe de pile:\r
+  // on boucle sur les derniers articles syndiques pour les retirer ensuite\r
+  // bourrin voir les requetes avec jointure du Miroir ou du site Rezo \r
+  $log = "";\r
+  $log_c = 0;\r
+  \r
+  // boucle sur les sites publies \r
+  if ($mode_auto) $u = sql_select("id_syndic,id_rubrique,id_secteur","spip_syndic","statut='publie'");   // tous \r
+          else    $u = sql_select("id_syndic,id_rubrique,id_secteur","spip_syndic","statut='publie' AND rssarticle='oui'");\r
+  \r
+  while ($b = sql_fetch($u)) {\r
+       $id_syndic = (int) $b['id_syndic'];\r
+       $id_rubrique = (int) $b['id_rubrique'];\r
+       $id_secteur = (int) $b['id_secteur'];\r
+  \r
+       // sur chaque site copie les derniers syndication\r
+       $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\r
+       while ($a = sql_fetch($s)) {\r
+                       $titre =  $a['titre'];\r
+                       $url =  $a['url'];\r
+          $id_syndic_article = $a['id_syndic_article']; \r
+                    \r
+          // article avec mm titre existe ? (test doublons sur l'url plutot que sr le titre)\r
+               if (!$row = sql_fetsel("id_article","spip_articles","url_site=".sql_quote($url))) {        \r
+            \r
+            $texte = $a['descriptif'];\r
+            //traitement pour syntaxe SPIP\r
+            if($html2spip)\r
+                  $texte = html2spip($texte);\r
+            $lang  = $a['lang'];\r
+            $url   = $a['url'];\r
+            $tags =  $a['tags'];\r
+            $lsDate = $a['date'];\r
+            \r
+          \r
+            if ($lang=="")     \r
+                $lang = $GLOBALS['spip_lang'];  \r
+                \r
+            // cas particulier: \r
+            // site multilingue avec la configuration: 1 lang par rubrique  \r
+            // on force l'article a avoir la langue de la rubrique ds lequel il est importee(pour omaidi)            \r
+            if ($GLOBALS['meta']['multi_rubriques']=='oui') {\r
+                  $s_lang = sql_select("lang", "spip_rubriques", "id_rubrique=$id_rubrique");\r
+                  while ($a_lang = sql_fetch($s_lang)) \r
+                      $lang = $a_lang['lang'];                   \r
+            }\r
+            \r
+            //$lsDate = date('Y-m-d H:i:s');            \r
+            // creation de l'article\r
+            $id_article = sql_insertq( 'spip_articles', array(\r
+                                'titre'=>$titre, 'id_rubrique'=>$id_rubrique,\r
+                                'texte'=>$texte, 'statut'=>$import_statut, 'id_secteur'=>$id_secteur,\r
+                                'date'=> $lsDate, 'accepter_forum'=>$accepter_forum, 'lang'=>$lang, 'url_site'=>$url));\r
+                                \r
+            // lier article et site\r
+            sql_insertq( 'spip_articles_syndic', array('id_article'=>$id_article, 'id_syndic'=>$id_syndic));\r
+                                \r
+            // gestion auteur            \r
+            $auteurs= explode(", ",$a['lesauteurs']);            \r
+            foreach ($auteurs as $k => $auteur) {                       \r
+                 if ($current_id_auteur = rssarticle_get_id_auteur($auteur))\r
+                      sql_insertq( 'spip_auteurs_liens', array('id_auteur'=>$current_id_auteur, 'id_objet'=>$id_article, 'objet'=>'article'));                \r
+            }\r
+            \r
+            // tags a convertir en documents distants \r
+            $doc_distants = extraire_enclosures($tags);\r
+                       foreach ($doc_distants as $k=>$doc_distant) {\r
+                $infos = recuperer_infos_distantes($doc_distant);\r
+                if ($infos['extension']) {\r
+                    $ext    = $infos['extension'];\r
+                    $taille = $infos['tailles']; \r
+                    $row = sql_fetsel("inclus", "spip_types_documents", "extension=" . sql_quote($ext) . " AND upload='oui'");  // extension autorisee ?\r
+                    if ($row) {\r
+                          $id_document = sql_insertq( 'spip_documents', array(\r
+                                'extension'=>$ext, \r
+                                'date'=> $lsDate,\r
+                                'fichier'=> $doc_distant,\r
+                                'taille'=> $taille,\r
+                                'mode' => 'document',\r
+                                'distant' => 'oui'));\r
+                          \r
+                         sql_insertq( 'spip_documents_liens', array(\r
+                                'id_document' =>$id_document, \r
+                                'id_objet'=> $id_article,\r
+                                'objet'=> 'article',\r
+                                'vu'=> 'non'));                                        \r
+                    }\r
+                }\r
+                \r
+            }\r
+            \r
+            // logo\r
+            if ($copie_logo) {             \r
+               if ($logo_site = inc_chercher_logo_dist($id_syndic,"id_syndic")) {\r
+                  $logo_article = "arton$id_article.".$logo_site[3];\r
+                  @copy($logo_site[0],_DIR_LOGOS."$logo_article");\r
+               }                 \r
+            }\r
+                                                                       \r
+                       $log_c++;\r
+                       $log .= "\n - $titre";  \r
+            \r
+             // on "depublie" l'article syndique qui vient d'etre copie\r
+            sql_update("spip_syndic_articles", array('statut' => '"refuse"'), "id_syndic_article=$id_syndic_article");\r
+\r
+            // Mise à jour des dates de rubriques après création d'un article dedans\r
+           if ($id_article) {\r
+               if (function_exists('calculer_rubriques'))\r
+                   calculer_rubriques();\r
+               if (function_exists('calculer_langues_rubriques'))\r
+                   calculer_langues_rubriques();\r
+               if (function_exists('propager_les_secteurs'))\r
+                   propager_les_secteurs();\r
+           }\r
+                  \r
+          }  // test doublons\r
+       }  \r
+  } // FIN PILE\r
+    \r
+       \r
+       // log et alerte email\r
+  $log .= "\n\n---------\nPlugin Copie RSS en Articles: $log_c articles copies\n";\r
+  spip_log($log);\r
+  $log .= $GLOBALS['meta']['adresse_site']."/ecrire/?exec=accueil";\r
+       \r
+  if ($email_alerte && $email_suivi !="" && $log_c > 0)                 \r
+                  envoyer_mail($email_suivi,"Copie RSS en Articles", $log);\r
+              \r
+       // maintenance generale\r
+  // mode auto: on efface les syndic_articles de plus de 2 mois pour soulager le systeme (cf genie/syndic) \r
+  // attention: on efface sur l'ensemble des sites syndiques ss tenir compte de l'option               \r
+       if ($mode_auto) sql_delete('spip_syndic_articles', "maj < DATE_SUB(NOW(), INTERVAL 2 MONTH) AND date < DATE_SUB(NOW(), INTERVAL 2 MONTH)");\r
\r
+       return 1;\r
+}\r
+\r
+\r
+//\r
+// recupere id d'un auteur selon son nom sinon le creer\r
+function rssarticle_get_id_auteur($nom) {  \r
+   if (trim($nom)=="") \r
+        return false;\r
+   \r
+   if ($row = sql_fetsel(array("id_auteur"),"spip_auteurs","nom=".sql_quote($nom)))  \r
+        return $row['id_auteur']; \r
+\r
+    // auteur inconnu, on le cree ... \r
+    return sql_insertq('spip_auteurs',array('nom'=>$nom,'statut'=>'1comite'));\r
+}\r
+\r
+//\r
+// extraire les documents taggues enclosure \r
+// voir http://doc.spip.org/@afficher_enclosures\r
+function extraire_enclosures($tags) {\r
+       $s = array();\r
+       foreach (extraire_balises($tags, 'a') as $tag) {\r
+               if (extraire_attribut($tag, 'rel') == 'enclosure'\r
+               AND $t = extraire_attribut($tag, 'href')) {\r
+                       $s[] = $t;\r
+               }\r
+       }\r
+       return $s;\r
+}\r
+\r
+/**\r
+ * \r
+ * Nettoyer l'utf-8 et ses accents \r
+ *\r
+**/\r
+function clean_utf8($t) {\r
+       if (!preg_match('!\S!u', $t))\r
+               $t = preg_replace_callback(',&#x([0-9a-f]+);,i', 'utf8_do', utf8_encode(utf8_decode($t)));\r
+       return $t;\r
+}\r
+\r
+\r
+//passe le html en SPIP\r
+//repris de memo.php, merci\r
+\r
+function html2spip($lapage){\r
+       $lapage=clean_utf8($lapage);\r
+       \r
+       // remettre les double quotes casé par texte_backend\r
+       $lapage = str_replace('&#034;','"',$lapage);\r
+       \r
+       // PRETRAITEMENTS\r
+       $lapage = str_replace("\n\r", "\r", $lapage); // echapper au greedyness de preg_replace\r
+       $lapage = str_replace("\n", "\r", $lapage);\r
+\r
+       // itals\r
+       $lapage = preg_replace(",<(i|em)( [^>\r]*)?".">(.+)</\\1>,Uims", "{\\3}", $lapage);\r
+       \r
+       // gras (pas de {{ pour eviter tout conflit avec {)\r
+       $lapage = preg_replace(",<(b|h[4-6])( [^>]*)?".">(.+)</\\1>,Uims", "@@b@@\\3@@/b@@", $lapage);\r
+       $lapage = preg_replace(",<strong( [^>]*)?".">(.+)</strong>,Uims", "@@b@@\\2@@/b@@", $lapage);\r
+       \r
+       // entites\r
+       include_spip('inc/charsets');\r
+       $lapage = html2unicode($lapage, true); //secure?\r
+               \r
+       // liens avec possibilités de non fermeture du tag\r
+       $lapage = preg_replace(",<a[ \t\n\r][^<>]*href=[^<>]*(http[^<>]*)[^<>]>(.*?)<,uims", "[\\2->\\1] <", $lapage);\r
+\r
+       // images (cf ressource)\r
+       $lapage = preg_replace(",<img[ \t\n\r][^<>]*src=[^<>]*(http[^<>'\"]*)[^<>]*>,uims","[img]\\1[//img]", $lapage);\r
+\r
+               \r
+       // intertitres\r
+       $lapage = preg_replace(",<(h[1-3])( [^>]*)?".">(.+)</\\1>,Uims", "\r{{{ \\3 }}}\r", $lapage);\r
+       // tableaux\r
+       $lapage = preg_replace(",<tr( [^>]*)?".">,Uims", "<br />\r", $lapage);\r
+       $lapage = preg_replace(",<t[hd]( [^>]*)?".">,Uims", " | ", $lapage);\r
+\r
+       // POST TRAITEMENT\r
+       $lapage = str_replace("\r", "\n", $lapage);\r
+\r
+       // SUPPRIME LES TAGS\r
+       if (eregi("<title.*>(.*)</title>", $lapage, $regs))\r
+       $titre = textebrut($regs[1]);\r
+       $lapage = textebrut($lapage);\r
+       \r
+       // Suite tableaux\r
+       $lapage = preg_replace(",\n[| ]+\n,", "", $lapage);\r
+       $lapage = preg_replace(",\n[|].+?[|].+?[|].+,", "\\0|\r", $lapage);\r
+       \r
+       // retablir les gras\r
+       $lapage = preg_replace(",@@b@@(.*)@@/b@@,Uims","{{\\1}}",$lapage);\r
+       \r
+       //retablir les images pour les lire avec le plugin ressource\r
+       $lapage = preg_replace('#\[img\](.*)\[\//img\]#Umis', "<$1>", $lapage);\r
+       \r
+       //nettoyer les "] qui dépassent parfois\r
+       $lapage = preg_replace(",\"\],uims", "]", $lapage);\r
+       \r
+       return $lapage;\r
+}\r
+\r
+?>
\ No newline at end of file