Chris@76: ', $context['user']['name'], '', allowedTo('pm_read') ? ', ' . $txt['msg_alert_you_have'] . ' ' . $context['user']['messages'] . ' ' . ($context['user']['messages'] == '1' ? $txt['message_lowercase'] : $txt['msg_alert_messages']) . '' . $txt['newmessages4'] . ' ' . $context['user']['unread_messages'] . ' ' . ($context['user']['unread_messages'] == '1' ? $txt['newmessages0'] : $txt['newmessages1']) : '', '.'; Chris@76: } Chris@76: // Don't echo... then do what?! Chris@76: else Chris@76: return $context['user']; Chris@76: } Chris@76: Chris@76: // Display a menu bar, like is displayed at the top of the forum. Chris@76: function ssi_menubar($output_method = 'echo') Chris@76: { Chris@76: global $context; Chris@76: Chris@76: if ($output_method == 'echo') Chris@76: template_menu(); Chris@76: // What else could this do? Chris@76: else Chris@76: return $context['menu_buttons']; Chris@76: } Chris@76: Chris@76: // Show a logout link. Chris@76: function ssi_logout($redirect_to = '', $output_method = 'echo') Chris@76: { Chris@76: global $context, $txt, $scripturl; Chris@76: Chris@76: if ($redirect_to != '') Chris@76: $_SESSION['logout_url'] = $redirect_to; Chris@76: Chris@76: // Guests can't log out. Chris@76: if ($context['user']['is_guest']) Chris@76: return false; Chris@76: Chris@76: $link = '' . $txt['logout'] . ''; Chris@76: Chris@76: if ($output_method == 'echo') Chris@76: echo $link; Chris@76: else Chris@76: return $link; Chris@76: } Chris@76: Chris@76: // Recent post list: [board] Subject by Poster Date Chris@76: function ssi_recentPosts($num_recent = 8, $exclude_boards = null, $include_boards = null, $output_method = 'echo', $limit_body = true) Chris@76: { Chris@76: global $context, $settings, $scripturl, $txt, $db_prefix, $user_info; Chris@76: global $modSettings, $smcFunc; Chris@76: Chris@76: // Excluding certain boards... Chris@76: if ($exclude_boards === null && !empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] > 0) Chris@76: $exclude_boards = array($modSettings['recycle_board']); Chris@76: else Chris@76: $exclude_boards = empty($exclude_boards) ? array() : (is_array($exclude_boards) ? $exclude_boards : array($exclude_boards)); Chris@76: Chris@76: // What about including certain boards - note we do some protection here as pre-2.0 didn't have this parameter. Chris@76: if (is_array($include_boards) || (int) $include_boards === $include_boards) Chris@76: { Chris@76: $include_boards = is_array($include_boards) ? $include_boards : array($include_boards); Chris@76: } Chris@76: elseif ($include_boards != null) Chris@76: { Chris@76: $include_boards = array(); Chris@76: } Chris@76: Chris@76: // Let's restrict the query boys (and girls) Chris@76: $query_where = ' Chris@76: m.id_msg >= {int:min_message_id} Chris@76: ' . (empty($exclude_boards) ? '' : ' Chris@76: AND b.id_board NOT IN ({array_int:exclude_boards})') . ' Chris@76: ' . ($include_boards === null ? '' : ' Chris@76: AND b.id_board IN ({array_int:include_boards})') . ' Chris@76: AND {query_wanna_see_board}' . ($modSettings['postmod_active'] ? ' Chris@76: AND m.approved = {int:is_approved}' : ''); Chris@76: Chris@76: $query_where_params = array( Chris@76: 'is_approved' => 1, Chris@76: 'include_boards' => $include_boards === null ? '' : $include_boards, Chris@76: 'exclude_boards' => empty($exclude_boards) ? '' : $exclude_boards, Chris@76: 'min_message_id' => $modSettings['maxMsgID'] - 25 * min($num_recent, 5), Chris@76: ); Chris@76: Chris@76: // Past to this simpleton of a function... Chris@76: return ssi_queryPosts($query_where, $query_where_params, $num_recent, 'm.id_msg DESC', $output_method, $limit_body); Chris@76: } Chris@76: Chris@76: // Fetch a post with a particular ID. By default will only show if you have permission to the see the board in question - this can be overriden. Chris@76: function ssi_fetchPosts($post_ids = array(), $override_permissions = false, $output_method = 'echo') Chris@76: { Chris@76: global $user_info, $modSettings; Chris@76: Chris@76: if (empty($post_ids)) Chris@76: return; Chris@76: Chris@76: // Allow the user to request more than one - why not? Chris@76: $post_ids = is_array($post_ids) ? $post_ids : array($post_ids); Chris@76: Chris@76: // Restrict the posts required... Chris@76: $query_where = ' Chris@76: m.id_msg IN ({array_int:message_list})' . ($override_permissions ? '' : ' Chris@76: AND {query_wanna_see_board}') . ($modSettings['postmod_active'] ? ' Chris@76: AND m.approved = {int:is_approved}' : ''); Chris@76: $query_where_params = array( Chris@76: 'message_list' => $post_ids, Chris@76: 'is_approved' => 1, Chris@76: ); Chris@76: Chris@76: // Then make the query and dump the data. Chris@76: return ssi_queryPosts($query_where, $query_where_params, '', 'm.id_msg DESC', $output_method); Chris@76: } Chris@76: Chris@76: // This removes code duplication in other queries - don't call it direct unless you really know what you're up to. Chris@76: function ssi_queryPosts($query_where = '', $query_where_params = array(), $query_limit = 10, $query_order = 'm.id_msg DESC', $output_method = 'echo', $limit_body = false, $override_permissions = false) Chris@76: { Chris@76: global $context, $settings, $scripturl, $txt, $db_prefix, $user_info; Chris@76: global $modSettings, $smcFunc; Chris@76: Chris@76: // Find all the posts. Newer ones will have higher IDs. Chris@76: $request = $smcFunc['db_query']('substring', ' Chris@76: SELECT Chris@76: m.poster_time, m.subject, m.id_topic, m.id_member, m.id_msg, m.id_board, b.name AS board_name, Chris@76: IFNULL(mem.real_name, m.poster_name) AS poster_name, ' . ($user_info['is_guest'] ? '1 AS is_read, 0 AS new_from' : ' Chris@76: IFNULL(lt.id_msg, IFNULL(lmr.id_msg, 0)) >= m.id_msg_modified AS is_read, Chris@76: IFNULL(lt.id_msg, IFNULL(lmr.id_msg, -1)) + 1 AS new_from') . ', ' . ($limit_body ? 'SUBSTRING(m.body, 1, 384) AS body' : 'm.body') . ', m.smileys_enabled Chris@76: FROM {db_prefix}messages AS m Chris@76: INNER JOIN {db_prefix}boards AS b ON (b.id_board = m.id_board) Chris@76: LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = m.id_member)' . (!$user_info['is_guest'] ? ' Chris@76: LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = m.id_topic AND lt.id_member = {int:current_member}) Chris@76: LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = m.id_board AND lmr.id_member = {int:current_member})' : '') . ' Chris@76: WHERE 1=1 ' . ($override_permissions ? '' : ' Chris@76: AND {query_wanna_see_board}') . ($modSettings['postmod_active'] ? ' Chris@76: AND m.approved = {int:is_approved}' : '') . ' Chris@76: ' . (empty($query_where) ? '' : 'AND ' . $query_where) . ' Chris@76: ORDER BY ' . $query_order . ' Chris@76: ' . ($query_limit == '' ? '' : 'LIMIT ' . $query_limit), Chris@76: array_merge($query_where_params, array( Chris@76: 'current_member' => $user_info['id'], Chris@76: 'is_approved' => 1, Chris@76: )) Chris@76: ); Chris@76: $posts = array(); Chris@76: while ($row = $smcFunc['db_fetch_assoc']($request)) Chris@76: { Chris@76: $row['body'] = parse_bbc($row['body'], $row['smileys_enabled'], $row['id_msg']); Chris@76: Chris@76: // Censor it! Chris@76: censorText($row['subject']); Chris@76: censorText($row['body']); Chris@76: Chris@76: $preview = strip_tags(strtr($row['body'], array('
' => ' '))); Chris@76: Chris@76: // Build the array. Chris@76: $posts[] = array( Chris@76: 'id' => $row['id_msg'], Chris@76: 'board' => array( Chris@76: 'id' => $row['id_board'], Chris@76: 'name' => $row['board_name'], Chris@76: 'href' => $scripturl . '?board=' . $row['id_board'] . '.0', Chris@76: 'link' => '' . $row['board_name'] . '' Chris@76: ), Chris@76: 'topic' => $row['id_topic'], Chris@76: 'poster' => array( Chris@76: 'id' => $row['id_member'], Chris@76: 'name' => $row['poster_name'], Chris@76: 'href' => empty($row['id_member']) ? '' : $scripturl . '?action=profile;u=' . $row['id_member'], Chris@76: 'link' => empty($row['id_member']) ? $row['poster_name'] : '' . $row['poster_name'] . '' Chris@76: ), Chris@76: 'subject' => $row['subject'], Chris@76: 'short_subject' => shorten_subject($row['subject'], 25), Chris@76: 'preview' => $smcFunc['strlen']($preview) > 128 ? $smcFunc['substr']($preview, 0, 128) . '...' : $preview, Chris@76: 'body' => $row['body'], Chris@76: 'time' => timeformat($row['poster_time']), Chris@76: 'timestamp' => forum_time(true, $row['poster_time']), Chris@76: 'href' => $scripturl . '?topic=' . $row['id_topic'] . '.msg' . $row['id_msg'] . ';topicseen#new', Chris@76: 'link' => '' . $row['subject'] . '', Chris@76: 'new' => !empty($row['is_read']), Chris@76: 'is_new' => empty($row['is_read']), Chris@76: 'new_from' => $row['new_from'], Chris@76: ); Chris@76: } Chris@76: $smcFunc['db_free_result']($request); Chris@76: Chris@76: // Just return it. Chris@76: if ($output_method != 'echo' || empty($posts)) Chris@76: return $posts; Chris@76: Chris@76: echo ' Chris@76: '; Chris@76: foreach ($posts as $post) Chris@76: echo ' Chris@76: Chris@76: Chris@76: Chris@76: Chris@76: '; Chris@76: echo ' Chris@76:
Chris@76: [', $post['board']['link'], '] Chris@76: Chris@76: ', $post['subject'], ' Chris@76: ', $txt['by'], ' ', $post['poster']['link'], ' Chris@76: ', $post['is_new'] ? '' . $txt['new'] . '' : '', ' Chris@76: Chris@76: ', $post['time'], ' Chris@76:
'; Chris@76: } Chris@76: Chris@76: // Recent topic list: [board] Subject by Poster Date Chris@76: function ssi_recentTopics($num_recent = 8, $exclude_boards = null, $include_boards = null, $output_method = 'echo') Chris@76: { Chris@76: global $context, $settings, $scripturl, $txt, $db_prefix, $user_info; Chris@76: global $modSettings, $smcFunc; Chris@76: Chris@76: if ($exclude_boards === null && !empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] > 0) Chris@76: $exclude_boards = array($modSettings['recycle_board']); Chris@76: else Chris@76: $exclude_boards = empty($exclude_boards) ? array() : (is_array($exclude_boards) ? $exclude_boards : array($exclude_boards)); Chris@76: Chris@76: // Only some boards?. Chris@76: if (is_array($include_boards) || (int) $include_boards === $include_boards) Chris@76: { Chris@76: $include_boards = is_array($include_boards) ? $include_boards : array($include_boards); Chris@76: } Chris@76: elseif ($include_boards != null) Chris@76: { Chris@76: $output_method = $include_boards; Chris@76: $include_boards = array(); Chris@76: } Chris@76: Chris@76: $stable_icons = array('xx', 'thumbup', 'thumbdown', 'exclamation', 'question', 'lamp', 'smiley', 'angry', 'cheesy', 'grin', 'sad', 'wink', 'moved', 'recycled', 'wireless'); Chris@76: $icon_sources = array(); Chris@76: foreach ($stable_icons as $icon) Chris@76: $icon_sources[$icon] = 'images_url'; Chris@76: Chris@76: // Find all the posts in distinct topics. Newer ones will have higher IDs. Chris@76: $request = $smcFunc['db_query']('substring', ' Chris@76: SELECT Chris@76: m.poster_time, ms.subject, m.id_topic, m.id_member, m.id_msg, b.id_board, b.name AS board_name, t.num_replies, t.num_views, Chris@76: IFNULL(mem.real_name, m.poster_name) AS poster_name, ' . ($user_info['is_guest'] ? '1 AS is_read, 0 AS new_from' : ' Chris@76: IFNULL(lt.id_msg, IFNULL(lmr.id_msg, 0)) >= m.id_msg_modified AS is_read, Chris@76: IFNULL(lt.id_msg, IFNULL(lmr.id_msg, -1)) + 1 AS new_from') . ', SUBSTRING(m.body, 1, 384) AS body, m.smileys_enabled, m.icon Chris@76: FROM {db_prefix}topics AS t Chris@76: INNER JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_last_msg) Chris@76: INNER JOIN {db_prefix}boards AS b ON (b.id_board = t.id_board) Chris@76: INNER JOIN {db_prefix}messages AS ms ON (ms.id_msg = t.id_first_msg) Chris@76: LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = m.id_member)' . (!$user_info['is_guest'] ? ' Chris@76: LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = t.id_topic AND lt.id_member = {int:current_member}) Chris@76: LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = b.id_board AND lmr.id_member = {int:current_member})' : '') . ' Chris@76: WHERE t.id_last_msg >= {int:min_message_id} Chris@76: ' . (empty($exclude_boards) ? '' : ' Chris@76: AND b.id_board NOT IN ({array_int:exclude_boards})') . ' Chris@76: ' . (empty($include_boards) ? '' : ' Chris@76: AND b.id_board IN ({array_int:include_boards})') . ' Chris@76: AND {query_wanna_see_board}' . ($modSettings['postmod_active'] ? ' Chris@76: AND t.approved = {int:is_approved} Chris@76: AND m.approved = {int:is_approved}' : '') . ' Chris@76: ORDER BY t.id_last_msg DESC Chris@76: LIMIT ' . $num_recent, Chris@76: array( Chris@76: 'current_member' => $user_info['id'], Chris@76: 'include_boards' => empty($include_boards) ? '' : $include_boards, Chris@76: 'exclude_boards' => empty($exclude_boards) ? '' : $exclude_boards, Chris@76: 'min_message_id' => $modSettings['maxMsgID'] - 35 * min($num_recent, 5), Chris@76: 'is_approved' => 1, Chris@76: ) Chris@76: ); Chris@76: $posts = array(); Chris@76: while ($row = $smcFunc['db_fetch_assoc']($request)) Chris@76: { Chris@76: $row['body'] = strip_tags(strtr(parse_bbc($row['body'], $row['smileys_enabled'], $row['id_msg']), array('
' => ' '))); Chris@76: if ($smcFunc['strlen']($row['body']) > 128) Chris@76: $row['body'] = $smcFunc['substr']($row['body'], 0, 128) . '...'; Chris@76: Chris@76: // Censor the subject. Chris@76: censorText($row['subject']); Chris@76: censorText($row['body']); Chris@76: Chris@76: if (empty($modSettings['messageIconChecks_disable']) && !isset($icon_sources[$row['icon']])) Chris@76: $icon_sources[$row['icon']] = file_exists($settings['theme_dir'] . '/images/post/' . $row['icon'] . '.gif') ? 'images_url' : 'default_images_url'; Chris@76: Chris@76: // Build the array. Chris@76: $posts[] = array( Chris@76: 'board' => array( Chris@76: 'id' => $row['id_board'], Chris@76: 'name' => $row['board_name'], Chris@76: 'href' => $scripturl . '?board=' . $row['id_board'] . '.0', Chris@76: 'link' => '' . $row['board_name'] . '' Chris@76: ), Chris@76: 'topic' => $row['id_topic'], Chris@76: 'poster' => array( Chris@76: 'id' => $row['id_member'], Chris@76: 'name' => $row['poster_name'], Chris@76: 'href' => empty($row['id_member']) ? '' : $scripturl . '?action=profile;u=' . $row['id_member'], Chris@76: 'link' => empty($row['id_member']) ? $row['poster_name'] : '' . $row['poster_name'] . '' Chris@76: ), Chris@76: 'subject' => $row['subject'], Chris@76: 'replies' => $row['num_replies'], Chris@76: 'views' => $row['num_views'], Chris@76: 'short_subject' => shorten_subject($row['subject'], 25), Chris@76: 'preview' => $row['body'], Chris@76: 'time' => timeformat($row['poster_time']), Chris@76: 'timestamp' => forum_time(true, $row['poster_time']), Chris@76: 'href' => $scripturl . '?topic=' . $row['id_topic'] . '.msg' . $row['id_msg'] . ';topicseen#new', Chris@76: 'link' => '' . $row['subject'] . '', Chris@76: // Retained for compatibility - is technically incorrect! Chris@76: 'new' => !empty($row['is_read']), Chris@76: 'is_new' => empty($row['is_read']), Chris@76: 'new_from' => $row['new_from'], Chris@76: 'icon' => '' . $row['icon'] . '', Chris@76: ); Chris@76: } Chris@76: $smcFunc['db_free_result']($request); Chris@76: Chris@76: // Just return it. Chris@76: if ($output_method != 'echo' || empty($posts)) Chris@76: return $posts; Chris@76: Chris@76: echo ' Chris@76: '; Chris@76: foreach ($posts as $post) Chris@76: echo ' Chris@76: Chris@76: Chris@76: Chris@76: Chris@76: '; Chris@76: echo ' Chris@76:
Chris@76: [', $post['board']['link'], '] Chris@76: Chris@76: ', $post['subject'], ' Chris@76: ', $txt['by'], ' ', $post['poster']['link'], ' Chris@76: ', !$post['is_new'] ? '' : '' . $txt['new'] . '', ' Chris@76: Chris@76: ', $post['time'], ' Chris@76:
'; Chris@76: } Chris@76: Chris@76: // Show the top poster's name and profile link. Chris@76: function ssi_topPoster($topNumber = 1, $output_method = 'echo') Chris@76: { Chris@76: global $db_prefix, $scripturl, $smcFunc; Chris@76: Chris@76: // Find the latest poster. Chris@76: $request = $smcFunc['db_query']('', ' Chris@76: SELECT id_member, real_name, posts Chris@76: FROM {db_prefix}members Chris@76: ORDER BY posts DESC Chris@76: LIMIT ' . $topNumber, Chris@76: array( Chris@76: ) Chris@76: ); Chris@76: $return = array(); Chris@76: while ($row = $smcFunc['db_fetch_assoc']($request)) Chris@76: $return[] = array( Chris@76: 'id' => $row['id_member'], Chris@76: 'name' => $row['real_name'], Chris@76: 'href' => $scripturl . '?action=profile;u=' . $row['id_member'], Chris@76: 'link' => '' . $row['real_name'] . '', Chris@76: 'posts' => $row['posts'] Chris@76: ); Chris@76: $smcFunc['db_free_result']($request); Chris@76: Chris@76: // Just return all the top posters. Chris@76: if ($output_method != 'echo') Chris@76: return $return; Chris@76: Chris@76: // Make a quick array to list the links in. Chris@76: $temp_array = array(); Chris@76: foreach ($return as $member) Chris@76: $temp_array[] = $member['link']; Chris@76: Chris@76: echo implode(', ', $temp_array); Chris@76: } Chris@76: Chris@76: // Show boards by activity. Chris@76: function ssi_topBoards($num_top = 10, $output_method = 'echo') Chris@76: { Chris@76: global $context, $settings, $db_prefix, $txt, $scripturl, $user_info, $modSettings, $smcFunc; Chris@76: Chris@76: // Find boards with lots of posts. Chris@76: $request = $smcFunc['db_query']('', ' Chris@76: SELECT Chris@76: b.name, b.num_topics, b.num_posts, b.id_board,' . (!$user_info['is_guest'] ? ' 1 AS is_read' : ' Chris@76: (IFNULL(lb.id_msg, 0) >= b.id_last_msg) AS is_read') . ' Chris@76: FROM {db_prefix}boards AS b Chris@76: LEFT JOIN {db_prefix}log_boards AS lb ON (lb.id_board = b.id_board AND lb.id_member = {int:current_member}) Chris@76: WHERE {query_wanna_see_board}' . (!empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] > 0 ? ' Chris@76: AND b.id_board != {int:recycle_board}' : '') . ' Chris@76: ORDER BY b.num_posts DESC Chris@76: LIMIT ' . $num_top, Chris@76: array( Chris@76: 'current_member' => $user_info['id'], Chris@76: 'recycle_board' => (int) $modSettings['recycle_board'], Chris@76: ) Chris@76: ); Chris@76: $boards = array(); Chris@76: while ($row = $smcFunc['db_fetch_assoc']($request)) Chris@76: $boards[] = array( Chris@76: 'id' => $row['id_board'], Chris@76: 'num_posts' => $row['num_posts'], Chris@76: 'num_topics' => $row['num_topics'], Chris@76: 'name' => $row['name'], Chris@76: 'new' => empty($row['is_read']), Chris@76: 'href' => $scripturl . '?board=' . $row['id_board'] . '.0', Chris@76: 'link' => '' . $row['name'] . '' Chris@76: ); Chris@76: $smcFunc['db_free_result']($request); Chris@76: Chris@76: // If we shouldn't output or have nothing to output, just jump out. Chris@76: if ($output_method != 'echo' || empty($boards)) Chris@76: return $boards; Chris@76: Chris@76: echo ' Chris@76: Chris@76: Chris@76: Chris@76: Chris@76: Chris@76: '; Chris@76: foreach ($boards as $board) Chris@76: echo ' Chris@76: Chris@76: Chris@76: Chris@76: Chris@76: '; Chris@76: echo ' Chris@76:
', $txt['board'], '', $txt['board_topics'], '', $txt['posts'], '
', $board['link'], $board['new'] ? ' ' . $txt['new'] . '' : '', '', comma_format($board['num_topics']), '', comma_format($board['num_posts']), '
'; Chris@76: } Chris@76: Chris@76: // Shows the top topics. Chris@76: function ssi_topTopics($type = 'replies', $num_topics = 10, $output_method = 'echo') Chris@76: { Chris@76: global $db_prefix, $txt, $scripturl, $user_info, $modSettings, $smcFunc, $context; Chris@76: Chris@76: if ($modSettings['totalMessages'] > 100000) Chris@76: { Chris@76: // !!! Why don't we use {query(_wanna)_see_board}? Chris@76: $request = $smcFunc['db_query']('', ' Chris@76: SELECT id_topic Chris@76: FROM {db_prefix}topics Chris@76: WHERE num_' . ($type != 'replies' ? 'views' : 'replies') . ' != 0' . ($modSettings['postmod_active'] ? ' Chris@76: AND approved = {int:is_approved}' : '') . ' Chris@76: ORDER BY num_' . ($type != 'replies' ? 'views' : 'replies') . ' DESC Chris@76: LIMIT {int:limit}', Chris@76: array( Chris@76: 'is_approved' => 1, Chris@76: 'limit' => $num_topics > 100 ? ($num_topics + ($num_topics / 2)) : 100, Chris@76: ) Chris@76: ); Chris@76: $topic_ids = array(); Chris@76: while ($row = $smcFunc['db_fetch_assoc']($request)) Chris@76: $topic_ids[] = $row['id_topic']; Chris@76: $smcFunc['db_free_result']($request); Chris@76: } Chris@76: else Chris@76: $topic_ids = array(); Chris@76: Chris@76: $request = $smcFunc['db_query']('', ' Chris@76: SELECT m.subject, m.id_topic, t.num_views, t.num_replies Chris@76: FROM {db_prefix}topics AS t Chris@76: INNER JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_first_msg) Chris@76: INNER JOIN {db_prefix}boards AS b ON (b.id_board = t.id_board) Chris@76: WHERE {query_wanna_see_board}' . ($modSettings['postmod_active'] ? ' Chris@76: AND t.approved = {int:is_approved}' : '') . (!empty($topic_ids) ? ' Chris@76: AND t.id_topic IN ({array_int:topic_list})' : '') . (!empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] > 0 ? ' Chris@76: AND b.id_board != {int:recycle_enable}' : '') . ' Chris@76: ORDER BY t.num_' . ($type != 'replies' ? 'views' : 'replies') . ' DESC Chris@76: LIMIT {int:limit}', Chris@76: array( Chris@76: 'topic_list' => $topic_ids, Chris@76: 'is_approved' => 1, Chris@76: 'recycle_enable' => $modSettings['recycle_board'], Chris@76: 'limit' => $num_topics, Chris@76: ) Chris@76: ); Chris@76: $topics = array(); Chris@76: while ($row = $smcFunc['db_fetch_assoc']($request)) Chris@76: { Chris@76: censorText($row['subject']); Chris@76: Chris@76: $topics[] = array( Chris@76: 'id' => $row['id_topic'], Chris@76: 'subject' => $row['subject'], Chris@76: 'num_replies' => $row['num_replies'], Chris@76: 'num_views' => $row['num_views'], Chris@76: 'href' => $scripturl . '?topic=' . $row['id_topic'] . '.0', Chris@76: 'link' => '' . $row['subject'] . '', Chris@76: ); Chris@76: } Chris@76: $smcFunc['db_free_result']($request); Chris@76: Chris@76: if ($output_method != 'echo' || empty($topics)) Chris@76: return $topics; Chris@76: Chris@76: echo ' Chris@76: Chris@76: Chris@76: Chris@76: Chris@76: Chris@76: '; Chris@76: foreach ($topics as $topic) Chris@76: echo ' Chris@76: Chris@76: Chris@76: Chris@76: Chris@76: '; Chris@76: echo ' Chris@76:
', $txt['views'], '', $txt['replies'], '
Chris@76: ', $topic['link'], ' Chris@76: ', comma_format($topic['num_views']), '', comma_format($topic['num_replies']), '
'; Chris@76: } Chris@76: Chris@76: // Shows the top topics, by replies. Chris@76: function ssi_topTopicsReplies($num_topics = 10, $output_method = 'echo') Chris@76: { Chris@76: return ssi_topTopics('replies', $num_topics, $output_method); Chris@76: } Chris@76: Chris@76: // Shows the top topics, by views. Chris@76: function ssi_topTopicsViews($num_topics = 10, $output_method = 'echo') Chris@76: { Chris@76: return ssi_topTopics('views', $num_topics, $output_method); Chris@76: } Chris@76: Chris@76: // Show a link to the latest member: Please welcome, Someone, out latest member. Chris@76: function ssi_latestMember($output_method = 'echo') Chris@76: { Chris@76: global $db_prefix, $txt, $scripturl, $context; Chris@76: Chris@76: if ($output_method == 'echo') Chris@76: echo ' Chris@76: ', $txt['welcome_member'], ' ', $context['common_stats']['latest_member']['link'], '', $txt['newest_member'], '
'; Chris@76: else Chris@76: return $context['common_stats']['latest_member']; Chris@76: } Chris@76: Chris@76: // Fetch a random member - if type set to 'day' will only change once a day! Chris@76: function ssi_randomMember($random_type = '', $output_method = 'echo') Chris@76: { Chris@76: global $modSettings; Chris@76: Chris@76: // If we're looking for something to stay the same each day then seed the generator. Chris@76: if ($random_type == 'day') Chris@76: { Chris@76: // Set the seed to change only once per day. Chris@76: mt_srand(floor(time() / 86400)); Chris@76: } Chris@76: Chris@76: // Get the lowest ID we're interested in. Chris@76: $member_id = mt_rand(1, $modSettings['latestMember']); Chris@76: Chris@76: $where_query = ' Chris@76: id_member >= {int:selected_member} Chris@76: AND is_activated = {int:is_activated}'; Chris@76: Chris@76: $query_where_params = array( Chris@76: 'selected_member' => $member_id, Chris@76: 'is_activated' => 1, Chris@76: ); Chris@76: Chris@76: $result = ssi_queryMembers($where_query, $query_where_params, 1, 'id_member ASC', $output_method); Chris@76: Chris@76: // If we got nothing do the reverse - in case of unactivated members. Chris@76: if (empty($result)) Chris@76: { Chris@76: $where_query = ' Chris@76: id_member <= {int:selected_member} Chris@76: AND is_activated = {int:is_activated}'; Chris@76: Chris@76: $query_where_params = array( Chris@76: 'selected_member' => $member_id, Chris@76: 'is_activated' => 1, Chris@76: ); Chris@76: Chris@76: $result = ssi_queryMembers($where_query, $query_where_params, 1, 'id_member DESC', $output_method); Chris@76: } Chris@76: Chris@76: // Just to be sure put the random generator back to something... random. Chris@76: if ($random_type != '') Chris@76: mt_srand(time()); Chris@76: Chris@76: return $result; Chris@76: } Chris@76: Chris@76: // Fetch a specific member. Chris@76: function ssi_fetchMember($member_ids = array(), $output_method = 'echo') Chris@76: { Chris@76: if (empty($member_ids)) Chris@76: return; Chris@76: Chris@76: // Can have more than one member if you really want... Chris@76: $member_ids = is_array($member_ids) ? $member_ids : array($member_ids); Chris@76: Chris@76: // Restrict it right! Chris@76: $query_where = ' Chris@76: id_member IN ({array_int:member_list})'; Chris@76: Chris@76: $query_where_params = array( Chris@76: 'member_list' => $member_ids, Chris@76: ); Chris@76: Chris@76: // Then make the query and dump the data. Chris@76: return ssi_queryMembers($query_where, $query_where_params, '', 'id_member', $output_method); Chris@76: } Chris@76: Chris@76: // Get all members of a group. Chris@76: function ssi_fetchGroupMembers($group_id = null, $output_method = 'echo') Chris@76: { Chris@76: if ($group_id === null) Chris@76: return; Chris@76: Chris@76: $query_where = ' Chris@76: id_group = {int:id_group} Chris@76: OR id_post_group = {int:id_group} Chris@76: OR FIND_IN_SET({int:id_group}, additional_groups)'; Chris@76: Chris@76: $query_where_params = array( Chris@76: 'id_group' => $group_id, Chris@76: ); Chris@76: Chris@76: return ssi_queryMembers($query_where, $query_where_params, '', 'real_name', $output_method); Chris@76: } Chris@76: Chris@76: // Fetch some member data! Chris@76: function ssi_queryMembers($query_where = null, $query_where_params = array(), $query_limit = '', $query_order = 'id_member DESC', $output_method = 'echo') Chris@76: { Chris@76: global $context, $settings, $scripturl, $txt, $db_prefix, $user_info; Chris@76: global $modSettings, $smcFunc, $memberContext; Chris@76: Chris@76: if ($query_where === null) Chris@76: return; Chris@76: Chris@76: // Fetch the members in question. Chris@76: $request = $smcFunc['db_query']('', ' Chris@76: SELECT id_member Chris@76: FROM {db_prefix}members Chris@76: WHERE ' . $query_where . ' Chris@76: ORDER BY ' . $query_order . ' Chris@76: ' . ($query_limit == '' ? '' : 'LIMIT ' . $query_limit), Chris@76: array_merge($query_where_params, array( Chris@76: )) Chris@76: ); Chris@76: $members = array(); Chris@76: while ($row = $smcFunc['db_fetch_assoc']($request)) Chris@76: $members[] = $row['id_member']; Chris@76: $smcFunc['db_free_result']($request); Chris@76: Chris@76: if (empty($members)) Chris@76: return array(); Chris@76: Chris@76: // Load the members. Chris@76: loadMemberData($members); Chris@76: Chris@76: // Draw the table! Chris@76: if ($output_method == 'echo') Chris@76: echo ' Chris@76: '; Chris@76: Chris@76: $query_members = array(); Chris@76: foreach ($members as $member) Chris@76: { Chris@76: // Load their context data. Chris@76: if (!loadMemberContext($member)) Chris@76: continue; Chris@76: Chris@76: // Store this member's information. Chris@76: $query_members[$member] = $memberContext[$member]; Chris@76: Chris@76: // Only do something if we're echo'ing. Chris@76: if ($output_method == 'echo') Chris@76: echo ' Chris@76: Chris@76: Chris@76: '; Chris@76: } Chris@76: Chris@76: // End the table if appropriate. Chris@76: if ($output_method == 'echo') Chris@76: echo ' Chris@76:
Chris@76: ', $query_members[$member]['link'], ' Chris@76:
', $query_members[$member]['blurb'], ' Chris@76:
', $query_members[$member]['avatar']['image'], ' Chris@76:
'; Chris@76: Chris@76: // Send back the data. Chris@76: return $query_members; Chris@76: } Chris@76: Chris@76: // Show some basic stats: Total This: XXXX, etc. Chris@76: function ssi_boardStats($output_method = 'echo') Chris@76: { Chris@76: global $db_prefix, $txt, $scripturl, $modSettings, $smcFunc; Chris@76: Chris@76: $totals = array( Chris@76: 'members' => $modSettings['totalMembers'], Chris@76: 'posts' => $modSettings['totalMessages'], Chris@76: 'topics' => $modSettings['totalTopics'] Chris@76: ); Chris@76: Chris@76: $result = $smcFunc['db_query']('', ' Chris@76: SELECT COUNT(*) Chris@76: FROM {db_prefix}boards', Chris@76: array( Chris@76: ) Chris@76: ); Chris@76: list ($totals['boards']) = $smcFunc['db_fetch_row']($result); Chris@76: $smcFunc['db_free_result']($result); Chris@76: Chris@76: $result = $smcFunc['db_query']('', ' Chris@76: SELECT COUNT(*) Chris@76: FROM {db_prefix}categories', Chris@76: array( Chris@76: ) Chris@76: ); Chris@76: list ($totals['categories']) = $smcFunc['db_fetch_row']($result); Chris@76: $smcFunc['db_free_result']($result); Chris@76: Chris@76: if ($output_method != 'echo') Chris@76: return $totals; Chris@76: Chris@76: echo ' Chris@76: ', $txt['total_members'], ': ', comma_format($totals['members']), '
Chris@76: ', $txt['total_posts'], ': ', comma_format($totals['posts']), '
Chris@76: ', $txt['total_topics'], ': ', comma_format($totals['topics']), '
Chris@76: ', $txt['total_cats'], ': ', comma_format($totals['categories']), '
Chris@76: ', $txt['total_boards'], ': ', comma_format($totals['boards']); Chris@76: } Chris@76: Chris@76: // Shows a list of online users: YY Guests, ZZ Users and then a list... Chris@76: function ssi_whosOnline($output_method = 'echo') Chris@76: { Chris@76: global $user_info, $txt, $sourcedir, $settings, $modSettings; Chris@76: Chris@76: require_once($sourcedir . '/Subs-MembersOnline.php'); Chris@76: $membersOnlineOptions = array( Chris@76: 'show_hidden' => allowedTo('moderate_forum'), Chris@76: 'sort' => 'log_time', Chris@76: 'reverse_sort' => true, Chris@76: ); Chris@76: $return = getMembersOnlineStats($membersOnlineOptions); Chris@76: Chris@76: // Add some redundancy for backwards compatibility reasons. Chris@76: if ($output_method != 'echo') Chris@76: return $return + array( Chris@76: 'users' => $return['users_online'], Chris@76: 'guests' => $return['num_guests'], Chris@76: 'hidden' => $return['num_users_hidden'], Chris@76: 'buddies' => $return['num_buddies'], Chris@76: 'num_users' => $return['num_users_online'], Chris@76: 'total_users' => $return['num_users_online'] + $return['num_guests'] + $return['num_spiders'], Chris@76: ); Chris@76: Chris@76: echo ' Chris@76: ', comma_format($return['num_guests']), ' ', $return['num_guests'] == 1 ? $txt['guest'] : $txt['guests'], ', ', comma_format($return['num_users_online']), ' ', $return['num_users_online'] == 1 ? $txt['user'] : $txt['users']; Chris@76: Chris@76: $bracketList = array(); Chris@76: if (!empty($user_info['buddies'])) Chris@76: $bracketList[] = comma_format($return['num_buddies']) . ' ' . ($return['num_buddies'] == 1 ? $txt['buddy'] : $txt['buddies']); Chris@76: if (!empty($return['num_spiders'])) Chris@76: $bracketList[] = comma_format($return['num_spiders']) . ' ' . ($return['num_spiders'] == 1 ? $txt['spider'] : $txt['spiders']); Chris@76: if (!empty($return['num_users_hidden'])) Chris@76: $bracketList[] = comma_format($return['num_users_hidden']) . ' ' . $txt['hidden']; Chris@76: Chris@76: if (!empty($bracketList)) Chris@76: echo ' (' . implode(', ', $bracketList) . ')'; Chris@76: Chris@76: echo '
Chris@76: ', implode(', ', $return['list_users_online']); Chris@76: Chris@76: // Showing membergroups? Chris@76: if (!empty($settings['show_group_key']) && !empty($return['membergroups'])) Chris@76: echo '
Chris@76: [' . implode(']  [', $return['membergroups']) . ']'; Chris@76: } Chris@76: Chris@76: // Just like whosOnline except it also logs the online presence. Chris@76: function ssi_logOnline($output_method = 'echo') Chris@76: { Chris@76: writeLog(); Chris@76: Chris@76: if ($output_method != 'echo') Chris@76: return ssi_whosOnline($output_method); Chris@76: else Chris@76: ssi_whosOnline($output_method); Chris@76: } Chris@76: Chris@76: // Shows a login box. Chris@76: function ssi_login($redirect_to = '', $output_method = 'echo') Chris@76: { Chris@76: global $scripturl, $txt, $user_info, $context, $modSettings; Chris@76: Chris@76: if ($redirect_to != '') Chris@76: $_SESSION['login_url'] = $redirect_to; Chris@76: Chris@76: if ($output_method != 'echo' || !$user_info['is_guest']) Chris@76: return $user_info['is_guest']; Chris@76: Chris@76: echo ' Chris@76:
Chris@76: Chris@76: Chris@76: Chris@76: Chris@76: Chris@76: Chris@76: Chris@76: '; Chris@76: Chris@76: // Open ID? Chris@76: if (!empty($modSettings['enableOpenID'])) Chris@76: echo ' Chris@76: Chris@76: Chris@76: Chris@76: Chris@76: '; Chris@76: Chris@76: echo ' Chris@76: Chris@76: Chris@76: Chris@76:
 
 
—', $txt['or'], '—
 
Chris@76:
'; Chris@76: Chris@76: } Chris@76: Chris@76: // Show the most-voted-in poll. Chris@76: function ssi_topPoll($output_method = 'echo') Chris@76: { Chris@76: // Just use recentPoll, no need to duplicate code... Chris@76: return ssi_recentPoll(true, $output_method); Chris@76: } Chris@76: Chris@76: // Show the most recently posted poll. Chris@76: function ssi_recentPoll($topPollInstead = false, $output_method = 'echo') Chris@76: { Chris@76: global $db_prefix, $txt, $settings, $boardurl, $user_info, $context, $smcFunc, $modSettings; Chris@76: Chris@76: $boardsAllowed = array_intersect(boardsAllowedTo('poll_view'), boardsAllowedTo('poll_vote')); Chris@76: Chris@76: if (empty($boardsAllowed)) Chris@76: return array(); Chris@76: Chris@76: $request = $smcFunc['db_query']('', ' Chris@76: SELECT p.id_poll, p.question, t.id_topic, p.max_votes, p.guest_vote, p.hide_results, p.expire_time Chris@76: FROM {db_prefix}polls AS p Chris@76: INNER JOIN {db_prefix}topics AS t ON (t.id_poll = p.id_poll' . ($modSettings['postmod_active'] ? ' AND t.approved = {int:is_approved}' : '') . ') Chris@76: INNER JOIN {db_prefix}boards AS b ON (b.id_board = t.id_board)' . ($topPollInstead ? ' Chris@76: INNER JOIN {db_prefix}poll_choices AS pc ON (pc.id_poll = p.id_poll)' : '') . ' Chris@76: LEFT JOIN {db_prefix}log_polls AS lp ON (lp.id_poll = p.id_poll AND lp.id_member > {int:no_member} AND lp.id_member = {int:current_member}) Chris@76: WHERE p.voting_locked = {int:voting_opened} Chris@76: AND (p.expire_time = {int:no_expiration} OR {int:current_time} < p.expire_time) Chris@76: AND ' . ($user_info['is_guest'] ? 'p.guest_vote = {int:guest_vote_allowed}' : 'lp.id_choice IS NULL') . ' Chris@76: AND {query_wanna_see_board}' . (!in_array(0, $boardsAllowed) ? ' Chris@76: AND b.id_board IN ({array_int:boards_allowed_list})' : '') . (!empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] > 0 ? ' Chris@76: AND b.id_board != {int:recycle_enable}' : '') . ' Chris@76: ORDER BY ' . ($topPollInstead ? 'pc.votes' : 'p.id_poll') . ' DESC Chris@76: LIMIT 1', Chris@76: array( Chris@76: 'current_member' => $user_info['id'], Chris@76: 'boards_allowed_list' => $boardsAllowed, Chris@76: 'is_approved' => 1, Chris@76: 'guest_vote_allowed' => 1, Chris@76: 'no_member' => 0, Chris@76: 'voting_opened' => 0, Chris@76: 'no_expiration' => 0, Chris@76: 'current_time' => time(), Chris@76: 'recycle_enable' => $modSettings['recycle_board'], Chris@76: ) Chris@76: ); Chris@76: $row = $smcFunc['db_fetch_assoc']($request); Chris@76: $smcFunc['db_free_result']($request); Chris@76: Chris@76: // This user has voted on all the polls. Chris@76: if ($row === false) Chris@76: return array(); Chris@76: Chris@76: // If this is a guest who's voted we'll through ourselves to show poll to show the results. Chris@76: if ($user_info['is_guest'] && (!$row['guest_vote'] || (isset($_COOKIE['guest_poll_vote']) && in_array($row['id_poll'], explode(',', $_COOKIE['guest_poll_vote']))))) Chris@76: return ssi_showPoll($row['id_topic'], $output_method); Chris@76: Chris@76: $request = $smcFunc['db_query']('', ' Chris@76: SELECT COUNT(DISTINCT id_member) Chris@76: FROM {db_prefix}log_polls Chris@76: WHERE id_poll = {int:current_poll}', Chris@76: array( Chris@76: 'current_poll' => $row['id_poll'], Chris@76: ) Chris@76: ); Chris@76: list ($total) = $smcFunc['db_fetch_row']($request); Chris@76: $smcFunc['db_free_result']($request); Chris@76: Chris@76: $request = $smcFunc['db_query']('', ' Chris@76: SELECT id_choice, label, votes Chris@76: FROM {db_prefix}poll_choices Chris@76: WHERE id_poll = {int:current_poll}', Chris@76: array( Chris@76: 'current_poll' => $row['id_poll'], Chris@76: ) Chris@76: ); Chris@76: $options = array(); Chris@76: while ($rowChoice = $smcFunc['db_fetch_assoc']($request)) Chris@76: { Chris@76: censorText($rowChoice['label']); Chris@76: Chris@76: $options[$rowChoice['id_choice']] = array($rowChoice['label'], $rowChoice['votes']); Chris@76: } Chris@76: $smcFunc['db_free_result']($request); Chris@76: Chris@76: // Can they view it? Chris@76: $is_expired = !empty($row['expire_time']) && $row['expire_time'] < time(); Chris@76: $allow_view_results = allowedTo('moderate_board') || $row['hide_results'] == 0 || $is_expired; Chris@76: Chris@76: $return = array( Chris@76: 'id' => $row['id_poll'], Chris@76: 'image' => 'poll', Chris@76: 'question' => $row['question'], Chris@76: 'total_votes' => $total, Chris@76: 'is_locked' => false, Chris@76: 'topic' => $row['id_topic'], Chris@76: 'allow_view_results' => $allow_view_results, Chris@76: 'options' => array() Chris@76: ); Chris@76: Chris@76: // Calculate the percentages and bar lengths... Chris@76: $divisor = $return['total_votes'] == 0 ? 1 : $return['total_votes']; Chris@76: foreach ($options as $i => $option) Chris@76: { Chris@76: $bar = floor(($option[1] * 100) / $divisor); Chris@76: $barWide = $bar == 0 ? 1 : floor(($bar * 5) / 3); Chris@76: $return['options'][$i] = array( Chris@76: 'id' => 'options-' . ($topPollInstead ? 'top-' : 'recent-') . $i, Chris@76: 'percent' => $bar, Chris@76: 'votes' => $option[1], Chris@76: 'bar' => '-', Chris@76: 'option' => parse_bbc($option[0]), Chris@76: 'vote_button' => '' Chris@76: ); Chris@76: } Chris@76: Chris@76: $return['allowed_warning'] = $row['max_votes'] > 1 ? sprintf($txt['poll_options6'], min(count($options), $row['max_votes'])) : ''; Chris@76: Chris@76: if ($output_method != 'echo') Chris@76: return $return; Chris@76: Chris@76: if ($allow_view_results) Chris@76: { Chris@76: echo ' Chris@76:
Chris@76: ', $return['question'], '
Chris@76: ', !empty($return['allowed_warning']) ? $return['allowed_warning'] . '
' : ''; Chris@76: Chris@76: foreach ($return['options'] as $option) Chris@76: echo ' Chris@76:
'; Chris@76: Chris@76: echo ' Chris@76: Chris@76: Chris@76: Chris@76:
'; Chris@76: } Chris@76: else Chris@76: echo $txt['poll_cannot_see']; Chris@76: } Chris@76: Chris@76: function ssi_showPoll($topic = null, $output_method = 'echo') Chris@76: { Chris@76: global $db_prefix, $txt, $settings, $boardurl, $user_info, $context, $smcFunc, $modSettings; Chris@76: Chris@76: $boardsAllowed = boardsAllowedTo('poll_view'); Chris@76: Chris@76: if (empty($boardsAllowed)) Chris@76: return array(); Chris@76: Chris@76: if ($topic === null && isset($_REQUEST['ssi_topic'])) Chris@76: $topic = (int) $_REQUEST['ssi_topic']; Chris@76: else Chris@76: $topic = (int) $topic; Chris@76: Chris@76: $request = $smcFunc['db_query']('', ' Chris@76: SELECT Chris@76: p.id_poll, p.question, p.voting_locked, p.hide_results, p.expire_time, p.max_votes, p.guest_vote, b.id_board Chris@76: FROM {db_prefix}topics AS t Chris@76: INNER JOIN {db_prefix}polls AS p ON (p.id_poll = t.id_poll) Chris@76: INNER JOIN {db_prefix}boards AS b ON (b.id_board = t.id_board) Chris@76: WHERE t.id_topic = {int:current_topic} Chris@76: AND {query_see_board}' . (!in_array(0, $boardsAllowed) ? ' Chris@76: AND b.id_board IN ({array_int:boards_allowed_see})' : '') . ($modSettings['postmod_active'] ? ' Chris@76: AND t.approved = {int:is_approved}' : '') . ' Chris@76: LIMIT 1', Chris@76: array( Chris@76: 'current_topic' => $topic, Chris@76: 'boards_allowed_see' => $boardsAllowed, Chris@76: 'is_approved' => 1, Chris@76: ) Chris@76: ); Chris@76: Chris@76: // Either this topic has no poll, or the user cannot view it. Chris@76: if ($smcFunc['db_num_rows']($request) == 0) Chris@76: return array(); Chris@76: Chris@76: $row = $smcFunc['db_fetch_assoc']($request); Chris@76: $smcFunc['db_free_result']($request); Chris@76: Chris@76: // Check if they can vote. Chris@76: if (!empty($row['expire_time']) && $row['expire_time'] < time()) Chris@76: $allow_vote = false; Chris@76: elseif ($user_info['is_guest'] && $row['guest_vote'] && (!isset($_COOKIE['guest_poll_vote']) || !in_array($row['id_poll'], explode(',', $_COOKIE['guest_poll_vote'])))) Chris@76: $allow_vote = true; Chris@76: elseif ($user_info['is_guest']) Chris@76: $allow_vote = false; Chris@76: elseif (!empty($row['voting_locked']) || !allowedTo('poll_vote', $row['id_board'])) Chris@76: $allow_vote = false; Chris@76: else Chris@76: { Chris@76: $request = $smcFunc['db_query']('', ' Chris@76: SELECT id_member Chris@76: FROM {db_prefix}log_polls Chris@76: WHERE id_poll = {int:current_poll} Chris@76: AND id_member = {int:current_member} Chris@76: LIMIT 1', Chris@76: array( Chris@76: 'current_member' => $user_info['id'], Chris@76: 'current_poll' => $row['id_poll'], Chris@76: ) Chris@76: ); Chris@76: $allow_vote = $smcFunc['db_num_rows']($request) == 0; Chris@76: $smcFunc['db_free_result']($request); Chris@76: } Chris@76: Chris@76: // Can they view? Chris@76: $is_expired = !empty($row['expire_time']) && $row['expire_time'] < time(); Chris@76: $allow_view_results = allowedTo('moderate_board') || $row['hide_results'] == 0 || ($row['hide_results'] == 1 && !$allow_vote) || $is_expired; Chris@76: Chris@76: $request = $smcFunc['db_query']('', ' Chris@76: SELECT COUNT(DISTINCT id_member) Chris@76: FROM {db_prefix}log_polls Chris@76: WHERE id_poll = {int:current_poll}', Chris@76: array( Chris@76: 'current_poll' => $row['id_poll'], Chris@76: ) Chris@76: ); Chris@76: list ($total) = $smcFunc['db_fetch_row']($request); Chris@76: $smcFunc['db_free_result']($request); Chris@76: Chris@76: $request = $smcFunc['db_query']('', ' Chris@76: SELECT id_choice, label, votes Chris@76: FROM {db_prefix}poll_choices Chris@76: WHERE id_poll = {int:current_poll}', Chris@76: array( Chris@76: 'current_poll' => $row['id_poll'], Chris@76: ) Chris@76: ); Chris@76: $options = array(); Chris@76: $total_votes = 0; Chris@76: while ($rowChoice = $smcFunc['db_fetch_assoc']($request)) Chris@76: { Chris@76: censorText($rowChoice['label']); Chris@76: Chris@76: $options[$rowChoice['id_choice']] = array($rowChoice['label'], $rowChoice['votes']); Chris@76: $total_votes += $rowChoice['votes']; Chris@76: } Chris@76: $smcFunc['db_free_result']($request); Chris@76: Chris@76: $return = array( Chris@76: 'id' => $row['id_poll'], Chris@76: 'image' => empty($pollinfo['voting_locked']) ? 'poll' : 'locked_poll', Chris@76: 'question' => $row['question'], Chris@76: 'total_votes' => $total, Chris@76: 'is_locked' => !empty($pollinfo['voting_locked']), Chris@76: 'allow_vote' => $allow_vote, Chris@76: 'allow_view_results' => $allow_view_results, Chris@76: 'topic' => $topic Chris@76: ); Chris@76: Chris@76: // Calculate the percentages and bar lengths... Chris@76: $divisor = $total_votes == 0 ? 1 : $total_votes; Chris@76: foreach ($options as $i => $option) Chris@76: { Chris@76: $bar = floor(($option[1] * 100) / $divisor); Chris@76: $barWide = $bar == 0 ? 1 : floor(($bar * 5) / 3); Chris@76: $return['options'][$i] = array( Chris@76: 'id' => 'options-' . $i, Chris@76: 'percent' => $bar, Chris@76: 'votes' => $option[1], Chris@76: 'bar' => '-', Chris@76: 'option' => parse_bbc($option[0]), Chris@76: 'vote_button' => '' Chris@76: ); Chris@76: } Chris@76: Chris@76: $return['allowed_warning'] = $row['max_votes'] > 1 ? sprintf($txt['poll_options6'], min(count($options), $row['max_votes'])) : ''; Chris@76: Chris@76: if ($output_method != 'echo') Chris@76: return $return; Chris@76: Chris@76: if ($return['allow_vote']) Chris@76: { Chris@76: echo ' Chris@76:
Chris@76: ', $return['question'], '
Chris@76: ', !empty($return['allowed_warning']) ? $return['allowed_warning'] . '
' : ''; Chris@76: Chris@76: foreach ($return['options'] as $option) Chris@76: echo ' Chris@76:
'; Chris@76: Chris@76: echo ' Chris@76: Chris@76: Chris@76: Chris@76:
'; Chris@76: } Chris@76: elseif ($return['allow_view_results']) Chris@76: { Chris@76: echo ' Chris@76:
Chris@76: ', $return['question'], ' Chris@76:
'; Chris@76: Chris@76: foreach ($return['options'] as $option) Chris@76: echo ' Chris@76:
', $option['option'], '
Chris@76:
Chris@76:
Chris@76:
Chris@76:
Chris@76:
Chris@76: ', $option['votes'], ' (', $option['percent'], '%) Chris@76:
'; Chris@76: echo ' Chris@76:
Chris@76: ', $txt['poll_total_voters'], ': ', $return['total_votes'], ' Chris@76:
'; Chris@76: } Chris@76: // Cannot see it I'm afraid! Chris@76: else Chris@76: echo $txt['poll_cannot_see']; Chris@76: } Chris@76: Chris@76: // Takes care of voting - don't worry, this is done automatically. Chris@76: function ssi_pollVote() Chris@76: { Chris@76: global $context, $db_prefix, $user_info, $sc, $smcFunc, $sourcedir, $modSettings; Chris@76: Chris@76: if (!isset($_POST[$context['session_var']]) || $_POST[$context['session_var']] != $sc || empty($_POST['options']) || !isset($_POST['poll'])) Chris@76: { Chris@76: echo ' Chris@76: Chris@76: Chris@76: Chris@76: Chris@76: « Chris@76: '; Chris@76: return; Chris@76: } Chris@76: Chris@76: // This can cause weird errors! (ie. copyright missing.) Chris@76: checkSession(); Chris@76: Chris@76: $_POST['poll'] = (int) $_POST['poll']; Chris@76: Chris@76: // Check if they have already voted, or voting is locked. Chris@76: $request = $smcFunc['db_query']('', ' Chris@76: SELECT Chris@76: p.id_poll, p.voting_locked, p.expire_time, p.max_votes, p.guest_vote, Chris@76: t.id_topic, Chris@76: IFNULL(lp.id_choice, -1) AS selected Chris@76: FROM {db_prefix}polls AS p Chris@76: INNER JOIN {db_prefix}topics AS t ON (t.id_poll = {int:current_poll}) Chris@76: INNER JOIN {db_prefix}boards AS b ON (b.id_board = t.id_board) Chris@76: LEFT JOIN {db_prefix}log_polls AS lp ON (lp.id_poll = p.id_poll AND lp.id_member = {int:current_member}) Chris@76: WHERE p.id_poll = {int:current_poll} Chris@76: AND {query_see_board}' . ($modSettings['postmod_active'] ? ' Chris@76: AND t.approved = {int:is_approved}' : '') . ' Chris@76: LIMIT 1', Chris@76: array( Chris@76: 'current_member' => $user_info['id'], Chris@76: 'current_poll' => $_POST['poll'], Chris@76: 'is_approved' => 1, Chris@76: ) Chris@76: ); Chris@76: if ($smcFunc['db_num_rows']($request) == 0) Chris@76: die; Chris@76: $row = $smcFunc['db_fetch_assoc']($request); Chris@76: $smcFunc['db_free_result']($request); Chris@76: Chris@76: if (!empty($row['voting_locked']) || ($row['selected'] != -1 && !$user_info['is_guest']) || (!empty($row['expire_time']) && time() > $row['expire_time'])) Chris@76: redirectexit('topic=' . $row['id_topic'] . '.0'); Chris@76: Chris@76: // Too many options checked? Chris@76: if (count($_REQUEST['options']) > $row['max_votes']) Chris@76: redirectexit('topic=' . $row['id_topic'] . '.0'); Chris@76: Chris@76: // It's a guest who has already voted? Chris@76: if ($user_info['is_guest']) Chris@76: { Chris@76: // Guest voting disabled? Chris@76: if (!$row['guest_vote']) Chris@76: redirectexit('topic=' . $row['id_topic'] . '.0'); Chris@76: // Already voted? Chris@76: elseif (isset($_COOKIE['guest_poll_vote']) && in_array($row['id_poll'], explode(',', $_COOKIE['guest_poll_vote']))) Chris@76: redirectexit('topic=' . $row['id_topic'] . '.0'); Chris@76: } Chris@76: Chris@76: $options = array(); Chris@76: $inserts = array(); Chris@76: foreach ($_REQUEST['options'] as $id) Chris@76: { Chris@76: $id = (int) $id; Chris@76: Chris@76: $options[] = $id; Chris@76: $inserts[] = array($_POST['poll'], $user_info['id'], $id); Chris@76: } Chris@76: Chris@76: // Add their vote in to the tally. Chris@76: $smcFunc['db_insert']('insert', Chris@76: $db_prefix . 'log_polls', Chris@76: array('id_poll' => 'int', 'id_member' => 'int', 'id_choice' => 'int'), Chris@76: $inserts, Chris@76: array('id_poll', 'id_member', 'id_choice') Chris@76: ); Chris@76: $smcFunc['db_query']('', ' Chris@76: UPDATE {db_prefix}poll_choices Chris@76: SET votes = votes + 1 Chris@76: WHERE id_poll = {int:current_poll} Chris@76: AND id_choice IN ({array_int:option_list})', Chris@76: array( Chris@76: 'option_list' => $options, Chris@76: 'current_poll' => $_POST['poll'], Chris@76: ) Chris@76: ); Chris@76: Chris@76: // Track the vote if a guest. Chris@76: if ($user_info['is_guest']) Chris@76: { Chris@76: $_COOKIE['guest_poll_vote'] = !empty($_COOKIE['guest_poll_vote']) ? ($_COOKIE['guest_poll_vote'] . ',' . $row['id_poll']) : $row['id_poll']; Chris@76: Chris@76: require_once($sourcedir . '/Subs-Auth.php'); Chris@76: $cookie_url = url_parts(!empty($modSettings['localCookies']), !empty($modSettings['globalCookies'])); Chris@76: setcookie('guest_poll_vote', $_COOKIE['guest_poll_vote'], time() + 2500000, $cookie_url[1], $cookie_url[0], 0); Chris@76: } Chris@76: Chris@76: redirectexit('topic=' . $row['id_topic'] . '.0'); Chris@76: } Chris@76: Chris@76: // Show a search box. Chris@76: function ssi_quickSearch($output_method = 'echo') Chris@76: { Chris@76: global $scripturl, $txt, $context; Chris@76: Chris@76: if ($output_method != 'echo') Chris@76: return $scripturl . '?action=search'; Chris@76: Chris@76: echo ' Chris@76:
Chris@76: Chris@76:
'; Chris@76: } Chris@76: Chris@76: // Show what would be the forum news. Chris@76: function ssi_news($output_method = 'echo') Chris@76: { Chris@76: global $context; Chris@76: Chris@76: if ($output_method != 'echo') Chris@76: return $context['random_news_line']; Chris@76: Chris@76: echo $context['random_news_line']; Chris@76: } Chris@76: Chris@76: // Show today's birthdays. Chris@76: function ssi_todaysBirthdays($output_method = 'echo') Chris@76: { Chris@76: global $scripturl, $modSettings, $user_info; Chris@76: Chris@76: if (empty($modSettings['cal_enabled']) || !allowedTo('calendar_view') || !allowedTo('profile_view_any')) Chris@76: return; Chris@76: Chris@76: $eventOptions = array( Chris@76: 'include_birthdays' => true, Chris@76: 'num_days_shown' => empty($modSettings['cal_days_for_index']) || $modSettings['cal_days_for_index'] < 1 ? 1 : $modSettings['cal_days_for_index'], Chris@76: ); Chris@76: $return = cache_quick_get('calendar_index_offset_' . ($user_info['time_offset'] + $modSettings['time_offset']), 'Subs-Calendar.php', 'cache_getRecentEvents', array($eventOptions)); Chris@76: Chris@76: if ($output_method != 'echo') Chris@76: return $return['calendar_birthdays']; Chris@76: Chris@76: foreach ($return['calendar_birthdays'] as $member) Chris@76: echo ' Chris@76: ' . $member['name'] . (isset($member['age']) ? ' (' . $member['age'] . ')' : '') . '' . (!$member['is_last'] ? ', ' : ''); Chris@76: } Chris@76: Chris@76: // Show today's holidays. Chris@76: function ssi_todaysHolidays($output_method = 'echo') Chris@76: { Chris@76: global $modSettings, $user_info; Chris@76: Chris@76: if (empty($modSettings['cal_enabled']) || !allowedTo('calendar_view')) Chris@76: return; Chris@76: Chris@76: $eventOptions = array( Chris@76: 'include_holidays' => true, Chris@76: 'num_days_shown' => empty($modSettings['cal_days_for_index']) || $modSettings['cal_days_for_index'] < 1 ? 1 : $modSettings['cal_days_for_index'], Chris@76: ); Chris@76: $return = cache_quick_get('calendar_index_offset_' . ($user_info['time_offset'] + $modSettings['time_offset']), 'Subs-Calendar.php', 'cache_getRecentEvents', array($eventOptions)); Chris@76: Chris@76: if ($output_method != 'echo') Chris@76: return $return['calendar_holidays']; Chris@76: Chris@76: echo ' Chris@76: ', implode(', ', $return['calendar_holidays']); Chris@76: } Chris@76: Chris@76: // Show today's events. Chris@76: function ssi_todaysEvents($output_method = 'echo') Chris@76: { Chris@76: global $modSettings, $user_info; Chris@76: Chris@76: if (empty($modSettings['cal_enabled']) || !allowedTo('calendar_view')) Chris@76: return; Chris@76: Chris@76: $eventOptions = array( Chris@76: 'include_events' => true, Chris@76: 'num_days_shown' => empty($modSettings['cal_days_for_index']) || $modSettings['cal_days_for_index'] < 1 ? 1 : $modSettings['cal_days_for_index'], Chris@76: ); Chris@76: $return = cache_quick_get('calendar_index_offset_' . ($user_info['time_offset'] + $modSettings['time_offset']), 'Subs-Calendar.php', 'cache_getRecentEvents', array($eventOptions)); Chris@76: Chris@76: if ($output_method != 'echo') Chris@76: return $return['calendar_events']; Chris@76: Chris@76: foreach ($return['calendar_events'] as $event) Chris@76: { Chris@76: if ($event['can_edit']) Chris@76: echo ' Chris@76: * '; Chris@76: echo ' Chris@76: ' . $event['link'] . (!$event['is_last'] ? ', ' : ''); Chris@76: } Chris@76: } Chris@76: Chris@76: // Show all calendar entires for today. (birthdays, holodays, and events.) Chris@76: function ssi_todaysCalendar($output_method = 'echo') Chris@76: { Chris@76: global $modSettings, $txt, $scripturl, $user_info; Chris@76: Chris@76: $eventOptions = array( Chris@76: 'include_birthdays' => allowedTo('profile_view_any'), Chris@76: 'include_holidays' => true, Chris@76: 'include_events' => true, Chris@76: 'num_days_shown' => empty($modSettings['cal_days_for_index']) || $modSettings['cal_days_for_index'] < 1 ? 1 : $modSettings['cal_days_for_index'], Chris@76: ); Chris@76: $return = cache_quick_get('calendar_index_offset_' . ($user_info['time_offset'] + $modSettings['time_offset']), 'Subs-Calendar.php', 'cache_getRecentEvents', array($eventOptions)); Chris@76: Chris@76: if ($output_method != 'echo') Chris@76: return $return; Chris@76: Chris@76: if (!empty($return['calendar_holidays'])) Chris@76: echo ' Chris@76: ' . $txt['calendar_prompt'] . ' ' . implode(', ', $return['calendar_holidays']) . '
'; Chris@76: if (!empty($return['calendar_birthdays'])) Chris@76: { Chris@76: echo ' Chris@76: ' . $txt['birthdays_upcoming'] . ' '; Chris@76: foreach ($return['calendar_birthdays'] as $member) Chris@76: echo ' Chris@76: ', $member['name'], isset($member['age']) ? ' (' . $member['age'] . ')' : '', '', !$member['is_last'] ? ', ' : ''; Chris@76: echo ' Chris@76:
'; Chris@76: } Chris@76: if (!empty($return['calendar_events'])) Chris@76: { Chris@76: echo ' Chris@76: ' . $txt['events_upcoming'] . ' '; Chris@76: foreach ($return['calendar_events'] as $event) Chris@76: { Chris@76: if ($event['can_edit']) Chris@76: echo ' Chris@76: * '; Chris@76: echo ' Chris@76: ' . $event['link'] . (!$event['is_last'] ? ', ' : ''); Chris@76: } Chris@76: } Chris@76: } Chris@76: Chris@76: // Show the latest news, with a template... by board. Chris@76: function ssi_boardNews($board = null, $limit = null, $start = null, $length = null, $output_method = 'echo') Chris@76: { Chris@76: global $scripturl, $db_prefix, $txt, $settings, $modSettings, $context; Chris@76: global $smcFunc; Chris@76: Chris@76: loadLanguage('Stats'); Chris@76: Chris@76: // Must be integers.... Chris@76: if ($limit === null) Chris@76: $limit = isset($_GET['limit']) ? (int) $_GET['limit'] : 5; Chris@76: else Chris@76: $limit = (int) $limit; Chris@76: Chris@76: if ($start === null) Chris@76: $start = isset($_GET['start']) ? (int) $_GET['start'] : 0; Chris@76: else Chris@76: $start = (int) $start; Chris@76: Chris@76: if ($board !== null) Chris@76: $board = (int) $board; Chris@76: elseif (isset($_GET['board'])) Chris@76: $board = (int) $_GET['board']; Chris@76: Chris@76: if ($length === null) Chris@76: $length = isset($_GET['length']) ? (int) $_GET['length'] : 0; Chris@76: else Chris@76: $length = (int) $length; Chris@76: Chris@76: $limit = max(0, $limit); Chris@76: $start = max(0, $start); Chris@76: Chris@76: // Make sure guests can see this board. Chris@76: $request = $smcFunc['db_query']('', ' Chris@76: SELECT id_board Chris@76: FROM {db_prefix}boards Chris@76: WHERE ' . ($board === null ? '' : 'id_board = {int:current_board} Chris@76: AND ') . 'FIND_IN_SET(-1, member_groups) Chris@76: LIMIT 1', Chris@76: array( Chris@76: 'current_board' => $board, Chris@76: ) Chris@76: ); Chris@76: if ($smcFunc['db_num_rows']($request) == 0) Chris@76: { Chris@76: if ($output_method == 'echo') Chris@76: die($txt['ssi_no_guests']); Chris@76: else Chris@76: return array(); Chris@76: } Chris@76: list ($board) = $smcFunc['db_fetch_row']($request); Chris@76: $smcFunc['db_free_result']($request); Chris@76: Chris@76: // Load the message icons - the usual suspects. Chris@76: $stable_icons = array('xx', 'thumbup', 'thumbdown', 'exclamation', 'question', 'lamp', 'smiley', 'angry', 'cheesy', 'grin', 'sad', 'wink', 'moved', 'recycled', 'wireless'); Chris@76: $icon_sources = array(); Chris@76: foreach ($stable_icons as $icon) Chris@76: $icon_sources[$icon] = 'images_url'; Chris@76: Chris@76: // Find the post ids. Chris@76: $request = $smcFunc['db_query']('', ' Chris@76: SELECT t.id_first_msg Chris@76: FROM {db_prefix}topics as t Chris@76: LEFT JOIN {db_prefix}boards as b ON (b.id_board = t.id_board) Chris@76: WHERE t.id_board = {int:current_board}' . ($modSettings['postmod_active'] ? ' Chris@76: AND t.approved = {int:is_approved}' : '') . ' Chris@76: AND {query_see_board} Chris@76: ORDER BY t.id_first_msg DESC Chris@76: LIMIT ' . $start . ', ' . $limit, Chris@76: array( Chris@76: 'current_board' => $board, Chris@76: 'is_approved' => 1, Chris@76: ) Chris@76: ); Chris@76: $posts = array(); Chris@76: while ($row = $smcFunc['db_fetch_assoc']($request)) Chris@76: $posts[] = $row['id_first_msg']; Chris@76: $smcFunc['db_free_result']($request); Chris@76: Chris@76: if (empty($posts)) Chris@76: return array(); Chris@76: Chris@76: // Find the posts. Chris@76: $request = $smcFunc['db_query']('', ' Chris@76: SELECT Chris@76: m.icon, m.subject, m.body, IFNULL(mem.real_name, m.poster_name) AS poster_name, m.poster_time, Chris@76: t.num_replies, t.id_topic, m.id_member, m.smileys_enabled, m.id_msg, t.locked, t.id_last_msg Chris@76: FROM {db_prefix}topics AS t Chris@76: INNER JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_first_msg) Chris@76: LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = m.id_member) Chris@76: WHERE t.id_first_msg IN ({array_int:post_list}) Chris@76: ORDER BY t.id_first_msg DESC Chris@76: LIMIT ' . count($posts), Chris@76: array( Chris@76: 'post_list' => $posts, Chris@76: ) Chris@76: ); Chris@76: $return = array(); Chris@76: while ($row = $smcFunc['db_fetch_assoc']($request)) Chris@76: { Chris@76: // If we want to limit the length of the post. Chris@76: if (!empty($length) && $smcFunc['strlen']($row['body']) > $length) Chris@76: { Chris@76: $row['body'] = $smcFunc['substr']($row['body'], 0, $length); Chris@76: Chris@76: // The first space or line break. (
, etc.) Chris@76: $cutoff = max(strrpos($row['body'], ' '), strrpos($row['body'], '<')); Chris@76: Chris@76: if ($cutoff !== false) Chris@76: $row['body'] = $smcFunc['substr']($row['body'], 0, $cutoff); Chris@76: $row['body'] .= '...'; Chris@76: } Chris@76: Chris@76: $row['body'] = parse_bbc($row['body'], $row['smileys_enabled'], $row['id_msg']); Chris@76: Chris@76: // Check that this message icon is there... Chris@76: if (empty($modSettings['messageIconChecks_disable']) && !isset($icon_sources[$row['icon']])) Chris@76: $icon_sources[$row['icon']] = file_exists($settings['theme_dir'] . '/images/post/' . $row['icon'] . '.gif') ? 'images_url' : 'default_images_url'; Chris@76: Chris@76: censorText($row['subject']); Chris@76: censorText($row['body']); Chris@76: Chris@76: $return[] = array( Chris@76: 'id' => $row['id_topic'], Chris@76: 'message_id' => $row['id_msg'], Chris@76: 'icon' => '' . $row['icon'] . '', Chris@76: 'subject' => $row['subject'], Chris@76: 'time' => timeformat($row['poster_time']), Chris@76: 'timestamp' => forum_time(true, $row['poster_time']), Chris@76: 'body' => $row['body'], Chris@76: 'href' => $scripturl . '?topic=' . $row['id_topic'] . '.0', Chris@76: 'link' => '' . $row['num_replies'] . ' ' . ($row['num_replies'] == 1 ? $txt['ssi_comment'] : $txt['ssi_comments']) . '', Chris@76: 'replies' => $row['num_replies'], Chris@76: 'comment_href' => !empty($row['locked']) ? '' : $scripturl . '?action=post;topic=' . $row['id_topic'] . '.' . $row['num_replies'] . ';last_msg=' . $row['id_last_msg'], Chris@76: 'comment_link' => !empty($row['locked']) ? '' : '' . $txt['ssi_write_comment'] . '', Chris@76: 'new_comment' => !empty($row['locked']) ? '' : '' . $txt['ssi_write_comment'] . '', Chris@76: 'poster' => array( Chris@76: 'id' => $row['id_member'], Chris@76: 'name' => $row['poster_name'], Chris@76: 'href' => !empty($row['id_member']) ? $scripturl . '?action=profile;u=' . $row['id_member'] : '', Chris@76: 'link' => !empty($row['id_member']) ? '' . $row['poster_name'] . '' : $row['poster_name'] Chris@76: ), Chris@76: 'locked' => !empty($row['locked']), Chris@76: 'is_last' => false Chris@76: ); Chris@76: } Chris@76: $smcFunc['db_free_result']($request); Chris@76: Chris@76: if (empty($return)) Chris@76: return $return; Chris@76: Chris@76: $return[count($return) - 1]['is_last'] = true; Chris@76: Chris@76: if ($output_method != 'echo') Chris@76: return $return; Chris@76: Chris@76: foreach ($return as $news) Chris@76: { Chris@76: echo ' Chris@76:
Chris@76:

Chris@76: ', $news['icon'], ' Chris@76: ', $news['subject'], ' Chris@76:

Chris@76:
', $news['time'], ' ', $txt['by'], ' ', $news['poster']['link'], '
Chris@76:
', $news['body'], '
Chris@76: ', $news['link'], $news['locked'] ? '' : ' | ' . $news['comment_link'], ' Chris@76:
'; Chris@76: Chris@76: if (!$news['is_last']) Chris@76: echo ' Chris@76:
'; Chris@76: } Chris@76: } Chris@76: Chris@76: // Show the most recent events. Chris@76: function ssi_recentEvents($max_events = 7, $output_method = 'echo') Chris@76: { Chris@76: global $db_prefix, $user_info, $scripturl, $modSettings, $txt, $context, $smcFunc; Chris@76: Chris@76: if (empty($modSettings['cal_enabled']) || !allowedTo('calendar_view')) Chris@76: return; Chris@76: Chris@76: // Find all events which are happening in the near future that the member can see. Chris@76: $request = $smcFunc['db_query']('', ' Chris@76: SELECT Chris@76: cal.id_event, cal.start_date, cal.end_date, cal.title, cal.id_member, cal.id_topic, Chris@76: cal.id_board, t.id_first_msg, t.approved Chris@76: FROM {db_prefix}calendar AS cal Chris@76: LEFT JOIN {db_prefix}boards AS b ON (b.id_board = cal.id_board) Chris@76: LEFT JOIN {db_prefix}topics AS t ON (t.id_topic = cal.id_topic) Chris@76: WHERE cal.start_date <= {date:current_date} Chris@76: AND cal.end_date >= {date:current_date} Chris@76: AND (cal.id_board = {int:no_board} OR {query_wanna_see_board}) Chris@76: ORDER BY cal.start_date DESC Chris@76: LIMIT ' . $max_events, Chris@76: array( Chris@76: 'current_date' => strftime('%Y-%m-%d', forum_time(false)), Chris@76: 'no_board' => 0, Chris@76: ) Chris@76: ); Chris@76: $return = array(); Chris@76: $duplicates = array(); Chris@76: while ($row = $smcFunc['db_fetch_assoc']($request)) Chris@76: { Chris@76: // Check if we've already come by an event linked to this same topic with the same title... and don't display it if we have. Chris@76: if (!empty($duplicates[$row['title'] . $row['id_topic']])) Chris@76: continue; Chris@76: Chris@76: // Censor the title. Chris@76: censorText($row['title']); Chris@76: Chris@76: if ($row['start_date'] < strftime('%Y-%m-%d', forum_time(false))) Chris@76: $date = strftime('%Y-%m-%d', forum_time(false)); Chris@76: else Chris@76: $date = $row['start_date']; Chris@76: Chris@76: // If the topic it is attached to is not approved then don't link it. Chris@76: if (!empty($row['id_first_msg']) && !$row['approved']) Chris@76: $row['id_board'] = $row['id_topic'] = $row['id_first_msg'] = 0; Chris@76: Chris@76: $return[$date][] = array( Chris@76: 'id' => $row['id_event'], Chris@76: 'title' => $row['title'], Chris@76: 'can_edit' => allowedTo('calendar_edit_any') || ($row['id_member'] == $user_info['id'] && allowedTo('calendar_edit_own')), Chris@76: 'modify_href' => $scripturl . '?action=' . ($row['id_board'] == 0 ? 'calendar;sa=post;' : 'post;msg=' . $row['id_first_msg'] . ';topic=' . $row['id_topic'] . '.0;calendar;') . 'eventid=' . $row['id_event'] . ';' . $context['session_var'] . '=' . $context['session_id'], Chris@76: 'href' => $row['id_board'] == 0 ? '' : $scripturl . '?topic=' . $row['id_topic'] . '.0', Chris@76: 'link' => $row['id_board'] == 0 ? $row['title'] : '' . $row['title'] . '', Chris@76: 'start_date' => $row['start_date'], Chris@76: 'end_date' => $row['end_date'], Chris@76: 'is_last' => false Chris@76: ); Chris@76: Chris@76: // Let's not show this one again, huh? Chris@76: $duplicates[$row['title'] . $row['id_topic']] = true; Chris@76: } Chris@76: $smcFunc['db_free_result']($request); Chris@76: Chris@76: foreach ($return as $mday => $array) Chris@76: $return[$mday][count($array) - 1]['is_last'] = true; Chris@76: Chris@76: if ($output_method != 'echo' || empty($return)) Chris@76: return $return; Chris@76: Chris@76: // Well the output method is echo. Chris@76: echo ' Chris@76: ' . $txt['events'] . ' '; Chris@76: foreach ($return as $mday => $array) Chris@76: foreach ($array as $event) Chris@76: { Chris@76: if ($event['can_edit']) Chris@76: echo ' Chris@76: * '; Chris@76: Chris@76: echo ' Chris@76: ' . $event['link'] . (!$event['is_last'] ? ', ' : ''); Chris@76: } Chris@76: } Chris@76: Chris@76: // Check the passed id_member/password. If $is_username is true, treats $id as a username. Chris@76: function ssi_checkPassword($id = null, $password = null, $is_username = false) Chris@76: { Chris@76: global $db_prefix, $sourcedir, $smcFunc; Chris@76: Chris@76: // If $id is null, this was most likely called from a query string and should do nothing. Chris@76: if ($id === null) Chris@76: return; Chris@76: Chris@76: $request = $smcFunc['db_query']('', ' Chris@76: SELECT passwd, member_name, is_activated Chris@76: FROM {db_prefix}members Chris@76: WHERE ' . ($is_username ? 'member_name' : 'id_member') . ' = {string:id} Chris@76: LIMIT 1', Chris@76: array( Chris@76: 'id' => $id, Chris@76: ) Chris@76: ); Chris@76: list ($pass, $user, $active) = $smcFunc['db_fetch_row']($request); Chris@76: $smcFunc['db_free_result']($request); Chris@76: Chris@76: return sha1(strtolower($user) . $password) == $pass && $active == 1; Chris@76: } Chris@76: Chris@76: // We want to show the recent attachments outside of the forum. Chris@76: function ssi_recentAttachments($num_attachments = 10, $attachment_ext = array(), $output_method = 'echo') Chris@76: { Chris@76: global $smcFunc, $context, $modSettings, $scripturl, $txt, $settings; Chris@76: Chris@76: // We want to make sure that we only get attachments for boards that we can see *if* any. Chris@76: $attachments_boards = boardsAllowedTo('view_attachments'); Chris@76: Chris@76: // No boards? Adios amigo. Chris@76: if (empty($attachments_boards)) Chris@76: return array(); Chris@76: Chris@76: // Is it an array? Chris@76: if (!is_array($attachment_ext)) Chris@76: $attachment_ext = array($attachment_ext); Chris@76: Chris@76: // Lets build the query. Chris@76: $request = $smcFunc['db_query']('', ' Chris@76: SELECT Chris@76: att.id_attach, att.id_msg, att.filename, IFNULL(att.size, 0) AS filesize, att.downloads, mem.id_member, Chris@76: IFNULL(mem.real_name, m.poster_name) AS poster_name, m.id_topic, m.subject, t.id_board, m.poster_time, Chris@76: att.width, att.height' . (empty($modSettings['attachmentShowImages']) || empty($modSettings['attachmentThumbnails']) ? '' : ', IFNULL(thumb.id_attach, 0) AS id_thumb, thumb.width AS thumb_width, thumb.height AS thumb_height') . ' Chris@76: FROM {db_prefix}attachments AS att Chris@76: INNER JOIN {db_prefix}messages AS m ON (m.id_msg = att.id_msg) Chris@76: INNER JOIN {db_prefix}topics AS t ON (t.id_topic = m.id_topic) Chris@76: LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = m.id_member)' . (empty($modSettings['attachmentShowImages']) || empty($modSettings['attachmentThumbnails']) ? '' : ' Chris@76: LEFT JOIN {db_prefix}attachments AS thumb ON (thumb.id_attach = att.id_thumb)') . ' Chris@76: WHERE att.attachment_type = 0' . ($attachments_boards === array(0) ? '' : ' Chris@76: AND m.id_board IN ({array_int:boards_can_see})') . (!empty($attachment_ext) ? ' Chris@76: AND att.fileext IN ({array_string:attachment_ext})' : '') . Chris@76: (!$modSettings['postmod_active'] || allowedTo('approve_posts') ? '' : ' Chris@76: AND t.approved = {int:is_approved} Chris@76: AND m.approved = {int:is_approved} Chris@76: AND att.approved = {int:is_approved}') . ' Chris@76: ORDER BY att.id_attach DESC Chris@76: LIMIT {int:num_attachments}', Chris@76: array( Chris@76: 'boards_can_see' => $attachments_boards, Chris@76: 'attachment_ext' => $attachment_ext, Chris@76: 'num_attachments' => $num_attachments, Chris@76: 'is_approved' => 1, Chris@76: ) Chris@76: ); Chris@76: Chris@76: // We have something. Chris@76: $attachments = array(); Chris@76: while ($row = $smcFunc['db_fetch_assoc']($request)) Chris@76: { Chris@76: $filename = preg_replace('~&#(\\d{1,7}|x[0-9a-fA-F]{1,6});~', '&#\\1;', htmlspecialchars($row['filename'])); Chris@76: Chris@76: // Is it an image? Chris@76: $attachments[$row['id_attach']] = array( Chris@76: 'member' => array( Chris@76: 'id' => $row['id_member'], Chris@76: 'name' => $row['poster_name'], Chris@76: 'link' => empty($row['id_member']) ? $row['poster_name'] : '' . $row['poster_name'] . '', Chris@76: ), Chris@76: 'file' => array( Chris@76: 'filename' => $filename, Chris@76: 'filesize' => round($row['filesize'] /1024, 2) . $txt['kilobyte'], Chris@76: 'downloads' => $row['downloads'], Chris@76: 'href' => $scripturl . '?action=dlattach;topic=' . $row['id_topic'] . '.0;attach=' . $row['id_attach'], Chris@76: 'link' => ' ' . $filename . '', Chris@76: 'is_image' => !empty($row['width']) && !empty($row['height']) && !empty($modSettings['attachmentShowImages']), Chris@76: ), Chris@76: 'topic' => array( Chris@76: 'id' => $row['id_topic'], Chris@76: 'subject' => $row['subject'], Chris@76: 'href' => $scripturl . '?topic=' . $row['id_topic'] . '.msg' . $row['id_msg'] . '#msg' . $row['id_msg'], Chris@76: 'link' => '' . $row['subject'] . '', Chris@76: 'time' => timeformat($row['poster_time']), Chris@76: ), Chris@76: ); Chris@76: Chris@76: // Images. Chris@76: if ($attachments[$row['id_attach']]['file']['is_image']) Chris@76: { Chris@76: $id_thumb = empty($row['id_thumb']) ? $row['id_attach'] : $row['id_thumb']; Chris@76: $attachments[$row['id_attach']]['file']['image'] = array( Chris@76: 'id' => $id_thumb, Chris@76: 'width' => $row['width'], Chris@76: 'height' => $row['height'], Chris@76: 'img' => '' . $filename . '', Chris@76: 'thumb' => '' . $filename . '', Chris@76: 'href' => $scripturl . '?action=dlattach;topic=' . $row['id_topic'] . '.0;attach=' . $id_thumb . ';image', Chris@76: 'link' => '' . $filename . '', Chris@76: ); Chris@76: } Chris@76: } Chris@76: $smcFunc['db_free_result']($request); Chris@76: Chris@76: // So you just want an array? Here you can have it. Chris@76: if ($output_method == 'array' || empty($attachments)) Chris@76: return $attachments; Chris@76: Chris@76: // Give them the default. Chris@76: echo ' Chris@76: Chris@76: Chris@76: Chris@76: Chris@76: Chris@76: Chris@76: '; Chris@76: foreach ($attachments as $attach) Chris@76: echo ' Chris@76: Chris@76: Chris@76: Chris@76: Chris@76: Chris@76: '; Chris@76: echo ' Chris@76:
', $txt['file'], '', $txt['posted_by'], '', $txt['downloads'], '', $txt['filesize'], '
', $attach['file']['link'], '', $attach['member']['link'], '', $attach['file']['downloads'], '', $attach['file']['filesize'], '
'; Chris@76: } Chris@76: Chris@76: ?>