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.3
diff -u -p -r1.2.2.3 salesforce_api.admin.inc
--- salesforce_api/salesforce_api.admin.inc	25 Feb 2009 23:46:02 -0000	1.2.2.3
+++ salesforce_api/salesforce_api.admin.inc	23 Apr 2009 20:13:34 -0000
@@ -7,6 +7,106 @@
  *   for general settings and fieldmap administration.
  */
 
+// Displays the basic API settings form at admin/settings/salesforce.
+function salesforce_api_settings_form(&$form_state) {
+  $form = array();
+
+  // Use the username field to collapse the API settings fieldset.
+  $username = variable_get('salesforce_api_username', '');
+  $form['api'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Salesforce API settings'),
+    '#description' => t('Use your Salesforce.com login information for these username and password fields.'),
+    '#collapsible' => !empty($username),
+    '#collapsed' => !empty($username) && empty($form_state['post']),
+    '#weight' => -10,
+  );
+  $form['api']['salesforce_api_username'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Username'),
+    '#description' => t('Should be in the form of an e-mail address.'),
+    '#default_value' => $username,
+    '#required' => TRUE,
+  );
+  $form['api']['salesforce_api_password'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Password'),
+    '#default_value' => variable_get('salesforce_api_password', ''),
+    '#description' => t('Set your SalesForce password -- this is the same password you use to login through the salesforce.com website.'),
+    '#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.'),
+    '#default_value' => variable_get('salesforce_api_token', ''),
+    '#required' => TRUE,
+  );
+
+  $form['log'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Log settings'),
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+    '#weight' => -9,
+  );
+  $form['log']['salesforce_api_activity_log'] = array(
+    '#type' => 'radios',
+    '#title' => t('Activity log level'),
+    '#options' => array(
+      SALESFORCE_LOG_NONE => t('Do not log any Salesforce activities.'),
+      SALESFORCE_LOG_SOME => t('Log important Salesforce activities.'),
+      SALESFORCE_LOG_ALL => t('Log all Salesforce activitiies.'),
+    ),
+    '#default_value' => variable_get('salesforce_api_activitiy_log', SALESFORCE_LOG_SOME),
+  );
+  $form['log']['salesforce_api_error_log'] = array(
+    '#type' => 'radios',
+    '#title' => t('Error log level'),
+    '#options' => array(
+      SALESFORCE_LOG_NONE => t('Do not log any Salesforce errors.'),
+      SALESFORCE_LOG_SOME => t('Log important Salesforce errors.'),
+      SALESFORCE_LOG_ALL => t('Log all Salesforce errors.'),
+    ),
+    '#default_value' => variable_get('salesforce_api_error_log', SALESFORCE_LOG_ALL),
+  );
+  $form['#validate'][] = 'salesforce_api_settings_form_validate';
+  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;
+  }
+  
+  // System variables won't get set until the _submit function fires, so we cache 
+  // them, set them, then restore, regardless of error -- there could be errors
+  // further down the chain. This is probably overkill for most use cases, but we
+  // don't want to screw up a working configuration just because of, e.g. a typo.
+  $username = variable_get('salesforce_api_username', '');
+  $pass = variable_get('salesforce_api_password', '');
+  $token = variable_get('salesforce_api_token', '');
+
+  variable_set('salesforce_api_username', $values['salesforce_api_username']);
+  variable_set('salesforce_api_password', $values['salesforce_api_password']);
+  variable_set('salesforce_api_token', $values['salesforce_api_token']);
+
+  if(!salesforce_api_connect(TRUE)) {
+    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.');
+  }
+
+  variable_set('salesforce_api_username', $username);
+  variable_set('salesforce_api_password', $pass);
+  variable_set('salesforce_api_token', $token);
+
+}
+
 
 // Displays an admin table for fieldmaps.
 function salesforce_api_fieldmap_admin() {
Index: salesforce_api/salesforce_api.info
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/salesforce/salesforce_api/salesforce_api.info,v
retrieving revision 1.2.2.1
diff -u -p -r1.2.2.1 salesforce_api.info
--- salesforce_api/salesforce_api.info	21 Dec 2008 22:20:22 -0000	1.2.2.1
+++ salesforce_api/salesforce_api.info	23 Apr 2009 20:13:34 -0000
@@ -2,4 +2,10 @@
 name = Salesforce API
 description = Defines an API that enables modules to interact with the SalesForce server.
 package = Salesforce
-core = 6.x
\ No newline at end of file
+core = 6.x
+; Information added by drupal.org packaging script on 2009-02-26
+version = "6.x-2.x-dev"
+core = "6.x"
+project = "salesforce"
+datestamp = "1235650715"
+
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.1
diff -u -p -r1.2.2.1 salesforce_api.install
--- salesforce_api/salesforce_api.install	21 Dec 2008 22:20:22 -0000	1.2.2.1
+++ salesforce_api/salesforce_api.install	23 Apr 2009 20:13:34 -0000
@@ -14,6 +14,12 @@ function salesforce_api_install() {
   drupal_install_schema('salesforce_api');
 }
 
+function salesforce_api_enable() {
+  $msg = 'SalesForce module enabled: Before making any SalesForce connections, !link';
+  $link = l('click here to enter enter your SalesForce API credentials.', SALESFORCE_PATH_ADMIN);
+  drupal_set_message(t($msg, array('!link' => $link)), 'warning');
+}
+
 /**
  * Implementation of hook_schema().
  */
@@ -51,4 +57,38 @@ function salesforce_api_schema() {
   );
   
   return $schema;
-}
\ No newline at end of file
+}
+
+/**
+ * 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);
+      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[] = compact('title', 'value', 'description', '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.3
diff -u -p -r1.2.2.3 salesforce_api.module
--- salesforce_api/salesforce_api.module	25 Feb 2009 23:46:02 -0000	1.2.2.3
+++ salesforce_api/salesforce_api.module	23 Apr 2009 20:13:35 -0000
@@ -122,71 +122,6 @@ function salesforce_api_perm() {
   return array('administer salesforce');
 }
 
-// Displays the basic API settings form at admin/settings/salesforce.
-function salesforce_api_settings_form() {
-  $form = array();
-
-  // Use the username field to collapse the API settings fieldset.
-  $username = variable_get('salesforce_api_username', '');
-
-  $form['api'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Salesforce API settings'),
-    '#description' => t('Use your Salesforce.com login information for these username and password fields.'),
-    '#collapsible' => !empty($username),
-    '#collapsed' => !empty($username),
-    '#weight' => -10,
-  );
-  $form['api']['salesforce_api_username'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Username'),
-    '#description' => t('Should be in the form of an e-mail address.'),
-    '#default_value' => variable_get('salesforce_api_username', ''),
-    '#required' => TRUE,
-  );
-  $form['api']['salesforce_api_password'] = array(
-    '#type' => 'password',
-    '#title' => t('Password'),
-    '#default_value' => variable_get('salesforce_api_password', ''),
-  );
-  $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.'),
-    '#default_value' => variable_get('salesforce_api_token', ''),
-  );
-
-  $form['log'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Log settings'),
-    '#collapsible' => TRUE,
-    '#collapsed' => TRUE,
-    '#weight' => -9,
-  );
-  $form['log']['salesforce_api_activity_log'] = array(
-    '#type' => 'radios',
-    '#title' => t('Activity log level'),
-    '#options' => array(
-      SALESFORCE_LOG_NONE => t('Do not log any Salesforce activities.'),
-      SALESFORCE_LOG_SOME => t('Log important Salesforce activities.'),
-      SALESFORCE_LOG_ALL => t('Log all Salesforce activitiies.'),
-    ),
-    '#default_value' => variable_get('salesforce_api_activitiy_log', SALESFORCE_LOG_SOME),
-  );
-  $form['log']['salesforce_api_error_log'] = array(
-    '#type' => 'radios',
-    '#title' => t('Error log level'),
-    '#options' => array(
-      SALESFORCE_LOG_NONE => t('Do not log any Salesforce errors.'),
-      SALESFORCE_LOG_SOME => t('Log important Salesforce errors.'),
-      SALESFORCE_LOG_ALL => t('Log all Salesforce errors.'),
-    ),
-    '#default_value' => variable_get('salesforce_api_error_log', SALESFORCE_LOG_ALL),
-  );
-
-  return system_settings_form($form);
-}
-
 /**
  * Creates an object used for communicating with the Salesforce server and
  *   performs a login to verify the API credentials.
