phpBB
Statistics
| Revision:

root / branches / phpBB-3_0_0 / phpBB / includes / functions_privmsgs.php

History | View | Annotate | Download (57.4 kB)

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