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 */