phpBB
Statistics
| Revision:

root / trunk / phpBB / includes / functions_privmsgs.php

History | View | Annotate | Download (57 kB)

1 4908 acydburn
<?php
2 7736 acydburn
/**
3 5114 acydburn
*
4 5114 acydburn
* @package phpBB3
5 7736 acydburn
* @copyright (c) 2005 phpBB Group
6 11653 git-gate
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
7 5114 acydburn
*
8 5114 acydburn
*/
9 4908 acydburn
10 5114 acydburn
/**
11 5114 acydburn
*/
12 5670 acydburn
if (!defined('IN_PHPBB'))
13 5670 acydburn
{
14 5670 acydburn
        exit;
15 5670 acydburn
}
16 5114 acydburn
17 4908 acydburn
/*
18 4908 acydburn
        Ability to simply add own rules by doing three things:
19 6915 acydburn
                1) Add an appropriate constant
20 4908 acydburn
                2) Add a new check array to the global_privmsgs_rules variable and the condition array (if one is required)
21 11442 git-gate
                3) Implement the rule logic in the check_rule() function
22 11442 git-gate
                4) Add a new language variable to ucp.php
23 6015 acydburn
24 4997 acydburn
                The user is then able to select the new rule. It will be checked against and handled as specified.
25 4908 acydburn
                To add new actions (yes, checks can be added here too) to the rule management, the core code has to be modified.
26 4908 acydburn
*/
27 4908 acydburn
28 6015 acydburn
define('RULE_IS_LIKE', 1);                // Is Like
29 6015 acydburn
define('RULE_IS_NOT_LIKE', 2);        // Is Not Like
30 6015 acydburn
define('RULE_IS', 3);                        // Is
31 6015 acydburn
define('RULE_IS_NOT', 4);                // Is Not
32 6015 acydburn
define('RULE_BEGINS_WITH', 5);        // Begins with
33 6015 acydburn
define('RULE_ENDS_WITH', 6);        // Ends with
34 6015 acydburn
define('RULE_IS_FRIEND', 7);        // Is Friend
35 6015 acydburn
define('RULE_IS_FOE', 8);                // Is Foe
36 6015 acydburn
define('RULE_IS_USER', 9);                // Is User
37 6015 acydburn
define('RULE_IS_GROUP', 10);        // Is In Usergroup
38 6015 acydburn
define('RULE_ANSWERED', 11);        // Answered
39 6015 acydburn
define('RULE_FORWARDED', 12);        // Forwarded
40 6015 acydburn
define('RULE_TO_GROUP', 14);        // Usergroup
41 6015 acydburn
define('RULE_TO_ME', 15);                // Me
42 4908 acydburn
43 4908 acydburn
define('ACTION_PLACE_INTO_FOLDER', 1);
44 4908 acydburn
define('ACTION_MARK_AS_READ', 2);
45 4908 acydburn
define('ACTION_MARK_AS_IMPORTANT', 3);
46 4908 acydburn
define('ACTION_DELETE_MESSAGE', 4);
47 4908 acydburn
48 4908 acydburn
define('CHECK_SUBJECT', 1);
49 4908 acydburn
define('CHECK_SENDER', 2);
50 4908 acydburn
define('CHECK_MESSAGE', 3);
51 4908 acydburn
define('CHECK_STATUS', 4);
52 4908 acydburn
define('CHECK_TO', 5);
53 4908 acydburn
54 6015 acydburn
/**
55 6015 acydburn
* Global private message rules
56 6015 acydburn
* These rules define what to do if a rule is hit
57 6015 acydburn
*/
58 4908 acydburn
$global_privmsgs_rules = array(
59 4908 acydburn
        CHECK_SUBJECT        => array(
60 11442 git-gate
                RULE_IS_LIKE                => array('check0' => 'message_subject'),
61 11442 git-gate
                RULE_IS_NOT_LIKE        => array('check0' => 'message_subject'),
62 11442 git-gate
                RULE_IS                                => array('check0' => 'message_subject'),
63 11442 git-gate
                RULE_IS_NOT                        => array('check0' => 'message_subject'),
64 11442 git-gate
                RULE_BEGINS_WITH        => array('check0' => 'message_subject'),
65 11442 git-gate
                RULE_ENDS_WITH                => array('check0' => 'message_subject'),
66 6054 acydburn
        ),
67 4908 acydburn
68 4908 acydburn
        CHECK_SENDER        => array(
69 11442 git-gate
                RULE_IS_LIKE                => array('check0' => 'username'),
70 11442 git-gate
                RULE_IS_NOT_LIKE        => array('check0' => 'username'),
71 11442 git-gate
                RULE_IS                                => array('check0' => 'username'),
72 11442 git-gate
                RULE_IS_NOT                        => array('check0' => 'username'),
73 11442 git-gate
                RULE_BEGINS_WITH        => array('check0' => 'username'),
74 11442 git-gate
                RULE_ENDS_WITH                => array('check0' => 'username'),
75 11442 git-gate
                RULE_IS_FRIEND                => array('check0' => 'friend'),
76 11442 git-gate
                RULE_IS_FOE                        => array('check0' => 'foe'),
77 11442 git-gate
                RULE_IS_USER                => array('check0' => 'author_id'),
78 11442 git-gate
                RULE_IS_GROUP                => array('check0' => 'author_in_group'),
79 6054 acydburn
        ),
80 6015 acydburn
81 4908 acydburn
        CHECK_MESSAGE        => array(
82 11442 git-gate
                RULE_IS_LIKE                => array('check0' => 'message_text'),
83 11442 git-gate
                RULE_IS_NOT_LIKE        => array('check0' => 'message_text'),
84 11442 git-gate
                RULE_IS                                => array('check0' => 'message_text'),
85 11442 git-gate
                RULE_IS_NOT                        => array('check0' => 'message_text'),
86 6054 acydburn
        ),
87 6015 acydburn
88 4908 acydburn
        CHECK_STATUS        => array(
89 11442 git-gate
                RULE_ANSWERED                => array('check0' => 'pm_replied'),
90 11442 git-gate
                RULE_FORWARDED                => array('check0' => 'pm_forwarded'),
91 6054 acydburn
        ),
92 6015 acydburn
93 4908 acydburn
        CHECK_TO                => array(
94 11442 git-gate
                RULE_TO_GROUP                => array('check0' => 'to', 'check1' => 'bcc', 'check2' => 'user_in_group'),
95 11442 git-gate
                RULE_TO_ME                        => array('check0' => 'to', 'check1' => 'bcc'),
96 6054 acydburn
        )
97 4908 acydburn
);
98 4908 acydburn
99 6015 acydburn
/**
100 6015 acydburn
* This is for defining which condition fields to show for which Rule
101 6015 acydburn
*/
102 4908 acydburn
$global_rule_conditions = array(
103 4908 acydburn
        RULE_IS_LIKE                => 'text',
104 4908 acydburn
        RULE_IS_NOT_LIKE        => 'text',
105 4908 acydburn
        RULE_IS                                => 'text',
106 4908 acydburn
        RULE_IS_NOT                        => 'text',
107 4908 acydburn
        RULE_BEGINS_WITH        => 'text',
108 4908 acydburn
        RULE_ENDS_WITH                => 'text',
109 4908 acydburn
        RULE_IS_USER                => 'user',
110 4908 acydburn
        RULE_IS_GROUP                => 'group'
111 4908 acydburn
);
112 4908 acydburn
113 5114 acydburn
/**
114 5114 acydburn
* Get all folder
115 5114 acydburn
*/
116 5678 acydburn
function get_folder($user_id, $folder_id = false)
117 4908 acydburn
{
118 5048 acydburn
        global $db, $user, $template;
119 6015 acydburn
        global $phpbb_root_path, $phpEx;
120 4908 acydburn
121 5678 acydburn
        $folder = array();
122 4908 acydburn
123 6650 acydburn
        // Get folder information
124 6177 acydburn
        $sql = 'SELECT folder_id, COUNT(msg_id) as num_messages, SUM(pm_unread) as num_unread
125 4908 acydburn
                FROM ' . PRIVMSGS_TO_TABLE . "
126 4908 acydburn
                WHERE user_id = $user_id
127 4908 acydburn
                        AND folder_id <> " . PRIVMSGS_NO_BOX . '
128 4908 acydburn
                GROUP BY folder_id';
129 4908 acydburn
        $result = $db->sql_query($sql);
130 4908 acydburn
131 5048 acydburn
        $num_messages = $num_unread = array();
132 4908 acydburn
        while ($row = $db->sql_fetchrow($result))
133 4908 acydburn
        {
134 4908 acydburn
                $num_messages[(int) $row['folder_id']] = $row['num_messages'];
135 5048 acydburn
                $num_unread[(int) $row['folder_id']] = $row['num_unread'];
136 4908 acydburn
        }
137 4908 acydburn
        $db->sql_freeresult($result);
138 4908 acydburn
139 5048 acydburn
        // Make sure the default boxes are defined
140 5315 acydburn
        $available_folder = array(PRIVMSGS_INBOX, PRIVMSGS_OUTBOX, PRIVMSGS_SENTBOX);
141 5315 acydburn
142 5315 acydburn
        foreach ($available_folder as $default_folder)
143 4908 acydburn
        {
144 5048 acydburn
                if (!isset($num_messages[$default_folder]))
145 5048 acydburn
                {
146 5048 acydburn
                        $num_messages[$default_folder] = 0;
147 5048 acydburn
                }
148 5048 acydburn
149 5048 acydburn
                if (!isset($num_unread[$default_folder]))
150 5048 acydburn
                {
151 5048 acydburn
                        $num_unread[$default_folder] = 0;
152 5048 acydburn
                }
153 4908 acydburn
        }
154 4908 acydburn
155 5048 acydburn
        // Adjust unread status for outbox
156 5048 acydburn
        $num_unread[PRIVMSGS_OUTBOX] = $num_messages[PRIVMSGS_OUTBOX];
157 4908 acydburn
158 6015 acydburn
        $folder[PRIVMSGS_INBOX] = array(
159 6015 acydburn
                'folder_name'                => $user->lang['PM_INBOX'],
160 6015 acydburn
                'num_messages'                => $num_messages[PRIVMSGS_INBOX],
161 6015 acydburn
                'unread_messages'        => $num_unread[PRIVMSGS_INBOX]
162 6015 acydburn
        );
163 6015 acydburn
164 5048 acydburn
        // Custom Folder
165 4908 acydburn
        $sql = 'SELECT folder_id, folder_name, pm_count
166 4908 acydburn
                FROM ' . PRIVMSGS_FOLDER_TABLE . "
167 4908 acydburn
                        WHERE user_id = $user_id";
168 4908 acydburn
        $result = $db->sql_query($sql);
169 6015 acydburn
170 4908 acydburn
        while ($row = $db->sql_fetchrow($result))
171 4908 acydburn
        {
172 6015 acydburn
                $folder[$row['folder_id']] = array(
173 6015 acydburn
                        'folder_name'                => $row['folder_name'],
174 6015 acydburn
                        'num_messages'                => $row['pm_count'],
175 6015 acydburn
                        'unread_messages'        => ((isset($num_unread[$row['folder_id']])) ? $num_unread[$row['folder_id']] : 0)
176 6015 acydburn
                );
177 4908 acydburn
        }
178 4908 acydburn
        $db->sql_freeresult($result);
179 4908 acydburn
180 6015 acydburn
        $folder[PRIVMSGS_OUTBOX] = array(
181 6015 acydburn
                'folder_name'                => $user->lang['PM_OUTBOX'],
182 6015 acydburn
                'num_messages'                => $num_messages[PRIVMSGS_OUTBOX],
183 6015 acydburn
                'unread_messages'        => $num_unread[PRIVMSGS_OUTBOX]
184 6015 acydburn
        );
185 4908 acydburn
186 6015 acydburn
        $folder[PRIVMSGS_SENTBOX] = array(
187 6015 acydburn
                'folder_name'                => $user->lang['PM_SENTBOX'],
188 6015 acydburn
                'num_messages'                => $num_messages[PRIVMSGS_SENTBOX],
189 6015 acydburn
                'unread_messages'        => $num_unread[PRIVMSGS_SENTBOX]
190 6015 acydburn
        );
191 6015 acydburn
192 5048 acydburn
        // Define Folder Array for template designers (and for making custom folders usable by the template too)
193 5048 acydburn
        foreach ($folder as $f_id => $folder_ary)
194 5048 acydburn
        {
195 5765 acydburn
                $folder_id_name = ($f_id == PRIVMSGS_INBOX) ? 'inbox' : (($f_id == PRIVMSGS_OUTBOX) ? 'outbox' : 'sentbox');
196 5765 acydburn
197 5048 acydburn
                $template->assign_block_vars('folder', array(
198 5048 acydburn
                        'FOLDER_ID'                        => $f_id,
199 5048 acydburn
                        'FOLDER_NAME'                => $folder_ary['folder_name'],
200 5048 acydburn
                        'NUM_MESSAGES'                => $folder_ary['num_messages'],
201 5048 acydburn
                        'UNREAD_MESSAGES'        => $folder_ary['unread_messages'],
202 5048 acydburn
203 6015 acydburn
                        'U_FOLDER'                        => ($f_id > 0) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;folder=' . $f_id) : append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;folder=' . $folder_id_name),
204 5765 acydburn
205 5765 acydburn
                        'S_CUR_FOLDER'                => ($f_id === $folder_id) ? true : false,
206 5048 acydburn
                        'S_UNREAD_MESSAGES'        => ($folder_ary['unread_messages']) ? true : false,
207 5048 acydburn
                        'S_CUSTOM_FOLDER'        => ($f_id > 0) ? true : false)
208 5048 acydburn
                );
209 5048 acydburn
        }
210 5048 acydburn
211 8567 acydburn
        if ($folder_id !== false && !isset($folder[$folder_id]))
212 8567 acydburn
        {
213 8567 acydburn
                trigger_error('UNKNOWN_FOLDER');
214 8567 acydburn
        }
215 8567 acydburn
216 5678 acydburn
        return $folder;
217 4908 acydburn
}
218 4908 acydburn
219 5114 acydburn
/**
220 6015 acydburn
* Delete Messages From Sentbox
221 6015 acydburn
* we are doing this here because this saves us a bunch of checks and queries
222 5114 acydburn
*/
223 4908 acydburn
function clean_sentbox($num_sentbox_messages)
224 4908 acydburn
{
225 4908 acydburn
        global $db, $user, $config;
226 4908 acydburn
227 6015 acydburn
        // Check Message Limit
228 5139 acydburn
        if ($user->data['message_limit'] && $num_sentbox_messages > $user->data['message_limit'])
229 4908 acydburn
        {
230 4908 acydburn
                // Delete old messages
231 4908 acydburn
                $sql = 'SELECT t.msg_id
232 4908 acydburn
                        FROM ' . PRIVMSGS_TO_TABLE . ' t, ' . PRIVMSGS_TABLE . ' p
233 4908 acydburn
                        WHERE t.msg_id = p.msg_id
234 4908 acydburn
                                AND t.user_id = ' . $user->data['user_id'] . '
235 4908 acydburn
                                AND t.folder_id = ' . PRIVMSGS_SENTBOX . '
236 4908 acydburn
                        ORDER BY p.message_time ASC';
237 5139 acydburn
                $result = $db->sql_query_limit($sql, ($num_sentbox_messages - $user->data['message_limit']));
238 4908 acydburn
239 4908 acydburn
                $delete_ids = array();
240 4908 acydburn
                while ($row = $db->sql_fetchrow($result))
241 4908 acydburn
                {
242 4908 acydburn
                        $delete_ids[] = $row['msg_id'];
243 4908 acydburn
                }
244 4908 acydburn
                $db->sql_freeresult($result);
245 4908 acydburn
                delete_pm($user->data['user_id'], $delete_ids, PRIVMSGS_SENTBOX);
246 4908 acydburn
        }
247 4908 acydburn
}
248 4908 acydburn
249 5114 acydburn
/**
250 6650 acydburn
* Check Rule against Message Information
251 5114 acydburn
*/
252 4984 acydburn
function check_rule(&$rules, &$rule_row, &$message_row, $user_id)
253 4908 acydburn
{
254 4908 acydburn
        global $user, $config;
255 4908 acydburn
256 4908 acydburn
        if (!isset($rules[$rule_row['rule_check']][$rule_row['rule_connection']]))
257 4908 acydburn
        {
258 4908 acydburn
                return false;
259 4908 acydburn
        }
260 4908 acydburn
261 4908 acydburn
        $check_ary = $rules[$rule_row['rule_check']][$rule_row['rule_connection']];
262 4908 acydburn
263 11442 git-gate
        $result = false;
264 4908 acydburn
265 11442 git-gate
        $check0 = $message_row[$check_ary['check0']];
266 4908 acydburn
267 11442 git-gate
        switch ($rule_row['rule_connection'])
268 11442 git-gate
        {
269 11442 git-gate
                case RULE_IS_LIKE:
270 11442 git-gate
                        $result = preg_match("/" . preg_quote($rule_row['rule_string'], '/') . '/i', $check0);
271 11442 git-gate
                break;
272 11442 git-gate
273 11442 git-gate
                case RULE_IS_NOT_LIKE:
274 11442 git-gate
                        $result = !preg_match("/" . preg_quote($rule_row['rule_string'], '/') . '/i', $check0);
275 11442 git-gate
                break;
276 11442 git-gate
277 11442 git-gate
                case RULE_IS:
278 11442 git-gate
                        $result = ($check0 == $rule_row['rule_string']);
279 11442 git-gate
                break;
280 11442 git-gate
281 11442 git-gate
                case RULE_IS_NOT:
282 11442 git-gate
                        $result = ($check0 != $rule_row['rule_string']);
283 11442 git-gate
                break;
284 11442 git-gate
285 11442 git-gate
                case RULE_BEGINS_WITH:
286 11442 git-gate
                        $result = preg_match("/^" . preg_quote($rule_row['rule_string'], '/') . '/i', $check0);
287 11442 git-gate
                break;
288 11442 git-gate
289 11442 git-gate
                case RULE_ENDS_WITH:
290 11442 git-gate
                        $result = preg_match("/" . preg_quote($rule_row['rule_string'], '/') . '$/i', $check0);
291 11442 git-gate
                break;
292 11442 git-gate
293 11442 git-gate
                case RULE_IS_FRIEND:
294 11442 git-gate
                case RULE_IS_FOE:
295 11442 git-gate
                case RULE_ANSWERED:
296 11442 git-gate
                case RULE_FORWARDED:
297 11442 git-gate
                        $result = ($check0 == 1);
298 11442 git-gate
                break;
299 11442 git-gate
300 11442 git-gate
                case RULE_IS_USER:
301 11442 git-gate
                        $result = ($check0 == $rule_row['rule_user_id']);
302 11442 git-gate
                break;
303 11442 git-gate
304 11442 git-gate
                case RULE_IS_GROUP:
305 11442 git-gate
                        $result = in_array($rule_row['rule_group_id'], $check0);
306 11442 git-gate
                break;
307 11442 git-gate
308 11442 git-gate
                case RULE_TO_GROUP:
309 11442 git-gate
                        $result = (in_array('g_' . $message_row[$check_ary['check2']], $check0) || in_array('g_' . $message_row[$check_ary['check2']], $message_row[$check_ary['check1']]));
310 11442 git-gate
                break;
311 11442 git-gate
312 11442 git-gate
                case RULE_TO_ME:
313 11442 git-gate
                        $result = (in_array('u_' . $user_id, $check0) || in_array('u_' . $user_id, $message_row[$check_ary['check1']]));
314 11442 git-gate
                break;
315 11442 git-gate
        }
316 6015 acydburn
317 11442 git-gate
318 4908 acydburn
        if (!$result)
319 4908 acydburn
        {
320 4908 acydburn
                return false;
321 4908 acydburn
        }
322 4908 acydburn
323 4908 acydburn
        switch ($rule_row['rule_action'])
324 4908 acydburn
        {
325 4908 acydburn
                case ACTION_PLACE_INTO_FOLDER:
326 4908 acydburn
                        return array('action' => $rule_row['rule_action'], 'folder_id' => $rule_row['rule_folder_id']);
327 5678 acydburn
                break;
328 8350 acydburn
329 4908 acydburn
                case ACTION_MARK_AS_READ:
330 4908 acydburn
                case ACTION_MARK_AS_IMPORTANT:
331 6177 acydburn
                        return array('action' => $rule_row['rule_action'], 'pm_unread' => $message_row['pm_unread'], 'pm_marked' => $message_row['pm_marked']);
332 5678 acydburn
                break;
333 6342 acydburn
334 6342 acydburn
                case ACTION_DELETE_MESSAGE:
335 6353 acydburn
                        global $db, $auth;
336 6342 acydburn
337 6342 acydburn
                        // Check for admins/mods - users are not allowed to remove those messages...
338 6342 acydburn
                        // We do the check here to make sure the data we use is consistent
339 6342 acydburn
                        $sql = 'SELECT user_id, user_type, user_permissions
340 6342 acydburn
                                FROM ' . USERS_TABLE . '
341 6342 acydburn
                                WHERE user_id = ' . (int) $message_row['author_id'];
342 6342 acydburn
                        $result = $db->sql_query($sql);
343 6342 acydburn
                        $userdata = $db->sql_fetchrow($result);
344 6342 acydburn
                        $db->sql_freeresult($result);
345 6342 acydburn
346 6342 acydburn
                        $auth2 = new auth();
347 6342 acydburn
                        $auth2->acl($userdata);
348 6342 acydburn
349 6650 acydburn
                        if (!$auth2->acl_get('a_') && !$auth2->acl_get('m_') && !$auth2->acl_getf_global('m_'))
350 6342 acydburn
                        {
351 6342 acydburn
                                return array('action' => $rule_row['rule_action'], 'pm_unread' => $message_row['pm_unread'], 'pm_marked' => $message_row['pm_marked']);
352 6342 acydburn
                        }
353 6342 acydburn
354 6342 acydburn
                        return false;
355 6342 acydburn
                break;
356 8350 acydburn
357 4908 acydburn
                default:
358 4908 acydburn
                        return false;
359 4908 acydburn
        }
360 4908 acydburn
361 4908 acydburn
        return false;
362 4908 acydburn
}
363 4908 acydburn
364 5114 acydburn
/**
365 8229 acydburn
* Update user PM count
366 8204 acydburn
*/
367 8229 acydburn
function update_pm_counts()
368 8204 acydburn
{
369 8204 acydburn
        global $user, $db;
370 8204 acydburn
371 8204 acydburn
        // Update unread count
372 8204 acydburn
        $sql = 'SELECT COUNT(msg_id) as num_messages
373 8204 acydburn
                FROM ' . PRIVMSGS_TO_TABLE . '
374 8204 acydburn
                WHERE pm_unread = 1
375 8204 acydburn
                        AND folder_id <> ' . PRIVMSGS_OUTBOX . '
376 8204 acydburn
                        AND user_id = ' . $user->data['user_id'];
377 8204 acydburn
        $result = $db->sql_query($sql);
378 8204 acydburn
        $user->data['user_unread_privmsg'] = (int) $db->sql_fetchfield('num_messages');
379 8204 acydburn
        $db->sql_freeresult($result);
380 8204 acydburn
381 8204 acydburn
        // Update new pm count
382 8204 acydburn
        $sql = 'SELECT COUNT(msg_id) as num_messages
383 8204 acydburn
                FROM ' . PRIVMSGS_TO_TABLE . '
384 8204 acydburn
                WHERE pm_new = 1
385 8204 acydburn
                        AND folder_id IN (' . PRIVMSGS_NO_BOX . ', ' . PRIVMSGS_HOLD_BOX . ')
386 8204 acydburn
                        AND user_id = ' . $user->data['user_id'];
387 8204 acydburn
        $result = $db->sql_query($sql);
388 8204 acydburn
        $user->data['user_new_privmsg'] = (int) $db->sql_fetchfield('num_messages');
389 8204 acydburn
        $db->sql_freeresult($result);
390 8204 acydburn
391 8204 acydburn
        $db->sql_query('UPDATE ' . USERS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', array(
392 8204 acydburn
                'user_unread_privmsg'        => (int) $user->data['user_unread_privmsg'],
393 8204 acydburn
                'user_new_privmsg'                => (int) $user->data['user_new_privmsg'],
394 8204 acydburn
        )) . ' WHERE user_id = ' . $user->data['user_id']);
395 8204 acydburn
396 8204 acydburn
        // Ok, here we need to repair something, other boxes than privmsgs_no_box and privmsgs_hold_box should not carry the pm_new flag.
397 8204 acydburn
        if (!$user->data['user_new_privmsg'])
398 8204 acydburn
        {
399 8204 acydburn
                $sql = 'UPDATE ' . PRIVMSGS_TO_TABLE . '
400 8204 acydburn
                        SET pm_new = 0
401 8204 acydburn
                        WHERE pm_new = 1
402 8204 acydburn
                                AND folder_id NOT IN (' . PRIVMSGS_NO_BOX . ', ' . PRIVMSGS_HOLD_BOX . ')
403 8204 acydburn
                                AND user_id = ' . $user->data['user_id'];
404 8204 acydburn
                $db->sql_query($sql);
405 8204 acydburn
        }
406 8204 acydburn
}
407 8204 acydburn
408 8204 acydburn
/**
409 6915 acydburn
* Place new messages into appropriate folder
410 5114 acydburn
*/
411 4984 acydburn
function place_pm_into_folder(&$global_privmsgs_rules, $release = false)
412 4908 acydburn
{
413 4908 acydburn
        global $db, $user, $config;
414 4908 acydburn
415 4908 acydburn
        if (!$user->data['user_new_privmsg'])
416 4908 acydburn
        {
417 8231 acydburn
                return array('not_moved' => 0, 'removed' => 0);
418 4908 acydburn
        }
419 4908 acydburn
420 4908 acydburn
        $user_message_rules = (int) $user->data['user_message_rules'];
421 4908 acydburn
        $user_id = (int) $user->data['user_id'];
422 4908 acydburn
423 6054 acydburn
        $action_ary = $move_into_folder = array();
424 8229 acydburn
        $num_removed = 0;
425 6054 acydburn
426 7178 acydburn
        // Newly processing on-hold messages
427 6054 acydburn
        if ($release)
428 4908 acydburn
        {
429 8146 acydburn
                $sql = 'UPDATE ' . PRIVMSGS_TO_TABLE . '
430 6054 acydburn
                        SET folder_id = ' . PRIVMSGS_NO_BOX . '
431 6054 acydburn
                        WHERE folder_id = ' . PRIVMSGS_HOLD_BOX . "
432 6054 acydburn
                                AND user_id = $user_id";
433 6054 acydburn
                $db->sql_query($sql);
434 6054 acydburn
        }
435 6054 acydburn
436 6054 acydburn
        // Get those messages not yet placed into any box
437 6054 acydburn
        $retrieve_sql = 'SELECT t.*, p.*, u.username, u.user_id, u.group_id
438 6054 acydburn
                FROM ' . PRIVMSGS_TO_TABLE . ' t, ' . PRIVMSGS_TABLE . ' p, ' . USERS_TABLE . " u
439 6054 acydburn
                WHERE t.user_id = $user_id
440 6054 acydburn
                        AND p.author_id = u.user_id
441 6054 acydburn
                        AND t.folder_id = " . PRIVMSGS_NO_BOX . '
442 6054 acydburn
                        AND t.msg_id = p.msg_id';
443 6054 acydburn
444 6915 acydburn
        // Just place into the appropriate arrays if no rules need to be checked
445 6054 acydburn
        if (!$user_message_rules)
446 6054 acydburn
        {
447 6054 acydburn
                $result = $db->sql_query($retrieve_sql);
448 6054 acydburn
449 6054 acydburn
                while ($row = $db->sql_fetchrow($result))
450 6054 acydburn
                {
451 6054 acydburn
                        $action_ary[$row['msg_id']][] = array('action' => false);
452 6054 acydburn
                }
453 6054 acydburn
                $db->sql_freeresult($result);
454 6054 acydburn
        }
455 6054 acydburn
        else
456 6054 acydburn
        {
457 6054 acydburn
                $user_rules = $zebra = $check_rows = array();
458 6054 acydburn
                $user_ids = $memberships = array();
459 6054 acydburn
460 6054 acydburn
                // First of all, grab all rules and retrieve friends/foes
461 8146 acydburn
                $sql = 'SELECT *
462 4908 acydburn
                        FROM ' . PRIVMSGS_RULES_TABLE . "
463 4908 acydburn
                        WHERE user_id = $user_id";
464 4908 acydburn
                $result = $db->sql_query($sql);
465 4908 acydburn
                $user_rules = $db->sql_fetchrowset($result);
466 4908 acydburn
                $db->sql_freeresult($result);
467 4908 acydburn
468 4908 acydburn
                if (sizeof($user_rules))
469 4908 acydburn
                {
470 4908 acydburn
                        $sql = 'SELECT zebra_id, friend, foe
471 4908 acydburn
                                FROM ' . ZEBRA_TABLE . "
472 4908 acydburn
                                WHERE user_id = $user_id";
473 4908 acydburn
                        $result = $db->sql_query($sql);
474 4908 acydburn
475 4908 acydburn
                        while ($row = $db->sql_fetchrow($result))
476 4908 acydburn
                        {
477 4908 acydburn
                                $zebra[$row['zebra_id']] = $row;
478 4908 acydburn
                        }
479 4908 acydburn
                        $db->sql_freeresult($result);
480 4908 acydburn
                }
481 4908 acydburn
482 6054 acydburn
                // Now build a bare-bone check_row array
483 6054 acydburn
                $result = $db->sql_query($retrieve_sql);
484 4908 acydburn
485 6054 acydburn
                while ($row = $db->sql_fetchrow($result))
486 6054 acydburn
                {
487 6054 acydburn
                        $check_rows[] = array_merge($row, array(
488 6054 acydburn
                                'to'                                => explode(':', $row['to_address']),
489 6054 acydburn
                                'bcc'                                => explode(':', $row['bcc_address']),
490 6054 acydburn
                                'friend'                        => (isset($zebra[$row['author_id']])) ? $zebra[$row['author_id']]['friend'] : 0,
491 6054 acydburn
                                'foe'                                => (isset($zebra[$row['author_id']])) ? $zebra[$row['author_id']]['foe'] : 0,
492 6054 acydburn
                                'user_in_group'                => array($user->data['group_id']),
493 6054 acydburn
                                'author_in_group'        => array())
494 6054 acydburn
                        );
495 4908 acydburn
496 6054 acydburn
                        $user_ids[] = $row['user_id'];
497 6054 acydburn
                }
498 6054 acydburn
                $db->sql_freeresult($result);
499 5151 acydburn
500 6054 acydburn
                // Retrieve user memberships
501 6054 acydburn
                if (sizeof($user_ids))
502 4908 acydburn
                {
503 6054 acydburn
                        $sql = 'SELECT *
504 8146 acydburn
                                FROM ' . USER_GROUP_TABLE . '
505 6271 acydburn
                                WHERE ' . $db->sql_in_set('user_id', $user_ids) . '
506 6081 acydburn
                                        AND user_pending = 0';
507 6054 acydburn
                        $result = $db->sql_query($sql);
508 6054 acydburn
509 6054 acydburn
                        while ($row = $db->sql_fetchrow($result))
510 4908 acydburn
                        {
511 6054 acydburn
                                $memberships[$row['user_id']][] = $row['group_id'];
512 4908 acydburn
                        }
513 6054 acydburn
                        $db->sql_freeresult($result);
514 4908 acydburn
                }
515 6054 acydburn
516 6915 acydburn
                // Now place into the appropriate folder
517 6054 acydburn
                foreach ($check_rows as $row)
518 4908 acydburn
                {
519 6054 acydburn
                        // Add membership if set
520 6054 acydburn
                        if (isset($memberships[$row['author_id']]))
521 6054 acydburn
                        {
522 6054 acydburn
                                $row['author_in_group'] = $memberships[$row['user_id']];
523 6054 acydburn
                        }
524 6054 acydburn
525 6650 acydburn
                        // Check Rule - this should be very quick since we have all information we need
526 6054 acydburn
                        $is_match = false;
527 6054 acydburn
                        foreach ($user_rules as $rule_row)
528 6054 acydburn
                        {
529 6054 acydburn
                                if (($action = check_rule($global_privmsgs_rules, $rule_row, $row, $user_id)) !== false)
530 6054 acydburn
                                {
531 6054 acydburn
                                        $is_match = true;
532 6054 acydburn
                                        $action_ary[$row['msg_id']][] = $action;
533 6054 acydburn
                                }
534 6054 acydburn
                        }
535 6054 acydburn
536 6054 acydburn
                        if (!$is_match)
537 6054 acydburn
                        {
538 6054 acydburn
                                $action_ary[$row['msg_id']][] = array('action' => false);
539 6054 acydburn
                        }
540 4908 acydburn
                }
541 6054 acydburn
542 6054 acydburn
                unset($user_rules, $zebra, $check_rows, $user_ids, $memberships);
543 4908 acydburn
        }
544 4908 acydburn
545 4908 acydburn
        // We place actions into arrays, to save queries.
546 7735 acydburn
        $sql = $unread_ids = $delete_ids = $important_ids = array();
547 4908 acydburn
548 4908 acydburn
        foreach ($action_ary as $msg_id => $msg_ary)
549 4908 acydburn
        {
550 4908 acydburn
                // It is allowed to execute actions more than once, except placing messages into folder
551 8229 acydburn
                $folder_action = $message_removed = false;
552 4908 acydburn
553 4908 acydburn
                foreach ($msg_ary as $pos => $rule_ary)
554 4908 acydburn
                {
555 4908 acydburn
                        if ($folder_action && $rule_ary['action'] == ACTION_PLACE_INTO_FOLDER)
556 4908 acydburn
                        {
557 4908 acydburn
                                continue;
558 4908 acydburn
                        }
559 6054 acydburn
560 4908 acydburn
                        switch ($rule_ary['action'])
561 4908 acydburn
                        {
562 4908 acydburn
                                case ACTION_PLACE_INTO_FOLDER:
563 6232 acydburn
                                        // Folder actions have precedence, so we will remove any other ones
564 4908 acydburn
                                        $folder_action = true;
565 7725 acydburn
                                        $move_into_folder[(int) $rule_ary['folder_id']][] = $msg_id;
566 6015 acydburn
                                break;
567 4908 acydburn
568 4908 acydburn
                                case ACTION_MARK_AS_READ:
569 6177 acydburn
                                        if ($rule_ary['pm_unread'])
570 4908 acydburn
                                        {
571 4908 acydburn
                                                $unread_ids[] = $msg_id;
572 4908 acydburn
                                        }
573 6015 acydburn
                                break;
574 4908 acydburn
575 4908 acydburn
                                case ACTION_DELETE_MESSAGE:
576 4908 acydburn
                                        $delete_ids[] = $msg_id;
577 7735 acydburn
                                        $message_removed = true;
578 6015 acydburn
                                break;
579 4908 acydburn
580 4908 acydburn
                                case ACTION_MARK_AS_IMPORTANT:
581 6177 acydburn
                                        if (!$rule_ary['pm_marked'])
582 4908 acydburn
                                        {
583 4908 acydburn
                                                $important_ids[] = $msg_id;
584 4908 acydburn
                                        }
585 6015 acydburn
                                break;
586 4908 acydburn
                        }
587 4908 acydburn
                }
588 7735 acydburn
589 7735 acydburn
                // We place this here because it could happen that the messages are doubled if a rule marks a message and then moves it into a specific
590 7735 acydburn
                // folder. Here we simply move the message into the INBOX if it gets not removed and also not put into a custom folder.
591 7735 acydburn
                if (!$folder_action && !$message_removed)
592 7735 acydburn
                {
593 7735 acydburn
                        $move_into_folder[PRIVMSGS_INBOX][] = $msg_id;
594 7735 acydburn
                }
595 4908 acydburn
        }
596 4908 acydburn
597 4908 acydburn
        // Do not change the order of processing
598 4908 acydburn
        // The number of queries needed to be executed here highly depends on the defined rules and are
599 4908 acydburn
        // only gone through if new messages arrive.
600 4908 acydburn
601 4908 acydburn
        // Delete messages
602 4908 acydburn
        if (sizeof($delete_ids))
603 4908 acydburn
        {
604 8229 acydburn
                $num_removed += sizeof($delete_ids);
605 4908 acydburn
                delete_pm($user_id, $delete_ids, PRIVMSGS_NO_BOX);
606 4908 acydburn
        }
607 4908 acydburn
608 4908 acydburn
        // Set messages to Unread
609 4908 acydburn
        if (sizeof($unread_ids))
610 4908 acydburn
        {
611 8146 acydburn
                $sql = 'UPDATE ' . PRIVMSGS_TO_TABLE . '
612 6177 acydburn
                        SET pm_unread = 0
613 6271 acydburn
                        WHERE ' . $db->sql_in_set('msg_id', $unread_ids) . "
614 4908 acydburn
                                AND user_id = $user_id
615 4908 acydburn
                                AND folder_id = " . PRIVMSGS_NO_BOX;
616 4908 acydburn
                $db->sql_query($sql);
617 4908 acydburn
        }
618 4908 acydburn
619 4908 acydburn
        // mark messages as important
620 4908 acydburn
        if (sizeof($important_ids))
621 4908 acydburn
        {
622 4908 acydburn
                $sql = 'UPDATE ' . PRIVMSGS_TO_TABLE . '
623 6905 acydburn
                        SET pm_marked = 1 - pm_marked
624 4908 acydburn
                        WHERE folder_id = ' . PRIVMSGS_NO_BOX . "
625 4908 acydburn
                                AND user_id = $user_id
626 6271 acydburn
                                AND " . $db->sql_in_set('msg_id', $important_ids);
627 4908 acydburn
                $db->sql_query($sql);
628 4908 acydburn
        }
629 4908 acydburn
630 4908 acydburn
        // Move into folder
631 4908 acydburn
        $folder = array();
632 4908 acydburn
633 4908 acydburn
        if (sizeof($move_into_folder))
634 4908 acydburn
        {
635 4908 acydburn
                // Determine Full Folder Action - we need the move to folder id later eventually
636 4908 acydburn
                $full_folder_action = ($user->data['user_full_folder'] == FULL_FOLDER_NONE) ? ($config['full_folder_action'] - (FULL_FOLDER_NONE*(-1))) : $user->data['user_full_folder'];
637 6177 acydburn
638 6271 acydburn
                $sql_folder = array_keys($move_into_folder);
639 6271 acydburn
                if ($full_folder_action >= 0)
640 6271 acydburn
                {
641 6271 acydburn
                        $sql_folder[] = $full_folder_action;
642 6271 acydburn
                }
643 6271 acydburn
644 8146 acydburn
                $sql = 'SELECT folder_id, pm_count
645 4908 acydburn
                        FROM ' . PRIVMSGS_FOLDER_TABLE . '
646 6271 acydburn
                        WHERE ' . $db->sql_in_set('folder_id', $sql_folder) . "
647 4908 acydburn
                                AND user_id = $user_id";
648 4908 acydburn
                $result = $db->sql_query($sql);
649 4908 acydburn
650 4908 acydburn
                while ($row = $db->sql_fetchrow($result))
651 4908 acydburn
                {
652 4908 acydburn
                        $folder[(int) $row['folder_id']] = (int) $row['pm_count'];
653 4908 acydburn
                }
654 4908 acydburn
                $db->sql_freeresult($result);
655 4908 acydburn
656 6271 acydburn
                unset($sql_folder);
657 6271 acydburn
658 8350 acydburn
                if (isset($move_into_folder[PRIVMSGS_INBOX]))
659 4908 acydburn
                {
660 8079 acydburn
                        $sql = 'SELECT COUNT(msg_id) as num_messages
661 4908 acydburn
                                FROM ' . PRIVMSGS_TO_TABLE . "
662 4908 acydburn
                                WHERE user_id = $user_id
663 8079 acydburn
                                        AND folder_id = " . PRIVMSGS_INBOX;
664 8079 acydburn
                        $result = $db->sql_query($sql);
665 5699 acydburn
                        $folder[PRIVMSGS_INBOX] = (int) $db->sql_fetchfield('num_messages');
666 5699 acydburn
                        $db->sql_freeresult($result);
667 4908 acydburn
                }
668 4908 acydburn
        }
669 4908 acydburn
670 4908 acydburn
        // Here we have ideally only one folder to move into
671 4908 acydburn
        foreach ($move_into_folder as $folder_id => $msg_ary)
672 4908 acydburn
        {
673 4908 acydburn
                $dest_folder = $folder_id;
674 4908 acydburn
                $full_folder_action = FULL_FOLDER_NONE;
675 4908 acydburn
676 4908 acydburn
                // Check Message Limit - we calculate with the complete array, most of the time it is one message
677 4908 acydburn
                // But we are making sure that the other way around works too (more messages in queue than allowed to be stored)
678 5139 acydburn
                if ($user->data['message_limit'] && $folder[$folder_id] && ($folder[$folder_id] + sizeof($msg_ary)) > $user->data['message_limit'])
679 4908 acydburn
                {
680 4908 acydburn
                        $full_folder_action = ($user->data['user_full_folder'] == FULL_FOLDER_NONE) ? ($config['full_folder_action'] - (FULL_FOLDER_NONE*(-1))) : $user->data['user_full_folder'];
681 4908 acydburn
682 4908 acydburn
                        // If destination folder itself is full...
683 5139 acydburn
                        if ($full_folder_action >= 0 && ($folder[$full_folder_action] + sizeof($msg_ary)) > $user->data['message_limit'])
684 4908 acydburn
                        {
685 4908 acydburn
                                $full_folder_action = $config['full_folder_action'] - (FULL_FOLDER_NONE*(-1));
686 4908 acydburn
                        }
687 4908 acydburn
688 4908 acydburn
                        // If Full Folder Action is to move to another folder, we simply adjust the destination folder
689 4908 acydburn
                        if ($full_folder_action >= 0)
690 4908 acydburn
                        {
691 4908 acydburn
                                $dest_folder = $full_folder_action;
692 4908 acydburn
                        }
693 4908 acydburn
                        else if ($full_folder_action == FULL_FOLDER_DELETE)
694 4908 acydburn
                        {
695 6411 acydburn
                                // Delete some messages. NOTE: Ordered by msg_id here instead of message_time!
696 6411 acydburn
                                $sql = 'SELECT msg_id
697 6411 acydburn
                                        FROM ' . PRIVMSGS_TO_TABLE . "
698 6411 acydburn
                                        WHERE user_id = $user_id
699 6411 acydburn
                                                AND folder_id = $dest_folder
700 6411 acydburn
                                        ORDER BY msg_id ASC";
701 5139 acydburn
                                $result = $db->sql_query_limit($sql, (($folder[$dest_folder] + sizeof($msg_ary)) - $user->data['message_limit']));
702 4908 acydburn
703 4908 acydburn
                                $delete_ids = array();
704 4908 acydburn
                                while ($row = $db->sql_fetchrow($result))
705 4908 acydburn
                                {
706 4908 acydburn
                                        $delete_ids[] = $row['msg_id'];
707 4908 acydburn
                                }
708 4908 acydburn
                                $db->sql_freeresult($result);
709 6177 acydburn
710 8229 acydburn
                                $num_removed += sizeof($delete_ids);
711 4908 acydburn
                                delete_pm($user_id, $delete_ids, $dest_folder);
712 4908 acydburn
                        }
713 4908 acydburn
                }
714 8079 acydburn
715 8146 acydburn
                //
716 5139 acydburn
                if ($full_folder_action == FULL_FOLDER_HOLD)
717 4908 acydburn
                {
718 8146 acydburn
                        $sql = 'UPDATE ' . PRIVMSGS_TO_TABLE . '
719 5139 acydburn
                                SET folder_id = ' . PRIVMSGS_HOLD_BOX . '
720 5139 acydburn
                                WHERE folder_id = ' . PRIVMSGS_NO_BOX . "
721 5139 acydburn
                                        AND user_id = $user_id
722 6271 acydburn
                                        AND " . $db->sql_in_set('msg_id', $msg_ary);
723 5139 acydburn
                        $db->sql_query($sql);
724 5139 acydburn
                }
725 5139 acydburn
                else
726 5139 acydburn
                {
727 8146 acydburn
                        $sql = 'UPDATE ' . PRIVMSGS_TO_TABLE . "
728 6177 acydburn
                                SET folder_id = $dest_folder, pm_new = 0
729 4908 acydburn
                                WHERE folder_id = " . PRIVMSGS_NO_BOX . "
730 4908 acydburn
                                        AND user_id = $user_id
731 6177 acydburn
                                        AND pm_new = 1
732 6271 acydburn
                                        AND " . $db->sql_in_set('msg_id', $msg_ary);
733 4908 acydburn
                        $db->sql_query($sql);
734 4908 acydburn
735 4908 acydburn
                        if ($dest_folder != PRIVMSGS_INBOX)
736 4908 acydburn
                        {
737 4908 acydburn
                                $sql = 'UPDATE ' . PRIVMSGS_FOLDER_TABLE . '
738 4908 acydburn
                                        SET pm_count = pm_count + ' . (int) $db->sql_affectedrows() . "
739 4908 acydburn
                                        WHERE folder_id = $dest_folder
740 4908 acydburn
                                                AND user_id = $user_id";
741 4908 acydburn
                                $db->sql_query($sql);
742 4908 acydburn
                        }
743 4908 acydburn
                }
744 4908 acydburn
        }
745 4908 acydburn
746 4908 acydburn
        if (sizeof($action_ary))
747 4908 acydburn
        {
748 4908 acydburn
                // Move from OUTBOX to SENTBOX
749 4908 acydburn
                // We are not checking any full folder status here... SENTBOX is a special treatment (old messages get deleted)
750 8146 acydburn
                $sql = 'UPDATE ' . PRIVMSGS_TO_TABLE . '
751 4908 acydburn
                        SET folder_id = ' . PRIVMSGS_SENTBOX . '
752 4908 acydburn
                        WHERE folder_id = ' . PRIVMSGS_OUTBOX . '
753 6271 acydburn
                                AND ' . $db->sql_in_set('msg_id', array_keys($action_ary));
754 4908 acydburn
                $db->sql_query($sql);
755 4908 acydburn
        }
756 4908 acydburn
757 8229 acydburn
        // Update new/unread count
758 8229 acydburn
        update_pm_counts();
759 6342 acydburn
760 8229 acydburn
        // Now check how many messages got not moved...
761 8229 acydburn
        $sql = 'SELECT COUNT(msg_id) as num_messages
762 8229 acydburn
                FROM ' . PRIVMSGS_TO_TABLE . "
763 8229 acydburn
                WHERE user_id = $user_id
764 8229 acydburn
                        AND folder_id = " . PRIVMSGS_HOLD_BOX;
765 8229 acydburn
        $result = $db->sql_query($sql);
766 8229 acydburn
        $num_not_moved = (int) $db->sql_fetchfield('num_messages');
767 8229 acydburn
        $db->sql_freeresult($result);
768 4908 acydburn
769 8231 acydburn
        return array('not_moved' => $num_not_moved, 'removed' => $num_removed);
770 4908 acydburn
}
771 4908 acydburn
772 5114 acydburn
/**
773 5114 acydburn
* Move PM from one to another folder
774 5114 acydburn
*/
775 4997 acydburn
function move_pm($user_id, $message_limit, $move_msg_ids, $dest_folder, $cur_folder_id)
776 4908 acydburn
{
777 4908 acydburn
        global $db, $user;
778 6015 acydburn
        global $phpbb_root_path, $phpEx;
779 4908 acydburn
780 4997 acydburn
        $num_moved = 0;
781 4908 acydburn
782 4997 acydburn
        if (!is_array($move_msg_ids))
783 4997 acydburn
        {
784 4997 acydburn
                $move_msg_ids = array($move_msg_ids);
785 4997 acydburn
        }
786 4908 acydburn
787 8146 acydburn
        if (sizeof($move_msg_ids) && !in_array($dest_folder, array(PRIVMSGS_NO_BOX, PRIVMSGS_OUTBOX, PRIVMSGS_SENTBOX)) &&
788 7960 kellanved
                !in_array($cur_folder_id, array(PRIVMSGS_NO_BOX, PRIVMSGS_OUTBOX)) && $cur_folder_id != $dest_folder)
789 4908 acydburn
        {
790 4908 acydburn
                // We have to check the destination folder ;)
791 4908 acydburn
                if ($dest_folder != PRIVMSGS_INBOX)
792 4908 acydburn
                {
793 4908 acydburn
                        $sql = 'SELECT folder_id, folder_name, pm_count
794 4908 acydburn
                                FROM ' . PRIVMSGS_FOLDER_TABLE . "
795 4908 acydburn
                                WHERE folder_id = $dest_folder
796 4908 acydburn
                                        AND user_id = $user_id";
797 4908 acydburn
                        $result = $db->sql_query($sql);
798 6015 acydburn
                        $row = $db->sql_fetchrow($result);
799 6015 acydburn
                        $db->sql_freeresult($result);
800 4908 acydburn
801 6015 acydburn
                        if (!$row)
802 4908 acydburn
                        {
803 7242 acydburn
                                trigger_error('NOT_AUTHORISED');
804 4908 acydburn
                        }
805 4908 acydburn
806 8061 acydburn
                        if ($message_limit && $row['pm_count'] + sizeof($move_msg_ids) > $message_limit)
807 4908 acydburn
                        {
808 4908 acydburn
                                $message = sprintf($user->lang['NOT_ENOUGH_SPACE_FOLDER'], $row['folder_name']) . '<br /><br />';
809 6015 acydburn
                                $message .= sprintf($user->lang['CLICK_RETURN_FOLDER'], '<a href="' . append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;folder=' . $row['folder_id']) . '">', '</a>', $row['folder_name']);
810 4908 acydburn
                                trigger_error($message);
811 4908 acydburn
                        }
812 4908 acydburn
                }
813 4908 acydburn
                else
814 4908 acydburn
                {
815 4908 acydburn
                        $sql = 'SELECT COUNT(msg_id) as num_messages
816 4908 acydburn
                                FROM ' . PRIVMSGS_TO_TABLE . '
817 4908 acydburn
                                WHERE folder_id = ' . PRIVMSGS_INBOX . "
818 4908 acydburn
                                        AND user_id = $user_id";
819 4908 acydburn
                        $result = $db->sql_query($sql);
820 5699 acydburn
                        $num_messages = (int) $db->sql_fetchfield('num_messages');
821 5699 acydburn
                        $db->sql_freeresult($result);
822 5699 acydburn
823 8061 acydburn
                        if ($message_limit && $num_messages + sizeof($move_msg_ids) > $message_limit)
824 4908 acydburn
                        {
825 4908 acydburn
                                $message = sprintf($user->lang['NOT_ENOUGH_SPACE_FOLDER'], $user->lang['PM_INBOX']) . '<br /><br />';
826 6015 acydburn
                                $message .= sprintf($user->lang['CLICK_RETURN_FOLDER'], '<a href="' . append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;folder=inbox') . '">', '</a>', $user->lang['PM_INBOX']);
827 4908 acydburn
                                trigger_error($message);
828 4908 acydburn
                        }
829 4908 acydburn
                }
830 4908 acydburn
831 4908 acydburn
                $sql = 'UPDATE ' . PRIVMSGS_TO_TABLE . "
832 4908 acydburn
                        SET folder_id = $dest_folder
833 4908 acydburn
                        WHERE folder_id = $cur_folder_id
834 4908 acydburn
                                AND user_id = $user_id
835 6271 acydburn
                                AND " . $db->sql_in_set('msg_id', $move_msg_ids);
836 4908 acydburn
                $db->sql_query($sql);
837 4908 acydburn
                $num_moved = $db->sql_affectedrows();
838 4908 acydburn
839 4908 acydburn
                // Update pm counts
840 4908 acydburn
                if ($num_moved)
841 4908 acydburn
                {
842 4908 acydburn
                        if (!in_array($cur_folder_id, array(PRIVMSGS_INBOX, PRIVMSGS_OUTBOX, PRIVMSGS_SENTBOX)))
843 4908 acydburn
                        {
844 4908 acydburn
                                $sql = 'UPDATE ' . PRIVMSGS_FOLDER_TABLE . "
845 4908 acydburn
                                        SET pm_count = pm_count - $num_moved
846 4908 acydburn
                                        WHERE folder_id = $cur_folder_id
847 4908 acydburn
                                                AND user_id = $user_id";
848 4908 acydburn
                                $db->sql_query($sql);
849 4908 acydburn
                        }
850 4908 acydburn
851 4908 acydburn
                        if ($dest_folder != PRIVMSGS_INBOX)
852 4908 acydburn
                        {
853 4908 acydburn
                                $sql = 'UPDATE ' . PRIVMSGS_FOLDER_TABLE . "
854 4908 acydburn
                                        SET pm_count = pm_count + $num_moved
855 4908 acydburn
                                        WHERE folder_id = $dest_folder
856 4908 acydburn
                                                AND user_id = $user_id";
857 4908 acydburn
                                $db->sql_query($sql);
858 4908 acydburn
                        }
859 4908 acydburn
                }
860 8146 acydburn
        }
861 7960 kellanved
        else if (in_array($cur_folder_id, array(PRIVMSGS_NO_BOX, PRIVMSGS_OUTBOX)))
862 7960 kellanved
        {
863 7960 kellanved
                trigger_error('CANNOT_MOVE_SPECIAL');
864 4908 acydburn
        }
865 4908 acydburn
866 4908 acydburn
        return $num_moved;
867 4908 acydburn
}
868 4908 acydburn
869 5114 acydburn
/**
870 5114 acydburn
* Update unread message status
871 5114 acydburn
*/
872 4908 acydburn
function update_unread_status($unread, $msg_id, $user_id, $folder_id)
873 4908 acydburn
{
874 4908 acydburn
        if (!$unread)
875 4908 acydburn
        {
876 4908 acydburn
                return;
877 4908 acydburn
        }
878 4908 acydburn
879 6342 acydburn
        global $db, $user;
880 4908 acydburn
881 8146 acydburn
        $sql = 'UPDATE ' . PRIVMSGS_TO_TABLE . "
882 6177 acydburn
                SET pm_unread = 0
883 4908 acydburn
                WHERE msg_id = $msg_id
884 4908 acydburn
                        AND user_id = $user_id
885 4908 acydburn
                        AND folder_id = $folder_id";
886 4908 acydburn
        $db->sql_query($sql);
887 4908 acydburn
888 8146 acydburn
        $sql = 'UPDATE ' . USERS_TABLE . "
889 4908 acydburn
                SET user_unread_privmsg = user_unread_privmsg - 1
890 4908 acydburn
                WHERE user_id = $user_id";
891 4908 acydburn
        $db->sql_query($sql);
892 6342 acydburn
893 6342 acydburn
        if ($user->data['user_id'] == $user_id)
894 6342 acydburn
        {
895 6342 acydburn
                $user->data['user_unread_privmsg']--;
896 7909 acydburn
897 7909 acydburn
                // Try to cope with previous wrong conversions...
898 7909 acydburn
                if ($user->data['user_unread_privmsg'] < 0)
899 7909 acydburn
                {
900 8146 acydburn
                        $sql = 'UPDATE ' . USERS_TABLE . "
901 7909 acydburn
                                SET user_unread_privmsg = 0
902 7909 acydburn
                                WHERE user_id = $user_id";
903 7909 acydburn
                        $db->sql_query($sql);
904 7909 acydburn
905 7909 acydburn
                        $user->data['user_unread_privmsg'] = 0;
906 7909 acydburn
                }
907 6342 acydburn
        }
908 4908 acydburn
}
909 4908 acydburn
910 5880 acydburn
/**
911 5880 acydburn
* Handle all actions possible with marked messages
912 5880 acydburn
*/
913 4908 acydburn
function handle_mark_actions($user_id, $mark_action)
914 4908 acydburn
{
915 7685 naderman
        global $db, $user, $phpbb_root_path, $phpEx;
916 4908 acydburn
917 6816 acydburn
        $msg_ids                = request_var('marked_msg_id', array(0));
918 4908 acydburn
        $cur_folder_id        = request_var('cur_folder_id', PRIVMSGS_NO_BOX);
919 4908 acydburn
        $confirm                = (isset($_POST['confirm'])) ? true : false;
920 4908 acydburn
921 4908 acydburn
        if (!sizeof($msg_ids))
922 4908 acydburn
        {
923 5967 acydburn
                return false;
924 4908 acydburn
        }
925 4908 acydburn
926 4908 acydburn
        switch ($mark_action)
927 4908 acydburn
        {
928 4908 acydburn
                case 'mark_important':
929 4908 acydburn
930 4908 acydburn
                        $sql = 'UPDATE ' . PRIVMSGS_TO_TABLE . "
931 6905 acydburn
                                SET pm_marked = 1 - pm_marked
932 4908 acydburn
                                WHERE folder_id = $cur_folder_id
933 4908 acydburn
                                        AND user_id = $user_id
934 6271 acydburn
                                        AND " . $db->sql_in_set('msg_id', $msg_ids);
935 4908 acydburn
                        $db->sql_query($sql);
936 4908 acydburn
937 5765 acydburn
                break;
938 4908 acydburn
939 4908 acydburn
                case 'delete_marked':
940 4908 acydburn
941 10342 acydburn
                        global $auth;
942 10342 acydburn
943 10342 acydburn
                        if (!$auth->acl_get('u_pm_delete'))
944 10342 acydburn
                        {
945 10342 acydburn
                                trigger_error('NO_AUTH_DELETE_MESSAGE');
946 10342 acydburn
                        }
947 10342 acydburn
948 4908 acydburn
                        if (confirm_box(true))
949 4908 acydburn
                        {
950 4908 acydburn
                                delete_pm($user_id, $msg_ids, $cur_folder_id);
951 8350 acydburn
952 5139 acydburn
                                $success_msg = (sizeof($msg_ids) == 1) ? 'MESSAGE_DELETED' : 'MESSAGES_DELETED';
953 6015 acydburn
                                $redirect = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;folder=' . $cur_folder_id);
954 5139 acydburn
955 5139 acydburn
                                meta_refresh(3, $redirect);
956 5139 acydburn
                                trigger_error($user->lang[$success_msg] . '<br /><br />' . sprintf($user->lang['RETURN_FOLDER'], '<a href="' . $redirect . '">', '</a>'));
957 4908 acydburn
                        }
958 4908 acydburn
                        else
959 4908 acydburn
                        {
960 5201 acydburn
                                $s_hidden_fields = array(
961 8146 acydburn
                                        'cur_folder_id'        => $cur_folder_id,
962 5201 acydburn
                                        'mark_option'        => 'delete_marked',
963 5201 acydburn
                                        'submit_mark'        => true,
964 5201 acydburn
                                        'marked_msg_id'        => $msg_ids
965 5201 acydburn
                                );
966 5201 acydburn
967 5201 acydburn
                                confirm_box(false, 'DELETE_MARKED_PM', build_hidden_fields($s_hidden_fields));
968 4908 acydburn
                        }
969 4908 acydburn
970 5765 acydburn
                break;
971 4908 acydburn
972 4908 acydburn
                default:
973 4908 acydburn
                        return false;
974 4908 acydburn
        }
975 4908 acydburn
976 4908 acydburn
        return true;
977 4908 acydburn
}
978 4908 acydburn
979 5114 acydburn
/**
980 5114 acydburn
* Delete PM(s)
981 5114 acydburn
*/
982 4908 acydburn
function delete_pm($user_id, $msg_ids, $folder_id)
983 4908 acydburn
{
984 8890 acydburn
        global $db, $user, $phpbb_root_path, $phpEx;
985 4908 acydburn
986 4908 acydburn
        $user_id        = (int) $user_id;
987 4908 acydburn
        $folder_id        = (int) $folder_id;
988 4908 acydburn
989 4908 acydburn
        if (!$user_id)
990 4908 acydburn
        {
991 4908 acydburn
                return false;
992 4908 acydburn
        }
993 4908 acydburn
994 4908 acydburn
        if (!is_array($msg_ids))
995 4908 acydburn
        {
996 4908 acydburn
                if (!$msg_ids)
997 4908 acydburn
                {
998 4908 acydburn
                        return false;
999 4908 acydburn
                }
1000 4908 acydburn
                $msg_ids = array($msg_ids);
1001 4908 acydburn
        }
1002 4908 acydburn
1003 4908 acydburn
        if (!sizeof($msg_ids))
1004 4908 acydburn
        {
1005 4908 acydburn
                return false;
1006 4908 acydburn
        }
1007 4908 acydburn
1008 6650 acydburn
        // Get PM Information for later deleting
1009 6177 acydburn
        $sql = 'SELECT msg_id, pm_unread, pm_new
1010 4908 acydburn
                FROM ' . PRIVMSGS_TO_TABLE . '
1011 6271 acydburn
                WHERE ' . $db->sql_in_set('msg_id', array_map('intval', $msg_ids)) . "
1012 4908 acydburn
                        AND folder_id = $folder_id
1013 4908 acydburn
                        AND user_id = $user_id";
1014 4908 acydburn
        $result = $db->sql_query($sql);
1015 4908 acydburn
1016 4908 acydburn
        $delete_rows = array();
1017 4908 acydburn
        $num_unread = $num_new = $num_deleted = 0;
1018 4908 acydburn
        while ($row = $db->sql_fetchrow($result))
1019 4908 acydburn
        {
1020 6177 acydburn
                $num_unread += (int) $row['pm_unread'];
1021 6177 acydburn
                $num_new += (int) $row['pm_new'];
1022 4908 acydburn
1023 4908 acydburn
                $delete_rows[$row['msg_id']] = 1;
1024 4908 acydburn
        }
1025 4908 acydburn
        $db->sql_freeresult($result);
1026 4908 acydburn
        unset($msg_ids);
1027 4908 acydburn
1028 4908 acydburn
        if (!sizeof($delete_rows))
1029 4908 acydburn
        {
1030 4908 acydburn
                return false;
1031 4908 acydburn
        }
1032 4908 acydburn
1033 8890 acydburn
        $db->sql_transaction('begin');
1034 8890 acydburn
1035 4908 acydburn
        // if no one has read the message yet (meaning it is in users outbox)
1036 4908 acydburn
        // then mark the message as deleted...
1037 4908 acydburn
        if ($folder_id == PRIVMSGS_OUTBOX)
1038 4908 acydburn
        {
1039 4997 acydburn
                // Remove PM from Outbox
1040 4997 acydburn
                $sql = 'DELETE FROM ' . PRIVMSGS_TO_TABLE . "
1041 4997 acydburn
                        WHERE user_id = $user_id AND folder_id = " . PRIVMSGS_OUTBOX . '
1042 6271 acydburn
                                AND ' . $db->sql_in_set('msg_id', array_keys($delete_rows));
1043 4997 acydburn
                $db->sql_query($sql);
1044 4997 acydburn
1045 4997 acydburn
                // Update PM Information for safety
1046 4997 acydburn
                $sql = 'UPDATE ' . PRIVMSGS_TABLE . " SET message_text = ''
1047 6271 acydburn
                        WHERE " . $db->sql_in_set('msg_id', array_keys($delete_rows));
1048 4997 acydburn
                $db->sql_query($sql);
1049 4997 acydburn
1050 4997 acydburn
                // Set delete flag for those intended to receive the PM
1051 6650 acydburn
                // We do not remove the message actually, to retain some basic information (sent time for example)
1052 4908 acydburn
                $sql = 'UPDATE ' . PRIVMSGS_TO_TABLE . '
1053 6177 acydburn
                        SET pm_deleted = 1
1054 6271 acydburn
                        WHERE ' . $db->sql_in_set('msg_id', array_keys($delete_rows));
1055 4908 acydburn
                $db->sql_query($sql);
1056 4997 acydburn
1057 4908 acydburn
                $num_deleted = $db->sql_affectedrows();
1058 4908 acydburn
        }
1059 4908 acydburn
        else
1060 4908 acydburn
        {
1061 6650 acydburn
                // Delete private message data
1062 4908 acydburn
                $sql = 'DELETE FROM ' . PRIVMSGS_TO_TABLE . "
1063 4908 acydburn
                        WHERE user_id = $user_id
1064 4908 acydburn
                                AND folder_id = $folder_id
1065 6271 acydburn
                                AND " . $db->sql_in_set('msg_id', array_keys($delete_rows));
1066 4908 acydburn
                $db->sql_query($sql);
1067 4908 acydburn
                $num_deleted = $db->sql_affectedrows();
1068 4908 acydburn
        }
1069 4908 acydburn
1070 4908 acydburn
        // if folder id is user defined folder then decrease pm_count
1071 4908 acydburn
        if (!in_array($folder_id, array(PRIVMSGS_INBOX, PRIVMSGS_OUTBOX, PRIVMSGS_SENTBOX, PRIVMSGS_NO_BOX)))
1072 4908 acydburn
        {
1073 8146 acydburn
                $sql = 'UPDATE ' . PRIVMSGS_FOLDER_TABLE . "
1074 8146 acydburn
                        SET pm_count = pm_count - $num_deleted
1075 4908 acydburn
                        WHERE folder_id = $folder_id";
1076 4908 acydburn
                $db->sql_query($sql);
1077 4908 acydburn
        }
1078 4908 acydburn
1079 4908 acydburn
        // Update unread and new status field
1080 4908 acydburn
        if ($num_unread || $num_new)
1081 4908 acydburn
        {
1082 4908 acydburn
                $set_sql = ($num_unread) ? 'user_unread_privmsg = user_unread_privmsg - ' . $num_unread : '';
1083 6342 acydburn
1084 4908 acydburn
                if ($num_new)
1085 4908 acydburn
                {
1086 4908 acydburn
                        $set_sql .= ($set_sql != '') ? ', ' : '';
1087 4908 acydburn
                        $set_sql .= 'user_new_privmsg = user_new_privmsg - ' . $num_new;
1088 4908 acydburn
                }
1089 6015 acydburn
1090 4908 acydburn
                $db->sql_query('UPDATE ' . USERS_TABLE . " SET $set_sql WHERE user_id = $user_id");
1091 6342 acydburn
1092 6342 acydburn
                $user->data['user_new_privmsg'] -= $num_new;
1093 6342 acydburn
                $user->data['user_unread_privmsg'] -= $num_unread;
1094 4908 acydburn
        }
1095 8350 acydburn
1096 8350 acydburn
        // Now we have to check which messages we can delete completely
1097 8146 acydburn
        $sql = 'SELECT msg_id
1098 4908 acydburn
                FROM ' . PRIVMSGS_TO_TABLE . '
1099 6271 acydburn
                WHERE ' . $db->sql_in_set('msg_id', array_keys($delete_rows));
1100 4908 acydburn
        $result = $db->sql_query($sql);
1101 4908 acydburn
1102 4908 acydburn
        while ($row = $db->sql_fetchrow($result))
1103 4908 acydburn
        {
1104 4908 acydburn
                unset($delete_rows[$row['msg_id']]);
1105 4908 acydburn
        }
1106 4908 acydburn
        $db->sql_freeresult($result);
1107 4908 acydburn
1108 6271 acydburn
        $delete_ids = array_keys($delete_rows);
1109 4908 acydburn
1110 6271 acydburn
        if (sizeof($delete_ids))
1111 4908 acydburn
        {
1112 8890 acydburn
                // Check if there are any attachments we need to remove
1113 8890 acydburn
                if (!function_exists('delete_attachments'))
1114 8890 acydburn
                {
1115 8890 acydburn
                        include($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
1116 8890 acydburn
                }
1117 8890 acydburn
1118 8890 acydburn
                delete_attachments('message', $delete_ids, false);
1119 8890 acydburn
1120 4908 acydburn
                $sql = 'DELETE FROM ' . PRIVMSGS_TABLE . '
1121 6271 acydburn
                        WHERE ' . $db->sql_in_set('msg_id', $delete_ids);
1122 4908 acydburn
                $db->sql_query($sql);
1123 4908 acydburn
        }
1124 5967 acydburn
1125 8890 acydburn
        $db->sql_transaction('commit');
1126 8890 acydburn
1127 5967 acydburn
        return true;
1128 4908 acydburn
}
1129 4908 acydburn
1130 5114 acydburn
/**
1131 5114 acydburn
* Rebuild message header
1132 5114 acydburn
*/
1133 4908 acydburn
function rebuild_header($check_ary)
1134 4908 acydburn
{
1135 4908 acydburn
        global $db;
1136 4908 acydburn
1137 4908 acydburn
        $address = array();
1138 4908 acydburn
1139 4908 acydburn
        foreach ($check_ary as $check_type => $address_field)
1140 4908 acydburn
        {
1141 4908 acydburn
                // Split Addresses into users and groups
1142 4908 acydburn
                preg_match_all('/:?(u|g)_([0-9]+):?/', $address_field, $match);
1143 4908 acydburn
1144 4908 acydburn
                $u = $g = array();
1145 4908 acydburn
                foreach ($match[1] as $id => $type)
1146 4908 acydburn
                {
1147 4908 acydburn
                        ${$type}[] = (int) $match[2][$id];
1148 4908 acydburn
                }
1149 6015 acydburn
1150 5315 acydburn
                $_types = array('u', 'g');
1151 5315 acydburn
                foreach ($_types as $type)
1152 4908 acydburn
                {
1153 4908 acydburn
                        if (sizeof($$type))
1154 4908 acydburn
                        {
1155 4908 acydburn
                                foreach ($$type as $id)
1156 4908 acydburn
                                {
1157 4908 acydburn
                                        $address[$type][$id] = $check_type;
1158 4908 acydburn
                                }
1159 4908 acydburn
                        }
1160 4908 acydburn
                }
1161 4908 acydburn
        }
1162 4908 acydburn
1163 4908 acydburn
        return $address;
1164 4908 acydburn
}
1165 4908 acydburn
1166 5114 acydburn
/**
1167 6650 acydburn
* Print out/assign recipient information
1168 5114 acydburn
*/
1169 4984 acydburn
function write_pm_addresses($check_ary, $author_id, $plaintext = false)
1170 4908 acydburn
{
1171 6015 acydburn
        global $db, $user, $template, $phpbb_root_path, $phpEx;
1172 4908 acydburn
1173 4908 acydburn
        $addresses = array();
1174 6015 acydburn
1175 4908 acydburn
        foreach ($check_ary as $check_type => $address_field)
1176 4908 acydburn
        {
1177 5880 acydburn
                if (!is_array($address_field))
1178 5880 acydburn
                {
1179 5880 acydburn
                        // Split Addresses into users and groups
1180 5880 acydburn
                        preg_match_all('/:?(u|g)_([0-9]+):?/', $address_field, $match);
1181 4908 acydburn
1182 5880 acydburn
                        $u = $g = array();
1183 5880 acydburn
                        foreach ($match[1] as $id => $type)
1184 5880 acydburn
                        {
1185 5880 acydburn
                                ${$type}[] = (int) $match[2][$id];
1186 5880 acydburn
                        }
1187 5880 acydburn
                }
1188 5880 acydburn
                else
1189 4908 acydburn
                {
1190 5880 acydburn
                        $u = $address_field['u'];
1191 5880 acydburn
                        $g = $address_field['g'];
1192 4908 acydburn
                }
1193 4908 acydburn
1194 4908 acydburn
                $address = array();
1195 4908 acydburn
                if (sizeof($u))
1196 4908 acydburn
                {
1197 8146 acydburn
                        $sql = 'SELECT user_id, username, user_colour
1198 4908 acydburn
                                FROM ' . USERS_TABLE . '
1199 9918 acydburn
                                WHERE ' . $db->sql_in_set('user_id', $u);
1200 4908 acydburn
                        $result = $db->sql_query($sql);
1201 4908 acydburn
1202 4908 acydburn
                        while ($row = $db->sql_fetchrow($result))
1203 4908 acydburn
                        {
1204 4984 acydburn
                                if ($check_type == 'to' || $author_id == $user->data['user_id'] || $row['user_id'] == $user->data['user_id'])
1205 4908 acydburn
                                {
1206 4908 acydburn
                                        if ($plaintext)
1207 4908 acydburn
                                        {
1208 4908 acydburn
                                                $address[] = $row['username'];
1209 4908 acydburn
                                        }
1210 4908 acydburn
                                        else
1211 4908 acydburn
                                        {
1212 4908 acydburn
                                                $address['user'][$row['user_id']] = array('name' => $row['username'], 'colour' => $row['user_colour']);
1213 4908 acydburn
                                        }
1214 4908 acydburn
                                }
1215 4908 acydburn
                        }
1216 4908 acydburn
                        $db->sql_freeresult($result);
1217 4908 acydburn
                }
1218 4908 acydburn
1219 4908 acydburn
                if (sizeof($g))
1220 4908 acydburn
                {
1221 4908 acydburn
                        if ($plaintext)
1222 4908 acydburn
                        {
1223 5765 acydburn
                                $sql = 'SELECT group_name, group_type
1224 8146 acydburn
                                        FROM ' . GROUPS_TABLE . '
1225 6271 acydburn
                                                WHERE ' . $db->sql_in_set('group_id', $g);
1226 4908 acydburn
                                $result = $db->sql_query($sql);
1227 8350 acydburn
1228 4908 acydburn
                                while ($row = $db->sql_fetchrow($result))
1229 4908 acydburn
                                {
1230 4984 acydburn
                                        if ($check_type == 'to' || $author_id == $user->data['user_id'] || $row['user_id'] == $user->data['user_id'])
1231 4908 acydburn
                                        {
1232 5765 acydburn
                                                $address[] = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'];
1233 4908 acydburn
                                        }
1234 4908 acydburn
                                }
1235 4908 acydburn
                                $db->sql_freeresult($result);
1236 4908 acydburn
                        }
1237 4908 acydburn
                        else
1238 4908 acydburn
                        {
1239 5880 acydburn
                                $sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_type, ug.user_id
1240 4908 acydburn
                                        FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug
1241 6271 acydburn
                                                WHERE ' . $db->sql_in_set('g.group_id', $g) . '
1242 4908 acydburn
                                                AND g.group_id = ug.group_id
1243 4908 acydburn
                                                AND ug.user_pending = 0';
1244 4908 acydburn
                                $result = $db->sql_query($sql);
1245 8350 acydburn
1246 4908 acydburn
                                while ($row = $db->sql_fetchrow($result))
1247 4908 acydburn
                                {
1248 4908 acydburn
                                        if (!isset($address['group'][$row['group_id']]))
1249 4908 acydburn
                                        {
1250 4984 acydburn
                                                if ($check_type == 'to' || $author_id == $user->data['user_id'] || $row['user_id'] == $user->data['user_id'])
1251 4908 acydburn
                                                {
1252 5880 acydburn
                                                        $row['group_name'] = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'];
1253 4908 acydburn
                                                        $address['group'][$row['group_id']] = array('name' => $row['group_name'], 'colour' => $row['group_colour']);
1254 4908 acydburn
                                                }
1255 4908 acydburn
                                        }
1256 6015 acydburn
1257 4908 acydburn
                                        if (isset($address['user'][$row['user_id']]))
1258 4908 acydburn
                                        {
1259 4908 acydburn
                                                $address['user'][$row['user_id']]['in_group'] = $row['group_id'];
1260 4908 acydburn
                                        }
1261 4908 acydburn
                                }
1262 4908 acydburn
                                $db->sql_freeresult($result);
1263 4908 acydburn
                        }
1264 4908 acydburn
                }
1265 4908 acydburn
1266 4908 acydburn
                if (sizeof($address) && !$plaintext)
1267 4908 acydburn
                {
1268 4908 acydburn
                        $template->assign_var('S_' . strtoupper($check_type) . '_RECIPIENT', true);
1269 4908 acydburn
1270 4908 acydburn
                        foreach ($address as $type => $adr_ary)
1271 4908 acydburn
                        {
1272 4908 acydburn
                                foreach ($adr_ary as $id => $row)
1273 4908 acydburn
                                {
1274 6628 acydburn
                                        $tpl_ary = array(
1275 6628 acydburn
                                                'IS_GROUP'        => ($type == 'group') ? true : false,
1276 6628 acydburn
                                                'IS_USER'        => ($type == 'user') ? true : false,
1277 6628 acydburn
                                                'UG_ID'                => $id,
1278 4908 acydburn
                                                'NAME'                => $row['name'],
1279 6628 acydburn
                                                'COLOUR'        => ($row['colour']) ? '#' . $row['colour'] : '',
1280 6628 acydburn
                                                'TYPE'                => $type,
1281 4908 acydburn
                                        );
1282 6628 acydburn
1283 6628 acydburn
                                        if ($type == 'user')
1284 6628 acydburn
                                        {
1285 6628 acydburn
                                                $tpl_ary = array_merge($tpl_ary, array(
1286 6628 acydburn
                                                        'U_VIEW'                => get_username_string('profile', $id, $row['name'], $row['colour']),
1287 6628 acydburn
                                                        'NAME_FULL'                => get_username_string('full', $id, $row['name'], $row['colour']),
1288 6628 acydburn
                                                ));
1289 6628 acydburn
                                        }
1290 6628 acydburn
                                        else
1291 6628 acydburn
                                        {
1292 6628 acydburn
                                                $tpl_ary = array_merge($tpl_ary, array(
1293 6628 acydburn
                                                        'U_VIEW'                => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;g=' . $id),
1294 6628 acydburn
                                                ));
1295 6628 acydburn
                                        }
1296 6628 acydburn
1297 6628 acydburn
                                        $template->assign_block_vars($check_type . '_recipient', $tpl_ary);
1298 4908 acydburn
                                }
1299 4908 acydburn
                        }
1300 4908 acydburn
                }
1301 4908 acydburn
1302 4908 acydburn
                $addresses[$check_type] = $address;
1303 4908 acydburn
        }
1304 4908 acydburn
1305 4908 acydburn
        return $addresses;
1306 4908 acydburn
}
1307 4908 acydburn
1308 5114 acydburn
/**
1309 5114 acydburn
* Get folder status
1310 5114 acydburn
*/
1311 4908 acydburn
function get_folder_status($folder_id, $folder)
1312 4908 acydburn
{
1313 4908 acydburn
        global $db, $user, $config;
1314 4908 acydburn
1315 4978 acydburn
        if (isset($folder[$folder_id]))
1316 4978 acydburn
        {
1317 4978 acydburn
                $folder = $folder[$folder_id];
1318 4978 acydburn
        }
1319 4978 acydburn
        else
1320 4978 acydburn
        {
1321 4978 acydburn
                return false;
1322 4978 acydburn
        }
1323 4908 acydburn
1324 4908 acydburn
        $return = array(
1325 8146 acydburn
                'folder_name'        => $folder['folder_name'],
1326 4908 acydburn
                'cur'                        => $folder['num_messages'],
1327 8061 acydburn
                'remaining'                => ($user->data['message_limit']) ? $user->data['message_limit'] - $folder['num_messages'] : 0,
1328 5139 acydburn
                'max'                        => $user->data['message_limit'],
1329 8061 acydburn
                'percent'                => ($user->data['message_limit']) ? (($user->data['message_limit'] > 0) ? round(($folder['num_messages'] / $user->data['message_limit']) * 100) : 100) : 0,
1330 4908 acydburn
        );
1331 4908 acydburn
1332 11603 git-gate
        $return['message']        = $user->lang('FOLDER_STATUS_MSG', (int) $return['max'], $return['cur'], $return['percent']);
1333 6017 acydburn
1334 4908 acydburn
        return $return;
1335 4908 acydburn
}
1336 4908 acydburn
1337 4978 acydburn
//
1338 4978 acydburn
// COMPOSE MESSAGES
1339 4978 acydburn
//
1340 4978 acydburn
1341 5114 acydburn
/**
1342 5114 acydburn
* Submit PM
1343 5114 acydburn
*/
1344 6894 acydburn
function submit_pm($mode, $subject, &$data, $put_in_outbox = true)
1345 4978 acydburn
{
1346 6702 acydburn
        global $db, $auth, $config, $phpEx, $template, $user, $phpbb_root_path;
1347 4978 acydburn
1348 6015 acydburn
        // We do not handle erasing pms here
1349 4978 acydburn
        if ($mode == 'delete')
1350 4978 acydburn
        {
1351 5967 acydburn
                return false;
1352 4978 acydburn
        }
1353 4980 acydburn
1354 4978 acydburn
        $current_time = time();
1355 4978 acydburn
1356 6650 acydburn
        // Collect some basic information about which tables and which rows to update/insert
1357 4978 acydburn
        $sql_data = array();
1358 4978 acydburn
        $root_level = 0;
1359 4978 acydburn
1360 6650 acydburn
        // Recipient Information
1361 4978 acydburn
        $recipients = $to = $bcc = array();
1362 4978 acydburn
1363 4978 acydburn
        if ($mode != 'edit')
1364 4978 acydburn
        {
1365 4978 acydburn
                // Build Recipient List
1366 4978 acydburn
                // u|g => array($user_id => 'to'|'bcc')
1367 5315 acydburn
                $_types = array('u', 'g');
1368 5315 acydburn
                foreach ($_types as $ug_type)
1369 4978 acydburn
                {
1370 4979 acydburn
                        if (isset($data['address_list'][$ug_type]) && sizeof($data['address_list'][$ug_type]))
1371 4978 acydburn
                        {
1372 4978 acydburn
                                foreach ($data['address_list'][$ug_type] as $id => $field)
1373 4978 acydburn
                                {
1374 5721 acydburn
                                        $id = (int) $id;
1375 5721 acydburn
1376 5721 acydburn
                                        // Do not rely on the address list being "valid"
1377 6342 acydburn
                                        if (!$id || ($ug_type == 'u' && $id == ANONYMOUS))
1378 5721 acydburn
                                        {
1379 5721 acydburn
                                                continue;
1380 5721 acydburn
                                        }
1381 5721 acydburn
1382 4978 acydburn
                                        $field = ($field == 'to') ? 'to' : 'bcc';
1383 4978 acydburn
                                        if ($ug_type == 'u')
1384 4978 acydburn
                                        {
1385 4978 acydburn
                                                $recipients[$id] = $field;
1386 4978 acydburn
                                        }
1387 5721 acydburn
                                        ${$field}[] = $ug_type . '_' . $id;
1388 4978 acydburn
                                }
1389 4978 acydburn
                        }
1390 4978 acydburn
                }
1391 4978 acydburn
1392 4979 acydburn
                if (isset($data['address_list']['g']) && sizeof($data['address_list']['g']))
1393 4978 acydburn
                {
1394 8964 acydburn
                        // We need to check the PM status of group members (do they want to receive PM's?)
1395 8964 acydburn
                        // Only check if not a moderator or admin, since they are allowed to override this user setting
1396 8964 acydburn
                        $sql_allow_pm = (!$auth->acl_gets('a_', 'm_') && !$auth->acl_getf_global('m_')) ? ' AND u.user_allow_pm = 1' : '';
1397 8964 acydburn
1398 8146 acydburn
                        $sql = 'SELECT u.user_type, ug.group_id, ug.user_id
1399 8146 acydburn
                                FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . ' ug
1400 8033 acydburn
                                WHERE ' . $db->sql_in_set('ug.group_id', array_keys($data['address_list']['g'])) . '
1401 8033 acydburn
                                        AND ug.user_pending = 0
1402 8146 acydburn
                                        AND u.user_id = ug.user_id
1403 9398 acydburn
                                        AND u.user_type IN (' . USER_NORMAL . ', ' . USER_FOUNDER . ')' .
1404 8964 acydburn
                                        $sql_allow_pm;
1405 4978 acydburn
                        $result = $db->sql_query($sql);
1406 8350 acydburn
1407 4978 acydburn
                        while ($row = $db->sql_fetchrow($result))
1408 4978 acydburn
                        {
1409 9876 acydburn
                                // Additionally, do not include the sender if he is in the group he wants to send to. ;)
1410 9876 acydburn
                                if ($row['user_id'] === $user->data['user_id'])
1411 9876 acydburn
                                {
1412 9876 acydburn
                                        continue;
1413 9876 acydburn
                                }
1414 9876 acydburn
1415 4978 acydburn
                                $field = ($data['address_list']['g'][$row['group_id']] == 'to') ? 'to' : 'bcc';
1416 4978 acydburn
                                $recipients[$row['user_id']] = $field;
1417 4978 acydburn
                        }
1418 4978 acydburn
                        $db->sql_freeresult($result);
1419 4978 acydburn
                }
1420 4978 acydburn
1421 4978 acydburn
                if (!sizeof($recipients))
1422 4978 acydburn
                {
1423 4978 acydburn
                        trigger_error('NO_RECIPIENT');
1424 4978 acydburn
                }
1425 4978 acydburn
        }
1426 4978 acydburn
1427 10751 git-gate
        // First of all make sure the subject are having the correct length.
1428 10751 git-gate
        $subject = truncate_string($subject);
1429 10751 git-gate
1430 7469 acydburn
        $db->sql_transaction('begin');
1431 7469 acydburn
1432 4978 acydburn
        $sql = '';
1433 6015 acydburn
1434 4978 acydburn
        switch ($mode)
1435 4978 acydburn
        {
1436 4978 acydburn
                case 'reply':
1437 4978 acydburn
                case 'quote':
1438 8146 acydburn
                        $root_level = ($data['reply_from_root_level']) ? $data['reply_from_root_level'] : $data['reply_from_msg_id'];
1439 4978 acydburn
1440 4978 acydburn
                        // Set message_replied switch for this user
1441 4978 acydburn
                        $sql = 'UPDATE ' . PRIVMSGS_TO_TABLE . '
1442 6177 acydburn
                                SET pm_replied = 1
1443 5241 acydburn
                                WHERE user_id = ' . $data['from_user_id'] . '
1444 4978 acydburn
                                        AND msg_id = ' . $data['reply_from_msg_id'];
1445 4978 acydburn
1446 6015 acydburn
                // no break
1447 6015 acydburn
1448 4978 acydburn
                case 'forward':
1449 4978 acydburn
                case 'post':
1450 5241 acydburn
                case 'quotepost':
1451 4978 acydburn
                        $sql_data = array(
1452 4978 acydburn
                                'root_level'                => $root_level,
1453 5241 acydburn
                                'author_id'                        => $data['from_user_id'],
1454 8146 acydburn
                                'icon_id'                        => $data['icon_id'],
1455 6015 acydburn
                                'author_ip'                        => $data['from_user_ip'],
1456 4978 acydburn
                                'message_time'                => $current_time,
1457 6015 acydburn
                                'enable_bbcode'                => $data['enable_bbcode'],
1458 6015 acydburn
                                'enable_smilies'        => $data['enable_smilies'],
1459 6015 acydburn
                                'enable_magic_url'        => $data['enable_urls'],
1460 6015 acydburn
                                'enable_sig'                => $data['enable_sig'],
1461 4978 acydburn
                                'message_subject'        => $subject,
1462 6015 acydburn
                                'message_text'                => $data['message'],
1463 6414 acydburn
                                'message_attachment'=> (!empty($data['attachment_data'])) ? 1 : 0,
1464 4978 acydburn
                                'bbcode_bitfield'        => $data['bbcode_bitfield'],
1465 4978 acydburn
                                'bbcode_uid'                => $data['bbcode_uid'],
1466 4978 acydburn
                                'to_address'                => implode(':', $to),
1467 9814 naderman
                                'bcc_address'                => implode(':', $bcc),
1468 9814 naderman
                                'message_reported'        => 0,
1469 4978 acydburn
                        );
1470 6015 acydburn
                break;
1471 4978 acydburn
1472 4978 acydburn
                case 'edit':
1473 4978 acydburn
                        $sql_data = array(
1474 4978 acydburn
                                'icon_id'                        => $data['icon_id'],
1475 4978 acydburn
                                'message_edit_time'        => $current_time,
1476 6015 acydburn
                                'enable_bbcode'                => $data['enable_bbcode'],
1477 6015 acydburn
                                'enable_smilies'        => $data['enable_smilies'],
1478 6015 acydburn
                                'enable_magic_url'        => $data['enable_urls'],
1479 6015 acydburn
                                'enable_sig'                => $data['enable_sig'],
1480 4978 acydburn
                                'message_subject'        => $subject,
1481 6015 acydburn
                                'message_text'                => $data['message'],
1482 6414 acydburn
                                'message_attachment'=> (!empty($data['attachment_data'])) ? 1 : 0,
1483 4978 acydburn
                                'bbcode_bitfield'        => $data['bbcode_bitfield'],
1484 4978 acydburn
                                'bbcode_uid'                => $data['bbcode_uid']
1485 4978 acydburn
                        );
1486 6015 acydburn
                break;
1487 4978 acydburn
        }
1488 4978 acydburn
1489 4978 acydburn
        if (sizeof($sql_data))
1490 4978 acydburn
        {
1491 6209 davidmj
                $query = '';
1492 6209 davidmj
1493 5241 acydburn
                if ($mode == 'post' || $mode == 'reply' || $mode == 'quote' || $mode == 'quotepost' || $mode == 'forward')
1494 4978 acydburn
                {
1495 6238 davidmj
                        $db->sql_query('INSERT INTO ' . PRIVMSGS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_data));
1496 4978 acydburn
                        $data['msg_id'] = $db->sql_nextid();
1497 4978 acydburn
                }
1498 4978 acydburn
                else if ($mode == 'edit')
1499 4978 acydburn
                {
1500 8146 acydburn
                        $sql = 'UPDATE ' . PRIVMSGS_TABLE . '
1501 8146 acydburn
                                SET message_edit_count = message_edit_count + 1, ' . $db->sql_build_array('UPDATE', $sql_data) . '
1502 4978 acydburn
                                WHERE msg_id = ' . $data['msg_id'];
1503 4978 acydburn
                        $db->sql_query($sql);
1504 4978 acydburn
                }
1505 4978 acydburn
        }
1506 6015 acydburn
1507 4978 acydburn
        if ($mode != 'edit')
1508 4978 acydburn
        {
1509 4978 acydburn
                if ($sql)
1510 4978 acydburn
                {
1511 4978 acydburn
                        $db->sql_query($sql);
1512 4978 acydburn
                }
1513 4978 acydburn
                unset($sql);
1514 4978 acydburn
1515 5241 acydburn
                $sql_ary = array();
1516 4978 acydburn
                foreach ($recipients as $user_id => $type)
1517 4978 acydburn
                {
1518 5241 acydburn
                        $sql_ary[] = array(
1519 6177 acydburn
                                'msg_id'                => (int) $data['msg_id'],
1520 6177 acydburn
                                'user_id'                => (int) $user_id,
1521 6177 acydburn
                                'author_id'                => (int) $data['from_user_id'],
1522 6177 acydburn
                                'folder_id'                => PRIVMSGS_NO_BOX,
1523 6177 acydburn
                                'pm_new'                => 1,
1524 6177 acydburn
                                'pm_unread'                => 1,
1525 6177 acydburn
                                'pm_forwarded'        => ($mode == 'forward') ? 1 : 0
1526 4978 acydburn
                        );
1527 4978 acydburn
                }
1528 4978 acydburn
1529 6497 acydburn
                $db->sql_multi_insert(PRIVMSGS_TO_TABLE, $sql_ary);
1530 5241 acydburn
1531 8146 acydburn
                $sql = 'UPDATE ' . USERS_TABLE . '
1532 5139 acydburn
                        SET user_new_privmsg = user_new_privmsg + 1, user_unread_privmsg = user_unread_privmsg + 1, user_last_privmsg = ' . time() . '
1533 6271 acydburn
                        WHERE ' . $db->sql_in_set('user_id', array_keys($recipients));
1534 4978 acydburn
                $db->sql_query($sql);
1535 4978 acydburn
1536 4978 acydburn
                // Put PM into outbox
1537 4978 acydburn
                if ($put_in_outbox)
1538 4978 acydburn
                {
1539 4978 acydburn
                        $db->sql_query('INSERT INTO ' . PRIVMSGS_TO_TABLE . ' ' . $db->sql_build_array('INSERT', array(
1540 6177 acydburn
                                'msg_id'                => (int) $data['msg_id'],
1541 6177 acydburn
                                'user_id'                => (int) $data['from_user_id'],
1542 6177 acydburn
                                'author_id'                => (int) $data['from_user_id'],
1543 6177 acydburn
                                'folder_id'                => PRIVMSGS_OUTBOX,
1544 6177 acydburn
                                'pm_new'                => 0,
1545 6177 acydburn
                                'pm_unread'                => 0,
1546 6177 acydburn
                                'pm_forwarded'        => ($mode == 'forward') ? 1 : 0))
1547 4978 acydburn
                        );
1548 4978 acydburn
                }
1549 4978 acydburn
        }
1550 4978 acydburn
1551 4978 acydburn
        // Set user last post time
1552 5241 acydburn
        if ($mode == 'reply' || $mode == 'quote' || $mode == 'quotepost' || $mode == 'forward' || $mode == 'post')
1553 4978 acydburn
        {
1554 4978 acydburn
                $sql = 'UPDATE ' . USERS_TABLE . "
1555 4978 acydburn
                        SET user_lastpost_time = $current_time
1556 5241 acydburn
                        WHERE user_id = " . $data['from_user_id'];
1557 4978 acydburn
                $db->sql_query($sql);
1558 4978 acydburn
        }
1559 4978 acydburn
1560 4978 acydburn
        // Submit Attachments
1561 5931 acydburn
        if (!empty($data['attachment_data']) && $data['msg_id'] && in_array($mode, array('post', 'reply', 'quote', 'quotepost', 'edit', 'forward')))
1562 4978 acydburn
        {
1563 4978 acydburn
                $space_taken = $files_added = 0;
1564 6364 acydburn
                $orphan_rows = array();
1565 4978 acydburn
1566 4978 acydburn
                foreach ($data['attachment_data'] as $pos => $attach_row)
1567 4978 acydburn
                {
1568 6364 acydburn
                        $orphan_rows[(int) $attach_row['attach_id']] = array();
1569 6364 acydburn
                }
1570 6364 acydburn
1571 6364 acydburn
                if (sizeof($orphan_rows))
1572 6364 acydburn
                {
1573 6364 acydburn
                        $sql = 'SELECT attach_id, filesize, physical_filename
1574 6364 acydburn
                                FROM ' . ATTACHMENTS_TABLE . '
1575 6364 acydburn
                                WHERE ' . $db->sql_in_set('attach_id', array_keys($orphan_rows)) . '
1576 6364 acydburn
                                        AND in_message = 1
1577 6364 acydburn
                                        AND is_orphan = 1
1578 6364 acydburn
                                        AND poster_id = ' . $user->data['user_id'];
1579 6364 acydburn
                        $result = $db->sql_query($sql);
1580 6364 acydburn
1581 6364 acydburn
                        $orphan_rows = array();
1582 6364 acydburn
                        while ($row = $db->sql_fetchrow($result))
1583 4978 acydburn
                        {
1584 6364 acydburn
                                $orphan_rows[$row['attach_id']] = $row;
1585 6364 acydburn
                        }
1586 6364 acydburn
                        $db->sql_freeresult($result);
1587 6364 acydburn
                }
1588 6364 acydburn
1589 6364 acydburn
                foreach ($data['attachment_data'] as $pos => $attach_row)
1590 6364 acydburn
                {
1591 8350 acydburn
                        if ($attach_row['is_orphan'] && !isset($orphan_rows[$attach_row['attach_id']]))
1592 6364 acydburn
                        {
1593 6364 acydburn
                                continue;
1594 6364 acydburn
                        }
1595 6364 acydburn
1596 6364 acydburn
                        if (!$attach_row['is_orphan'])
1597 6364 acydburn
                        {
1598 4978 acydburn
                                // update entry in db if attachment already stored in db and filespace
1599 6364 acydburn
                                $sql = 'UPDATE ' . ATTACHMENTS_TABLE . "
1600 6364 acydburn
                                        SET attach_comment = '" . $db->sql_escape($attach_row['attach_comment']) . "'
1601 6364 acydburn
                                        WHERE attach_id = " . (int) $attach_row['attach_id'] . '
1602 6364 acydburn
                                                AND is_orphan = 0';
1603 4978 acydburn
                                $db->sql_query($sql);
1604 4978 acydburn
                        }
1605 4978 acydburn
                        else
1606 4978 acydburn
                        {
1607 6364 acydburn
                                // insert attachment into db
1608 9905 acydburn
                                if (!@file_exists($phpbb_root_path . $config['upload_path'] . '/' . utf8_basename($orphan_rows[$attach_row['attach_id']]['physical_filename'])))
1609 6364 acydburn
                                {
1610 6364 acydburn
                                        continue;
1611 6364 acydburn
                                }
1612 6364 acydburn
1613 6364 acydburn
                                $space_taken += $orphan_rows[$attach_row['attach_id']]['filesize'];
1614 6364 acydburn
                                $files_added++;
1615 6364 acydburn
1616 4978 acydburn
                                $attach_sql = array(
1617 4978 acydburn
                                        'post_msg_id'                => $data['msg_id'],
1618 4978 acydburn
                                        'topic_id'                        => 0,
1619 6364 acydburn
                                        'is_orphan'                        => 0,
1620 5241 acydburn
                                        'poster_id'                        => $data['from_user_id'],
1621 6177 acydburn
                                        'attach_comment'        => $attach_row['attach_comment'],
1622 4978 acydburn
                                );
1623 4978 acydburn
1624 6364 acydburn
                                $sql = 'UPDATE ' . ATTACHMENTS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $attach_sql) . '
1625 6364 acydburn
                                        WHERE attach_id = ' . $attach_row['attach_id'] . '
1626 6364 acydburn
                                                AND is_orphan = 1
1627 6364 acydburn
                                                AND poster_id = ' . $user->data['user_id'];
1628 4978 acydburn
                                $db->sql_query($sql);
1629 4978 acydburn
                        }
1630 4978 acydburn
                }
1631 6015 acydburn
1632 4978 acydburn
                if ($space_taken && $files_added)
1633 4978 acydburn
                {
1634 9398 acydburn
                        set_config_count('upload_dir_size', $space_taken, true);
1635 9398 acydburn
                        set_config_count('num_files', $files_added, true);
1636 4978 acydburn
                }
1637 4978 acydburn
        }
1638 4978 acydburn
1639 4978 acydburn
        // Delete draft if post was loaded...
1640 4978 acydburn
        $draft_id = request_var('draft_loaded', 0);
1641 4978 acydburn
        if ($draft_id)
1642 4978 acydburn
        {
1643 8146 acydburn
                $sql = 'DELETE FROM ' . DRAFTS_TABLE . "
1644 8146 acydburn
                        WHERE draft_id = $draft_id
1645 5241 acydburn
                                AND user_id = " . $data['from_user_id'];
1646 4978 acydburn
                $db->sql_query($sql);
1647 4978 acydburn
        }
1648 4978 acydburn
1649 7469 acydburn
        $db->sql_transaction('commit');
1650 7469 acydburn
1651 4978 acydburn
        // Send Notifications
1652 4978 acydburn
        if ($mode != 'edit')
1653 4978 acydburn
        {
1654 11528 git-gate
                pm_notification($mode, $data['from_username'], $recipients, $subject, $data['message'], $data['msg_id']);
1655 4978 acydburn
        }
1656 4978 acydburn
1657 4978 acydburn
        return $data['msg_id'];
1658 4978 acydburn
}
1659 4978 acydburn
1660 5114 acydburn
/**
1661 5114 acydburn
* PM Notification
1662 5114 acydburn
*/
1663 11528 git-gate
function pm_notification($mode, $author, $recipients, $subject, $message, $msg_id)
1664 4978 acydburn
{
1665 4978 acydburn
        global $db, $user, $config, $phpbb_root_path, $phpEx, $auth;
1666 4978 acydburn
1667 4978 acydburn
        $subject = censor_text($subject);
1668 6015 acydburn
1669 6104 acydburn
        unset($recipients[ANONYMOUS], $recipients[$user->data['user_id']]);
1670 6104 acydburn
1671 6114 acydburn
        if (!sizeof($recipients))
1672 6114 acydburn
        {
1673 6114 acydburn
                return;
1674 6114 acydburn
        }
1675 6114 acydburn
1676 4978 acydburn
        // Get banned User ID's
1677 8146 acydburn
        $sql = 'SELECT ban_userid
1678 6104 acydburn
                FROM ' . BANLIST_TABLE . '
1679 6271 acydburn
                WHERE ' . $db->sql_in_set('ban_userid', array_map('intval', array_keys($recipients))) . '
1680 6104 acydburn
                        AND ban_exclude = 0';
1681 4978 acydburn
        $result = $db->sql_query($sql);
1682 4978 acydburn
1683 4978 acydburn
        while ($row = $db->sql_fetchrow($result))
1684 4978 acydburn
        {
1685 6104 acydburn
                unset($recipients[$row['ban_userid']]);
1686 4978 acydburn
        }
1687 4978 acydburn
        $db->sql_freeresult($result);
1688 4978 acydburn
1689 4978 acydburn
        if (!sizeof($recipients))
1690 4978 acydburn
        {
1691 4978 acydburn
                return;
1692 4978 acydburn
        }
1693 4978 acydburn
1694 8146 acydburn
        $sql = 'SELECT user_id, username, user_email, user_lang, user_notify_pm, user_notify_type, user_jabber
1695 6271 acydburn
                FROM ' . USERS_TABLE . '
1696 6271 acydburn
                WHERE ' . $db->sql_in_set('user_id', array_map('intval', array_keys($recipients)));
1697 4978 acydburn
        $result = $db->sql_query($sql);
1698 4978 acydburn
1699 4978 acydburn
        $msg_list_ary = array();
1700 4978 acydburn
        while ($row = $db->sql_fetchrow($result))
1701 4978 acydburn
        {
1702 5084 bartvb
                if ($row['user_notify_pm'] == 1 && trim($row['user_email']))
1703 4978 acydburn
                {
1704 4978 acydburn
                        $msg_list_ary[] = array(
1705 4979 acydburn
                                'method'        => $row['user_notify_type'],
1706 4978 acydburn
                                'email'                => $row['user_email'],
1707 4978 acydburn
                                'jabber'        => $row['user_jabber'],
1708 4978 acydburn
                                'name'                => $row['username'],
1709 4978 acydburn
                                'lang'                => $row['user_lang']
1710 4978 acydburn
                        );
1711 4978 acydburn
                }
1712 4978 acydburn
        }
1713 4978 acydburn
        $db->sql_freeresult($result);
1714 6015 acydburn
1715 4978 acydburn
        if (!sizeof($msg_list_ary))
1716 4978 acydburn
        {
1717 4978 acydburn
                return;
1718 4978 acydburn
        }
1719 4978 acydburn
1720 6015 acydburn
        include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
1721 4978 acydburn
        $messenger = new messenger();
1722 4978 acydburn
1723 4978 acydburn
        foreach ($msg_list_ary as $pos => $addr)
1724 4978 acydburn
        {
1725 4978 acydburn
                $messenger->template('privmsg_notify', $addr['lang']);
1726 4978 acydburn
1727 4978 acydburn
                $messenger->to($addr['email'], $addr['name']);
1728 4978 acydburn
                $messenger->im($addr['jabber'], $addr['name']);
1729 4978 acydburn
1730 4978 acydburn
                $messenger->assign_vars(array(
1731 6548 acydburn
                        'SUBJECT'                => htmlspecialchars_decode($subject),
1732 6548 acydburn
                        'AUTHOR_NAME'        => htmlspecialchars_decode($author),
1733 6548 acydburn
                        'USERNAME'                => htmlspecialchars_decode($addr['name']),
1734 4978 acydburn
1735 11528 git-gate
                        'U_INBOX'                        => generate_board_url() . "/ucp.$phpEx?i=pm&folder=inbox",
1736 11528 git-gate
                        'U_VIEW_MESSAGE'        => generate_board_url() . "/ucp.$phpEx?i=pm&mode=view&p=$msg_id",
1737 11528 git-gate
                ));
1738 4978 acydburn
1739 4978 acydburn
                $messenger->send($addr['method']);
1740 4978 acydburn
        }
1741 4978 acydburn
        unset($msg_list_ary);
1742 4978 acydburn
1743 5114 acydburn
        $messenger->save_queue();
1744 4978 acydburn
1745 4978 acydburn
        unset($messenger);
1746 4978 acydburn
}
1747 4978 acydburn
1748 8025 acydburn
/**
1749 8025 acydburn
* Display Message History
1750 8025 acydburn
*/
1751 8025 acydburn
function message_history($msg_id, $user_id, $message_row, $folder, $in_post_mode = false)
1752 8025 acydburn
{
1753 8025 acydburn
        global $db, $user, $config, $template, $phpbb_root_path, $phpEx, $auth, $bbcode;
1754 8025 acydburn
1755 9677 nickvergessen
        // Select all receipts and the author from the pm we currently view, to only display their pm-history
1756 9677 nickvergessen
        $sql = 'SELECT author_id, user_id
1757 9677 nickvergessen
                FROM ' . PRIVMSGS_TO_TABLE . "
1758 9677 nickvergessen
                WHERE msg_id = $msg_id
1759 9677 nickvergessen
                        AND folder_id <> " . PRIVMSGS_HOLD_BOX;
1760 9677 nickvergessen
        $result = $db->sql_query($sql);
1761 9677 nickvergessen
1762 9677 nickvergessen
        $recipients = array();
1763 9677 nickvergessen
        while ($row = $db->sql_fetchrow($result))
1764 9677 nickvergessen
        {
1765 10092 bantu
                $recipients[] = (int) $row['user_id'];
1766 10092 bantu
                $recipients[] = (int) $row['author_id'];
1767 9677 nickvergessen
        }
1768 9677 nickvergessen
        $db->sql_freeresult($result);
1769 9677 nickvergessen
        $recipients = array_unique($recipients);
1770 9677 nickvergessen
1771 8025 acydburn
        // Get History Messages (could be newer)
1772 8025 acydburn
        $sql = 'SELECT t.*, p.*, u.*
1773 8025 acydburn
                FROM ' . PRIVMSGS_TABLE . ' p, ' . PRIVMSGS_TO_TABLE . ' t, ' . USERS_TABLE . ' u
1774 8025 acydburn
                WHERE t.msg_id = p.msg_id
1775 8025 acydburn
                        AND p.author_id = u.user_id
1776 9677 nickvergessen
                        AND t.folder_id NOT IN (' . PRIVMSGS_NO_BOX . ', ' . PRIVMSGS_HOLD_BOX . ')
1777 10092 bantu
                        AND ' . $db->sql_in_set('t.author_id', $recipients, false, true) . "
1778 8025 acydburn
                        AND t.user_id = $user_id";
1779 8025 acydburn
1780 10092 bantu
        // We no longer need those.
1781 10092 bantu
        unset($recipients);
1782 10092 bantu
1783 8025 acydburn
        if (!$message_row['root_level'])
1784 8025 acydburn
        {
1785 8025 acydburn
                $sql .= " AND (p.root_level = $msg_id OR (p.root_level = 0 AND p.msg_id = $msg_id))";
1786 8025 acydburn
        }
1787 8025 acydburn
        else
1788 8025 acydburn
        {
1789 8025 acydburn
                $sql .= " AND (p.root_level = " . $message_row['root_level'] . ' OR p.msg_id = ' . $message_row['root_level'] . ')';
1790 8025 acydburn
        }
1791 8025 acydburn
        $sql .= ' ORDER BY p.message_time DESC';
1792 8025 acydburn
1793 8025 acydburn
        $result = $db->sql_query($sql);
1794 8025 acydburn
        $row = $db->sql_fetchrow($result);
1795 8025 acydburn
1796 8025 acydburn
        if (!$row)
1797 8025 acydburn
        {
1798 8025 acydburn
                $db->sql_freeresult($result);
1799 8025 acydburn
                return false;
1800 8025 acydburn
        }
1801 8025 acydburn
1802 10751 git-gate
        $title = $row['message_subject'];
1803 10751 git-gate
1804 8025 acydburn
        $rowset = array();
1805 8025 acydburn
        $bbcode_bitfield = '';
1806 8025 acydburn
        $folder_url = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm') . '&amp;folder=';
1807 8025 acydburn
1808 8025 acydburn
        do
1809 8025 acydburn
        {
1810 8025 acydburn
                $folder_id = (int) $row['folder_id'];
1811 8025 acydburn
1812 8025 acydburn
                $row['folder'][] = (isset($folder[$folder_id])) ? '<a href="' . $folder_url . $folder_id . '">' . $folder[$folder_id]['folder_name'] . '</a>' : $user->lang['UNKNOWN_FOLDER'];
1813 8025 acydburn
1814 8025 acydburn
                if (isset($rowset[$row['msg_id']]))
1815 8025 acydburn
                {
1816 8025 acydburn
                        $rowset[$row['msg_id']]['folder'][] = (isset($folder[$folder_id])) ? '<a href="' . $folder_url . $folder_id . '">' . $folder[$folder_id]['folder_name'] . '</a>' : $user->lang['UNKNOWN_FOLDER'];
1817 8025 acydburn
                }
1818 8025 acydburn
                else
1819 8025 acydburn
                {
1820 8025 acydburn
                        $rowset[$row['msg_id']] = $row;
1821 8025 acydburn
                        $bbcode_bitfield = $bbcode_bitfield | base64_decode($row['bbcode_bitfield']);
1822 8025 acydburn
                }
1823 8025 acydburn
        }
1824 8025 acydburn
        while ($row = $db->sql_fetchrow($result));
1825 8025 acydburn
        $db->sql_freeresult($result);
1826 8025 acydburn
1827 8025 acydburn
        if (sizeof($rowset) == 1 && !$in_post_mode)
1828 8025 acydburn
        {
1829 8025 acydburn
                return false;
1830 8025 acydburn
        }
1831 8025 acydburn
1832 8025 acydburn
        // Instantiate BBCode class
1833 8025 acydburn
        if ((empty($bbcode) || $bbcode === false) && $bbcode_bitfield !== '')
1834 8025 acydburn
        {
1835 8025 acydburn
                if (!class_exists('bbcode'))
1836 8025 acydburn
                {
1837 8025 acydburn
                        include($phpbb_root_path . 'includes/bbcode.' . $phpEx);
1838 8025 acydburn
                }
1839 8025 acydburn
                $bbcode = new bbcode(base64_encode($bbcode_bitfield));
1840 8025 acydburn
        }
1841 8025 acydburn
1842 8025 acydburn
        $title = censor_text($title);
1843 8025 acydburn
1844 8025 acydburn
        $url = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm');
1845 8025 acydburn
        $next_history_pm = $previous_history_pm = $prev_id = 0;
1846 8025 acydburn
1847 9441 acydburn
        // Re-order rowset to be able to get the next/prev message rows...
1848 9441 acydburn
        $rowset = array_values($rowset);
1849 9441 acydburn
1850 9441 acydburn
        for ($i = 0, $size = sizeof($rowset); $i < $size; $i++)
1851 8025 acydburn
        {
1852 9441 acydburn
                $row = &$rowset[$i];
1853 9441 acydburn
                $id = (int) $row['msg_id'];
1854 9441 acydburn
1855 8025 acydburn
                $author_id        = $row['author_id'];
1856 8025 acydburn
                $folder_id        = (int) $row['folder_id'];
1857 8025 acydburn
1858 8025 acydburn
                $subject        = $row['message_subject'];
1859 8025 acydburn
                $message        = $row['message_text'];
1860 8025 acydburn
1861 8025 acydburn
                $message = censor_text($message);
1862 8025 acydburn
1863 8993 toonarmy
                $decoded_message = false;
1864 8993 toonarmy
1865 9671 nickvergessen
                if ($in_post_mode && $auth->acl_get('u_sendpm') && $author_id != ANONYMOUS)
1866 8993 toonarmy
                {
1867 8993 toonarmy
                        $decoded_message = $message;
1868 8993 toonarmy
                        decode_message($decoded_message, $row['bbcode_uid']);
1869 8993 toonarmy
1870 8993 toonarmy
                        $decoded_message = bbcode_nl2br($decoded_message);
1871 8993 toonarmy
                }
1872 8993 toonarmy
1873 8025 acydburn
                if ($row['bbcode_bitfield'])
1874 8025 acydburn
                {
1875 8025 acydburn
                        $bbcode->bbcode_second_pass($message, $row['bbcode_uid'], $row['bbcode_bitfield']);
1876 8025 acydburn
                }
1877 8025 acydburn
1878 8050 naderman
                $message = bbcode_nl2br($message);
1879 8025 acydburn
                $message = smiley_text($message, !$row['enable_smilies']);
1880 8025 acydburn
1881 8025 acydburn
                $subject = censor_text($subject);
1882 8025 acydburn
1883 8025 acydburn
                if ($id == $msg_id)
1884 8025 acydburn
                {
1885 9441 acydburn
                        $next_history_pm = (isset($rowset[$i + 1])) ? (int) $rowset[$i + 1]['msg_id'] : 0;
1886 8025 acydburn
                        $previous_history_pm = $prev_id;
1887 8025 acydburn
                }
1888 8025 acydburn
1889 8025 acydburn
                $template->assign_block_vars('history_row', array(
1890 8993 toonarmy
                        'MESSAGE_AUTHOR_QUOTE'                => (($decoded_message) ? addslashes(get_username_string('username', $author_id, $row['username'], $row['user_colour'], $row['username'])) : ''),
1891 8025 acydburn
                        'MESSAGE_AUTHOR_FULL'                => get_username_string('full', $author_id, $row['username'], $row['user_colour'], $row['username']),
1892 8025 acydburn
                        'MESSAGE_AUTHOR_COLOUR'                => get_username_string('colour', $author_id, $row['username'], $row['user_colour'], $row['username']),
1893 8025 acydburn
                        'MESSAGE_AUTHOR'                        => get_username_string('username', $author_id, $row['username'], $row['user_colour'], $row['username']),
1894 8025 acydburn
                        'U_MESSAGE_AUTHOR'                        => get_username_string('profile', $author_id, $row['username'], $row['user_colour'], $row['username']),
1895 8025 acydburn
1896 8993 toonarmy
                        'SUBJECT'                        => $subject,
1897 8993 toonarmy
                        'SENT_DATE'                        => $user->format_date($row['message_time']),
1898 8993 toonarmy
                        'MESSAGE'                        => $message,
1899 8993 toonarmy
                        'FOLDER'                        => implode(', ', $row['folder']),
1900 8993 toonarmy
                        'DECODED_MESSAGE'        => $decoded_message,
1901 8025 acydburn
1902 8025 acydburn
                        'S_CURRENT_MSG'                => ($row['msg_id'] == $msg_id),
1903 8025 acydburn
                        'S_AUTHOR_DELETED'        => ($author_id == ANONYMOUS) ? true : false,
1904 8025 acydburn
                        'S_IN_POST_MODE'        => $in_post_mode,
1905 8025 acydburn
1906 8025 acydburn
                        'MSG_ID'                        => $row['msg_id'],
1907 8025 acydburn
                        'U_VIEW_MESSAGE'        => "$url&amp;f=$folder_id&amp;p=" . $row['msg_id'],
1908 9671 nickvergessen
                        'U_QUOTE'                        => (!$in_post_mode && $auth->acl_get('u_sendpm') && $author_id != ANONYMOUS) ? "$url&amp;mode=compose&amp;action=quote&amp;f=" . $folder_id . "&amp;p=" . $row['msg_id'] : '',
1909 8025 acydburn
                        'U_POST_REPLY_PM'        => ($author_id != $user->data['user_id'] && $author_id != ANONYMOUS && $auth->acl_get('u_sendpm')) ? "$url&amp;mode=compose&amp;action=reply&amp;f=$folder_id&amp;p=" . $row['msg_id'] : '')
1910 8025 acydburn
                );
1911 9561 bantu
                unset($rowset[$i]);
1912 8025 acydburn
                $prev_id = $id;
1913 8025 acydburn
        }
1914 8025 acydburn
1915 8025 acydburn
        $template->assign_vars(array(
1916 8025 acydburn
                'QUOTE_IMG'                        => $user->img('icon_post_quote', $user->lang['REPLY_WITH_QUOTE']),
1917 8025 acydburn
                'HISTORY_TITLE'                => $title,
1918 8025 acydburn
1919 8092 acydburn
                'U_VIEW_NEXT_HISTORY'                => ($next_history_pm) ? "$url&amp;p=" . $next_history_pm : '',
1920 8092 acydburn
                'U_VIEW_PREVIOUS_HISTORY'        => ($previous_history_pm) ? "$url&amp;p=" . $previous_history_pm : '',
1921 8092 acydburn
        ));
1922 8025 acydburn
1923 8025 acydburn
        return true;
1924 8025 acydburn
}
1925 8025 acydburn
1926 8521 acydburn
/**
1927 8521 acydburn
* Set correct users max messages in PM folder.
1928 8521 acydburn
* If several group memberships define different amount of messages, the highest will be chosen.
1929 8521 acydburn
*/
1930 8521 acydburn
function set_user_message_limit()
1931 8521 acydburn
{
1932 8521 acydburn
        global $user, $db, $config;
1933 8521 acydburn
1934 8521 acydburn
        // Get maximum about from user memberships - if it is 0, there is no limit set and we use the maximum value within the config.
1935 8521 acydburn
        $sql = 'SELECT MAX(g.group_message_limit) as max_message_limit
1936 8521 acydburn
                FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug
1937 8521 acydburn
                WHERE ug.user_id = ' . $user->data['user_id'] . '
1938 8521 acydburn
                        AND ug.user_pending = 0
1939 8521 acydburn
                        AND ug.group_id = g.group_id';
1940 8521 acydburn
        $result = $db->sql_query($sql);
1941 8521 acydburn
        $message_limit = (int) $db->sql_fetchfield('max_message_limit');
1942 8521 acydburn
        $db->sql_freeresult($result);
1943 8521 acydburn
1944 8521 acydburn
        $user->data['message_limit'] = (!$message_limit) ? $config['pm_max_msgs'] : $message_limit;
1945 8521 acydburn
}
1946 8521 acydburn
1947 9814 naderman
/**
1948 9814 naderman
* Generates an array of coloured recipient names from a list of PMs - (groups & users)
1949 9814 naderman
*
1950 9814 naderman
* @param        array        $pm_by_id        An array of rows from PRIVMSGS_TABLE, keys are the msg_ids.
1951 9814 naderman
*
1952 9814 naderman
* @return        array                                2D Array: array(msg_id => array('username or group string', ...), ...)
1953 9814 naderman
*                                                                Usernames are generated with {@link get_username_string get_username_string}
1954 9814 naderman
*                                                                Groups are coloured and have a link to the membership page
1955 9814 naderman
*/
1956 9814 naderman
function get_recipient_strings($pm_by_id)
1957 9814 naderman
{
1958 10165 nickvergessen
        global $db, $phpbb_root_path, $phpEx, $user;
1959 9814 naderman
1960 9814 naderman
        $address_list = $recipient_list = $address = array();
1961 9814 naderman
1962 9814 naderman
        $_types = array('u', 'g');
1963 9814 naderman
1964 9814 naderman
        foreach ($pm_by_id as $message_id => $row)
1965 9814 naderman
        {
1966 9814 naderman
                $address[$message_id] = rebuild_header(array('to' => $row['to_address'], 'bcc' => $row['bcc_address']));
1967 9876 acydburn
1968 9814 naderman
                foreach ($_types as $ug_type)
1969 9814 naderman
                {
1970 9814 naderman
                        if (isset($address[$message_id][$ug_type]) && sizeof($address[$message_id][$ug_type]))
1971 9814 naderman
                        {
1972 9814 naderman
                                foreach ($address[$message_id][$ug_type] as $ug_id => $in_to)
1973 9814 naderman
                                {
1974 9814 naderman
                                        $recipient_list[$ug_type][$ug_id] = array('name' => $user->lang['NA'], 'colour' => '');
1975 9814 naderman
                                }
1976 9814 naderman
                        }
1977 9814 naderman
                }
1978 9814 naderman
        }
1979 9814 naderman
1980 9814 naderman
        foreach ($_types as $ug_type)
1981 9814 naderman
        {
1982 9814 naderman
                if (!empty($recipient_list[$ug_type]))
1983 9814 naderman
                {
1984 9814 naderman
                        if ($ug_type == 'u')
1985 9814 naderman
                        {
1986 9814 naderman
                                $sql = 'SELECT user_id as id, username as name, user_colour as colour
1987 9814 naderman
                                        FROM ' . USERS_TABLE . '
1988 9814 naderman
                                        WHERE ';
1989 9814 naderman
                        }
1990 9814 naderman
                        else
1991 9814 naderman
                        {
1992 9814 naderman
                                $sql = 'SELECT group_id as id, group_name as name, group_colour as colour, group_type
1993 9814 naderman
                                        FROM ' . GROUPS_TABLE . '
1994 9814 naderman
                                        WHERE ';
1995 9814 naderman
                        }
1996 9814 naderman
                        $sql .= $db->sql_in_set(($ug_type == 'u') ? 'user_id' : 'group_id', array_map('intval', array_keys($recipient_list[$ug_type])));
1997 9814 naderman
1998 9814 naderman
                        $result = $db->sql_query($sql);
1999 9814 naderman
2000 9814 naderman
                        while ($row = $db->sql_fetchrow($result))
2001 9814 naderman
                        {
2002 9814 naderman
                                if ($ug_type == 'g')
2003 9814 naderman
                                {
2004 9814 naderman
                                        $row['name'] = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['name']] : $row['name'];
2005 9814 naderman
                                }
2006 9814 naderman
2007 9814 naderman
                                $recipient_list[$ug_type][$row['id']] = array('name' => $row['name'], 'colour' => $row['colour']);
2008 9814 naderman
                        }
2009 9814 naderman
                        $db->sql_freeresult($result);
2010 9814 naderman
                }
2011 9814 naderman
        }
2012 9814 naderman
2013 9814 naderman
        foreach ($address as $message_id => $adr_ary)
2014 9814 naderman
        {
2015 9814 naderman
                foreach ($adr_ary as $type => $id_ary)
2016 9814 naderman
                {
2017 9814 naderman
                        foreach ($id_ary as $ug_id => $_id)
2018 9814 naderman
                        {
2019 9814 naderman
                                if ($type == 'u')
2020 9814 naderman
                                {
2021 9814 naderman
                                        $address_list[$message_id][] = get_username_string('full', $ug_id, $recipient_list[$type][$ug_id]['name'], $recipient_list[$type][$ug_id]['colour']);
2022 9814 naderman
                                }
2023 9814 naderman
                                else
2024 9814 naderman
                                {
2025 9814 naderman
                                        $user_colour = ($recipient_list[$type][$ug_id]['colour']) ? ' style="font-weight: bold; color:#' . $recipient_list[$type][$ug_id]['colour'] . '"' : '';
2026 9814 naderman
                                        $link = '<a href="' . append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;g=' . $ug_id) . '"' . $user_colour . '>';
2027 9814 naderman
                                        $address_list[$message_id][] = $link . $recipient_list[$type][$ug_id]['name'] . (($link) ? '</a>' : '');
2028 9814 naderman
                                }
2029 9814 naderman
                        }
2030 9814 naderman
                }
2031 9814 naderman
        }
2032 9814 naderman
2033 9814 naderman
        return $address_list;
2034 9814 naderman
}