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', "&lt;\\2&gt;", $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&amp;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&amp;file=mcp&amp;mode=pm_details&amp;p=' . $message_row['msg_id']), 'U_REPORT' => $config['auth_report_pm'] && $_CLASS['auth']->acl_get('u_pm_report') ? generate_link('Forums&amp;file=report&amp;pm=' . $message_row['msg_id']) : '', 'U_INFO' => $_CLASS['auth']->acl_get('m_') && ($message_row['message_reported'] || $message_row['forwarded']) ? generate_link('Forums&amp;file=mcp&amp;mode=pm_details&amp;p=' . $message_row['msg_id']) : '', 'U_DELETE' => $_CLASS['auth']->acl_get('u_pm_delete') ? generate_link("{$url}&amp;mode=compose&amp;action=delete&amp;f={$folder_id}&amp;p=" . $message_row['msg_id']) : '', 'U_AUTHOR_PROFILE' => generate_link('Members_List&amp;mode=viewprofile&amp;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}&amp;mode=compose&amp;action=quote&amp;f={$folder_id}&amp;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}&amp;mode=compose&amp;action=edit&amp;f={$folder_id}&amp;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}&amp;mode=compose&amp;action=reply&amp;f={$folder_id}&amp;p=" . $message_row['msg_id']) : '', 'U_PREVIOUS_PM' => generate_link("{$url}&amp;f={$folder_id}&amp;p=" . $message_row['msg_id'] . "&amp;view=previous"), 'U_NEXT_PM' => generate_link("{$url}&amp;f={$folder_id}&amp;p=" . $message_row['msg_id'] . "&amp;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}&amp;f={$folder_id}&amp;p=" . $message_row['msg_id'] . "&amp;view=print"), 'U_EMAIL_PM' => $_CORE_CONFIG['email']['email_enable'] ? 'Email' : '', 'U_FORWARD_PM' => generate_link("{$url}&amp;mode=compose&amp;action=forward&amp;f={$folder_id}&amp;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;
}
Пример #3
0
// 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&amp;file=viewtopic&amp;t={$topic_id}&amp;start={$start}&amp;{$u_sort_param}" . ($highlight_match ? "&amp;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;
Пример #4
0
        $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&amp;file=search&amp;search_session_id={$search_session_id}&amp;search_id={$search_id}&amp;hilit={$hilit}&amp;{$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&amp;file=search&amp;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&amp;file=&amp;show_results={$show_results}&amp;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&amp;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&amp;mode=viewprofile&amp;u=' . $ug_id) . '">' : '<a href="' . generate_link('Members_List&amp;mode=group&amp;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&amp;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&amp;mode=viewprofile&amp;u=' . $row['author_id']) . '">' . $row['username'] . '</a>';
            $view_message_url = generate_link("{$url}&amp;f={$folder_id}&amp;p={$message_id}");
            $remove_message_url = generate_link($url . '&amp;mode=compose&amp;action=delete&amp;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}&amp;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&amp;file=mcp&amp;mode=reports&amp;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&amp;mode=viewprofile&amp;u=' . $ug_id) . '"' . $user_colour . '>' : '';
                        } else {
                            $link = '<a href="' . generate_link('members_list&amp;mode=group&amp;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&amp;mode=viewprofile&amp;u=' . $row['author_id']) . '">' . $row['username'] . '</a>' : $row['username'];
            $view_message_url = generate_link($parent_class->link_parent . "&amp;f={$folder_id}&amp;p={$message_id}");
            $remove_message_url = generate_link($parent_class->link_parent . '&amp;mode=compose&amp;action=delete&amp;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 . '&amp;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&amp;file=mcp&amp;mode=reports&amp;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));
    }
}