ping.module 4.24 KB
Newer Older
1 2 3
<?php
// $Id$

4
function ping_help($section = "admin/help#ping") {
5 6
  $output = "";

7
  switch ($section) {
8
    case 'admin/help#ping':
9 10 11 12 13 14
      $output .= t("
      <p>Drupal can pings sites automatically to notify them that your site has changed. It can ping the following sites:</p>
      <p>%weblogs, a web site that tracks and displays links to changed weblogs and news-oriented web sites. To get your Drupal site listed, weblogs.com must be informed about your site's updates.  This is the job of the ping module and when installed, the administrator doesn't have to do anything to participate in the %weblogs system. The ping module automatically notifies weblogs.com when your site is updated.  To do so, Drupal implements the %weblogs-XML.</p>
      <p>%weblogs-RSS, a web site that tracks and displays links to recently changed RSS feeds in XML format. To get your Drupal site listed, %weblogs-RSS must be informed about updates to your RSS feed.  This is the job of the ping module and when installed, the administrator doesn't have to do anything to participate in the %weblogs-RSS-changes system. The ping module automatically notifies %weblogs-RSS when your site is updated.</p>
      <p>%blo-gs, a directory of recently updated weblogs and tools for tracking interesting weblogs, in the spirit of services like %weblogs, %blogtracker and %blogrolling. To get your Drupal site listed, %blo-gs must be informed about your site's updates.  This is the job of the ping module and when installed, the administrator doesn't have to do anything to participate in the %blo-gs system. The ping module automatically notifies blo.gs when your site is updated.  To do so, Drupal implements the %blo-gs-XML.</p>
      <p>The ping feature requires crontab.</p>", array("%weblogs" => "<a href=\"http://www.weblogs.com/\">Weblogs.com</a>", "%weblogs-XML" => "<a href=\"http://www.xmlrpc.com/weblogsCom/\">". t("XML-RPC interface of weblogs.com") ."</a>", "%weblogs-RSS" => "<a href=\"http://www.xmlrpc.com/weblogsComForRSS\">". t("Weblogs.Com for RSS") ."</a>", "%weblogs-RSS-changes" => "<a href=\"http://www.weblogs.com/rssUpdates/changes.xml\">". t("the weblogs.com for RSS") ."</a>", "%blo-gs" => "<a href=\"http://blo.gs/\">blo.gs</a>", "%blogtracker" => "<a href=\"http://www.dansanderson.com/blogtracker\">blogtracker</a>", "%blogrolling" => "<a href=\"http://www.blogrolling.com\">blogtolling.com</a>", "%blo-gs-XML" => "<a href=\"http://blo.gs/ping.php\">". t("XML-RPC interface of blo.gs") ."</a>"));
15 16
      break;

17
    case 'admin/system/modules#description':
18
      $output = t("Alerts other site(s) that your site has been updated.");
19 20 21
      break;
  }

22
  return $output;
23 24 25
}

function ping_cron() {
26 27
  global $base_url;

28
  if (variable_get("site_name", 0) && variable_get("site_slogan", 0)) {
29
    if (db_num_rows(db_query("SELECT nid FROM {node} WHERE status = 1 AND moderate = 0 AND (created > '". variable_get("ping_cron_last", time()) ."' OR changed > '". variable_get("ping_cron_last", time()) ."')"), 1)) {
30
      _ping_notify(variable_get("site_name", "") ." - ". variable_get("site_slogan", ""), $base_url);
31 32 33 34 35 36 37 38 39 40 41
    }

    variable_set("ping_cron_last", time());
  }
}

function _ping_notify($name, $url) {
  module_invoke_all("ping", $name, $url);
}

function ping_ping($name = "", $url = "") {
42
  $feed = url("node/feed");
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

  $client = new xmlrpc_client("/RPC2", "rpc.weblogs.com", 80);

  $message = new xmlrpcmsg("weblogUpdates.ping", array(new xmlrpcval($name), new xmlrpcval($url)));

  $result = $client->send($message);

  if (!$result || $result->faultCode()) {
    watchdog("error", "failed to notify 'weblogs.com' (site)");
  }

  unset($client);

  $client = new xmlrpc_client("/RPC2", "rssrpc.weblogs.com", 80);

  $message = new xmlrpcmsg("rssUpdate", array(new xmlrpcval($name), new xmlrpcval($feed)));

  $result = $client->send($message);

  if (!$result || $result->faultCode()) {
    watchdog("error", "failed to notify 'weblogs.com' (RSS)");
  }

  unset($client);

  $client = new xmlrpc_client("/", "ping.blo.gs", 80);

  $message = new xmlrpcmsg("weblogUpdates.extendedPing", array(new xmlrpcval($name), new xmlrpcval($url), new xmlrpcval($url), new xmlrpcval($feed)));

  $result = $client->send($message);

  if (!$result || $result->faultCode()) {
    watchdog("error", "failed to notify 'blo.gs' ");
  }

}
?>