-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathemail_alter.module
More file actions
112 lines (91 loc) · 3.09 KB
/
email_alter.module
File metadata and controls
112 lines (91 loc) · 3.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php
// $Id$
/**
* @file
* Email Alter allows admin interface creation of rulesets which can
* modify Drupal generated emails.
*/
function email_alter_get_aliases() {
return variable_get('email_alter_aliases', '');
}
function email_alter_get_aliases_parsed() {
return email_alter_aliases_parse(
email_alter_get_aliases());
}
function email_alter_menu() {
$items = array();
$items['admin/settings/email-alter'] = array(
'title' => t('Email Alter Settings'),
'page callback' => 'drupal_get_form',
'page arguments' => array('email_alter_admin'),
'access arguments' => array('administer site configuration'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function email_alter_admin() {
$form = array();
$form['email_alter_aliases'] = array(
'#type' => 'textarea',
'#title' => t('Email Aliases'),
'#default_value' => email_alter_get_aliases(),
'#description' => t(
'<strong>Key-value pairs MUST be specified as '
. '"alias_email@example.net | email1@foo.com,email2@bar.com"</strong>.'),
'#rows' => 10,
'#validate' => array('email_alter_admin_validate'),
);
return system_settings_form($form);
}
function email_alter_admin_validate($form_id, &$form) {
$raw_aliases = $form['values']['email_alter_aliases'];
$valid = email_alter_aliases_validate($raw_aliases);
if (!$valid)
form_set_error('', t('Please correct your Alias declaration syntax.'));
}
function email_alter_email_regex() {
// Adapting email patterns from Drupal core function, valid_email_address()..
$user = '[a-zA-Z0-9_\-\.\+\^!#\$%&*+\/\=\?\`\|\{\}~\']+';
$domain = '(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.?)+';
$ipv4 = '[0-9]{1,3}(\.[0-9]{1,3}){3}';
$ipv6 = '[0-9a-fA-F]{1,4}(\:[0-9a-fA-F]{1,4}){7}';
$email = "$user@($domain|(\[($ipv4|$ipv6)\]))";
return $email;
}
function email_alter_aliases_validate($raw_aliases) {
$email = email_alter_email_regex();
$line =
'\s*' . $email . '\s*\|\s*' # Required alias.
. $email # Required real address.
. '(?:' . '\s*,\s*' . $email . ')*' # Potential additional reals.
. '\s*';
$pattern =
'/\A'
. '(?:' . $line . ')*'
. '\z/ms';
return preg_match($pattern, $raw_aliases);
}
function email_alter_alias_unparse($alias, $value) {
return "$alias | $value";
}
function email_alter_aliases_unparse($aliases) {
return implode("\n",
array_map('email_alter_alias_unparse', array_keys($aliases), $aliases));
}
function email_alter_aliases_parse($aliases) {
$alias_lines = explode("\n", $aliases);
$aliases_parsed = array();
foreach ($alias_lines as $alias_line) {
$alias = preg_replace('/\s*\|.*/', '', $alias_line);
$value = preg_replace('/.*\|\s*/', '', $alias_line);
$aliases_parsed[$alias] = $value;
}
return $aliases_parsed;
}
function email_alter_mail_alter(&$message) {
$emailkeyvals = email_alter_get_aliases_parsed();
if ( in_array($message['to'], array_keys($emailkeyvals))) {
// This code currently supports single address replacement.
$message['to'] = $emailkeyvals[$message['to']];
}
}