? modules/update/dif
cvs diff: Diffing modules/update
Index: modules/update/update.api.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/update/update.api.php,v
retrieving revision 1.2
diff -u -p -r1.2 update.api.php
--- modules/update/update.api.php	24 May 2009 17:39:35 -0000	1.2
+++ modules/update/update.api.php	5 Jun 2009 00:39:10 -0000
@@ -12,6 +12,70 @@
  */
 
 /**
+ * Alter the list of projects before fetching data and comparing versions.
+ *
+ * Most modules will never need to implement this hook. It is for advanced
+ * interaction with the update status module: mere mortals need not apply.
+ * The primary use-case for this hook is to add projects to the list, for
+ * example, to provide update status data on disabled modules and themes. A
+ * contributed module might want to hide projects from the list, for example,
+ * if there is a site-specific module that doesn't have any official releases,
+ * that module could remove itself from this list to avoid "No available
+ * releases found" warnings on the available updates report. In rare cases, a
+ * module might want to alter the data associated with a project already in
+ * the list.
+ *
+ * @param $projects
+ *   Reference to an array of the projects installed on the system. This
+ *   includes all the metadata documented in the comments below for each
+ *   project (either module or theme) that is currently enabled. The array is
+ *   initially populated inside update_get_projects() with the help of
+ *   _update_process_info_list(), so look there for examples of how to
+ *   populate the array with real values.
+ *
+ * @see update_get_projects()
+ * @see _update_process_info_list()
+ */
+function hook_update_projects_alter(&$projects) {
+  // Hide a site-specific module from the list.
+  unset($projects['site_specific_module']);
+
+  // Add a disabled module to the list.
+  // The key for the array should be the machine-readable project "short name".
+  $projects['disabled_project_name'] = array(
+    // Machine-readable project short name (same as the array key above).
+    'name' => 'disabled_project_name',
+    // Array of values from the main .info file for this project.
+    'info' => array(
+      'name' => 'Some disabled module',
+      'description' => 'A module not enabled on the site that you want to see in the available updates report.',
+      'version' => '7.x-1.0',
+      'core' => '7.x',
+      // The maximum file change time (the "ctime" returned by the filectime()
+      // PHP method) for all of the .info files included in this project.
+      '_info_file_ctime' => 1243888165,
+    ),
+    // The date stamp when the project was released, if known. If the disabled
+    // project was an officially packaged release from drupal.org, this will
+    // be included in the .info file as the 'datestamp' field. This only
+    // really matters for development snapshot releases that are regenerated,
+    // so it can be left undefined or set to 0 in most cases.
+    'datestamp' => 1243888185,
+    // Any modules (or themes) included in this project. Keyed by machine-
+    // readable "short name", value is the human-readable project name printed
+    // in the UI.
+    'includes' => array(
+      'disabled_project' => 'Disabled module',
+      'disabled_project_helper' => 'Disabled module helper module',
+      'disabled_project_foo' => 'Disabled module foo add-on module',
+    ),
+    // Does this project contain a 'module', 'theme', 'disabled-module', or
+    // 'disabled-theme'?
+    'project_type' => 'disabled-module',
+  );
+}
+
+/**
  * Alter the information about available updates for projects.
  *
  * @param $projects
Index: modules/update/update.compare.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/update/update.compare.inc,v
retrieving revision 1.18
diff -u -p -r1.18 update.compare.inc
--- modules/update/update.compare.inc	24 May 2009 17:39:35 -0000	1.18
+++ modules/update/update.compare.inc	5 Jun 2009 00:39:10 -0000
@@ -38,6 +38,8 @@ function update_get_projects() {
       // Still empty, so we have to rebuild the cache.
       _update_process_info_list($projects, module_rebuild_cache(), 'module');
       _update_process_info_list($projects, system_theme_data(), 'theme');
+      // Allow other modules to alter projects before fetching and comparing.
+      drupal_alter('update_projects', $projects);
       // Cache the site's project data for at most 1 hour.
       _update_cache_set('update_project_projects', $projects, REQUEST_TIME + 3600);
     }
Index: modules/update/update.fetch.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/update/update.fetch.inc,v
retrieving revision 1.19
diff -u -p -r1.19 update.fetch.inc
--- modules/update/update.fetch.inc	24 May 2009 17:39:35 -0000	1.19
+++ modules/update/update.fetch.inc	5 Jun 2009 00:39:10 -0000
@@ -91,7 +91,10 @@ function _update_build_fetch_url($projec
   $name = $project['name'];
   $url = $project['info']['project status url'];
   $url .= '/' . $name . '/' . DRUPAL_CORE_COMPATIBILITY;
-  if (!empty($site_key)) {
+  // Only append a site_key and the version information if we have a site_key
+  // in the first place, and if this is not a disabled module or theme. We do
+  // not want to record usage statistics for disabled code.
+  if (!empty($site_key) && (strpos($project['project_type'], 'disabled') === FALSE)) {
     $url .= (strpos($url, '?') === TRUE) ? '&' : '?';
     $url .= 'site_key=';
     $url .= drupal_urlencode($site_key);
