From 5ce214f9aad9f33c83ebf09b655cc2885f2065cc Mon Sep 17 00:00:00 2001
From: mrded <mrded@556088.no-reply.drupal.org>
Date: Mon, 28 Jul 2014 14:47:54 +0100
Subject: [PATCH] Mail Editor Module Integration

---
 modules/invite_by_email/invite_by_email.admin.inc  |  43 +----
 modules/invite_by_email/invite_by_email.info       |   2 +-
 modules/invite_by_email/invite_by_email.install    |  20 +--
 .../invite_by_email/invite_by_email.mail_edit.inc  |  45 +++++
 modules/invite_by_email/invite_by_email.module     | 196 ++++-----------------
 5 files changed, 88 insertions(+), 218 deletions(-)
 create mode 100644 modules/invite_by_email/invite_by_email.mail_edit.inc

diff --git a/modules/invite_by_email/invite_by_email.admin.inc b/modules/invite_by_email/invite_by_email.admin.inc
index 6045799..b0d2433 100644
--- a/modules/invite_by_email/invite_by_email.admin.inc
+++ b/modules/invite_by_email/invite_by_email.admin.inc
@@ -6,48 +6,7 @@
  * @return array
  */
 function invite_by_email_settings_form() {
-  $form['invite_message_editable'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Editable subject'),
-    '#description' => t('Choose whether users should be able to customize the subject.'),
-    '#default_value' => variable_get('invite_message_editable', FALSE),
-  );
-
-  $form['invite_default_mail_subject'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Subject'),
-    '#default_value' => variable_get('invite_default_mail_subject', t('[invite:inviter:name] has sent you an invite!')),
-    '#description' => t('Type the default subject of the invitation e-mail.') . ' ' . t('Use the syntax [token] if you want to insert a replacement pattern.'),
-    '#required' => TRUE,
-  );
-
-  $form['invite_default_mail_body'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Mail template'),
-    '#default_value' => variable_get('invite_default_mail_body', ''),
-    '#required' => TRUE,
-    '#description' => t('Use the syntax [token] if you want to insert a replacement pattern.'),
-  );
-
-  $form['invite_default_replace_tokens'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Apply token replacements'),
-    '#default_value' => variable_get('invite_default_replace_tokens', TRUE),
-    '#description' => t('Whether token replacement patterns should be applied.'),
-  );
-
-  if (module_exists('token')) {
-    $form['token_help'] = array(
-      '#title' => t('Replacement patterns'),
-      '#type' => 'fieldset',
-      '#collapsible' => TRUE,
-      '#collapsed' => TRUE,
-    );
-
-    $form['token_help']['help'] = array(
-      '#markup' => theme('token_tree', array('token_types' => array('user', 'profile', 'invite'))),
-    );
-  }
+  $form = array();
 
   $form['invite_use_users_email'] = array(
     '#type' => 'radios',
diff --git a/modules/invite_by_email/invite_by_email.info b/modules/invite_by_email/invite_by_email.info
index e76fc5e..df567d4 100644
--- a/modules/invite_by_email/invite_by_email.info
+++ b/modules/invite_by_email/invite_by_email.info
@@ -6,6 +6,6 @@ package = Invite
 configure = admin/config/people/invite/by_mail
 
 dependencies[] = invite
-dependencies[] = entity_token
+dependencies[] = mail_edit
 
 stylesheets[screen][] = css/invite_by_email.css
diff --git a/modules/invite_by_email/invite_by_email.install b/modules/invite_by_email/invite_by_email.install
index b591531..fd61d3b 100644
--- a/modules/invite_by_email/invite_by_email.install
+++ b/modules/invite_by_email/invite_by_email.install
@@ -4,16 +4,6 @@
  * Implements hook_install().
  */
 function invite_by_email_install() {
-  variable_set('invite_default_mail_body', t(<<<TEMPLATE
-[invite:inviter:name] has invited you to join [site:name] at [site:url].
-
-To become a member of [site:name], click the link below or paste it into the address bar of your browser.
-
-[invite:invite-accept-link]
-TEMPLATE
-  ));
-
-  variable_set('invite_default_mail_subject', t('[invite:inviter:name] has sent you an invite!'));
 
   $types = array(
     array(
@@ -57,3 +47,13 @@ function invite_by_email_uninstall() {
     field_delete_field($field);
   }
 }
+
+/**
+ * Delete useless variables.
+ */
+function invite_update_7401() {
+  variable_del('invite_default_mail_body');
+  variable_del('invite_default_mail_subject');
+  variable_del('invite_default_replace_tokens');
+  variable_del('invite_message_editable');
+}
diff --git a/modules/invite_by_email/invite_by_email.mail_edit.inc b/modules/invite_by_email/invite_by_email.mail_edit.inc
new file mode 100644
index 0000000..aaf56ee
--- /dev/null
+++ b/modules/invite_by_email/invite_by_email.mail_edit.inc
@@ -0,0 +1,45 @@
+<?php
+
+/**
+ * @file
+ * Integration with Mail Editor module.
+ */
+
+/**
+ * Implements hook_mailkeys().
+ */
+function invite_by_email_mailkeys() {
+  $output = array();
+
+  foreach (invite_get_types() as $type) {
+    $output["invite_$type->type"] = t('%label invitation to join site', array('%label' => $type->label));
+  }
+
+  return $output;
+}
+
+/**
+ * Implements hook_mail_edit_text().
+ */
+function invite_by_email_mail_edit_text($mailkey, $language) {
+  return array(
+    'subject' => t('[invite:inviter:name] has sent you an invite!'),
+    'body' => t(<<<TEMPLATE
+[invite:inviter:name] has invited you to join [site:name] at [site:url].
+
+[invite:field-invitation-email-body]
+
+To become a member of [site:name], click the link below or paste it into the address bar of your browser.
+
+[invite:invite-accept-link]
+TEMPLATE
+    ),
+  );
+}
+
+/**
+ * Implements hook_mail_edit_token_types().
+ */
+function invite_by_email_mail_edit_token_types($mailkey, $options = array()) {
+  return array('site-url', 'site-name', 'invite');
+}
diff --git a/modules/invite_by_email/invite_by_email.module b/modules/invite_by_email/invite_by_email.module
index bbc95b9..12f473a 100644
--- a/modules/invite_by_email/invite_by_email.module
+++ b/modules/invite_by_email/invite_by_email.module
@@ -1,5 +1,7 @@
 <?php
 
+module_load_include('mail_edit.inc', 'invite_by_email');
+
 /**
  * Implements hook_menu().
  *
@@ -33,22 +35,11 @@ function invite_by_email_invite_sending_controller() {
 
 function invite_by_email_form_invite_type_form_alter(&$form, &$form_state, $invite_type, $op = 'edit') {
   $invite_type = $form['#invite_type'];
-  $invite_by_email_settings = !empty($invite_type->data['invite_by_email']) ? $invite_type->data['invite_by_email'] : array(
-    'use_default' => TRUE,
-    'message_editable' => variable_get('invite_message_editable', FALSE),
-    'mail_subject' => variable_get('invite_default_mail_subject', ''),
-    'mail_template' => variable_get('invite_default_mail_body', ''),
-  );
 
   $form['invite_by_email'] = array(
     '#type' => 'fieldset',
     '#title' => t('Invite by e-mail message settings'),
     '#tree' => TRUE,
-    '#attributes' => array(
-      'class' => array(
-        'invite-by-email-wrapper',
-      ),
-    ),
     '#states' => array(
       'invisible' => array(
         ':input[name="invite_sending_controller[invite_by_email]"]' => array('checked' => FALSE),
@@ -56,52 +47,19 @@ function invite_by_email_form_invite_type_form_alter(&$form, &$form_state, $invi
     ),
   );
 
-  $form['invite_by_email']['use_default'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Use default settings'),
-    '#description' => t('Use !default_link mail template and settings', array('!default_link' => l(t('default'), 'admin/config/people/invite/by_mail'))),
-    '#default_value' => $invite_by_email_settings['use_default'],
-    '#states' => array(
-      'invisible' => array(
-        ':input[name="invite_by_email"]' => array('!value' => 'invite_by_email'),
-      ),
-    ),
-  );
-
   $form['invite_by_email']['message_editable'] = array(
     '#type' => 'checkbox',
-    '#title' => t('Editable subject'),
-    '#description' => t('Choose whether users should be able to customize the subject.'),
-    '#default_value' => $invite_by_email_settings['message_editable'],
-    '#states' => array(
-      'invisible' => array(
-        ':input[name="invite_by_email[use_default]"]' => array('checked' => TRUE),
-      ),
-    ),
+    '#title' => t('Editable subject and body'),
+    '#default_value' => $invite_type->data['invite_by_email']['message_editable'] ?: FALSE,
+    '#description' => t('You may update default values for Subject and Body for this certain content type on fields edit page.')
   );
 
-  $form['invite_by_email']['replace_tokens'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Apply token replacements'),
-    '#default_value' => isset($invite_by_email_settings['replace_tokens']) ? $invite_by_email_settings['replace_tokens'] : TRUE,
-    '#description' => t('Whether token replacement patterns should be applied.'),
-    '#states' => array(
-      'invisible' => array(
-        ':input[name="invite_by_email[use_default]"]' => array('checked' => TRUE),
-      ),
-    ),
-  );
+  $mail_edit_url = "admin/config/system/mail-edit/invite_by_email_invite_$invite_type->type/" . language_default()->language;
 
   $form['invite_by_email']['help'] = array(
-    '#markup' => <<<HELP
-You may update default values for Subject and Body for this certain content type on fields edit page.
-HELP
-,
-    '#states' => array(
-      'invisible' => array(
-        ':input[name="invite_by_email[use_default]"]' => array('checked' => TRUE),
-      ),
-    ),
+    '#markup' => t('To edit email template - please follow that link: !link', array(
+      '!link' => l($mail_edit_url, $mail_edit_url),
+    ))
   );
 
   // Put our submit in top of list to ensure, that values will be added to 'data'
@@ -129,9 +87,7 @@ function invite_by_email_invite_type_presave($invite_type) {
   // creation form (or data wasn't set).
   if ($invite_type->is_new && $invite_type->hasSendingController('invite_by_email') && empty($invite_type->data['invite_by_email'])) {
     $invite_type->data['invite_by_email'] = array(
-      'use_default' => TRUE,
       'message_editable' => FALSE,
-      'replace_tokens' => FALSE,
     );
   }
 }
@@ -155,6 +111,7 @@ function invite_by_email_invite_type_update($invite_type) {
   if (!$invite_type->hasSendingController('invite_by_email')) {
     return FALSE;
   }
+
   $fields = array(
     'field_invitation_email_address' => array(
       'definition' => array(
@@ -192,10 +149,6 @@ function invite_by_email_invite_type_update($invite_type) {
         'label' => t('Subject'),
         'bundle' => 'invite_by_email',
         'description' => t('Enter e-mail subject.'),
-        'default_value' => array(
-          array(
-            'value' => variable_get('invite_default_mail_subject', ''),
-        )),
         'widget' => array(
           'type' => 'text_textfield',
           'weight' => 20,
@@ -220,10 +173,6 @@ function invite_by_email_invite_type_update($invite_type) {
         'label' => t('Body'),
         'bundle' => 'invite_by_email',
         'description' => t('Enter e-mail body.'),
-        'default_value' => array(
-          array(
-            'value' => variable_get('invite_default_mail_body', ''),
-          )),
         'widget' => array(
           'type' => 'text_textarea',
           'weight' => 30,
@@ -254,71 +203,6 @@ function invite_by_email_invite_type_update($invite_type) {
 }
 
 /**
- * Implements hook_invite_presave().
- */
-function invite_by_email_invite_presave($invite) {
-  global $user;
-  if (empty($invite->type_details()->invite_sending_controller['invite_by_email'])) {
-    return FALSE;
-  }
-
-  $entity = entity_metadata_wrapper('invite', $invite);
-  $mail_address = $entity->field_invitation_email_address->value();
-  if ($account = user_load_by_mail($mail_address)) {
-    $invite->invitee = $account->uid;
-  }
-  $invite->data['subject'] = $entity->field_invitation_email_subject->value();
-  $invite->data['message'] = $entity->field_invitation_email_body->value();
-
-  $invite_by_email_settings = $invite->type_details()->data['invite_by_email'];
-
-  if (($invite_by_email_settings['use_default'] && variable_get('invite_default_replace_tokens', TRUE)) || (!$invite_by_email_settings['use_default'] && !empty($invite_by_email_settings['replace_tokens']))) {
-    $token_data = array(
-      'invite' => $invite,
-      'user' => $user,
-      'profile' => user_load($user->uid),
-    );
-    $entity->field_invitation_email_subject = token_replace(trim($entity->field_invitation_email_subject->value()), $token_data);
-    $entity->field_invitation_email_body = token_replace($entity->field_invitation_email_body->value(), $token_data);
-  }
-}
-
-/**
- * Implements hook_form_alter().
- * @todo: refactor. There should be better way to alter default settings.
- *
- * @param $form
- * @param $form_state
- * @return bool
- */
-function invite_by_email_form_alter(&$form, &$form_state) {
-  if ($form['#form_id'] != 'field_ui_field_edit_form') {
-    return TRUE;
-  }
-
-  $fields_for_alter = array(
-    'field_invitation_email_body',
-    'field_invitation_email_subject',
-  );
-  $field_name = $form['#field']['field_name'];
-  if (!in_array($field_name, $fields_for_alter)) {
-    return TRUE;
-  }
-
-  $form['instance']['default_value_widget']['token_help'] = array(
-    '#title' => t('Replacement patterns'),
-    '#type' => 'fieldset',
-    '#collapsible' => TRUE,
-    '#collapsed' => TRUE,
-    '#weight' => 100,
-  );
-
-  $form['instance']['default_value_widget']['token_help']['help'] = array(
-    '#markup' => theme('token_tree', array('token_types' => array('user', 'profile', 'invite'))),
-  );
-}
-
-/**
  * @param Invite $invite
  */
 function invite_by_email_invite_send($invite) {
@@ -373,7 +257,7 @@ function invite_by_email_send_invitation($invite) {
   }
 
   // Send e-mail.
-  $result = drupal_mail('invite_by_email', 'invite', $entity->field_invitation_email_address->value(), $language, $params, $from, TRUE);
+  $result = drupal_mail('invite_by_email', 'invite_' . $invite->type, $entity->field_invitation_email_address->value(), $language, $params, $from, TRUE);
 
   return $result['result'];
 }
@@ -382,17 +266,28 @@ function invite_by_email_send_invitation($invite) {
  * Implements hook_mail().
  */
 function invite_by_email_mail($key, &$message, $params) {
-  global $user;
-
   $invite = $params['invite'];
+  $template = mail_edit_load('invite_by_email', "invite_$invite->type", language_default(), TRUE);
 
   if (!empty($params['reply-to'])) {
     $message['headers']['Reply-To'] = $params['reply-to'];
   }
 
-  $entity = entity_metadata_wrapper('invite', $invite);
-  $message['subject'] = str_replace(array("\r", "\n"), '', trim($entity->field_invitation_email_subject->value()));
-  $message['body'][] = $entity->field_invitation_email_body->value();
+  $data = (isset($message['params']['data']) ? $message['params']['data'] : $message['params']);
+  $data['template'] = $template;
+  if (isset($message['params']['account']) && !isset($data['user'])) {
+    $data['user'] = $message['params']['account'];
+  }
+  $options = array(
+    'language' => $message['language'],
+    'clear'    => TRUE,
+  );
+  if ($message['module'] == 'user') {
+    $options['callback'] = 'user_mail_tokens';
+  }
+
+  $message['subject'] = trim(drupal_html_to_text(mail_edit_format($template['subject'], $data, $options)));
+  $message['body'][] = mail_edit_format($template['body'], $data, $options);
 }
 
 /**
@@ -401,43 +296,15 @@ function invite_by_email_mail($key, &$message, $params) {
 function invite_by_email_form_invite_form_alter(&$form, &$form_state, $form_id) {
   $invite = $form['#entity'];
   if (!empty($invite->type_details()->invite_sending_controller['invite_by_email'])) {
-    $language_subject = $form['field_invitation_email_subject']['#language'];
-    $invite_by_email_settings = isset($invite->type_details()->data['invite_by_email']) ? $invite->type_details()->data['invite_by_email'] : array('use_default' => TRUE);
+    $invite_by_email_settings = isset($invite->type_details()->data['invite_by_email'])
+      ? $invite->type_details()->data['invite_by_email']
+      : array('use_default' => TRUE);
 
-    if ($invite_by_email_settings['use_default']) {
-      $message_editable = variable_get('invite_message_editable', FALSE);
-      $replace_tokens = variable_get('invite_default_replace_tokens', TRUE);
-    }
-    else {
-      $message_editable = $invite_by_email_settings['message_editable'];
-      $replace_tokens = isset($invite_by_email_settings['replace_tokens']) ? $invite_by_email_settings['replace_tokens'] : TRUE;
-    }
     // Hide if message is not editable.
-    if (!$message_editable) {
+    if (!$invite_by_email_settings['message_editable']) {
       $form['field_invitation_email_subject']['#type'] = 'hidden';
       $form['field_invitation_email_body']['#type'] = 'hidden';
     }
-    else {
-      // Fill defaults as needed.
-      $form['field_invitation_email_subject'][$language_subject][0]['value']['#default_value'] = variable_get('invite_default_mail_subject', '');
-      $form['field_invitation_email_body'][$language_subject][0]['value']['#default_value'] = variable_get('invite_default_mail_body', '');
-
-      // Add token help if enabled.
-      if (module_exists('token') && $replace_tokens) {
-        // Add tokens help
-        $form['token_help'] = array(
-          '#title' => t('Replacement patterns'),
-          '#type' => 'fieldset',
-          '#collapsible' => TRUE,
-          '#collapsed' => TRUE,
-          '#weight' => $form['field_invitation_email_body']['#weight'] + 0.5,
-        );
-
-        $form['token_help']['help'] = array(
-          '#markup' => theme('token_tree', array('token_types' => array('user', 'profile', 'invite'))),
-        );
-      }
-    }
 
     $form['#validate'][] = 'invite_by_email_form_invite_form_validate';
     $form['actions']['submit']['#value'] = t('Send Invitation');
@@ -479,7 +346,6 @@ function invite_by_email_form_invite_form_validate($form, &$form_state) {
  * Implements hook_form_FORMID_alter().
  */
 function invite_by_email_form_user_register_form_alter(&$form, &$form_state, $form_id) {
-  global $user;
   if (($invite = invite_load_from_session()) && !empty($invite->type_details()->invite_sending_controller['invite_by_email'])) {
     $invite_wrapper = entity_metadata_wrapper('invite', $invite);
 
-- 
1.8.5.2 (Apple Git-48)

