| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 | <?php/** * @file * Sends system emails in HTML. *//** * Implements hook_permission(). * * Defines a permission for setting the per-user plaintext option. */function htmlmail_permission() {  $args = array(    '!htmlmail' => url('http://drupal.org/project/htmlmail'),    '%htmlmail' => 'HTML Mail',  );  return array(    'choose htmlmail_plaintext' => array(      'title' => t('Choose to receive plaintext emails via %htmlmail', $args),      'description' => t(        'Granting this permission allows users to choose whether to receive all their emails in plaintext, rather than the default format provided by the <a href="!htmlmail">%htmlmail</a> module.', $args      ),    ),  );}/** * Implements hook_help(). */function htmlmail_help($path, $arg) {  switch ($path) {    case 'admin/config/system/htmlmail':      return '<h2>' . t('Theming') . '</h2><p>' . t('The email message goes through three transformations before sending:') . '</p>';    case 'admin/help#htmlmail':      return '<p>'        . t('<a href="!htmlmail">HTML Mail</a> lets you theme your messages the same way you theme the rest of your website.',          array('!htmlmail' => 'http://drupal.org/project/htmlmail')        ) . '</p>';    default:      return '';  }}/** * Implements hook_menu(). */function htmlmail_menu() {  $items['admin/config/system/htmlmail'] = array(    'title' => 'HTML Mail',    'description' => 'Configure HTML Mail system-wide settings.',    'page callback' => 'drupal_get_form',    'page arguments' => array('htmlmail_admin_settings'),    'access arguments' => array('administer site configuration'),    'file' => 'htmlmail.admin.inc',  );  $items['admin/config/system/htmlmail/settings'] = array(    'title' => 'Settings',    'type' => MENU_DEFAULT_LOCAL_TASK,    'weight' => '-2'  );  $items['admin/config/system/htmlmail/test'] = array(    'title' => 'Send Test',    'page callback' => 'drupal_get_form',    'page arguments' => array('htmlmail_test_form'),    'access arguments' => array('access administration pages'),    'type' => MENU_LOCAL_TASK,    'file' => 'htmlmail.admin.inc',  );  return $items;}/** * Implements hook_theme(). * * Auto-detects htmlmail template files in the selected theme and in the * htmlmail module directory. */function htmlmail_theme() {  $items = array();  $module_path = drupal_get_path('module', 'htmlmail');  $pattern = '/^htmlmail.*\.tpl\.php$/';  $files = file_scan_directory($module_path, $pattern, array('key' => 'name'));  if ($theme = htmlmail_get_selected_theme()) {    $theme_path = drupal_get_path('theme', $theme);    $files = array_merge($files,      file_scan_directory($theme_path, $pattern, array('key' => 'name'))    );  }  else {    $theme_path = $module_path;  }  ksort($files);  foreach ($files as $file) {    $path = dirname($file->uri);    $template = substr($file->name, 0, -4);    $suggestion = str_replace('--', '__', $template);    $items[$suggestion] = array(      'variables' => array('message' => array()),      'template' => $template,      'path' => $path,      'theme path' => $theme_path,    );  }  return $items;}/** * Process variables to format email messages. * * @see htmlmail.tpl.php */function template_preprocess_htmlmail(array &$variables) {  $variables['debug'] = variable_get('htmlmail_debug', '0');  $variables['theme'] = htmlmail_get_selected_theme($variables);  $variables['module_path'] = drupal_get_path('module', 'htmlmail');  if (empty($variables['theme'])) {    $variables['theme'] = 'no theme';    $variables['theme_path'] = $variables['module_path'];  }  else {    $variables['theme_path'] = drupal_get_path('theme', $variables['theme']);  }  $variables['theme_url'] = url(    $variables['theme_path'], array('absolute' => TRUE)  );  $variables['message_id'] = $variables['module'] . '_' . $variables['key'];  $suggestion = 'htmlmail__' . $variables['module'];  $variables['theme_hook_suggestions'][] = $suggestion;  $suggestion .= '__' . $variables['key'];  $variables['theme_hook_suggestions'][] = $suggestion;}/** * Implements hook_mail(). */function htmlmail_mail($key, &$message, $params) {  $message['module'] = 'htmlmail';  $message['key'] = $key;  $message['subject'] = $params['subject'];  $message['body'] = explode(    MAIL_LINE_ENDINGS . MAIL_LINE_ENDINGS,    $params['body']  );  return $message;}/** * Implements hook_form_FORM_ID_alter(). */function htmlmail_form_user_profile_form_alter(&$form, &$form_state) {  if ($form['#user_category'] != 'account') {    return;  }  if (!(user_access('choose htmlmail_plaintext') || user_access('administer users'))) {    return;  }  $account = $form['#user'];  $mail = $form['account']['mail'];  $form['account']['mail'] = array(    'mail' => $mail,    'htmlmail_plaintext' => array(      '#type' => 'checkbox',      '#title' => t('Plaintext-only emails'),      '#default_value' => empty($account->data['htmlmail_plaintext']) ? 0 : 1,      '#description' => t('The %htmlmail module can send emails with fonts, styles, and other HTML formatting.  If you prefer to receive all your emails in unformatted plain text, select this option.',        array('%htmlmail' => 'HTML Mail')      ),    ),  );}/** * Implements hook_user_presave(). */function htmlmail_user_presave(&$edit, $account, $category) {  if (user_access('choose htmlmail_plaintext') || user_access('administer users')) {    $edit['data']['htmlmail_plaintext'] = empty($edit['htmlmail_plaintext']) ? 0 : 1;    unset($edit['htmlmail_plaintext']);  }}/** * Returns an associative array of allowed themes.  The keys are the * machine-readable names and the values are the .info file names. * Based on code from the og_theme module. */function &htmlmail_get_allowed_themes() {  $allowed = &drupal_static(__FUNCTION__);  if (!isset($allowed)) {    $allowed = array('' => t('No theme'));    $themes = list_themes();    module_load_include('inc', 'system', 'system.admin');    uasort($themes, 'system_sort_modules_by_info_name');    foreach ($themes as $key => $value) {      if ($value->status) {        $allowed[$key] = check_plain($value->info['name']);      }    }  }  return $allowed;}/** * Returns the selected theme to use for outgoing emails. */function htmlmail_get_selected_theme(&$message = array()) {  $selected = isset($message['theme'])    ? $message['theme'] : variable_get('htmlmail_theme', '');  if ($selected) {    // Make sure the selected theme is allowed.    $themes = &htmlmail_get_allowed_themes();    if (empty($themes[$selected])) {      $selected = '';    }  }  return $selected;}/** * Checks whether a given recipient email prefers plaintext-only messages. * * @param $email *   The recipient email address. * * @return *   FALSE if the recipient prefers plaintext-only messages; otherwise TRUE. */function htmlmail_is_allowed($email) {  return !($recipient = user_load_by_mail($email))    || empty($recipient->data['htmlmail_plaintext']);}
 |