PageRenderTime 26ms CodeModel.GetById 10ms RepoModel.GetById 1ms app.codeStats 0ms

/_plugins_/publiHALRSS/1.9.1/pipelines_publiHALRSS.php

https://bitbucket.org/pombredanne/spip-zone-treemap
PHP | 210 lines | 123 code | 15 blank | 72 comment | 28 complexity | 6dc4d546d7be7adeb95a28345a882182 MD5 | raw file
  1. <?php
  2. /**
  3. * pipeline : pre_syndication
  4. *
  5. * Effectue des modification du flux $rss
  6. * avant traitement de la syndication
  7. */
  8. function publiHAL_pre_syndication($rss) {
  9. include_spip('inc/publiHAL_gestion');
  10. if(!publiHAL_test_installation()) return '';
  11. //spip_log("debut publiHAL_pre_syndication !!!!!");
  12. // A chercher les articles déjà présents avec FAIRE publiHAL_get_URLs puis les supprimer de $rss
  13. // copie des lignes 128 à 142 de syndic.php
  14. // Echapper les CDATA
  15. $echappe_cdata = array();
  16. if (preg_match_all(',<!\[CDATA\[(.*)]]>,Uims', $rss,
  17. $regs, PREG_SET_ORDER)) {
  18. foreach ($regs as $n => $reg) {
  19. $echappe_cdata[$n] = $reg[1];
  20. $rss = str_replace($reg[0], "@@@SPIP_CDATA$n@@@", $rss);
  21. }
  22. }
  23. // supprimer les commentaires
  24. $rss = preg_replace(',<!--\s+.*\s-->,Ums', '', $rss);
  25. // supprimer pulisher sans intéret :<dc:publisher>XXX - CCSd (ccsd.cnrs.fr)</dc:publisher>
  26. // $rss = str_replace('<dc:publisher>HAL - CCSd (ccsd.cnrs.fr)</dc:publisher>', '', $rss);
  27. // $rss = str_replace('<dc:publisher>INRIA - CCSd (ccsd.cnrs.fr)</dc:publisher>', '', $rss);
  28. // $rss = str_replace('<dc:publisher>TEL - CCSd (ccsd.cnrs.fr)</dc:publisher>', '', $rss);
  29. $rss = preg_replace('@<dc:publisher>((?U)[^<]+) - CCSd \(ccsd\.cnrs\.fr\)</dc:publisher>@is', '', $rss);
  30. $rss = str_replace('<dc:type>', '<dc:typedoc>', $rss);
  31. $rss = str_replace('</dc:type>', '</dc:typedoc>', $rss);
  32. // simplifier le backend, en supprimant les espaces de nommage type "dc:"
  33. $rss = preg_replace(',<(/?)(dc):,i', '<\1', $rss);
  34. // suppression des items déjà présents
  35. global $publiHAL_itemBidon;
  36. $publiHAL_itemBidon="<item><link>http://bidon.complet.fr/</link><title>bidon</title></item>";
  37. $rss = preg_replace_callback(
  38. ',<(item|entry)([:[:space:]][^>]*)?>(.*)</\1>,Uims',// copie de la ligne 165 de syndic.php
  39. "publiHAL_supprime_si_deja_la",
  40. $rss);//*/
  41. // Capture des noms et prénoms
  42. $rss = preg_replace('|\<creator\>\s*(.*)\s*,\s*(.*)\s*\</creator\>|Uims' ,
  43. '<creator>$1@@@SepPreNom@@@$2</creator>',
  44. $rss);
  45. // remet les CDATA
  46. // cdata_echappe_retour($rss, $echappe_cdata);
  47. //spip_log("passage 1 !!!!!!");
  48. return $rss;
  49. }
  50. /***********************************
  51. * pipeline : post_syndication
  52. *
  53. * modification d'un <item>...</item> dans la base à partir des valeurs suivantes
  54. * $le_lien (url de l'article),
  55. * $id_syndic (id de la syndication),
  56. * $data (tableau des données extraites sur l'article)
  57. */
  58. function publiHAL_post_syndication() {
  59. include_spip('inc/mots');
  60. //spip_log("passage 2 !!!!!!");
  61. // voir inc/syndic.php
  62. list($le_lien, $id_syndic, $data) = func_get_arg(0);
  63. $req="SELECT id_syndic_article FROM spip_syndic_articles WHERE id_syndic=$id_syndic AND url=" . spip_abstract_quote($le_lien). " LIMIT 1";
  64. $res=spip_fetch_array(spip_query($req));
  65. if(!$res) return;
  66. $id_syndic_article=$res['id_syndic_article'];
  67. $miseAjour=array();
  68. if(ereg('@@@SepPreNom@@@',$data['lesauteurs'])){
  69. //$auteurs = explode(',',$data['lesauteurs']);
  70. $data['lesauteurs'] = str_replace(',',';',$data['lesauteurs']);
  71. $data['lesauteurs'] = preg_replace('|\s*@@@SepPreNom@@@\s*|Us', ',', $data['lesauteurs']);
  72. // MAJ !!
  73. $miseAjour[]="lesauteurs=" . spip_abstract_quote($data['lesauteurs']);
  74. }
  75. if(preg_match_all(',<(publisher|typedoc|coverage)>(.*)</\1>,Uims',$data['item'],$matches,PREG_SET_ORDER)){
  76. foreach ($matches as $match) {
  77. if(strcmp($match[1],'coverage')==0) $match[2]=str_replace(array(',',' / '),';',$match[2]);// MOT1/MOT2 -> MOT1;MOT2
  78. if($t = creer_tag($match[2], $match[1], "")) $data['tags'][]=$t;
  79. }
  80. # copie lignes 383 à 390 de syndic.php
  81. # eviter les doublons (cle = url+titre) et passer d'un tableau a une chaine
  82. if ($data['tags']) {
  83. $vus = array();
  84. foreach ($data['tags'] as $tag) {
  85. $cle = supprimer_tags($tag).extraire_attribut($tag,'href');
  86. $vus[$cle] = $tag;
  87. }
  88. $tags .= ($tags ? ', ' : '') . join(', ', $vus);
  89. // MAJ !!
  90. $miseAjour[]="tags=" . spip_abstract_quote($tags);
  91. }
  92. }
  93. // s'il y a des mises à jour à faire
  94. if($miseAjour){
  95. $req="UPDATE spip_syndic_articles SET " . implode(' , ',$miseAjour) ." WHERE id_syndic_article=$id_syndic_article ";
  96. //spip_log("Requete les auteurs : ".$req);
  97. spip_query($req);
  98. }
  99. // traitement des mots clefs ! **********
  100. // type de document
  101. if(isset($GLOBALS['meta']['publiHAL_Type_de_document'])){
  102. $id_groupe=$GLOBALS['meta']['publiHAL_Type_de_document'];
  103. if($data['tags']) {
  104. foreach ($data['tags'] as $tag) {
  105. if(strcmp("typedoc",extraire_attribut($tag,'rel'))==0){
  106. $val=supprimer_tags($tag);
  107. $req="SELECT id_mot FROM spip_mots WHERE id_groupe=$id_groupe AND descriptif=". spip_abstract_quote($val). " LIMIT 1";
  108. $res=spip_fetch_array(spip_query($req));
  109. if($res){
  110. $id_mot=$res['id_mot'];
  111. // on a le type de document on met le mot clef
  112. inserer_mot('spip_mots_syndic_articles', 'id_syndic_article', $id_syndic_article, $id_mot);
  113. }
  114. }
  115. }
  116. }
  117. }
  118. //spip_log('le labo **');
  119. // le labo
  120. if(isset($GLOBALS['meta']['publiHAL_Labo_publi']) && isset($GLOBALS['meta']['publiHAL_Ce_Labo_publi'])){
  121. $id_groupe=$GLOBALS['meta']['publiHAL_Labo_publi'];
  122. $id_mot=$GLOBALS['meta']['publiHAL_Ce_Labo_publi'];
  123. // on a le type de document on met le mot clef
  124. inserer_mot('spip_mots_syndic_articles', 'id_syndic_article', $id_syndic_article, $id_mot);
  125. }
  126. // les auteurs
  127. if(isset($GLOBALS['meta']['publiHAL_auteurs_publi'])){
  128. include_spip('inc/publiHAL_gestion');
  129. publiHAL_traite_mots_auteurs($id_syndic_article,$data['lesauteurs']);
  130. }
  131. //fin
  132. }
  133. /**
  134. * Suppression de chaque <item>...</item> du backend déjà présent dans la syndication
  135. */
  136. function publiHAL_supprime_si_deja_la($matches){
  137. // $matches[0] représente la valeur totale
  138. $item=$matches[0];
  139. /**
  140. * copie des lignes 178 à 208 de syndic.php avec remplacement de $data['url'] par $data_url
  141. */
  142. // URL (semi-obligatoire, sert de cle)
  143. // guid n'est un URL que si marque de <guid ispermalink="true"> ;
  144. // attention la valeur par defaut est 'true' ce qui oblige a quelque
  145. // gymnastique
  146. if (preg_match(',<guid.*>[[:space:]]*(https?:[^<]*)</guid>,Uims',
  147. $item, $regs) AND preg_match(',^(true|1)?$,i',
  148. extraire_attribut($regs[0], 'ispermalink')))
  149. $data_url = $regs[1];
  150. // <link>, plus classique
  151. else if (preg_match(
  152. ',<link[^>]*[[:space:]]rel=["\']?alternate[^>]*>(.*)</link>,Uims',
  153. $item, $regs))
  154. $data_url = $regs[1];
  155. else if (preg_match(',<link[^>]*[[:space:]]rel=.alternate[^>]*>,Uims',
  156. $item, $regs))
  157. $data_url = extraire_attribut($regs[0], 'href');
  158. else if (preg_match(',<link[^>]*>(.*)</link>,Uims', $item, $regs))
  159. $data_url = $regs[1];
  160. else if (preg_match(',<link[^>]*>,Uims', $item, $regs))
  161. $data_url = extraire_attribut($regs[0], 'href');
  162. // Aucun link ni guid, mais une enclosure
  163. else if (preg_match(',<enclosure[^>]*>,ims', $item, $regs)
  164. AND $url = extraire_attribut($regs[0], 'url'))
  165. $data_url = $url;
  166. // pas d'url, c'est genre un compteur...
  167. else
  168. $data_url = '';
  169. //--------------------------
  170. /*
  171. * SELECT COUNT(*)
  172. * FROM spip_syndic s, spip_syndic_articles a
  173. * WHERE s.id_syndic=a.id_syndic // jointure
  174. * AND s.syndication<>'non'
  175. * AND s.statut='publie' AND a.url like '%'
  176. */
  177. $req = "SELECT COUNT(*) AS n FROM spip_syndic AS s, spip_syndic_articles AS a WHERE s.id_syndic=a.id_syndic".
  178. " AND s.syndication<>'non' AND s.statut='publie' AND a.url=" . spip_abstract_quote($data_url);
  179. $cpt = spip_fetch_array(spip_query($req));
  180. if($cpt['n']) {
  181. global $publiHAL_itemBidon;
  182. $r=$publiHAL_itemBidon;
  183. return $r;
  184. }// rien de neuf supprimer l'item
  185. //spip_log("publiHAL_supprime_PAS : $req");
  186. return $matches[0];
  187. }
  188. /**
  189. * Styles pour l'affichage ; créer un fichier spip_publihalrss.css pour changer le style
  190. */
  191. function publiHAL_insert_head($flux){
  192. $flux .= "<link rel='stylesheet' href='".find_in_path('spip_publihalrss.css')."' type='text/css' media='all' />\n";
  193. return $flux;
  194. }
  195. ?>