[ Index ]
 

Code source de SPIP Agora 1.4

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/Agora1-4/ecrire/ -> inc_sites.php (source)

   1  <?php
   2  /*****************************************************
   3  * This file is part of Agora, web based content management system.
   4  *
   5  * Agora is free software; you can redistribute it and/or modify
   6  * it under the terms of the GNU General Public License as published by
   7  * the Free Software Foundation; version 2 of the License.
   8  *
   9  * Agora is distributed in the hope that it will be useful,
  10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  * GNU General Public License for more details (file "COPYING").
  13  *
  14  * Copyright © Arnaud Martin, Antoine Pitrou et Philippe Rivière.
  15  * List of authors detailed in "copyright_fr.html" file.
  16  * E-mail : agora@sig.premier-ministre.gouv.fr
  17  * Web site : http://www.agora.gouv.fr
  18  *****************************************************/
  19  // Ce fichier ne sera execute qu'une fois
  20  if (defined("_INC_SITES"))
  21      return;
  22  define("_INC_SITES", "1");
  23  
  24  if ($supprimer_lien = $GLOBALS["supprimer_lien"]) {
  25      require_once (dirname(__FILE__). "/include/bd/inc_syndic_factory.php");
  26      $syndicArticleMetier = &recuperer_instance_syndic_articles();
  27      $loadOK = $syndicArticleMetier->load($supprimer_lien);
  28      if (PEAR::isError($loadOK)) {
  29          //die($loadOK->getMessage());
  30      }
  31      else {
  32          $syndicArticleMetier->setStatut('refuse');
  33          $updateOK = $syndicArticleMetier->update();
  34          if (PEAR::isError($updateOK)) {
  35              die ($updateOK->getMessage());
  36          }
  37      }
  38  }
  39  
  40  if ($ajouter_lien = $GLOBALS["ajouter_lien"]) {
  41      require_once (dirname(__FILE__). "/include/bd/inc_syndic_factory.php");
  42      $syndicArticleMetier = &recuperer_instance_syndic_articles();
  43      $loadOK = $syndicArticleMetier->load($ajouter_lien);
  44      if (PEAR::isError($loadOK)) {
  45          //die($loadOK->getMessage());
  46          }
  47      else {
  48          $syndicArticleMetier->setStatut('publie');
  49          $updateOK = $syndicArticleMetier->update();
  50          if (PEAR::isError($updateOK)) {
  51              die ($updateOK->getMessage());
  52          }
  53      }
  54  }
  55  
  56  function recuperer_page ($url) {
  57      $url_bcp = $url;
  58      $http_proxy = lire_meta("http_proxy");
  59  
  60      if (!eregi("^http://", $http_proxy))
  61          $http_proxy = '';
  62      else
  63          $via_proxy = " (proxy $http_proxy)";
  64  
  65      if (function_exists(spip_log)) {
  66          spip_log ("chargement $url$via_proxy");
  67      }
  68  
  69      for ($i = 0; $i < 10; $i++) { // dix tentatives maximum en cas d'entetes 301...
  70          $t = @parse_url($url);
  71          $host = $t['host'];
  72  
  73          if (!($port = $t['port']))
  74              $port = 80;
  75  
  76          $query = $t['query'];
  77  
  78          if (!($path = $t['path']))
  79              $path = "/";
  80  
  81          if ($http_proxy) {
  82              $t2 = @parse_url($http_proxy);
  83              $proxy_host = $t2['host'];
  84  
  85              if (!($proxy_port = $t2['port']))
  86                  $proxy_port = 80;
  87              $f = @fsockopen($proxy_host, $proxy_port);
  88          }
  89          else
  90              $f = @fsockopen($host, $port);
  91          if ($f) {
  92              if ($http_proxy)
  93                  fputs($f, "GET http://$host" . (($port != 80) ? ":$port" : ""). $path . ($query ? "?$query"
  94                                                                                              : ""). " HTTP/1.0\r\n");
  95              else
  96                  fputs($f, "GET $path" . ($query ? "?$query" : ""). " HTTP/1.0\r\n");
  97  
  98              fputs($f, "Host: $host\r\n");
  99              fputs($f, "User-Agent: SPIP-" . $GLOBALS['spip_version_affichee']. " (http://www.spip.net/)\r\n");
 100  
 101              if ($referer = lire_meta("adresse_site"))
 102                  fputs($f, "Referer: $referer/\r\n");
 103  
 104              fputs($f, "\r\n");
 105  
 106              $s = trim(fgets($f, 16384));
 107  
 108              if (ereg('^HTTP/[0-9]+\.[0-9]+ ([0-9]+)', $s, $r)) {
 109                  $status = $r[1];
 110              }
 111              else
 112                  return;
 113  
 114              while ($s = trim(fgets($f, 16384))) {
 115                  if (ereg('^Location: (.*)', $s, $r)) {
 116                      $location = $r[1];
 117                  }
 118              }
 119  
 120              if ($status >= 300 AND $status < 400 AND $location)
 121                  $url = $location;
 122              else if ($status != 200)
 123                  return;
 124              else
 125                  break;
 126              fclose ($f);
 127          }
 128          else {
 129              if (!$GLOBALS['tester_proxy']) {
 130                  $f = @fopen($url_bcp, "rb");
 131                  break;
 132              }
 133          }
 134      }
 135  
 136      if (!$f) {
 137          if (function_exists(spip_log)) {
 138              spip_log ("ECHEC chargement $url$via_proxy");
 139          }
 140          $result = '';
 141      }
 142      else {
 143          while (!feof($f))
 144              $result .= fread($f, 16384);
 145          fclose ($f);
 146      }
 147  
 148      return $result;
 149  }
 150  
 151  function transcoder_page ($texte) {
 152      include_ecrire  ('inc_charsets.php');
 153  
 154      // Si le backend precise son charset et que celui-ci est connu de SPIP,
 155      // decoder puis recoder
 156      if (ereg('<\\?xml[[:space:]]([^>]*[[:space:]])?encoding[[:space:]]*=[[:space:]]*[\'"]([-_a-zA-Z0-9]+)[\'"]', $texte,
 157               $regs)) {
 158          $charset_page = strtolower($regs[2]);
 159          $texte = importer_charset($texte, $charset_page);
 160      }
 161      // Si le backend ne precise pas, on considere qu'il est iso-8859-1
 162      else
 163          $texte = importer_charset($texte, 'iso-8859-1');
 164  
 165      return $texte;
 166  }
 167  
 168  function analyser_site ($url) {
 169      include_ecrire  ("inc_filtres.php");
 170  
 171      $texte = transcoder_page(recuperer_page($url));
 172  
 173      if (!$texte)
 174          return false;
 175  
 176      $result = '';
 177  
 178      if (ereg('<channel[^>]*>(.*)</channel>', $texte, $regs)) {
 179          $result['syndic'] = true;
 180          $result['url_syndic'] = $url;
 181          $channel = $regs[1];
 182  
 183          if (ereg('<title[^>]*>(([^<]|<[^/]|</[^t]>|</t[^i]>)*)</title>', $channel, $r))
 184              $result['nom_site'] = supprimer_tags(filtrer_entites($r[1]));
 185  
 186          if (ereg('<link[^>]*>([^<]*)</link>', $channel, $r))
 187              $result['url_site'] = filtrer_entites($r[1]);
 188  
 189          // si le channel n'a pas de description, ne pas prendre celle d'un article
 190          if ($a = strpos($channel, '<item>'))
 191              $channel_desc = substr($channel, 0, $a);
 192          else
 193              $channel_desc = $channel;
 194          if (ereg('<description[^>]*>([^<]*)</description>', $channel_desc, $r))
 195              $result['descriptif'] = filtrer_entites($r[1]);
 196      }
 197      else {
 198          $result['syndic'] = false;
 199          $result['url_site'] = $url;
 200  
 201          if (eregi('<head>(.*)', $texte, $regs))
 202              $head = filtrer_entites(eregi_replace('</head>.*', '', $regs[1]));
 203          else
 204              $head = $texte;
 205  
 206          if (eregi('<title[^>]*>(.*)', $head, $regs))
 207              $result['nom_site'] = filtrer_entites(supprimer_tags(eregi_replace('</title>.*', '', $regs[1])));
 208          if (eregi('<meta[[:space:]]+(name|http\-equiv)[[:space:]]*=[[:space:]]*[\'"]?description[\'"]?[[:space:]]+(content|value)[[:space:]]*=[[:space:]]*[\'"]([^>]+)[\'"]>',
 209                    $head,
 210                    $regs))
 211              $result['descriptif'] = filtrer_entites(supprimer_tags($regs[3]));
 212      }
 213  
 214      return $result;
 215  }
 216  
 217  function syndic_a_jour ($now_id_syndic, $statut = 'off') {
 218      include_ecrire  ("inc_texte.php");
 219      include_ecrire  ("inc_filtres.php");
 220  
 221      //------------MODIFICATION CLEVER AGE elebescond
 222      require_once (dirname(__FILE__). "/include/bd/inc_syndic_factory.php");
 223      require_once (dirname(__FILE__). "/include/bd/inc_syndic_articles_factory.php");
 224      require_once (dirname(__FILE__). "/include/bd/inc_service_factory.php");
 225      $syndicMetier = &recuperer_instance_syndic();
 226      $loadOK = $syndicMetier->load($now_id_syndic);
 227  
 228      if (!PEAR::isError($loadOK))
 229          $url_syndic = $syndicMetier->getUrlSyndic();
 230      else
 231          return;
 232  
 233      $moderation = $syndicMetier->getModeration();
 234  
 235      if ($moderation == 'oui')
 236          $moderation = 'dispo';  // a valider
 237      else
 238          $moderation = 'publie'; // en ligne sans validation
 239  
 240      // Section critique : n'autoriser qu'une seule syndication simultanee pour un site donne
 241      $serviceMetier = &recuperer_instance_service();
 242      //if(!$serviceMetier->getLock("syndication $url_syndic")) return;
 243  
 244      include_ecrire  ("inc_filtres.php");
 245      //------------MODIFICATION CLEVER AGE elebescond
 246      $syndicMetier = &recuperer_instance_syndic();
 247      $loadOK = $syndicMetier->load($now_id_syndic);
 248  
 249      if (PEAR::isError($loadOK)) {
 250          die ($loadOK->getMessage());
 251      }
 252      else {
 253          $syndicMetier->setSyndication($statut);
 254          $maDate = new Date();
 255          $syndicMetier->setDateSyndic($maDate->getDate(DATE_FORMAT_ISO));
 256          $updateOK = $syndicMetier->update();
 257          if (PEAR::isError($updateOK)) {
 258              die ($updateOK->getMessage());
 259          }
 260      }
 261  
 262      $le_retour = transcoder_page(recuperer_page($url_syndic));
 263      $erreur = "";
 264  
 265      if ($le_retour) {
 266          $i = 0;
 267  
 268          while (ereg("<item[>[:space:]]", $le_retour, $regs)) {
 269              $debut_item = strpos($le_retour, $regs[0]);
 270              $fin_item = strpos($le_retour, "</item>") + strlen("</item>");
 271              $item[$i] = substr($le_retour, $debut_item, $fin_item - $debut_item);
 272  
 273              $debut_texte = substr($le_retour, "0", $debut_item);
 274              $fin_texte = substr($le_retour, $fin_item, strlen($le_retour));
 275              $le_retour = $debut_texte . $fin_texte;
 276              $i++;
 277          }
 278          if (is_array($item)) {
 279              $now = time();
 280  
 281              for ($i = 0; $i < count($item); $i++) {
 282                  // Titre (obligatoire)
 283                  if (ereg("<title>(([^<]|<[^/]|</[^t]>|</t[^i]>)*)</title>", $item[$i], $match))
 284                      //------------MODIFICATION CLEVER AGE elebescond ---------------
 285                      $le_titre = supprimer_tags(filtrer_entites($match[1]));
 286                  //$le_titre = addslashes(supprimer_tags(filtrer_entites($match[1])));
 287                  //------------FIN MODIFICATION CLEVER AGE elebescond ---------------                    
 288                  else
 289                      continue;
 290  
 291                  // URL (obligatoire)
 292                  if (ereg("<link>([^<]*)</link>", $item[$i], $match))
 293                      //------------MODIFICATION CLEVER AGE elebescond ---------------
 294                      $le_lien = filtrer_entites($match[1]);
 295                  //$le_lien = addslashes(filtrer_entites($match[1]));
 296                  //------------FIN MODIFICATION CLEVER AGE elebescond ---------------                    
 297                  else if (ereg("<guid>([^<]*)</guid>", $item[$i], $match))
 298                      //------------MODIFICATION CLEVER AGE elebescond ---------------
 299                      $le_lien = filtrer_entites($match[1]);
 300                  //$le_lien = addslashes(filtrer_entites($match[1]));
 301                  //------------FIN MODIFICATION CLEVER AGE elebescond ---------------
 302                  else
 303                      continue;
 304  
 305                  // Date
 306                  $la_date = "";
 307  
 308                  if (ereg("<([[:alpha:]]+:)?date>([^<]*)</([[:alpha:]]+:)?date>", $item[$i], $match))
 309                      $la_date = $match[2];
 310                  else if (ereg("<pubDate>([^<]*)</pubDate>", $item[$i], $match))
 311                      $la_date = $match[1];
 312  
 313                  if ($GLOBALS['flag_strtotime']AND $la_date) {
 314                      // http://www.w3.org/TR/NOTE-datetime
 315                      if (ereg('^([0-9]+-[0-9]+-[0-9]+T[0-9]+:[0-9]+(:[0-9]+)?)(\.[0-9]+)?(Z|([-+][0-9][0-9]):[0-9]+)$',
 316                               $la_date,
 317                               $match)) {
 318                          $la_date = str_replace("T", " ", $match[1]). " GMT";
 319                          $la_date = strtotime($la_date) - intval($match[5]) * 3600;
 320                      }
 321                      else
 322                          $la_date = strtotime($la_date);
 323                  }
 324  
 325                  if ($la_date < $now - 365 * 24 * 3600 OR $la_date > $now + 48 * 3600)
 326                      $la_date = $now;
 327  
 328                  // Auteur
 329                  if (ereg("<author>([^<]*)</author>", $item[$i], $match))
 330                      //------------MODIFICATION CLEVER AGE elebescond ---------------
 331                      $les_auteurs = filtrer_entites($match[1]);
 332                  //$les_auteurs = addslashes(filtrer_entites($match[1]));
 333                  //------------FIN MODIFICATION CLEVER AGE elebescond ---------------                    
 334                  else if (ereg("<([[:alpha:]]+:)?creator>([^<]*)</([[:alpha:]]+:)?creator>", $item[$i], $match))
 335                      //------------MODIFICATION CLEVER AGE elebescond ---------------
 336                      $les_auteurs = filtrer_entites($match[2]);
 337                  //$les_auteurs = addslashes(filtrer_entites($match[2]));
 338                  //------------FIN MODIFICATION CLEVER AGE elebescond ---------------                    
 339                  else
 340                      $les_auteurs = "";
 341  
 342                  // Description
 343                  if (ereg("<description[^>]*>(.*)</description>", $item[$i], $match))
 344                      //------------MODIFICATION CLEVER AGE elebescond ---------------
 345                      $la_description = supprimer_tags(filtrer_entites($match[1]));
 346                  //$la_description = supprimer_tags(addslashes(filtrer_entites($match[1])));
 347                  //------------FIN MODIFICATION CLEVER AGE elebescond ---------------                    
 348                  else
 349                      $la_description = "";
 350  
 351                  //------------MODIFICATION CLEVER AGE jguillot ---------------
 352  
 353                  $syndicArticleMetier = &recuperer_instance_syndic_articles();
 354                  $result_deja = $syndicArticleMetier->getSyndicArticleForUrl($le_lien, $now_id_syndic);
 355  
 356                  if (PEAR::isError($result_deja)) {
 357                      die ($result_deja->getMessage());
 358                  }
 359                  if (sizeOf($result_deja) == 0) {
 360                      $syndicArticleMetier->setSyndicId($now_id_syndic);
 361                      $syndicArticleMetier->setTitre($le_titre);
 362                      $syndicArticleMetier->setUrl($le_lien);
 363                      $maDate = new Date($la_date);
 364                      $syndicArticleMetier->setDate($maDate->getDate(DATE_FORMAT_ISO));
 365                      $syndicArticleMetier->setLesAuteurs($les_auteurs);
 366                      $syndicArticleMetier->setStatut($moderation);
 367                      $syndicArticleMetier->setDescriptif($la_description);
 368                      $createOK = $syndicArticleMetier->create();
 369  
 370                      if (PEAR::isError($createOK)) {
 371                          die ($createOK->getMessage());
 372                      }
 373                      $flag_ajout_lien = true;
 374                  }
 375              }
 376  
 377              //------------MODIFICATION CLEVER AGE elebescond
 378              $syndicMetier = &recuperer_instance_syndic();
 379              $loadOK = $syndicMetier->load($now_id_syndic);
 380              if (PEAR::isError($loadOK)) {
 381                  die ($loadOK->getMessage());
 382              }
 383              else {
 384                  $syndicMetier->setSyndication('oui');
 385                  $updateOK = $syndicMetier->update();
 386                  if (PEAR::isError($updateOK)) {
 387                      die ($updateOK->getMessage());
 388                  }
 389              }
 390          }
 391          // syndication javascript : y a-t-il quelqu'un qui se sert de ce truc ??
 392          // la question est posee
 393          else if (ereg("document\.write", $le_retour)) {
 394              $i = 0;
 395  
 396              while ($i < 50 AND eregi("<a[[:space:]]+href[[:space:]]*=[[:space:]]*\"?([^\">]+)\"?[^>]*>(.*)", $le_retour,
 397                                       $reg)) { //"
 398                  $le_lien = stripslashes($reg[1]);                
 399                  $la_suite = $reg[2];
 400  
 401                  $pos_fin = strpos($la_suite, "</a");
 402                  $pos_fin2 = strpos($la_suite, "</A");
 403  
 404                  if ($pos_fin2 > $pos_fin)
 405                      $pos_fin = $pos_fin2;
 406  
 407                  $le_titre = substr($la_suite, 0, $pos_fin);
 408                  //------------MODIFICATION CLEVER AGE elebescond ---------------
 409                  $le_titre = stripslashes($le_titre);
 410                  //$le_titre = addslashes(stripslashes($le_titre));
 411                  //------------FIN MODIFICATION CLEVER AGE elebescond ---------------                
 412                  $le_titre = ereg_replace("<[^>]*>", "", $le_titre);
 413                  $le_retour = substr($la_suite, $pos_fin + 4, strlen($le_retour));
 414  
 415                  echo "<li> $le_titre / $le_lien";
 416  
 417                  if (strlen($la_date) < 4)
 418                      $la_date = date("Y-m-j H:i:00");
 419  
 420                  $syndicArticleMetier = &recuperer_instance_syndic_articles();
 421                  $result_deja = $syndicArticleMetier->getSyndicArticleForUrl($le_lien, $now_id_syndic);
 422  
 423                  if (PEAR::isError($result_deja)) {
 424                      die ($result_deja->getMessage());
 425                  }
 426  
 427                  if (sizeOf($result_deja) == 0) {
 428                      $syndicArticleMetier->setSyndicId($now_id_syndic);
 429                      $syndicArticleMetier->setTitre($le_titre);
 430                      $syndicArticleMetier->setUrl($le_lien);
 431                      $maDate = new Date($la_date);
 432                      $syndicArticleMetier->setDate($maDate->getDate(DATE_FORMAT_ISO));
 433                      $syndicArticleMetier->setLesAuteurs($les_auteurs);
 434                      $syndicArticleMetier->setStatut($moderation);
 435                      $syndicArticleMetier->setDescriptif($la_description);
 436                      $createOK = $syndicArticleMetier->create();
 437  
 438                      if (PEAR::isError($createOK)) {
 439                          die ($createOK->getMessage());
 440                      }
 441                      $flag_ajout_lien = true;
 442                  }
 443                  $i++;
 444              }
 445  
 446              $syndicMetier = &recuperer_instance_syndic();
 447              $loadOK = $syndicMetier->load($now_id_syndic);
 448              if (PEAR::isError($loadOK)) {
 449                  die ($loadOK->getMessage());
 450              }
 451              else {
 452                  $syndicMetier->setSyndication('oui');
 453                  $maDate = new Date();
 454                  $syndicMetier->setDateSyndic($maDate->getDate(DATE_FORMAT_ISO));
 455                  $updateOK = $syndicMetier->update();
 456                  if (PEAR::isError($updateOK)) {
 457                      die ($updateOK->getMessage());
 458                  }
 459              }
 460          }
 461          else
 462              $erreur = _T('avis_echec_syndication_01');
 463      }
 464      else
 465          $erreur = _T('avis_echec_syndication_02');
 466  
 467      // Ne pas oublier de liberer le verrou
 468      $serviceMetier = &recuperer_instance_service();
 469  
 470      if ($flag_ajout_lien) {
 471          include_ecrire  ('inc_rubriques.php');
 472      }
 473  
 474      return $erreur;
 475  }
 476  
 477  //
 478  // Effectuer la syndication d'un unique site
 479  //
 480  
 481  function executer_une_syndication() {
 482      require_once (dirname(__FILE__)."/include/bd/inc_syndic_factory.php");
 483      $syndicMetier = &recuperer_instance_syndic();
 484      $allSyndics = $syndicMetier->getAllForSyndicationAndStatutAndIntervalHour('sus', 'publie', 24);
 485      if(PEAR::isError($allSyndics)) {
 486          die($allSyndics->getMessage());
 487      }
 488      while(list(, $syndicMetier) = each($allSyndics)) {
 489              $id_syndic = $syndicMetier->getSyndicId();
 490              syndic_a_jour($id_syndic);
 491      }
 492  
 493      $syndicMetier = &recuperer_instance_syndic();
 494      $allSyndics = $syndicMetier->getAllForSyndicationAndStatutAndIntervalHour('oui', 'publie', 2);
 495      if(PEAR::isError($allSyndics)) {
 496          die($allSyndics->getMessage());
 497      }
 498      while(list(, $syndicMetier) = each($allSyndics)) {
 499              $id_syndic = $syndicMetier->getSyndicId();
 500              syndic_a_jour($id_syndic, 'sus');
 501      }
 502  }
 503  ?>


Généré le : Sat Feb 24 14:40:03 2007 par Balluche grâce à PHPXref 0.7