1 |
85ad3d82
|
Assos Assos
|
<?php
|
2 |
|
|
/**
|
3 |
|
|
* @file
|
4 |
|
|
* comment_notify.install.
|
5 |
|
|
*/
|
6 |
|
|
|
7 |
|
|
/**
|
8 |
|
|
* Implements hook_install().
|
9 |
|
|
*/
|
10 |
|
|
function comment_notify_install() {
|
11 |
|
|
|
12 |
|
|
// Create entries for existing comments.
|
13 |
|
|
|
14 |
|
|
$comments_select = db_select('comment', 'c');
|
15 |
|
|
$comments_select->join('users', 'u', 'c.uid = u.uid');
|
16 |
|
|
$comments_select->addField('c', 'cid');
|
17 |
|
|
$comments_select->addExpression('0', 'notify');
|
18 |
|
|
// Mix in a random string to all values.
|
19 |
|
|
$salt = uniqid(mt_rand(), TRUE);
|
20 |
|
|
if (db_driver() == 'pgsql') {
|
21 |
|
|
$comments_select->addExpression("MD5(:salt || c.mail || COALESCE(u.mail, u.init) || c.uid || c.name || c.nid || c.hostname || c.cid)", 'notify_hash', array(':salt' => $salt));
|
22 |
|
|
}
|
23 |
|
|
else {
|
24 |
|
|
$comments_select->addExpression("MD5(CONCAT(:salt, c.mail, COALESCE(u.mail, u.init), c.uid, c.name, c.nid, c.hostname, c.cid))", 'notify_hash', array(':salt' => $salt));
|
25 |
|
|
}
|
26 |
|
|
|
27 |
|
|
// Set module weight low so that other modules act on the comment first.
|
28 |
|
|
db_insert('comment_notify')->from($comments_select)->execute();
|
29 |
|
|
db_update('system')->
|
30 |
|
|
fields(array(
|
31 |
|
|
'weight' => 10
|
32 |
|
|
))
|
33 |
|
|
->condition('name', 'comment_notify');
|
34 |
|
|
}
|
35 |
|
|
|
36 |
|
|
/**
|
37 |
|
|
* Implements hook_uninstall().
|
38 |
|
|
*/
|
39 |
|
|
function comment_notify_uninstall() {
|
40 |
|
|
variable_del('node_notify_default_mailtext');
|
41 |
|
|
db_delete('variable')
|
42 |
|
|
->where('name', "comment_notify_%", 'LIKE');
|
43 |
|
|
}
|
44 |
|
|
|
45 |
|
|
/**
|
46 |
|
|
* Implements hook_schema().
|
47 |
|
|
*/
|
48 |
|
|
function comment_notify_schema() {
|
49 |
|
|
$schema['comment_notify'] = array(
|
50 |
|
|
'description' => t('Stores information about which commenters on the site have subscriped to followup emails.'),
|
51 |
|
|
'fields' => array(
|
52 |
|
|
'cid' => array(
|
53 |
|
|
'type' => 'int',
|
54 |
|
|
'unsigned' => TRUE,
|
55 |
|
|
'description' => 'The comment id from {comments}.cid',
|
56 |
|
|
'not null' => TRUE,
|
57 |
|
|
'disp-width' => '11'),
|
58 |
|
|
'notify' => array(
|
59 |
|
|
'type' => 'int',
|
60 |
|
|
'description' => 'An integer indicating the type of subscription: 0 means not subscribed, 1 means subscribed to all comments, and 2 means only subscribed to replies of this comment.',
|
61 |
|
|
'size' => 'tiny',
|
62 |
|
|
'not null' => TRUE,
|
63 |
|
|
'disp-width' => '11'),
|
64 |
|
|
'notify_hash' => array(
|
65 |
|
|
'type' => 'varchar',
|
66 |
|
|
'description' => 'A hash of unique information about the commenter. Used for unsubscribing users.',
|
67 |
|
|
'length' => '128',
|
68 |
|
|
'not null' => TRUE,
|
69 |
|
|
'default' => ''),
|
70 |
|
|
'notified' => array(
|
71 |
|
|
'type' => 'int',
|
72 |
|
|
'description' => 'A boolean indicator for whether or not a notification for the comment has been sent: 1 means yes, 0 means no.',
|
73 |
|
|
'size' => 'tiny',
|
74 |
|
|
'not null' => TRUE,
|
75 |
|
|
'default' => 0,
|
76 |
|
|
'disp-width' => '11'),
|
77 |
|
|
),
|
78 |
|
|
'primary key' => array('cid'),
|
79 |
|
|
'indexes' => array(
|
80 |
|
|
'notify_hash' => array('notify_hash')),
|
81 |
|
|
);
|
82 |
|
|
$schema['comment_notify_user_settings'] = array(
|
83 |
|
|
'fields' => array(
|
84 |
|
|
'uid' => array(
|
85 |
|
|
'type' => 'int',
|
86 |
|
|
'unsigned' => TRUE,
|
87 |
|
|
'description' => 'The user id from {users}.cid',
|
88 |
|
|
'not null' => TRUE,
|
89 |
|
|
'disp-width' => '11'),
|
90 |
|
|
'node_notify' => array(
|
91 |
|
|
'type' => 'int',
|
92 |
|
|
'description' => 'An integer indicating the default type of subscription: 0 means not subscribed, 1 means subscribed to all comments, and 2 means only subscribed to replies of this comment.',
|
93 |
|
|
'size' => 'tiny',
|
94 |
|
|
'not null' => TRUE,
|
95 |
|
|
'default' => 0,
|
96 |
|
|
'disp-width' => '11'),
|
97 |
|
|
'comment_notify' => array(
|
98 |
|
|
'type' => 'int',
|
99 |
|
|
'description' => 'An integer indicating the default type of subscription: 0 means not subscribed, 1 means subscribed to all comments, and 2 means only subscribed to replies of this comment.',
|
100 |
|
|
'size' => 'tiny',
|
101 |
|
|
'not null' => TRUE,
|
102 |
|
|
'default' => 0,
|
103 |
|
|
'disp-width' => '11'),
|
104 |
|
|
),
|
105 |
|
|
'primary key' => array('uid'),
|
106 |
|
|
);
|
107 |
|
|
|
108 |
|
|
return $schema;
|
109 |
|
|
}
|
110 |
|
|
|
111 |
|
|
/**
|
112 |
|
|
* Head 2 head update for the new size of the hash field.
|
113 |
|
|
*/
|
114 |
|
|
function comment_notify_update_7002() {
|
115 |
|
|
$new_spec = array(
|
116 |
|
|
'type' => 'varchar',
|
117 |
|
|
'description' => 'A hash of unique information about the commenter. Used for unsubscribing users.',
|
118 |
|
|
'length' => '128',
|
119 |
|
|
'not null' => TRUE,
|
120 |
|
|
'default' => ''
|
121 |
|
|
);
|
122 |
|
|
$keys = array(
|
123 |
|
|
'indexes' => array('notify_hash' => array('notify_hash')),
|
124 |
|
|
);
|
125 |
|
|
db_drop_index('comment_notify', 'notify_hash');
|
126 |
|
|
db_change_field('comment_notify', 'notify_hash', 'notify_hash', $new_spec, $keys);
|
127 |
|
|
}
|
128 |
|
|
|
129 |
|
|
/**
|
130 |
|
|
* Fix tokens in comment subscriber e-mail template.
|
131 |
|
|
*/
|
132 |
|
|
function comment_notify_update_7003() {
|
133 |
|
|
$variables = array(
|
134 |
|
|
'comment_notify_author_subject' => 'author',
|
135 |
|
|
'comment_notify_node_notify_default_mailtext' => 'author',
|
136 |
|
|
'comment_notify_watcher_subject' => 'commenter',
|
137 |
|
|
'comment_notify_comment_notify_default_mailtext' => 'commenter',
|
138 |
|
|
);
|
139 |
|
|
foreach ($variables as $variable => $context) {
|
140 |
|
|
// If the variable is using the default value, this will return NULL and we
|
141 |
|
|
// can skip it.
|
142 |
|
|
if ($text = variable_get($variable)) {
|
143 |
|
|
$replacements = array(
|
144 |
|
|
'[comment:unsubscribe-url]' => '[comment-subscribed:unsubscribe-url]',
|
145 |
|
|
'[comment:name]' => '[comment:author]',
|
146 |
|
|
'[node:' => '[comment:node:', // Replace all node tokens with comment:node.
|
147 |
|
|
);
|
148 |
|
|
if ($context == 'author') {
|
149 |
|
|
$replacements['[user:name]'] = '[comment:node:author]';
|
150 |
|
|
$replacements['[user:'] = '[comment:node:author:';
|
151 |
|
|
}
|
152 |
|
|
elseif ($context == 'commenter') {
|
153 |
|
|
$replacements['[user:name]'] = '[comment-subscribed:author]';
|
154 |
|
|
$replacements['[user:'] = '[comment-subscribed:author:';
|
155 |
|
|
}
|
156 |
|
|
$text = strtr($text, $replacements);
|
157 |
|
|
variable_set($variable, $text);
|
158 |
|
|
}
|
159 |
|
|
}
|
160 |
|
|
return 'Comment Notify token strings updated.';
|
161 |
|
|
}
|
162 |
|
|
|
163 |
|
|
/**
|
164 |
|
|
* Fix a missing default causes warnings for Postgresql and some MySQL.
|
165 |
|
|
*/
|
166 |
|
|
function comment_notify_update_7004() {
|
167 |
|
|
db_change_field('comment_notify', 'notified', 'notified', array('type' => 'int', 'size' => 'small', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0));
|
168 |
|
|
}
|
169 |
|
|
|
170 |
|
|
/**
|
171 |
|
|
* Fix minor schema inconsistencies caused by the last update.
|
172 |
|
|
*/
|
173 |
|
|
function comment_notify_update_7005() {
|
174 |
|
|
// Previous update altered size and unsigned unnecessarily.
|
175 |
|
|
$notified_field = array(
|
176 |
|
|
'type' => 'int',
|
177 |
|
|
'description' => 'A boolean indicator for whether or not a notification for the comment has been sent: 1 means yes, 0 means no.',
|
178 |
|
|
'size' => 'tiny',
|
179 |
|
|
'not null' => TRUE,
|
180 |
|
|
'default' => 0,
|
181 |
|
|
'disp-width' => '11',
|
182 |
|
|
);
|
183 |
|
|
db_change_field('comment_notify', 'notified', 'notified', $notified_field);
|
184 |
|
|
} |