? LICENSE.txt
Index: constant_contact.info
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/constant_contact/constant_contact.info,v
retrieving revision 1.3
diff -u -p -r1.3 constant_contact.info
--- constant_contact.info	12 Feb 2008 13:01:26 -0000	1.3
+++ constant_contact.info	15 May 2009 14:14:47 -0000
@@ -2,10 +2,4 @@
 name = Constant Contact
 description = Allows you to keep your users in-sync with your Constant Contact Mailing lists
 package ="Mail"
-version = 5.6
-
-; Information added by drupal.org packaging script on 2008-01-29
-version = "5.x-1.x-dev"
-project = "constant_contact"
-datestamp = "1201564951"
-
+core = 6.x
Index: constant_contact.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/constant_contact/constant_contact.install,v
retrieving revision 1.2
diff -u -p -r1.2 constant_contact.install
--- constant_contact.install	30 Jan 2008 03:01:31 -0000	1.2
+++ constant_contact.install	15 May 2009 14:14:47 -0000
@@ -12,6 +12,9 @@ function constant_contact_install() {
  * Implementation of hook_uninstall().
  */
 function constant_contact_uninstall() {
+  // Remove tables.
+  drupal_uninstall_schema('constant_contact');
+
   $variables = array(
     'constant_contact_username',
     'constant_contact_password',
@@ -35,3 +38,28 @@ function constant_contact_uninstall() {
   cache_clear_all('*', 'cache_menu', TRUE);
   cache_clear_all('*', 'cache_page', TRUE);
 }
+
+
+/**
+ * Implementation of hook_requirements().
+ */
+function constant_contact_requirements($phase) {
+  $requirements = array();
+  $t = get_t();
+
+  switch ($phase) {
+    case 'runtime':
+    case 'install':
+    	$srcUrl = 'http://www.jamesbenson.net/projects/ConstantContact/';
+    	module_load_include('php', 'constant_contact', 'ConstantContact');
+      if (!class_exists('ConstantContact')) {
+        $requirements['constant_contact_module'] = array(
+          'title' => $t('Constant Contact requirements'),
+          'value' => $t('The Constant Contact module requires the ConstantContact class from '.l($srcUrl,$srcUrl).'. You should place it in '.drupal_get_path('module', 'constant_contact').'.'),
+          'severity' => ($phase == 'runtime') ? REQUIREMENT_ERROR : REQUIREMENT_INFO,
+          );
+      }
+      break;
+  }
+  return $requirements;
+}
\ No newline at end of file
Index: constant_contact.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/constant_contact/constant_contact.module,v
retrieving revision 1.6
diff -u -p -r1.6 constant_contact.module
--- constant_contact.module	17 Feb 2008 10:28:48 -0000	1.6
+++ constant_contact.module	15 May 2009 14:14:49 -0000
@@ -11,35 +11,32 @@ function constant_contact_perm() {
 /**
  * Implementation of hook_menu().
  */
-function constant_contact_menu($may_cache) {
+function constant_contact_menu() {
     $items = array();
 
-  $items[] = array(
-    'path' => 'admin/settings/constant_contact',
-    'title' => t('Constant Contact Settings'),
-    'description' => t('Configure settings for Constant Contact'),
-    'callback' => 'drupal_get_form',
-    'callback arguments' => array('constant_contact_admin_settings'),
-    'access' => user_access('admininister constant_contact'),
+  $items['admin/settings/constant_contact'] = array(
+    'title' => 'Constant Contact Settings',
+    'description' => 'Configure settings for Constant Contact',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('constant_contact_admin_settings'),
+    'access arguments' => array('admininister constant_contact'),
     'type' => MENU_NORMAL_ITEM);
 
-  $items[] = array(
-    'path' => 'admin/settings/constant_contact_import',
-    'title' => t('Constant Contact Import Users'),
-    'description' => t('Import existing Drupal users to Constant Contact'),
-    'callback' => 'drupal_get_form',
-    'callback arguments' => array('constant_contact_import'),
-    'access' => user_access('admininister constant_contact'),
+  $items['admin/settings/constant_contact_import'] = array(
+    'title' => 'Constant Contact Import Users',
+    'description' => 'Import existing Drupal users to Constant Contact',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('constant_contact_import'),
+    'access arguments' => array('admininister constant_contact'),
     'type' => MENU_NORMAL_ITEM);
 
-  $items[] = array(
-    'path' => 'constant_contact/unsubscribe',
-    'title' => t('List Unsubscribe'),
-    'description' => t('Unsubscribe from a list'),
-    'callback' => 'drupal_get_form',
-    'callback arguments' => array('constant_contact_unsubscribe_confirm'),
+  $items['constant_contact/unsubscribe/%'] = array(
+    'title' => 'List Unsubscribe',
+    'description' => 'Unsubscribe from a list',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('constant_contact_unsubscribe_confirm', 2),
     'type' => MENU_CALLBACK,
-    'access' => TRUE,
+    'access arguments' => array('access content'),
     );
 
     return $items;
@@ -48,8 +45,8 @@ function constant_contact_menu($may_cach
 /**
 * Implementation of hook_help().
 */
-function constant_contact_help($section) {
-  switch ($section) {
+function constant_contact_help($path, $arg) {
+  switch ($path) {
     case 'admin/help/constant_contact':
     case 'admin/help#constant_contact':
       // Return a line-break version of the module README
@@ -63,12 +60,12 @@ function constant_contact_help($section)
 function constant_contact_block($op = 'list', $delta = 0) {
   switch ($op) {
   	case 'list':
-  		$blocks=array();
-		$lists=constant_contact_get_lists();
-		foreach ($lists as $i => $list) {
-		  $blocks[]=array('info' => t('Constant Contact: '. $list));
-		}
-		return $blocks;
+	    $blocks=array();
+	    $lists=constant_contact_get_lists();
+	    foreach ($lists as $i => $list) {
+	      $blocks[]=array('info' => t('Constant Contact: '. $list));
+	    }
+	    return $blocks;
   		break;
   	case 'view':
       global $user;
@@ -211,12 +208,13 @@ function constant_contact_admin_settings
  * Implementation of hook_form()
  * creates the join mailing list block
  */
-function constant_contact_block_form($delta = 0, $op = 'list', $edit = array()) {
+function constant_contact_block_form(&$form_state, $delta = 0, $op = 'list', $edit = array()) {
   global $user;
 
   $lists=constant_contact_get_lists();
-  $lists_arr=array_values($lists);
-  $keyname=constant_contact_escape_listname($lists_arr[$delta]);
+  $lists_arr=array_keys($lists);
+  $keyname=$lists_arr[$delta];
+  
   $list=$lists[$keyname];
 
   if (constant_contact_check_user($list)) {
@@ -256,9 +254,9 @@ function constant_contact_block_form($de
  * Implementation of hook_form_validate()
  * validate the join mailing list block
  */
-function constant_contact_block_form_validate($form_id, $values) {
+function constant_contact_block_form_validate($form, &$form_state) {
   global $user;
-  $ok=((empty($user->uid) && !empty($values['email'])) || !empty($user->uid));
+  $ok=((empty($user->uid) && !empty($form_state['values']['email'])) || !empty($user->uid));
 
   if (!$ok){
     drupal_set_message(t('You need to set your email address.'), 'error');
@@ -271,7 +269,7 @@ function constant_contact_block_form_val
  * Implementation of hook_form_submit()
  * process the join mailing list block
  */
-function constant_contact_block_form_submit($form_id, $values) {
+function constant_contact_block_form_submit($form, &$form_state) {
   global $user;
   $data=array();
   if ($user->uid) {
@@ -281,23 +279,22 @@ function constant_contact_block_form_sub
     $data['Custom_field_3']=date('r');
   }
   else{
-    $email=$values['email'];
+    $email=$form_state['values']['email'];
   }
 
-  require_once('ConstantContact.php');
+  module_load_include('php', 'constant_contact', 'ConstantContact');
   $constant_contact = new ConstantContact();
   $constant_contact->setUsername(variable_get('constant_contact_username', ''));
   $constant_contact->setPassword(variable_get('constant_contact_password', ''));
-  $constant_contact->setCategory($values['list']);
+  $constant_contact->setCategory($form_state['values']['list']);
 
   if ($constant_contact->add($email, $data)) {
     $type='status';
     $message='You have been added to our list.';
     if (variable_get('constant_contact_sendemail', TRUE)) {
-      constant_contact_confirmation_email($email, $values['list']);
+      constant_contact_confirmation_email($email, $form_state['values']['list']);
     }
-    constant_contact_save_user($user, $values['list']);
-
+    constant_contact_save_user($user, $form_state['values']['list']);
   }
   else{
     $type='error';
@@ -310,7 +307,7 @@ function constant_contact_block_form_sub
  * Implementation of hook_form()
  * confirm unsubscribe
  */
-function constant_contact_unsubscribe_confirm($list=NULL) {
+function constant_contact_unsubscribe_confirm(&$form_state, $list=NULL) {
   $lists=constant_contact_get_lists();
   $list=urldecode($list);
 
@@ -330,6 +327,7 @@ function constant_contact_unsubscribe_co
     t('You must be logged in and subscribed under your account email, for this to work.'),
     t('Unsubscribe'), t('Cancel')
   );
+  
   return $form;
 }
 
@@ -337,13 +335,13 @@ function constant_contact_unsubscribe_co
  * Implementation of hook_form_submit()
  * process confirm unsubscribe
  */
-function constant_contact_unsubscribe_confirm_submit($form_id, $values) {
+function constant_contact_unsubscribe_confirm_submit($form, &$form_state) {
   global $user;
 
-  if (!constant_contact_check_user($values['list'])) {
+  if (!constant_contact_check_user($form_state['values']['list'])) {
     if (empty($user->uid)) {
       drupal_set_message(t('You must be logged in to unsubscribe.'), 'error');
-      return drupal_goto('user/user', 'destination=constant_contact/unsubscribe/'. urlencode($values['list']));
+      return drupal_goto('user', 'destination=constant_contact/unsubscribe/'. urlencode($form_state['values']['list']));
     }
     else{
       drupal_set_message(t('You are logged in, but your email does not appear to be subscribed to that list.'), 'error');
@@ -353,26 +351,26 @@ function constant_contact_unsubscribe_co
 
   $lists=constant_contact_get_lists();
 
-  if (empty($values['list']) || !array_search($values['list'], $lists)) {
+  if (empty($form_state['values']['list']) || !array_search($form_state['values']['list'], $lists)) {
     drupal_set_message(t('Invalid list name.'), 'error');
     return drupal_goto($_GET['destination'] ? $_GET['destination'] : '<front>');
   }
 
-  require_once('ConstantContact.php');
+  module_load_include('php', 'constant_contact', 'ConstantContact');
   $constant_contact = new ConstantContact();
   $constant_contact->setUsername(variable_get('constant_contact_username', ''));
   $constant_contact->setPassword(variable_get('constant_contact_password', ''));
-  $constant_contact->setCategory($values['list']);
+  $constant_contact->setCategory($form_state['values']['list']);
 
   if ($constant_contact->remove($user->mail)) {
     $type='status';
-    $message=t('You have been removed from %list mailing list.', array('%list' => $values['list']));
-    constant_contact_save_user($user, $values['list'], FALSE);
+    $message=t('You have been removed from %list mailing list.', array('%list' => $form_state['values']['list']));
+    constant_contact_save_user($user, $form_state['values']['list'], FALSE);
   }
   else{
     $type='error';
-    $message=t('You could not be removed from %list mailing list.', array('%list' => $values['list']));
-    $_GET['destination']='constant_contact/unsubscribe/'. urlencode($values['list']);
+    $message=t('You could not be removed from %list mailing list.', array('%list' => $form_state['values']['list']));
+    $_GET['destination']='constant_contact/unsubscribe/'. urlencode($form_state['values']['list']);
   }
 
   drupal_set_message($message, $type);
@@ -409,16 +407,16 @@ function constant_contact_import() {
  * Implementation of hook_form_submit()
  * process import users
  */
-function constant_contact_import_submit($form_id, $values) {
+function constant_contact_import_submit($form, &$form_state) {
   $lists = constant_contact_get_lists();
   $rs = db_query("SELECT * FROM {users}");
   $fail_count = $success_count=0;
 
-  require_once('ConstantContact.php');
+  module_load_include('php', 'constant_contact', 'ConstantContact');
   $constant_contact = new ConstantContact();
   $constant_contact->setUsername(variable_get('constant_contact_username', ''));
   $constant_contact->setPassword(variable_get('constant_contact_password', ''));
-  $constant_contact->setCategory($values['list']);
+  $constant_contact->setCategory($form_state['values']['list']);
 
   while ($user = db_fetch_object($rs)) {
     if (empty($user->uid)) {
@@ -432,7 +430,7 @@ function constant_contact_import_submit(
     );
 
     if ($constant_contact->add($user->mail, $data)) {
-      constant_contact_save_user($user, $values['list']);
+      constant_contact_save_user($user, $form_state['values']['list']);
       $success_count++;
     }
     else{
@@ -517,13 +515,60 @@ function constant_contact_confirmation_e
     '!uri_brief' => substr($base_url, strlen('http://')),
     '!mailto' => $address,
     '!date' => format_date(time()),
-    '!login_uri' => url('user', NULL, NULL, TRUE), // version 6 is url('user', array('absolute' => TRUE)),
-    '!uri_list_unsubscribe' => url('constant_contact/unsubscribe/'. urlencode($list_name), NULL, NULL, TRUE), // version 6 is url('user', array('absolute' => TRUE)),
+    '!login_uri' => url('user', array('absolute' => TRUE)), // version 6 is url('user', array('query' => array('absolute' => TRUE))),
+    '!uri_list_unsubscribe' => url('constant_contact/unsubscribe/'. urlencode($list_name), array('absolute' => TRUE)), // version 6 is url('user', array('query' => array('absolute' => TRUE))),
   );
 
-  return drupal_mail('constant_contact-confirmation', $address, t(variable_get('constant_contact_email_subject', ''), $variables), t(variable_get('constant_contact_email_body', ''), $variables), variable_get('site_mail', ini_get('sendmail_from')));
+  $account = array(); // Set this as needed
+  $language = user_preferred_language($account);
+  $object = array(); // Replace this as needed
+  $context['subject'] = t(variable_get('constant_contact_email_subject', ''), $variables);
+  $context['message'] = t(variable_get('constant_contact_email_body', ''), $variables);
+  $context['from'] = variable_get('site_mail', ini_get('sendmail_from'));
+  $params = array('account' => $account, 'object' => $object, 'context' => $context);
+  return drupal_mail('constant_contact', 'constant_contact-confirmation', $address, $language, $params);
 }
 
+/**
+ * Implementation of hook_mail
+ */
+function constant_contact_mail($key, &$message, $params) {
+  $account = $params['account'];
+  $context = $params['context'];
+  $variables = array(
+    '%site_name' => variable_get('site_name', 'Drupal'),
+    '%username' => $account->name,
+  );
+  if ($context['hook'] == 'taxonomy') {
+    $object = $params['object'];
+    $vocabulary = taxonomy_vocabulary_load($object->vid);
+    $variables += array(
+      '%term_name' => $object->name,
+      '%term_description' => $object->description,
+      '%term_id' => $object->tid,
+      '%vocabulary_name' => $vocabulary->name,
+      '%vocabulary_description' => $vocabulary->description,
+      '%vocabulary_id' => $vocabulary->vid,
+    );
+  }
+
+  // Node-based variable translation is only available if we have a node.
+  if (isset($params['node'])) {
+    $node = $params['node'];
+    $variables += array(
+      '%uid' => $node->uid,
+      '%node_url' => url('node/'. $node->nid, array('absolute' => TRUE)),
+      '%node_type' => node_get_types('name', $node),
+      '%title' => $node->title,
+      '%teaser' => $node->teaser,
+      '%body' => $node->body,
+    );
+  }
+  $subject = strtr($context['subject'], $variables);
+  $body = strtr($context['message'], $variables);
+  $message['subject'] .= str_replace(array("\r", "\n"), '', $subject);
+  $message['body'][] = drupal_html_to_text($body);
+}
 
 /**
  * returns an array of available lists
