Index: gmaplocation.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/gmaplocation/gmaplocation.module,v
retrieving revision 1.1.6.20
diff -u -p -r1.1.6.20 gmaplocation.module
--- gmaplocation.module	19 Sep 2010 08:13:50 -0000	1.1.6.20
+++ gmaplocation.module	5 Oct 2010 19:44:52 -0000
@@ -146,6 +146,7 @@ function gmaplocation_admin_settings() {
     '#title' => t('Google Maps API key'), 
     '#collapsible' => TRUE,
     '#collapsed' => variable_get('gmaplocation_key', FALSE));
+  if (!module_exists('keys_api') && !module_exists('keys')) {
   $form['keys']['gmaplocation_key'] = array(
     '#type' => 'textfield',
     '#title' => t('API key'),
@@ -154,6 +155,17 @@ function gmaplocation_admin_settings() {
     '#description' => t('Google Maps key for your domain.') . " " .  
       t('Obtain key on !url', array('!url' => l('http://code.google.com/apis/maps/signup.html', 'http://code.google.com/apis/maps/signup.html')))
     );
+  } else {
+    $form['keys']['gmaplocation_key_show'] = array(
+      '#type' => 'item',
+      '#title' => t('Google Maps API Key'),
+      '#value' => t('Managed by <a href="@url">Keys</a>.', array('@url' => url('admin/settings/keys'))),
+    );
+    $form['keys']['gmaplocation_key'] = array(
+      '#type' => 'value',
+      '#default_value' => gmaplocation_get_key(),
+    );
+  }
   $form['#validate'][] = 'gmaplocation_admin_settings_validate';
 
   return system_settings_form($form);
@@ -200,7 +212,7 @@ function gmaplocation_page() {
   $gmaplocation_body = variable_get('gmaplocation_body', '');
   $gmaplocation_footer = variable_get('gmaplocation_footer', '');
   $path = drupal_get_path('module', 'gmaplocation');
-  $gmap_key = variable_get('gmaplocation_key', NULL);
+  $gmap_key = gmaplocation_get_key();
   drupal_set_html_head('<script src="http://maps.google.com/maps?file=api&amp;hl=en&amp;v=2&amp;key=' . $gmap_key . '" type="text/javascript"></script>');
   drupal_add_js($path . '/gmaplocation.js');
   $gmaplocation_settings = array(
@@ -334,7 +346,7 @@ function gmaplocation_static_image_url($
   $image_url = 'http://maps.google.com/staticmap?zoom=' . variable_get('gmaplocation_zoom', 5);
   $image_url .= "&amp;size={$w}x{$h}";
   $image_url .= '&amp;markers=' . variable_get('gmaplocation_lat', 0) . ','. variable_get('gmaplocation_lng', 0);
-  $image_url .= '&amp;key=' . variable_get('gmaplocation_key', NULL);
+  $image_url .= '&amp;key=' . gmaplocation_get_key();
   return($image_url);
 }
 
@@ -374,4 +386,55 @@ function gmaplocation_theme() {
     'gmaplocation_map' => array(),
   );
 }
- 
+
+
+/**
+ * Implementation of hook_keys_service(). (from the keys api)
+ */
+function gmaplocation_keys_service() {
+  // @@@ Remove after everyone has upgraded.
+  if (module_exists('keys_api')) {
+    return array(
+      'gmap' => array(
+        'name' => t('Gmap'),
+        'description' => t('Google Maps API Key'),
+      ),
+    );
+  }
+  elseif (module_exists('keys')) {
+    // @greenSkin:
+    // What is your reasoning behind predefining this?
+    // I'll avoid overriding you for now, but this seems rather arbitrary.
+    // Reference: http://drupal.org/cvs?commit=310498
+
+    // Probe keys to determine if it is defining our key for us.
+    $test = array();
+    if (function_exists('keys_keys_service')) {
+      $test = keys_keys_service();
+    }
+    if (!isset($test['google_maps'])) {
+      // Be forward compatible with future versions of keys api
+      // that no longer define it.
+      return array(
+        'google_maps' => array(
+          'name' => t('Google Maps'),
+          'description' => t('Google Maps API Key'),
+        ),
+      );
+    }
+  }
+}
+
+/**
+ * Retrieve the Google Maps key that is in use for the site.
+ */
+function gmaplocation_get_key() {
+  $key = variable_get('gmaplocation_key', '');
+  if (module_exists('keys_api')) {
+    $key = keys_api_get_key('gmap', $_SERVER['HTTP_HOST']);
+  }
+  elseif (module_exists('keys')) {
+    $key = keys_get_key('google_maps');
+  }
+  return $key;
+}
