? 442678-ux-improvements.diff
Index: salesforce_api/salesforce_api.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/salesforce/salesforce_api/salesforce_api.admin.inc,v
retrieving revision 1.2.2.5
diff -u -p -r1.2.2.5 salesforce_api.admin.inc
--- salesforce_api/salesforce_api.admin.inc	25 Apr 2009 05:59:20 -0000	1.2.2.5
+++ salesforce_api/salesforce_api.admin.inc	1 May 2009 19:20:28 -0000
@@ -30,14 +30,17 @@ function salesforce_api_settings_form() 
     '#required' => TRUE,
   );
   $form['api']['salesforce_api_password'] = array(
-    '#type' => 'password',
+    '#type' => 'textfield',
     '#title' => t('Password'),
+    '#description' => t('Enter the password used when logging into Salesforce.'),
     '#default_value' => variable_get('salesforce_api_password', ''),
+    '#required' => TRUE,
   );
   $form['api']['salesforce_api_token'] = array(
     '#type' => 'textfield',
     '#title' => t('Security token'),
     '#description' => t('Set your security token by logging into Salesforce and navigating to Setup > My Personal Information > Reset My Security Token.'),
+    '#required' => TRUE,
     '#default_value' => variable_get('salesforce_api_token', ''),
   );
 
@@ -70,10 +73,34 @@ function salesforce_api_settings_form() 
   );
 
   // Validate handler makes sure that the salesforce_api_password doesn't get set to null on accident
+  $form['#validate'][] = 'salesforce_api_settings_form_validate';
   $form['#submit'][] = 'salesforce_api_settings_form_submit';
   return system_settings_form($form);
 }
 
+function salesforce_api_settings_form_validate($form, &$form_state) {
+  $values = $form_state['values'];
+  if(empty($values['salesforce_api_username'])
+  || empty($values['salesforce_api_password'])
+  || empty($values['salesforce_api_token'])) {
+    // Don't bother checking if any of these required fields is empty.
+    return;
+  }
+  
+  // See if we can connect with the specified values.
+  $options = array(
+    'username' => $values['salesforce_api_username'], 
+    'password' => $values['salesforce_api_password'], 
+    'token' => $values['salesforce_api_token']
+  );
+  if(!salesforce_api_connect(TRUE, $options)) {
+    // If not, prevent the user from overwriting the current configuration.
+    form_set_error('api', 'Unable to connect to SalesForce. Please check your credentials and try again. <br />If you receive this error message repeatedly, please refer to the README for the SalesForce module.');
+  } else {
+    drupal_set_message('SalesForce connection established.');
+  }
+}
+
 // Settings form submit handler so that password doesn't get deleted.
 function salesforce_api_settings_form_submit($form, &$form_state) {
   // If the user hit "Save Configuration" and the required field
Index: salesforce_api/salesforce_api.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/salesforce/salesforce_api/salesforce_api.install,v
retrieving revision 1.2.2.4
diff -u -p -r1.2.2.4 salesforce_api.install
--- salesforce_api/salesforce_api.install	25 Apr 2009 06:44:28 -0000	1.2.2.4
+++ salesforce_api/salesforce_api.install	1 May 2009 19:20:28 -0000
@@ -14,6 +14,10 @@ function salesforce_api_install() {
   drupal_install_schema('salesforce_api');
 }
 
+function salesforce_api_enable() {
+  drupal_set_message(t('Salesforce module enabled: Before making any Salesforce connections, !link', array('!link' => l(t('please enter your Salesforce API credentials'), SALESFORCE_PATH_ADMIN))), 'warning');
+}
+
 /**
  * Implementation of hook_schema().
  */
@@ -52,3 +56,41 @@ function salesforce_api_schema() {
 
   return $schema;
 }
+
+/**
+ * Check the Salesforce API configuration to see if we have valid credentials.
+**/
+function salesforce_api_requirements($phase) {
+  $req = array();
+  switch($phase) {
+    case 'install':
+      break;
+    case 'runtime':
+      $title = 'Salesforce Configuration';
+      $value = l('Salesforce Admin', SALESFORCE_PATH_ADMIN);
+      $username = variable_get('salesforce_api_username', FALSE);
+      $description = null;
+      if(empty($username)) {
+        $description = 'Salesforce configuration incomplete.';
+        $severity = REQUIREMENT_ERROR;
+      } elseif(!salesforce_api_connect()) {
+        $description = 'Unable to connect to Salesforce using current configuration.';
+        $severity = REQUIREMENT_ERROR;
+      } else {
+        $severity = REQUIREMENT_OK;
+      }
+      $req[] = array(
+        'title' => $title, 
+        'value' => $value, 
+        'description' => $description,
+        'severity' => $severity
+      );
+      break;
+  }
+  
+  if(!empty($req)) {
+    return $req;
+  }
+}
+
+
Index: salesforce_api/salesforce_api.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/salesforce/salesforce_api/salesforce_api.module,v
retrieving revision 1.2.2.11
diff -u -p -r1.2.2.11 salesforce_api.module
--- salesforce_api/salesforce_api.module	30 Apr 2009 11:25:19 -0000	1.2.2.11
+++ salesforce_api/salesforce_api.module	1 May 2009 19:20:28 -0000
@@ -130,11 +130,20 @@ function salesforce_api_perm() {
  *   By default, subsequent calls to this function will return the same, already
  *     connected Salesforce object as preceding calls. Setting this variable to
  *     TRUE will cause a new connection to be established instead.
+ * @param $options
+ *   An associative array of additional options. These options are all ignored 
+ *   when $reconnect is FALSE. The following keys are valid options:
+ *     - 'username'
+ *        If provided, use this value instead of salesforce_api_username variable.
+ *     - 'password'
+ *        If provided, use this value instead of salesforce_api_password variable.
+ *     - 'token'
+ *        If provided, use this value instead of salesforce_api_token variable.
  * @return
  *   The DrupalSalesforce object used to communicate with the Salesforce server
  *     if successful or FALSE if a connection could not be established.
  */
-function salesforce_api_connect($reconnect = FALSE) {
+function salesforce_api_connect($reconnect = FALSE, $options = array()) {
   static $sf = FALSE;
 
   // Return the previously connected object.
@@ -143,9 +152,9 @@ function salesforce_api_connect($reconne
   }
 
   // Load up the API credentials.
-  $username = variable_get('salesforce_api_username', '');
-  $password = variable_get('salesforce_api_password', '');
-  $token = variable_get('salesforce_api_token', '');
+  $username = isset($options['username']) ? $options['username'] : variable_get('salesforce_api_username', '');
+  $password = isset($options['password']) ? $options['password'] : variable_get('salesforce_api_password', '');
+  $token = isset($options['token']) ? $options['token'] : variable_get('salesforce_api_token', '');
 
   // Fail early if we didn't receive an API username, password, or token.
   if (empty($username) || empty($password) || empty($token)) {
