21600) { variable_set("drupal_cron_last", time()); /* ** If this site acts as a Drupal XML-RPC server, delete the sites that ** stopped sending "ping" messages. */ db_query("DELETE FROM directory WHERE timestamp < '". (time() - 259200) ."'"); /* ** If this site acts as a Drupal XML-RPC client, send a message to the ** Drupal XML-RPC server. */ if (variable_get("drupal_directory", 0) && variable_get("drupal_server", 0)) { drupal_notify(variable_get("drupal_server", "")); } } } function drupal_directory_ping($arguments) { /* ** Parse our parameters: */ $argument = $arguments->getparam(0); $link = strip_tags($argument->scalarval()); $argument = $arguments->getparam(1); $name = strip_tags($argument->scalarval()); $argument = $arguments->getparam(2); $mail = strip_tags($argument->scalarval()); $argument = $arguments->getparam(3); $slogan = strip_tags($argument->scalarval()); $argument = $arguments->getparam(4); $mission = strip_tags($argument->scalarval()); /* ** Update the data in our database and send back a reply: */ if ($link && $name && $mail && $slogan && $mission) { db_query("DELETE FROM directory WHERE link = '". check_query($link) ."' OR mail = '". check_query($mail) ."'"); db_query("INSERT INTO directory (link, name, mail, slogan, mission, timestamp) VALUES ('". check_query($link) ."', '". check_query($name) ."', '". check_query($mail) ."', '". check_query($slogan) ."', '". check_query($mission) ."', '". time() ."')"); watchdog("message", "directory: ping from '$name' ($link)"); return new xmlrpcresp(new xmlrpcval(1, "int")); } else { return new xmlrpcresp(new xmlrpcval(0, "int")); } } function drupal_directory_page() { $result = db_query("SELECT * FROM directory ORDER BY name"); while ($site = db_fetch_object($result)) { $output .= "link\">$site->name - $site->slogan
$site->mission

"; } return $output; } function drupal_xmlrpc() { return array("drupal.site.ping" => array("function" => "drupal_directory_ping")); } function drupal_notify($server) { $url = parse_url($server); $client = new xmlrpc_client($url["path"], $url["host"], 80); $message = new xmlrpcmsg("drupal.site.ping", array(new xmlrpcval(path_uri(), "string"), new xmlrpcval(variable_get("site_name", ""), "string"), new xmlrpcval(variable_get("site_mail", ""), "string"), new xmlrpcval(variable_get("site_slogan", ""), "string"), new xmlrpcval(variable_get("site_mission", ""), "string"))); $result = $client->send($message, 5); if (!$result || $result->faultCode()) { watchdog("error", "failed to notify '". $url["host"] ."' at '". $url["path"] ."': ". $result->faultString()); } } function drupal_info($field = 0) { $info["name"] = "Drupal"; $info["protocol"] = "XML-RPC"; if ($field) { return $info[$field]; } else { return $info; } } function drupal_auth($username, $password, $server) { $message = new xmlrpcmsg("drupal.login", array(new xmlrpcval($username, "string"), new xmlrpcval($password, "string"))); $client = new xmlrpc_client("/xmlrpc.php", $server, 80); $result = $client->send($message, 5); if ($result && !$result->faultCode()) { $value = $result->value(); $login = $value->scalarval(); } return $login; } function drupal_page() { global $theme; $theme->header(); $theme->box("Drupal", drupal_auth_help()); $theme->footer(); } function drupal_auth_help() { $site = variable_get("site_name", "this web site"); $output = "

Drupal is the name of the software which powers %s. There are Drupal websites all over the world, and many of them share their registration databases so that users may freely login to any Drupal site using a single Drupal ID.

So please feel free to login to your account here at %s with a username from another Drupal site. The format of a Drupal ID is similar to an email address: username@server. An example of valid Drupal ID is mwlily@www.drop.org.

"; return sprintf(t($output), $site, $site); } ?>