function view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row) { global $_CLASS, $_CORE_CONFIG, $site_file_root, $config; $_CLASS['core_user']->add_lang('viewtopic'); $msg_id = (int) $msg_id; $folder_id = (int) $folder_id; $author_id = (int) $message_row['author_id']; // Not able to view message, it was deleted by the sender if ($message_row['deleted']) { trigger_error('NO_AUTH_READ_REMOVED_MESSAGE'); } // Grab icons $icons = array(); obtain_icons($icons); // Instantiate BBCode if need be if ($message_row['bbcode_bitfield']) { require $site_file_root . 'includes/forums/bbcode.php'; $bbcode = new bbcode($message_row['bbcode_bitfield']); } // Assign TO/BCC Addresses to template write_pm_addresses(array('to' => $message_row['to_address'], 'bcc' => $message_row['bcc_address']), $author_id); $user_info = get_user_informations($author_id, $message_row); // Parse the message and subject $message = $message_row['message_text']; // If the board has HTML off but the message has HTML on then we process it, else leave it alone if ($message_row['enable_html'] && (!$config['auth_html_pm'] || !$_CLASS['auth']->acl_get('u_pm_html'))) { $message = preg_replace('#(<!\\-\\- h \\-\\-><)([\\/]?.*?)(><!\\-\\- h \\-\\->)#is', "<\\2>", $message); } // Second parse bbcode here if ($message_row['bbcode_bitfield']) { $bbcode->bbcode_second_pass($message, $message_row['bbcode_uid'], $message_row['bbcode_bitfield']); } // Always process smilies after parsing bbcodes $message = smiley_text($message); // Replace naughty words such as farty pants $message_row['message_subject'] = censor_text($message_row['message_subject']); $message = str_replace("\n", '<br />', censor_text($message)); // Editing information if ($message_row['message_edit_count'] && $config['display_last_edited']) { $l_edit_time_total = $message_row['message_edit_count'] == 1 ? $_CLASS['core_user']->lang['EDITED_TIME_TOTAL'] : $_CLASS['core_user']->lang['EDITED_TIMES_TOTAL']; $l_edited_by = '<br /><br />' . sprintf($l_edit_time_total, !$message_row['message_edit_user'] ? $message_row['username'] : $message_row['message_edit_user'], $_CLASS['core_user']->format_date($message_row['message_edit_time']), $message_row['message_edit_count']); } else { $l_edited_by = ''; } // Pull attachment data $display_notice = false; $attachments = array(); if ($message_row['message_attachment'] && $config['allow_pm_attach']) { if ($config['auth_download_pm'] && $_CLASS['auth']->acl_get('u_pm_download')) { require $site_file_root . 'includes/forums/functions_display.php'; $sql = 'SELECT * FROM ' . FORUMS_ATTACHMENTS_TABLE . "\n\t\t\t\tWHERE post_msg_id = {$msg_id}\n\t\t\t\t\tAND in_message = 1\n\t\t\t\tORDER BY filetime " . (!$config['display_order'] ? 'DESC' : 'ASC') . ', post_msg_id ASC'; $result = $_CLASS['core_db']->query($sql); while ($row = $_CLASS['core_db']->fetch_row_assoc($result)) { $attachments[] = $row; } $_CLASS['core_db']->free_result($result); // No attachments exist, but message table thinks they do so go ahead and reset attach flags if (empty($attachments)) { $sql = 'UPDATE ' . FORUMS_PRIVMSGS_TABLE . " \n\t\t\t\t\tSET message_attachment = 0 \n\t\t\t\t\tWHERE msg_id = {$msg_id}"; $_CLASS['core_db']->query($sql); } } else { $display_notice = true; } } // Assign inline attachments if (!empty($attachments)) { $unset_attachments = parse_inline_attachments($message, $attachments, $update_count, 0); // Needed to let not display the inlined attachments at the end of the message again foreach ($unset_attachments as $index) { unset($attachments[$index]); } } $user_info['sig'] = ''; $signature = $message_row['enable_sig'] && $config['allow_sig'] && $_CLASS['auth']->acl_get('u_sig') && $_CLASS['core_user']->optionget('viewsigs') ? $user_info['user_sig'] : ''; // End signature parsing, only if needed if ($signature) { if ($user_info['user_sig_bbcode_bitfield']) { if (!isset($bbcode) || !$bbcode) { require $site_file_root . 'includes/forums/bbcode.php'; $bbcode = new bbcode($user_info['user_sig_bbcode_bitfield']); } $bbcode->bbcode_second_pass($signature, $user_info['user_sig_bbcode_uid'], $user_info['user_sig_bbcode_bitfield']); } $signature = smiley_text($signature); $signature = str_replace("\n", '<br />', censor_text($signature)); } $url = 'Control_Panel&i=' . $id; $_CLASS['core_template']->assign(array('AUTHOR_NAME' => $user_info['user_colour'] ? '<span style="color:#' . $user_info['user_colour'] . '">' . $user_info['username'] . '</span>' : $user_info['username'], 'AUTHOR_RANK' => $user_info['rank_title'], 'RANK_IMAGE' => $user_info['rank_image'], 'AUTHOR_AVATAR' => isset($user_info['avatar']) ? $user_info['avatar'] : '', 'AUTHOR_JOINED' => $_CLASS['core_user']->format_date($user_info['user_reg_date']), 'AUTHOR_POSTS' => !empty($user_info['user_posts']) ? $user_info['user_posts'] : '', 'AUTHOR_FROM' => !empty($user_info['user_from']) ? $user_info['user_from'] : '', 'ONLINE_IMG' => !$config['load_onlinetrack'] ? '' : (isset($user_info['online']) && $user_info['online'] ? $_CLASS['core_user']->img('btn_online', $_CLASS['core_user']->lang['ONLINE']) : $_CLASS['core_user']->img('btn_offline', $_CLASS['core_user']->lang['OFFLINE'])), 'DELETE_IMG' => $_CLASS['core_user']->img('btn_delete', $_CLASS['core_user']->lang['DELETE_MESSAGE']), 'INFO_IMG' => $_CLASS['core_user']->img('btn_info', $_CLASS['core_user']->lang['VIEW_PM_INFO']), 'REPORT_IMG' => $_CLASS['core_user']->img('btn_report', $_CLASS['core_user']->lang['REPORT_PM']), 'REPORTED_IMG' => $_CLASS['core_user']->img('icon_reported', $_CLASS['core_user']->lang['MESSAGE_REPORTED_MESSAGE']), 'PROFILE_IMG' => $_CLASS['core_user']->img('btn_profile', $_CLASS['core_user']->lang['READ_PROFILE']), 'EMAIL_IMG' => $_CLASS['core_user']->img('btn_email', $_CLASS['core_user']->lang['SEND_EMAIL']), 'QUOTE_IMG' => $_CLASS['core_user']->img('btn_quote', $_CLASS['core_user']->lang['POST_QUOTE_PM']), 'REPLY_IMG' => $_CLASS['core_user']->img('btn_reply_pm', $_CLASS['core_user']->lang['POST_REPLY_PM']), 'EDIT_IMG' => $_CLASS['core_user']->img('btn_edit', $_CLASS['core_user']->lang['POST_EDIT_PM']), 'MINI_POST_IMG' => $_CLASS['core_user']->img('icon_post', $_CLASS['core_user']->lang['PM']), 'SENT_DATE' => $_CLASS['core_user']->format_date($message_row['message_time']), 'SUBJECT' => $message_row['message_subject'], 'MESSAGE' => $message, 'SIGNATURE' => $message_row['enable_sig'] ? $signature : '', 'EDITED_MESSAGE' => $l_edited_by, 'U_MCP_REPORT' => generate_link('Forums&file=mcp&mode=pm_details&p=' . $message_row['msg_id']), 'U_REPORT' => $config['auth_report_pm'] && $_CLASS['auth']->acl_get('u_pm_report') ? generate_link('Forums&file=report&pm=' . $message_row['msg_id']) : '', 'U_INFO' => $_CLASS['auth']->acl_get('m_') && ($message_row['message_reported'] || $message_row['forwarded']) ? generate_link('Forums&file=mcp&mode=pm_details&p=' . $message_row['msg_id']) : '', 'U_DELETE' => $_CLASS['auth']->acl_get('u_pm_delete') ? generate_link("{$url}&mode=compose&action=delete&f={$folder_id}&p=" . $message_row['msg_id']) : '', 'U_AUTHOR_PROFILE' => generate_link('Members_List&mode=viewprofile&u=' . $author_id), 'U_EMAIL' => $user_info['email'], 'U_QUOTE' => $_CLASS['auth']->acl_get('u_sendpm') && $author_id != $_CLASS['core_user']->data['user_id'] ? generate_link("{$url}&mode=compose&action=quote&f={$folder_id}&p=" . $message_row['msg_id']) : '', 'U_EDIT' => ($message_row['message_time'] > time() - $config['pm_edit_time'] || !$config['pm_edit_time']) && $folder_id == PRIVMSGS_OUTBOX && $_CLASS['auth']->acl_get('u_pm_edit') ? generate_link("{$url}&mode=compose&action=edit&f={$folder_id}&p=" . $message_row['msg_id']) : '', 'U_POST_REPLY_PM' => $author_id != $_CLASS['core_user']->data['user_id'] && $_CLASS['auth']->acl_get('u_sendpm') ? generate_link("{$url}&mode=compose&action=reply&f={$folder_id}&p=" . $message_row['msg_id']) : '', 'U_PREVIOUS_PM' => generate_link("{$url}&f={$folder_id}&p=" . $message_row['msg_id'] . "&view=previous"), 'U_NEXT_PM' => generate_link("{$url}&f={$folder_id}&p=" . $message_row['msg_id'] . "&view=next"), 'S_MESSAGE_REPORTED' => $message_row['message_reported'] && $_CLASS['auth']->acl_get('m_') ? true : false, 'S_HAS_ATTACHMENTS' => sizeof($attachments) ? true : false, 'S_DISPLAY_NOTICE' => $display_notice && $message_row['message_attachment'], 'U_PRINT_PM' => generate_link("{$url}&f={$folder_id}&p=" . $message_row['msg_id'] . "&view=print"), 'U_EMAIL_PM' => $_CORE_CONFIG['email']['email_enable'] ? 'Email' : '', 'U_FORWARD_PM' => generate_link("{$url}&mode=compose&action=forward&f={$folder_id}&p=" . $message_row['msg_id']))); // Display not already displayed Attachments for this post, we already parsed them. ;) if (isset($attachments) && sizeof($attachments)) { foreach ($attachments as $attachment) { $_CLASS['core_template']->assign_vars_array('attachment', array('DISPLAY_ATTACHMENT' => $attachment)); } } if (!isset($_REQUEST['view']) || $_REQUEST['view'] != 'print') { // Message History if (message_history($msg_id, $_CLASS['core_user']->data['user_id'], $message_row, $folder)) { $_CLASS['core_template']->assign('S_DISPLAY_HISTORY', true); } } }
function posting_gen_topic_icons($mode, $icon_id) { global $config, $_CLASS; $icons = obtain_icons(); $_CLASS['core_template']->assign('S_NO_ICON_CHECKED', !$icon_id ? ' checked="checked"' : ''); if (!empty($icons)) { foreach ($icons as $id => $data) { if ($data['display']) { $_CLASS['core_template']->assign_vars_array('topic_icon', array('ICON_ID' => $id, 'ICON_IMG' => $config['icons_path'] . '/' . $data['img'], 'ICON_WIDTH' => $data['width'], 'ICON_HEIGHT' => $data['height'], 'S_CHECKED' => $id == $icon_id ? true : false, 'S_ICON_CHECKED' => $id == $icon_id ? ' checked="checked"' : '')); } } return true; } return false; }
// Was a highlight request part of the URI? $highlight_match = $highlight = ''; if ($hilit_words) { foreach (explode(' ', trim($hilit_words)) as $word) { if (trim($word)) { $highlight_match .= ($highlight_match != '' ? '|' : '') . str_replace('\\*', '\\w*?', preg_quote(urlencode($word), '#')); } } $highlight = urlencode($hilit_words); } // General Viewtopic URL for return links $viewtopic_url = "Forums&file=viewtopic&t={$topic_id}&start={$start}&{$u_sort_param}" . ($highlight_match ? "&hilit={$highlight}" : ''); // Grab ranks $ranks = obtain_ranks(); // Grab icons $icons = obtain_icons(); // Moderators $forum_moderators = get_moderators($forum_id); // Generate Navigation links generate_forum_nav($topic_data); // Generate Forum Rules generate_forum_rules($topic_data); gen_forum_auth_level('topic', $forum_id); // Does this topic contain a poll? if (!empty($poll_start)) { $sql = 'SELECT o.*, p.bbcode_bitfield, p.bbcode_uid FROM ' . FORUMS_POLL_OPTIONS_TABLE . ' o, ' . FORUMS_POSTS_TABLE . " p\n\t\tWHERE o.topic_id = {$topic_id} \n\t\t\tAND p.post_id = {$topic_first_post_id}\n\t\t\tAND p.topic_id = o.topic_id\n\t\tORDER BY o.poll_option_id"; $result = $_CLASS['core_db']->query($sql); $poll_info = array(); while ($row = $_CLASS['core_db']->fetch_row_assoc($result)) { $poll_info[] = $row;
$search_session_id = rand(); $sql_ary = array('search_id' => $search_session_id, 'session_id' => $_CLASS['core_user']->data['session_id'], 'search_time' => $current_time, 'search_array' => $data); $sql = 'INSERT INTO ' . SEARCH_TABLE . ' ' . $_CLASS['core_db']->sql_build_array('INSERT', $sql_ary); $_CLASS['core_db']->query($sql); unset($data); } if ($show_results == 'posts') { require $site_file_root . 'includes/forums/functions_posting.php'; } else { require $site_file_root . 'includes/forums/functions_display.php'; } // Look up data ... $per_page = $show_results == 'posts' ? $config['posts_per_page'] : $config['topics_per_page']; // Grab icons $icons = array(); obtain_icons($icons); // Output header $l_search_matches = $total_match_count == 1 ? sprintf($_CLASS['core_user']->lang['FOUND_SEARCH_MATCH'], $total_match_count) : sprintf($_CLASS['core_user']->lang['FOUND_SEARCH_MATCHES'], $total_match_count); $hilit = htmlspecialchars(implode('|', str_replace(array('+', '-', '|'), '', $split_words))); $split_words = htmlspecialchars(implode(' ', $split_words)); $ignored_words = htmlspecialchars(implode(' ', $stopped_words)); $_CLASS['core_template']->assign(array('SEARCH_MATCHES' => $l_search_matches, 'SEARCH_WORDS' => $split_words, 'IGNORED_WORDS' => $ignored_words ? $ignored_words : '', 'PAGINATION' => generate_pagination("Forums&file=search&search_session_id={$search_session_id}&search_id={$search_id}&hilit={$hilit}&{$u_sort_param}", $total_match_count, $per_page, $start), 'PAGE_NUMBER' => on_page($total_match_count, $per_page, $start), 'TOTAL_MATCHES' => $total_match_count, 'S_SELECT_SORT_DIR' => $s_sort_dir, 'S_SELECT_SORT_KEY' => $s_sort_key, 'S_SELECT_SORT_DAYS' => $s_limit_days, 'S_SEARCH_ACTION' => generate_link('Forums&file=search&search_id=' . $search_id), 'S_SHOW_TOPICS' => $show_results == 'posts' ? false : true, 'REPORTED_IMG' => $_CLASS['core_user']->img('icon_reported', 'TOPIC_REPORTED'), 'UNAPPROVED_IMG' => $_CLASS['core_user']->img('icon_unapproved', 'TOPIC_UNAPPROVED'), 'GOTO_PAGE_IMG' => $_CLASS['core_user']->img('icon_post', 'GOTO_PAGE'), 'U_SEARCH_WORDS' => generate_link("Forums&file=&show_results={$show_results}&search_keywords=" . urlencode($split_words)))); $u_hilit = urlencode($split_words); // Define ordering sql field, do it here because the order may be defined // within an existing search result set $sort_by_sql = array('a' => $show_results == 'posts' ? 'u.username' : 't.topic_poster', 't' => $show_results == 'posts' ? 'p.post_time' : 't.topic_last_post_time', 'f' => 'f.forum_id', 'i' => 't.topic_title', 's' => $show_results == 'posts' ? 'pt.post_subject' : 't.topic_title'); if ($sql_where) { if ($show_results == 'posts') { // Not joining this query to the one below at present ... may do in future $sql = 'SELECT zebra_id, friend, foe FROM ' . ZEBRA_TABLE . '
function view_folder($id, $mode, $folder_id, $folder, $type) { global $_CLASS, $config; // Grab icons $icons = array(); obtain_icons($icons); $color_rows = array('marked', 'replied', 'message_reported', 'friend', 'foe'); foreach ($color_rows as $var) { $_CLASS['core_template']->assign_vars_array('pm_colour_info', array('IMG' => $_CLASS['core_user']->img("pm_{$var}", ''), 'CLASS' => "pm_{$var}_colour", 'LANG' => $_CLASS['core_user']->lang[strtoupper($var) . '_MESSAGE'])); } $mark_options = array('mark_important', 'delete_marked'); $s_mark_options = ''; foreach ($mark_options as $mark_option) { $s_mark_options .= '<option value="' . $mark_option . '">' . $_CLASS['core_user']->lang[strtoupper($mark_option)] . '</option>'; } $friend = $foe = array(); // Get friends and foes $sql = 'SELECT * FROM ' . ZEBRA_TABLE . ' WHERE user_id = ' . $_CLASS['core_user']->data['user_id']; $result = $_CLASS['core_db']->query($sql); while ($row = $_CLASS['core_db']->fetch_row_assoc($result)) { $friend[$row['zebra_id']] = $row['friend']; $foe[$row['zebra_id']] = $row['foe']; } $_CLASS['core_db']->free_result($result); $_CLASS['core_template']->assign(array('S_UNREAD' => $type == 'unread', 'S_MARK_OPTIONS' => $s_mark_options)); $folder_info = get_pm_from($folder_id, $folder, $_CLASS['core_user']->data['user_id'], "Control_Panel&i={$id}", $type); // Okay, lets dump out the page ... if (sizeof($folder_info['pm_list'])) { // Build Recipient List if in outbox/sentbox - max two additional queries $recipient_list = $address_list = $address = array(); if ($folder_id == PRIVMSGS_OUTBOX || $folder_id == PRIVMSGS_SENTBOX) { foreach ($folder_info['rowset'] as $message_id => $row) { $address[$message_id] = rebuild_header(array('to' => $row['to_address'], 'bcc' => $row['bcc_address'])); foreach (array('u', 'g') as $save) { if (isset($address[$message_id][$save]) && sizeof($address[$message_id][$save])) { foreach (array_keys($address[$message_id][$save]) as $ug_id) { $recipient_list[$save][$ug_id] = array('name' => $_CLASS['core_user']->lang['NA'], 'colour' => ''); } } } } foreach (array('u', 'g') as $ug_type) { if (isset($recipient_list[$ug_type]) && sizeof($recipient_list[$ug_type])) { $sql = $ug_type == 'u' ? 'SELECT user_id as id, username as name, user_colour as colour FROM ' . USERS_TABLE . ' WHERE user_id' : 'SELECT group_id as id, group_name as name, group_colour as colour FROM ' . GROUPS_TABLE . ' WHERE group_id'; $sql .= ' IN (' . implode(', ', array_keys($recipient_list[$ug_type])) . ')'; $result = $_CLASS['core_db']->query($sql); while ($row = $_CLASS['core_db']->fetch_row_assoc($result)) { $recipient_list[$ug_type][$row['id']] = array('name' => $row['name'], 'colour' => $row['colour']); } $_CLASS['core_db']->free_result($result); } } foreach ($address as $message_id => $adr_ary) { foreach ($adr_ary as $type => $id_ary) { foreach ($id_ary as $ug_id => $_id) { $address_list[$message_id][] = ($type == 'u' ? '<a href="' . generate_link('Members_List&mode=viewprofile&u=' . $ug_id) . '">' : '<a href="' . generate_link('Members_List&mode=group&g=' . $ug_id) . '">') . ($recipient_list[$type][$ug_id]['colour'] ? '<span style="color:#' . $recipient_list[$type][$ug_id]['colour'] . '">' : '<span>') . $recipient_list[$type][$ug_id]['name'] . '</span></a>'; } } } unset($recipient_list, $address); } $url = 'Control_Panel&i=' . $id; foreach ($folder_info['pm_list'] as $message_id) { $row =& $folder_info['rowset'][$message_id]; $folder_img = $row['unread'] ? 'folder_new' : 'folder'; $folder_alt = $row['unread'] ? 'NEW_MESSAGES' : 'NO_NEW_MESSAGES'; // Generate all URIs ... $message_author = '<a href="' . generate_link('Members_List&mode=viewprofile&u=' . $row['author_id']) . '">' . $row['username'] . '</a>'; $view_message_url = generate_link("{$url}&f={$folder_id}&p={$message_id}"); $remove_message_url = generate_link($url . '&mode=compose&action=delete&p=' . $message_id); $row_indicator = ''; foreach ($color_rows as $var) { if ($var != 'friend' && $var != 'foe' && $row[$var] || ($var == 'friend' || $var == 'foe') && isset(${$var}[$row['author_id']])) { $row_indicator = $var; break; } } // Send vars to template $_CLASS['core_template']->assign_vars_array('messagerow', array('PM_CLASS' => $row_indicator ? 'pm_' . $row_indicator . '_colour' : '', 'FOLDER_ID' => $folder_id, 'MESSAGE_ID' => $message_id, 'MESSAGE_AUTHOR' => $message_author, 'SENT_TIME' => $_CLASS['core_user']->format_date($row['message_time']), 'SUBJECT' => censor_text($row['message_subject']), 'FOLDER' => isset($folder[$row['folder_id']]) ? $folder[$row['folder_id']]['folder_name'] : '', 'U_FOLDER' => isset($folder[$row['folder_id']]) ? generate_link("{$url}&folder=" . $row['folder_id']) : '', 'PM_ICON_IMG' => !empty($icons[$row['icon_id']]) ? '<img src="' . $config['icons_path'] . '/' . $icons[$row['icon_id']]['img'] . '" width="' . $icons[$row['icon_id']]['width'] . '" height="' . $icons[$row['icon_id']]['height'] . '" alt="" title="" />' : '', 'FOLDER_IMG' => $_CLASS['core_user']->img($folder_img, $folder_alt), 'PM_IMG' => $row_indicator ? $_CLASS['core_user']->img('pm_' . $row_indicator, '') : '', 'ATTACH_ICON_IMG' => $_CLASS['auth']->acl_get('u_download') && $row['message_attachment'] && $config['allow_pm_attach'] && $config['auth_download_pm'] ? $_CLASS['core_user']->img('icon_attach', $_CLASS['core_user']->lang['TOTAL_ATTACHMENTS']) : '', 'S_PM_REPORTED' => !empty($row['message_reported']) && $_CLASS['auth']->acl_get('m_') ? true : false, 'S_PM_DELETED' => $row['deleted'] ? true : false, 'U_VIEW_PM' => $row['deleted'] ? '' : $view_message_url, 'U_REMOVE_PM' => $row['deleted'] ? $remove_message_url : '', 'RECIPIENTS' => $folder_id == PRIVMSGS_OUTBOX || $folder_id == PRIVMSGS_SENTBOX ? implode(', ', $address_list[$message_id]) : '', 'U_MCP_REPORT' => generate_link('Forums&file=mcp&mode=reports&pm=' . $message_id))); } unset($folder_info['rowset']); $_CLASS['core_template']->assign(array('S_SHOW_RECIPIENTS' => $folder_id == PRIVMSGS_OUTBOX || $folder_id == PRIVMSGS_SENTBOX ? true : false, 'S_SHOW_COLOUR_LEGEND' => true)); } }
function view_folder($parent_class, $folder_id, $folder, $type) { global $_CLASS; $limit = 10; $icons = obtain_icons(); $submit_export = isset($_POST['submit_export']) ? true : false; $folder_info = get_pm_from($folder_id, $folder, $_CLASS['core_user']->data['user_id'], $parent_class->link_parent, $type); $color_rows = array('marked', 'replied', 'friend', 'foe'); //, 'message_reported' foreach ($color_rows as $var) { $_CLASS['core_template']->assign_vars_array('pm_colour_info', array('IMG' => $_CLASS['core_user']->img("pm_{$var}", ''), 'CLASS' => "pm_{$var}_colour", 'LANG' => $_CLASS['core_user']->get_lang(strtoupper($var) . '_MESSAGE'))); } $mark_options = array('mark_important', 'delete_marked', 'mark_read', 'mark_unread'); $s_mark_options = ''; foreach ($mark_options as $mark_option) { $s_mark_options .= '<option value="' . $mark_option . '">' . $_CLASS['core_user']->get_lang(strtoupper($mark_option)) . '</option>'; } // We do the folder moving options here too, for template authors to use... $s_folder_move_options = ''; foreach ($folder as $f_id => $folder_ary) { if ($f_id == PRIVMSGS_OUTBOX || $f_id == PRIVMSGS_SENTBOX || $f_id == $folder_id) { continue; } $s_folder_move_options .= '<option' . ($f_id != PRIVMSGS_INBOX ? ' class="blue"' : '') . ' value="' . $f_id . '">'; $s_folder_move_options .= sprintf($_CLASS['core_user']->get_lang('MOVE_MARKED_TO_FOLDER'), $folder_ary['folder_name']); $s_folder_move_options .= ($folder_ary['unread_messages'] ? ' [' . $folder_ary['unread_messages'] . '] ' : '') . '</option>'; } $friend = $foe = array(); // Get friends and foes $sql = 'SELECT * FROM ' . ZEBRA_TABLE . ' WHERE user_id = ' . $_CLASS['core_user']->data['user_id']; $result = $_CLASS['core_db']->query($sql); while ($row = $_CLASS['core_db']->fetch_row_assoc($result)) { $friend[$row['zebra_id']] = $row['friend']; $foe[$row['zebra_id']] = $row['foe']; } $_CLASS['core_db']->free_result($result); $_CLASS['core_template']->assign_array(array('S_UNREAD' => $type === 'unread', 'S_MARK_OPTIONS' => $s_mark_options)); // Okay, lets dump out the page ... if (!empty($folder_info['pm_list'])) { // Build Recipient List if in outbox/sentbox - max two additional queries $recipient_list = $address_list = $address = array(); if ($folder_id == PRIVMSGS_OUTBOX || $folder_id == PRIVMSGS_SENTBOX) { foreach ($folder_info['rowset'] as $message_id => $row) { $address[$message_id] = rebuild_header(array('to' => $row['to_address'], 'bcc' => $row['bcc_address'])); $_save = array('u', 'g'); foreach ($_save as $save) { if (isset($address[$message_id][$save]) && sizeof($address[$message_id][$save])) { foreach (array_keys($address[$message_id][$save]) as $ug_id) { $recipient_list[$save][$ug_id] = array('name' => $_CLASS['core_user']->lang['NA'], 'colour' => ''); } } } } $_types = array('u', 'g'); foreach ($_types as $ug_type) { if (!empty($recipient_list[$ug_type])) { $sql = $ug_type === 'u' ? 'SELECT user_id as id, username as name, user_colour as colour FROM ' . CORE_USERS_TABLE . ' WHERE user_id' : 'SELECT group_id as id, group_name as name, group_colour as colour FROM ' . CORE_GROUPS_TABLE . ' WHERE group_id'; $sql .= ' IN (' . implode(', ', array_map('intval', array_keys($recipient_list[$ug_type]))) . ')'; $result = $_CLASS['core_db']->query($sql); while ($row = $_CLASS['core_db']->fetch_row_assoc($result)) { $recipient_list[$ug_type][$row['id']] = array('name' => $row['name'], 'colour' => $row['colour']); } $_CLASS['core_db']->free_result($result); } } foreach ($address as $message_id => $adr_ary) { foreach ($adr_ary as $type => $id_ary) { foreach ($id_ary as $ug_id => $_id) { $user_colour = $recipient_list[$type][$ug_id]['colour'] ? ' style="color:#' . $recipient_list[$type][$ug_id]['colour'] . '"' : ''; if ($type === 'u') { $link = $ug_id != ANONYMOUS ? '<a href="' . generate_link('members_list&mode=viewprofile&u=' . $ug_id) . '"' . $user_colour . '>' : ''; } else { $link = '<a href="' . generate_link('members_list&mode=group&g=' . $ug_id) . '"' . $user_colour . '>'; } $address_list[$message_id][] = $link . $recipient_list[$type][$ug_id]['name'] . ($link ? '</a>' : ''); } } } unset($recipient_list, $address); } foreach ($folder_info['pm_list'] as $message_id) { $row =& $folder_info['rowset'][$message_id]; $folder_img = $row['pm_unread'] ? 'folder_new' : 'folder'; $folder_alt = $row['pm_unread'] ? 'NEW_MESSAGES' : 'NO_NEW_MESSAGES'; // Generate all URIs ... $message_author = $row['author_id'] != ANONYMOUS ? '<a href="' . generate_link('members_list&mode=viewprofile&u=' . $row['author_id']) . '">' . $row['username'] . '</a>' : $row['username']; $view_message_url = generate_link($parent_class->link_parent . "&f={$folder_id}&p={$message_id}"); $remove_message_url = generate_link($parent_class->link_parent . '&mode=compose&action=delete&p=' . $message_id); $row_indicator = ''; foreach ($color_rows as $var) { if ($var !== 'friend' && $var !== 'foe' && $row['pm_' . $var] || ($var == 'friend' || $var == 'foe') && isset(${$var}[$row['author_id']]) && ${$var}[$row['author_id']]) { $row_indicator = $var; break; } } // Send vars to template $_CLASS['core_template']->assign_vars_array('messagerow', array('PM_CLASS' => $row_indicator ? 'pm_' . $row_indicator . '_colour' : '', 'FOLDER_ID' => $folder_id, 'MESSAGE_ID' => $message_id, 'MESSAGE_AUTHOR' => $message_author, 'SENT_TIME' => $_CLASS['core_user']->format_date($row['message_time']), 'SUBJECT' => censor_text($row['message_subject']), 'FOLDER' => isset($folder[$row['folder_id']]) ? $folder[$row['folder_id']]['folder_name'] : '', 'U_FOLDER' => isset($folder[$row['folder_id']]) ? generate_link($parent_class->link_parent . '&folder=' . $row['folder_id']) : '', 'PM_ICON_IMG' => !empty($icons[$row['icon_id']]) ? '<img src="' . $config['icons_path'] . '/' . $icons[$row['icon_id']]['img'] . '" width="' . $icons[$row['icon_id']]['width'] . '" height="' . $icons[$row['icon_id']]['height'] . '" alt="" title="" />' : '', 'FOLDER_IMG' => $_CLASS['core_user']->img($folder_img, $folder_alt), 'PM_IMG' => $row_indicator ? $_CLASS['core_user']->img('pm_' . $row_indicator, '') : '', 'ATTACH_ICON_IMG' => $row['message_attachment'] ? $_CLASS['core_user']->img('icon_attach', $_CLASS['core_user']->lang['TOTAL_ATTACHMENTS']) : '', 'S_PM_REPORTED' => '', 'S_PM_DELETED' => $row['pm_deleted'] ? true : false, 'S_AUTHOR_DELETED' => $row['author_id'] == ANONYMOUS ? true : false, 'U_VIEW_PM' => $row['pm_deleted'] ? '' : $view_message_url, 'U_REMOVE_PM' => $row['pm_deleted'] ? $remove_message_url : '', 'RECIPIENTS' => $folder_id == PRIVMSGS_OUTBOX || $folder_id == PRIVMSGS_SENTBOX ? implode(', ', $address_list[$message_id]) : '', 'U_MCP_REPORT' => generate_link('forums&file=mcp&mode=reports&pm=' . $message_id))); } unset($folder_info['rowset']); $_CLASS['core_template']->assign_array(array('S_SHOW_RECIPIENTS' => $folder_id == PRIVMSGS_OUTBOX || $folder_id == PRIVMSGS_SENTBOX ? true : false, 'S_SHOW_COLOUR_LEGEND' => true)); } }