Index: modules/project/release/project_release.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.module,v
retrieving revision 1.7
diff -u -r1.7 project_release.module
--- modules/project/release/project_release.module	1 Jan 2007 23:56:12 -0000	1.7
+++ modules/project/release/project_release.module	3 Jan 2007 18:48:34 -0000
@@ -74,6 +74,50 @@
 }
 
 /**
+ * Implementation of hook_xmlrpc().
+ */
+function drupal_xmlrpc() {
+  $xmlrpc = array();
+  $xmlrpc[] = array(
+    'project.release.ping',
+    'project_release_ping',
+    array('array', 'string', 'string'),
+    t('Providing versioning data')
+  );
+  return $xmlrpc;
+}
+
+/**
+ * Callback for hook_xmlrpc().
+ *
+ * Return versioning data for all available projects.
+ */
+function project_release_ping($project, $version) {
+  $data = array();
+
+  $where = '';
+  $parameters = array($version);
+
+  // We load data for all projects if the 'all' keyword is used.
+  // So we need to filter by the project name (url) only if we're not
+  // loading 'all'.
+  if ($project != 'all') {
+    $where .= "AND p.url = '%s'";
+    $parameters[] = $project;
+  }
+
+  $result = db_query(db_rewrite_sql("SELECT DISTINCT(n.nid), p.uri, pr.version FROM {node} n INNER JOIN {project_projects} p ON n.nid = p.nid INNER JOIN {project_release_nodes} pr ON p.nid = pr.pid WHERE pr.version LIKE '%s%' $where ORDER BY pr.version DESC, p.url", $parameters));
+  while ($project = db_fetch_array($result)) {
+    $data[] = array(
+      'name' => $project['url'],
+      'version' => $project['version'],
+    );
+  }
+
+  return $data;
+}
+
+/**
  * Callback for the main settings page.
  * @ingroup project_release_core
  */
