Index: modules/update/update.manager.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/update/update.manager.inc,v
retrieving revision 1.26
diff -u -p -r1.26 update.manager.inc
--- modules/update/update.manager.inc	20 Nov 2010 09:40:34 -0000	1.26
+++ modules/update/update.manager.inc	27 Nov 2010 01:28:46 -0000
@@ -351,6 +351,37 @@ function update_manager_download_batch_f
  * file transfer credentials and attempt to complete the update.
  */
 function update_manager_update_ready_form($form, &$form_state) {
+  $form['available_backends'] = array(
+    '#prefix' => '<p>',
+    '#suffix' => '</p>',
+  );
+
+  // Do a preliminary check to see if file transfers will be performed locally.
+  // See update_manager_update_ready_form_submit().
+  $local_transfers_allowed = fileowner(drupal_tempnam('temporary://', 'update_')) == fileowner(conf_path());
+
+  $available_backends = module_invoke_all('filetransfer_backends');
+  if (!$local_transfers_allowed && empty($available_backends)) {
+    $form['available_backends']['#markup'] = t('Your server does not support updating modules and themes from this administrative interface. You can instead update modules and themes by uploading the new versions directly to the server, as described in the <a href="@handbook_url">handbook</a>.', array('@handbook_url' => 'http://drupal.org/getting-started/install-contrib'));
+    return $form;
+  }
+
+  $backend_names = array();
+  foreach ($available_backends as $backend) {
+    $backend_names[] = $backend['title'];
+  }
+  $form['available_backends']['#markup'] = format_plural(
+    count($available_backends),
+    "<strong>Note:</strong> Updating a module or theme from this administrative interface will require <strong>@backends access</strong> to your server. See the <a href=\"@handbook_url\">handbook</a> for other methods of updating your site's code.",
+    "<strong>Note:</strong> Updating a module or theme from this administrative interface will require access to your server via one of the following methods: <strong>@backends</strong>. See the <a href=\"@handbook_url\">handbook</a> for other methods of updating your site's code.",
+    array(
+      '@backends' => implode(', ', $backend_names),
+      '@handbook_url' => 'http://drupal.org/getting-started/install-contrib',
+    ));
+  // If file transfers will be performed locally, we do not need to display the
+  // above note.
+  $form['available_backends']['#access'] = !$local_transfers_allowed;
+
   $form['backup'] = array(
     '#prefix' => '<strong>',
     '#markup' => t('Back up your database and site before you continue. <a href="@backup_url">Learn how</a>.', array('@backup_url' => url('http://drupal.org/node/22281'))),
@@ -455,11 +486,45 @@ function update_manager_update_ready_for
  *   The form array for selecting which project to install.
  */
 function update_manager_install_form($form, &$form_state, $context) {
-  $form = array();
+  $form['available_backends'] = array(
+    '#prefix' => '<p>',
+    '#suffix' => '</p>',
+  );
+
+  // Do a preliminary check to see if file transfers will be performed locally.
+  // See update_manager_install_form_submit().
+  $local_transfers_allowed = fileowner(drupal_tempnam('temporary://', 'update_')) == fileowner(conf_path());
+
+  $available_backends = module_invoke_all('filetransfer_backends');
+  if (!$local_transfers_allowed && empty($available_backends)) {
+    $form['available_backends']['#markup'] = t('Your server does not support installing modules and themes from this administrative interface. You can instead install modules and themes by uploading them directly to the server, as described in the <a href="@handbook_url">handbook</a>.', array('@handbook_url' => 'http://drupal.org/getting-started/install-contrib'));
+    return $form;
+  }
+
+  $backend_names = array();
+  foreach ($available_backends as $backend) {
+    $backend_names[] = $backend['title'];
+  }
+  $form['available_backends']['#markup'] = format_plural(
+    count($available_backends),
+    '<strong>Note:</strong> Installing a module or theme from this administrative interface will require <strong>@backends access</strong> to your server. See the <a href="@handbook_url">handbook</a> for other installation methods.',
+    '<strong>Note:</strong> Installing a module or theme from this administrative interface will require access to your server via one of the following methods: <strong>@backends</strong>. See the <a href="@handbook_url">handbook</a> for other installation methods.',
+    array(
+      '@backends' => implode(', ', $backend_names),
+      '@handbook_url' => 'http://drupal.org/getting-started/install-contrib',
+    ));
+  // If file transfers will be performed locally, we do not need to display the
+  // above note.
+  $form['available_backends']['#access'] = !$local_transfers_allowed;
 
   $form['help_text'] = array(
     '#prefix' => '<p>',
-    '#markup' => t('To install a new module or theme, either enter the URL of an archive file you wish to install, or upload the archive file that you have downloaded. You can find <a href="@module_url">modules</a> and <a href="@theme_url">themes</a> at <a href="@drupal_org_url">http://drupal.org</a>.<br/>The following archive extensions are supported: %extensions.', array('@module_url' => 'http://drupal.org/project/modules', '@theme_url' => 'http://drupal.org/project/themes', '@drupal_org_url' => 'http://drupal.org', '%extensions' => archiver_get_extensions())),
+    '#markup' => t('You can find <a href="@module_url">modules</a> and <a href="@theme_url">themes</a> on <a href="@drupal_org_url">drupal.org</a>. The following file extensions are supported: %extensions.', array(
+      '@module_url' => 'http://drupal.org/project/modules',
+      '@theme_url' => 'http://drupal.org/project/themes',
+      '@drupal_org_url' => 'http://drupal.org',
+      '%extensions' => archiver_get_extensions(),
+    )),
     '#suffix' => '</p>',
   );
 
