~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to www/php/phpBB3/includes/acp/acp_email.php

  • Committer: William Grant
  • Date: 2009-02-23 23:47:02 UTC
  • mfrom: (1099.1.211 new-dispatch)
  • Revision ID: grantw@unimelb.edu.au-20090223234702-db4b1llly46ignwo
Merge from lp:~ivle-dev/ivle/new-dispatch.

Pretty much everything changes. Reread the setup docs. Backup your databases.
Every file is now in a different installed location, the configuration system
is rewritten, the dispatch system is rewritten, URLs are different, the
database is different, worksheets and exercises are no longer on the
filesystem, we use a templating engine, jail service protocols are rewritten,
we don't repeat ourselves, we have authorization rewritten, phpBB is gone,
and probably lots of other things that I cannot remember.

This is certainly the biggest commit I have ever made, and hopefully
the largest I ever will.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<?php
2
 
/**
3
 
*
4
 
* @package acp
5
 
* @version $Id: acp_email.php,v 1.32 2007/10/05 14:36:32 acydburn Exp $
6
 
* @copyright (c) 2005 phpBB Group
7
 
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8
 
*
9
 
*/
10
 
 
11
 
/**
12
 
* @ignore
13
 
*/
14
 
if (!defined('IN_PHPBB'))
15
 
{
16
 
        exit;
17
 
}
18
 
 
19
 
/**
20
 
* @package acp
21
 
*/
22
 
class acp_email
23
 
{
24
 
        var $u_action;
25
 
 
26
 
        function main($id, $mode)
27
 
        {
28
 
                global $config, $db, $user, $auth, $template, $cache;
29
 
                global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix;
30
 
 
31
 
                $user->add_lang('acp/email');
32
 
                $this->tpl_name = 'acp_email';
33
 
                $this->page_title = 'ACP_MASS_EMAIL';
34
 
 
35
 
                $form_key = 'acp_email';
36
 
                add_form_key($form_key);
37
 
 
38
 
                // Set some vars
39
 
                $submit = (isset($_POST['submit'])) ? true : false;
40
 
                $error = array();
41
 
 
42
 
                $usernames      = request_var('usernames', '', true);
43
 
                $group_id       = request_var('g', 0);
44
 
                $subject        = utf8_normalize_nfc(request_var('subject', '', true));
45
 
                $message        = utf8_normalize_nfc(request_var('message', '', true));
46
 
 
47
 
                // Do the job ...
48
 
                if ($submit)
49
 
                {
50
 
                        // Error checking needs to go here ... if no subject and/or no message then skip
51
 
                        // over the send and return to the form
52
 
                        $use_queue              = (isset($_POST['send_immediately'])) ? false : true;
53
 
                        $priority               = request_var('mail_priority_flag', MAIL_NORMAL_PRIORITY);
54
 
 
55
 
                        if (!check_form_key($form_key))
56
 
                        {
57
 
                                $error[] = $user->lang['FORM_INVALID'];
58
 
                        }
59
 
 
60
 
                        if (!$subject)
61
 
                        {
62
 
                                $error[] = $user->lang['NO_EMAIL_SUBJECT'];
63
 
                        }
64
 
 
65
 
                        if (!$message)
66
 
                        {
67
 
                                $error[] = $user->lang['NO_EMAIL_MESSAGE'];
68
 
                        }
69
 
 
70
 
                        if (!sizeof($error))
71
 
                        {
72
 
                                if ($usernames)
73
 
                                {
74
 
                                        // If giving usernames the admin is able to email inactive users too...
75
 
                                        $sql = 'SELECT username, user_email, user_jabber, user_notify_type, user_lang
76
 
                                                FROM ' . USERS_TABLE . '
77
 
                                                WHERE ' . $db->sql_in_set('username_clean', array_map('utf8_clean_string', explode("\n", $usernames))) . '
78
 
                                                        AND user_allow_massemail = 1
79
 
                                                ORDER BY user_lang, user_notify_type'; // , SUBSTRING(user_email FROM INSTR(user_email, '@'))
80
 
                                }
81
 
                                else
82
 
                                {
83
 
                                        if ($group_id)
84
 
                                        {
85
 
                                                $sql = 'SELECT u.user_email, u.username, u.username_clean, u.user_lang, u.user_jabber, u.user_notify_type
86
 
                                                        FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . ' ug
87
 
                                                        WHERE ug.group_id = ' . $group_id . '
88
 
                                                                AND ug.user_pending = 0
89
 
                                                                AND u.user_id = ug.user_id
90
 
                                                                AND u.user_allow_massemail = 1
91
 
                                                                AND u.user_type IN (' . USER_NORMAL . ', ' . USER_FOUNDER . ')
92
 
                                                        ORDER BY u.user_lang, u.user_notify_type';
93
 
                                        }
94
 
                                        else
95
 
                                        {
96
 
                                                $sql = 'SELECT username, username_clean, user_email, user_jabber, user_notify_type, user_lang
97
 
                                                        FROM ' . USERS_TABLE . '
98
 
                                                        WHERE user_allow_massemail = 1
99
 
                                                                AND user_type IN (' . USER_NORMAL . ', ' . USER_FOUNDER . ')
100
 
                                                        ORDER BY user_lang, user_notify_type';
101
 
                                        }
102
 
                                }
103
 
                                $result = $db->sql_query($sql);
104
 
                                $row = $db->sql_fetchrow($result);
105
 
 
106
 
                                if (!$row)
107
 
                                {
108
 
                                        $db->sql_freeresult($result);
109
 
                                        trigger_error($user->lang['NO_USER'] . adm_back_link($this->u_action), E_USER_WARNING);
110
 
                                }
111
 
        
112
 
                                $i = $j = 0;
113
 
 
114
 
                                // Send with BCC, no more than 50 recipients for one mail (to not exceed the limit)
115
 
                                $max_chunk_size = 50;
116
 
                                $email_list = array();
117
 
                                $old_lang = $row['user_lang'];
118
 
                                $old_notify_type = $row['user_notify_type'];
119
 
 
120
 
                                do
121
 
                                {
122
 
                                        if (($row['user_notify_type'] == NOTIFY_EMAIL && $row['user_email']) ||
123
 
                                                ($row['user_notify_type'] == NOTIFY_IM && $row['user_jabber']) ||
124
 
                                                ($row['user_notify_type'] == NOTIFY_BOTH && $row['user_email'] && $row['user_jabber']))
125
 
                                        {
126
 
                                                if ($i == $max_chunk_size || $row['user_lang'] != $old_lang || $row['user_notify_type'] != $old_notify_type)
127
 
                                                {
128
 
                                                        $i = 0;
129
 
 
130
 
                                                        if (sizeof($email_list))
131
 
                                                        {
132
 
                                                                $j++;
133
 
                                                        }
134
 
 
135
 
                                                        $old_lang = $row['user_lang'];
136
 
                                                        $old_notify_type = $row['user_notify_type'];
137
 
                                                }
138
 
 
139
 
                                                $email_list[$j][$i]['lang']             = $row['user_lang'];
140
 
                                                $email_list[$j][$i]['method']   = $row['user_notify_type'];
141
 
                                                $email_list[$j][$i]['email']    = $row['user_email'];
142
 
                                                $email_list[$j][$i]['name']             = $row['username'];
143
 
                                                $email_list[$j][$i]['jabber']   = $row['user_jabber'];
144
 
                                                $i++;
145
 
                                        }
146
 
                                }
147
 
                                while ($row = $db->sql_fetchrow($result));
148
 
                                $db->sql_freeresult($result);
149
 
 
150
 
                                // Send the messages
151
 
                                include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
152
 
                                include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
153
 
                                $messenger = new messenger($use_queue);
154
 
 
155
 
                                $errored = false;
156
 
 
157
 
                                for ($i = 0, $size = sizeof($email_list); $i < $size; $i++)
158
 
                                {
159
 
                                        $used_lang = $email_list[$i][0]['lang'];
160
 
                                        $used_method = $email_list[$i][0]['method'];
161
 
 
162
 
                                        for ($j = 0, $list_size = sizeof($email_list[$i]); $j < $list_size; $j++)
163
 
                                        {
164
 
                                                $email_row = $email_list[$i][$j];
165
 
 
166
 
                                                $messenger->{((sizeof($email_list[$i]) == 1) ? 'to' : 'bcc')}($email_row['email'], $email_row['name']);
167
 
                                                $messenger->im($email_row['jabber'], $email_row['name']);
168
 
                                        }
169
 
 
170
 
                                        $messenger->template('admin_send_email', $used_lang);
171
 
 
172
 
                                        $messenger->headers('X-AntiAbuse: Board servername - ' . $config['server_name']);
173
 
                                        $messenger->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']);
174
 
                                        $messenger->headers('X-AntiAbuse: Username - ' . $user->data['username']);
175
 
                                        $messenger->headers('X-AntiAbuse: User IP - ' . $user->ip);
176
 
                        
177
 
                                        $messenger->subject(htmlspecialchars_decode($subject));
178
 
                                        $messenger->set_mail_priority($priority);
179
 
 
180
 
                                        $messenger->assign_vars(array(
181
 
                                                'CONTACT_EMAIL' => $config['board_contact'],
182
 
                                                'MESSAGE'               => htmlspecialchars_decode($message))
183
 
                                        );
184
 
        
185
 
                                        if (!($messenger->send($used_method)))
186
 
                                        {
187
 
                                                $errored = true;
188
 
                                        }
189
 
                                }
190
 
                                unset($email_list);
191
 
 
192
 
                                $messenger->save_queue();
193
 
 
194
 
                                if ($usernames)
195
 
                                {
196
 
                                        $usernames = explode("\n", $usernames);
197
 
                                        add_log('admin', 'LOG_MASS_EMAIL', implode(', ', utf8_normalize_nfc($usernames)));
198
 
                                }
199
 
                                else
200
 
                                {
201
 
                                        if ($group_id)
202
 
                                        {
203
 
                                                $group_name = get_group_name($group_id);
204
 
                                        }
205
 
                                        else
206
 
                                        {
207
 
                                                // Not great but the logging routine doesn't cope well with localising on the fly
208
 
                                                $group_name = $user->lang['ALL_USERS'];
209
 
                                        }
210
 
 
211
 
                                        add_log('admin', 'LOG_MASS_EMAIL', $group_name);
212
 
                                }
213
 
 
214
 
                                if (!$errored)
215
 
                                {
216
 
                                        $message = ($use_queue) ? $user->lang['EMAIL_SENT_QUEUE'] : $user->lang['EMAIL_SENT'];
217
 
                                        trigger_error($message . adm_back_link($this->u_action));
218
 
                                }
219
 
                                else
220
 
                                {
221
 
                                        $message = sprintf($user->lang['EMAIL_SEND_ERROR'], '<a href="' . append_sid("{$phpbb_admin_path}index.$phpEx", 'i=logs&amp;mode=critical') . '">', '</a>');
222
 
                                        trigger_error($message . adm_back_link($this->u_action), E_USER_WARNING);
223
 
                                }
224
 
                        }
225
 
                }
226
 
 
227
 
                // Exclude bots and guests...
228
 
                $sql = 'SELECT group_id
229
 
                        FROM ' . GROUPS_TABLE . "
230
 
                        WHERE group_name IN ('BOTS', 'GUESTS')";
231
 
                $result = $db->sql_query($sql);
232
 
 
233
 
                $exclude = array();
234
 
                while ($row = $db->sql_fetchrow($result))
235
 
                {
236
 
                        $exclude[] = $row['group_id'];
237
 
                }
238
 
                $db->sql_freeresult($result);
239
 
 
240
 
                $select_list = '<option value="0"' . ((!$group_id) ? ' selected="selected"' : '') . '>' . $user->lang['ALL_USERS'] . '</option>';
241
 
                $select_list .= group_select_options($group_id, $exclude);
242
 
                
243
 
                $s_priority_options = '<option value="' . MAIL_LOW_PRIORITY . '">' . $user->lang['MAIL_LOW_PRIORITY'] . '</option>';
244
 
                $s_priority_options .= '<option value="' . MAIL_NORMAL_PRIORITY . '" selected="selected">' . $user->lang['MAIL_NORMAL_PRIORITY'] . '</option>';
245
 
                $s_priority_options .= '<option value="' . MAIL_HIGH_PRIORITY . '">' . $user->lang['MAIL_HIGH_PRIORITY'] . '</option>';
246
 
 
247
 
                $template->assign_vars(array(
248
 
                        'S_WARNING'                             => (sizeof($error)) ? true : false,
249
 
                        'WARNING_MSG'                   => (sizeof($error)) ? implode('<br />', $error) : '',
250
 
                        'U_ACTION'                              => $this->u_action,
251
 
                        'S_GROUP_OPTIONS'               => $select_list,
252
 
                        'USERNAMES'                             => $usernames,
253
 
                        'U_FIND_USERNAME'               => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=acp_email&amp;field=usernames'),
254
 
                        'SUBJECT'                               => $subject,
255
 
                        'MESSAGE'                               => $message,
256
 
                        'S_PRIORITY_OPTIONS'    => $s_priority_options)
257
 
                );
258
 
 
259
 
        }
260
 
}
261
 
 
262
 
?>
 
 
b'\\ No newline at end of file'