? pingfm-global.patch
Index: pingfm.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/pingfm/Attic/pingfm.admin.inc,v
retrieving revision 1.1.2.4
diff -u -p -r1.1.2.4 pingfm.admin.inc
--- pingfm.admin.inc	27 Mar 2009 19:49:10 -0000	1.1.2.4
+++ pingfm.admin.inc	6 Dec 2010 02:50:21 -0000
@@ -17,6 +17,12 @@ function pingfm_admin_settings() {
     '#default_value' => variable_get('pingfm_dev_key', '4c625cb344fe57ba6167eb16036c7c35'),
     '#required' => TRUE,
   );
+  $form['pingfm_global_app_key'] = array(
+    '#type' => 'textfield',
+    '#title' => 'Global application key',
+    '#description' => 'If a user has the \'Use global app key\' permission and has not filled out an individual app key, a global key can be used instead. Enter that key here if you need it.',
+    '#default_value' => variable_get('pingfm_global_app_key',''),
+  );
   $form['node_settings'] = array(
     '#type' => 'fieldset',
     '#title' => t('Node settings'),
Index: pingfm.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/pingfm/Attic/pingfm.module,v
retrieving revision 1.1.2.8
diff -u -p -r1.1.2.8 pingfm.module
--- pingfm.module	27 Mar 2009 19:49:10 -0000	1.1.2.8
+++ pingfm.module	6 Dec 2010 02:50:21 -0000
@@ -56,7 +56,7 @@ function pingfm_menu() {
  * Implementation of hook_perm().
  */
 function pingfm_perm() {
-  return array('administer pingfm', 'post to ping.fm');
+  return array('administer pingfm', 'post to ping.fm','use global ping.fm app key');
 }
 
 /**
@@ -74,10 +74,10 @@ function pingfm_user($op, &$edit, &$acco
       '#access' => user_access('post to ping.fm', $account) || user_access('administer pingfm'),
     );
     $custom_url_details = '';
-    if (isset($account->pingfm_app_key) && !empty($account->pingfm_app_key)) {
+    if (!empty($app_key)) {
       $custom_url_details = t('In the <a href="!custom_url">Custom URL</a> on Ping.fm, enter the following: "%custom_url".', array(
         '!custom_url' => 'http://ping.fm/custom/',
-        '%custom_url' => url('pingfm/'. $account->uid .'/'. md5($account->pingfm_app_key), array('absolute' => TRUE)),
+        '%custom_url' => url('pingfm/'. $account->uid .'/'. md5($app_key), array('absolute' => TRUE)),
       ));
     }
     $form['pingfm']['pingfm_app_key'] = array(
@@ -98,10 +98,11 @@ function pingfm_form_alter(&$form, $form
     $types = variable_get('pingfm_nodetypes', array());
     if (!empty($types[$form['type']['#value']])) {
       global $user;
+      $app_key = _pingfm_get_app_key($user);
       $form['pingfm'] = array(
         '#type' => 'fieldset',
         '#title' => 'Ping.fm',
-        '#access' => user_access('post to ping.fm') && isset($user->pingfm_app_key) && !empty($user->pingfm_app_key),
+        '#access' => user_access('post to ping.fm') && !empty($app_key),
         '#collapsible' => TRUE,
         '#collapsed' => TRUE,
         '#tree' => TRUE,
@@ -191,7 +192,7 @@ function pingfm_phpingfm($account = NULL
   }
   if (!isset($pingfm_accounts[$account->uid])) {
     $dev_key = variable_get('pingfm_dev_key', '4c625cb344fe57ba6167eb16036c7c35');
-    $app_key = isset($account->pingfm_app_key) ? $account->pingfm_app_key : NULL;
+    $app_key = _pingfm_get_app_key($account);
     $debug = variable_get('pingfm_debug', FALSE);
     module_load_include('php', 'pingfm', 'phpingfm/PHPingFM');
     $pingfm_accounts[$account->uid] = new PHPingFM($dev_key, $app_key, $debug);
@@ -225,3 +226,15 @@ function pingfm_custom_url($user, $key) 
     return t('Ping.fm <a href="!customurl">custom URLs</a> requires POST requests.', array('!customurl' => 'http://ping.fm/custom/'));
   }
 }
+
+/**
+ * Gets the app key for a particular user; defaulting to the global app key if available
+ */
+function _pingfm_get_app_key($account) {
+  if (isset($account->pingfm_app_key) && !empty($account->pingfm_app_key)) return $account->pingfm_app_key;  
+  if (user_access('use global ping.fm app key',$account)) {    
+    $pingfm_global_app_key = variable_get('pingfm_global_app_key','');
+    if (!empty($pingfm_global_app_key)) return $pingfm_global_app_key;
+  }
+  return '';
+}
