function sp_blog($parameters, $id, $return_parameters = false)
{
    global $smcFunc, $scripturl, $user_info, $modSettings;
    global $context, $boarddir, $sourcedir, $txt, $color_profile;
    static $mod;
    $block_parameters = array('limit' => 'int', 'type' => 'select', 'sort' => 'select');
    if ($return_parameters) {
        return $block_parameters;
    }
    $limit = empty($parameters['limit']) ? 5 : (int) $parameters['limit'];
    $type = empty($parameters['type']) ? 0 : 1;
    $sort = empty($parameters['sort']) ? 0 : 1;
    if (!isset($mod)) {
        if (file_exists($boarddir . '/zCommunity')) {
            $mod = 'zcommunity';
        } elseif (file_exists($sourcedir . '/Blog.php')) {
            $mod = 'smfblog';
        } else {
            $mod = '';
        }
    }
    if (empty($mod)) {
        echo '
								', $txt['error_sp_no_blog_found'];
        return;
    } elseif ($mod == 'zcommunity') {
        $request = $smcFunc['db_query']('', '
			SELECT b.blog_id, b.blog_owner, b.member_groups, bs.users_allowed_access, bs.hideBlog AS hidden
			FROM {db_prefix}blog_blogs AS b
				LEFT JOIN {db_prefix}blog_settings AS bs ON (bs.blog_id = b.blog_id)', array());
        $visible_blogs = array();
        while ($row = $smcFunc['db_fetch_assoc']($request)) {
            $can_see_this_blog = false;
            if (empty($row['hidden'])) {
                $allowedGroups = !empty($row['member_groups']) ? explode(',', $row['member_groups']) : array();
                $can_see_this_blog = count(array_intersect($user_info['groups'], $allowedGroups)) > 0;
                if (empty($can_see_this_blog) && !empty($row['users_allowed_access']) && !$user_info['is_guest']) {
                    $users_allowed = !empty($row['users_allowed_access']) ? explode(',', $row['users_allowed_access']) : array();
                    $can_see_this_blog = in_array($context['user']['id'], $users_allowed);
                }
            }
            if ($user_info['is_admin'] || $context['user']['id'] == $row['blog_owner']) {
                $can_see_this_blog = true;
            }
            if ($can_see_this_blog) {
                $visible_blogs[] = $row['blog_id'];
            }
        }
        $smcFunc['db_free_result']($request);
        if (empty($visible_blogs)) {
            echo '
								', $txt['error_sp_no_blogs_found'];
            return;
        }
        if (empty($type)) {
            $request = $smcFunc['db_query']('', '
				SELECT t.article_id, t.subject
				FROM {db_prefix}blog_articles AS t
					LEFT JOIN {db_prefix}blog_settings AS bs ON (bs.blog_id = t.blog_id)
				WHERE t.blog_id IN ({array_int:visible_blogs})
					AND ((t.approved = 1) OR (bs.articles_require_approval = 0))
				ORDER BY {raw:type}
				LIMIT {int:limit}', array('visible_blogs' => $visible_blogs, 'type' => $sort ? 'RAND()' : 't.article_id DESC', 'limit' => $limit));
            while ($row = $smcFunc['db_fetch_assoc']($request)) {
                $articles[] = array('id' => $row['article_id'], 'subject' => strip_tags($row['subject']), 'link' => '<a href="' . $scripturl . '?article=' . $row['article_id'] . '.0">' . $row['subject'] . '</a>');
            }
            $smcFunc['db_free_result']($request);
            if (empty($articles)) {
                echo '
								', $txt['error_sp_no_articles_found'];
                return;
            }
            echo '
								<ul class="sp_list">';
            foreach ($articles as $article) {
                echo '
									<li>', sp_embed_image('blog'), ' ', $article['link'], '</li>';
            }
            echo '
								</ul>';
        } else {
            $request = $smcFunc['db_query']('', '
				SELECT
					b.blog_id, b.name, t.article_id, t.subject, m.id_member, m.real_name,
					m.avatar, a.id_attach, a.attachment_type, a.filename
				FROM {db_prefix}blog_blogs AS b
					LEFT JOIN {db_prefix}blog_articles AS t ON (t.article_id = b.last_article_id)
					LEFT JOIN {db_prefix}members AS m ON (m.id_member = b.blog_owner)
					LEFT JOIN {db_prefix}attachments AS a ON (a.id_member = m.id_member)
				WHERE b.blog_id IN ({array_int:visible_blogs})
				ORDER BY {raw:type}
				LIMIT {int:limit}', array('visible_blogs' => $visible_blogs, 'type' => $sort ? 'RAND()' : 'b.last_article_id DESC', 'limit' => $limit));
            $blogs = array();
            $colorids = array();
            while ($row = $smcFunc['db_fetch_assoc']($request)) {
                if (!empty($row['id_member'])) {
                    $colorids[$row['id_member']] = $row['id_member'];
                }
                if ($modSettings['avatar_action_too_large'] == 'option_html_resize' || $modSettings['avatar_action_too_large'] == 'option_js_resize') {
                    $avatar_width = !empty($modSettings['avatar_max_width_external']) ? ' width="' . $modSettings['avatar_max_width_external'] . '"' : '';
                    $avatar_height = !empty($modSettings['avatar_max_height_external']) ? ' height="' . $modSettings['avatar_max_height_external'] . '"' : '';
                } else {
                    $avatar_width = '';
                    $avatar_height = '';
                }
                $blogs[] = array('id' => $row['blog_id'], 'name' => $row['name'], 'href' => $scripturl . '?blog=' . $row['blog_id'] . '.0', 'link' => '<a href="' . $scripturl . '?blog=' . $row['blog_id'] . '.0">' . $row['name'] . '</a>', 'article' => array('id' => $row['article_id'], 'subject' => strip_tags($row['subject']), 'link' => '<a href="' . $scripturl . '?article=' . $row['article_id'] . '.0">' . $row['subject'] . '</a>'), 'owner' => array('id' => $row['id_member'], 'name' => $row['real_name'], 'href' => $scripturl . '?action=profile;u=' . $row['id_member'], 'link' => '<a href="' . $scripturl . '?action=profile;u=' . $row['id_member'] . '">' . $row['real_name'] . '</a>'), 'avatar' => array('name' => $row['avatar'], 'image' => $row['avatar'] == '' ? $row['id_attach'] > 0 ? '<img src="' . (empty($row['attachment_type']) ? $scripturl . '?action=dlattach;attach=' . $row['id_attach'] . ';type=avatar' : $modSettings['custom_avatar_url'] . '/' . $row['filename']) . '" alt="" class="avatar" border="0" />' : '' : (stristr($row['avatar'], 'http://') ? '<img src="' . $row['avatar'] . '"' . $avatar_width . $avatar_height . ' alt="" class="avatar" border="0" />' : '<img src="' . $modSettings['avatar_url'] . '/' . htmlspecialchars($row['avatar']) . '" alt="" class="avatar" border="0" />'), 'href' => $row['avatar'] == '' ? $row['id_attach'] > 0 ? empty($row['attachment_type']) ? $scripturl . '?action=dlattach;attach=' . $row['id_attach'] . ';type=avatar' : $modSettings['custom_avatar_url'] . '/' . $row['filename'] : '' : (stristr($row['avatar'], 'http://') ? $row['avatar'] : $modSettings['avatar_url'] . '/' . $row['avatar']), 'url' => $row['avatar'] == '' ? '' : (stristr($row['avatar'], 'http://') ? $row['avatar'] : $modSettings['avatar_url'] . '/' . $row['avatar'])));
            }
            $smcFunc['db_free_result']($request);
            if (!empty($colorids) && sp_loadColors($colorids) !== false) {
                foreach ($blogs as $k => $p) {
                    if (!empty($color_profile[$p['owner']['id']]['link'])) {
                        $blogs[$k]['owner']['link'] = $color_profile[$p['owner']['id']]['link'];
                    }
                }
            }
            echo '
								<table class="sp_fullwidth sp_blog">';
            foreach ($blogs as $blog) {
                echo '
									<tr>
										<td class="sp_top_poster sp_blog">', !empty($blog['avatar']['href']) ? '
											<a href="' . $scripturl . '?action=profile;u=' . $blog['owner']['id'] . '"><img src="' . $blog['avatar']['href'] . '" alt="' . $blog['name'] . '" width="40" /></a>' : '', '
										</td>
										<td>
											<span class="sp_blog_title">', $blog['owner']['link'], '</span><br />
											', $blog['article']['link'], '
										</td>
									</tr>';
            }
            echo '
								</table>';
        }
    } elseif ($mod == 'smfblog') {
        $request = $smcFunc['db_query']('', '
			SELECT b.id_board
			FROM {db_prefix}boards AS b
			WHERE {query_see_board}
				AND b.is_blog = {int:is_blog}', array('is_blog' => 1));
        $visible_blogs = array();
        while ($row = $smcFunc['db_fetch_assoc']($request)) {
            $visible_blogs[] = $row['id_board'];
        }
        $smcFunc['db_free_result']($request);
        if (empty($visible_blogs)) {
            echo '
								', $txt['error_sp_no_blogs_found'];
            return;
        }
        if (empty($type)) {
            $request = $smcFunc['db_query']('', '
				SELECT t.id_topic, m.subject
				FROM {db_prefix}topics AS t
					INNER JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_first_msg)
				WHERE t.id_board IN ({array_int:visible_blogs})' . ($modSettings['postmod_active'] ? '
					AND t.approved = {int:is_approved}' : '') . '
				ORDER BY {raw:type}
				LIMIT {int:limit}', array('visible_blogs' => $visible_blogs, 'is_approved' => 1, 'type' => $sort ? 'RAND()' : 't.id_topic DESC', 'limit' => $limit));
            while ($row = $smcFunc['db_fetch_assoc']($request)) {
                censorText($row['subject']);
                $articles[] = array('id' => $row['id_topic'], 'subject' => $row['subject'], 'link' => '<a href="' . $scripturl . '?action=blog;sa=view_post;id=' . $row['id_topic'] . '">' . $row['subject'] . '</a>');
            }
            $smcFunc['db_free_result']($request);
            if (empty($articles)) {
                echo '
								', $txt['error_sp_no_articles_found'];
                return;
            }
            echo '
								<ul class="sp_list">';
            foreach ($articles as $article) {
                echo '
									<li>', sp_embed_image('blog'), ' ', $article['link'], '</li>';
            }
            echo '
								</ul>';
        } else {
            $request = $smcFunc['db_query']('', '
				SELECT b.id_board, b.blog_alias, b.name, MAX(t.id_topic) AS id_topic
				FROM {db_prefix}boards AS b
					INNER JOIN {db_prefix}topics AS t ON (t.id_board = b.id_board)
				WHERE b.id_board IN ({array_int:visible_blogs})' . ($modSettings['postmod_active'] ? '
					AND t.approved = {int:is_approved}' : '') . '
				GROUP BY b.id_board
				ORDER BY {raw:type}
				LIMIT {int:limit}', array('visible_blogs' => $visible_blogs, 'is_approved' => 1, 'type' => $sort ? 'RAND()' : 'b.id_board DESC', 'limit' => $limit));
            $blogs = array();
            while ($row = $smcFunc['db_fetch_assoc']($request)) {
                $blogs[$row['id_board']] = array('id' => $row['id_board'], 'alias' => $row['blog_alias'], 'name' => $row['name'], 'href' => $scripturl . '?action=blog;sa=view_blog;name=' . $row['blog_alias'], 'link' => '<a href="' . $scripturl . '?action=blog;sa=view_blog;name=' . $row['blog_alias'] . '">' . $row['name'] . '</a>');
                $articles[] = $row['id_topic'];
            }
            $smcFunc['db_free_result']($request);
            if (empty($articles)) {
                echo '
								', $txt['error_sp_no_articles_found'];
                return;
            }
            $request = $smcFunc['db_query']('', '
				SELECT
					t.id_board, t.id_topic, m.subject, mem.id_member, mem.real_name,
					mem.avatar, a.id_attach, a.attachment_type, a.filename
				FROM {db_prefix}topics AS t
					INNER JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_first_msg)
					INNER JOIN {db_prefix}members AS mem ON (mem.id_member = t.id_member_started)
					LEFT JOIN {db_prefix}attachments AS a ON (a.id_member = t.id_member_started)
				WHERE t.id_topic IN ({array_int:blog_articles})
				LIMIT {int:limit}', array('blog_articles' => $articles, 'limit' => count($articles)));
            $colorids = array();
            while ($row = $smcFunc['db_fetch_assoc']($request)) {
                if (!empty($row['id_member'])) {
                    $colorids[$row['id_member']] = $row['id_member'];
                }
                if ($modSettings['avatar_action_too_large'] == 'option_html_resize' || $modSettings['avatar_action_too_large'] == 'option_js_resize') {
                    $avatar_width = !empty($modSettings['avatar_max_width_external']) ? ' width="' . $modSettings['avatar_max_width_external'] . '"' : '';
                    $avatar_height = !empty($modSettings['avatar_max_height_external']) ? ' height="' . $modSettings['avatar_max_height_external'] . '"' : '';
                } else {
                    $avatar_width = '';
                    $avatar_height = '';
                }
                censorText($row['subject']);
                $blogs[$row['id_board']] += array('article' => array('id' => $row['id_topic'], 'subject' => $row['subject'], 'link' => '<a href="' . $scripturl . '?action=blog;sa=view_post;id=' . $row['id_topic'] . '">' . $row['subject'] . '</a>'), 'owner' => array('id' => $row['id_member'], 'name' => $row['real_name'], 'href' => $scripturl . '?action=profile;u=' . $row['id_member'], 'link' => '<a href="' . $scripturl . '?action=profile;u=' . $row['id_member'] . '">' . $row['real_name'] . '</a>'), 'avatar' => array('name' => $row['avatar'], 'image' => $row['avatar'] == '' ? $row['id_attach'] > 0 ? '<img src="' . (empty($row['attachment_type']) ? $scripturl . '?action=dlattach;attach=' . $row['id_attach'] . ';type=avatar' : $modSettings['custom_avatar_url'] . '/' . $row['filename']) . '" alt="" class="avatar" border="0" />' : '' : (stristr($row['avatar'], 'http://') ? '<img src="' . $row['avatar'] . '"' . $avatar_width . $avatar_height . ' alt="" class="avatar" border="0" />' : '<img src="' . $modSettings['avatar_url'] . '/' . htmlspecialchars($row['avatar']) . '" alt="" class="avatar" border="0" />'), 'href' => $row['avatar'] == '' ? $row['id_attach'] > 0 ? empty($row['attachment_type']) ? $scripturl . '?action=dlattach;attach=' . $row['id_attach'] . ';type=avatar' : $modSettings['custom_avatar_url'] . '/' . $row['filename'] : '' : (stristr($row['avatar'], 'http://') ? $row['avatar'] : $modSettings['avatar_url'] . '/' . $row['avatar']), 'url' => $row['avatar'] == '' ? '' : (stristr($row['avatar'], 'http://') ? $row['avatar'] : $modSettings['avatar_url'] . '/' . $row['avatar'])));
            }
            $smcFunc['db_free_result']($request);
            if (!empty($colorids) && sp_loadColors($colorids) !== false) {
                foreach ($blogs as $k => $p) {
                    if (!empty($color_profile[$p['owner']['id']]['link'])) {
                        $blogs[$k]['owner']['link'] = $color_profile[$p['owner']['id']]['link'];
                    }
                }
            }
            echo '
								<table class="sp_fullwidth sp_blog">';
            foreach ($blogs as $blog) {
                echo '
									<tr>
										<td class="sp_top_poster sp_blog">', !empty($blog['avatar']['href']) ? '
											<a href="' . $scripturl . '?action=profile;u=' . $blog['owner']['id'] . '"><img src="' . $blog['avatar']['href'] . '" alt="' . $blog['name'] . '" width="40" /></a>' : '', '
										</td>
										<td>
											<span class="sp_blog_title">', $blog['owner']['link'], '</span><br />
											', $blog['article']['link'], '
										</td>
									</tr>';
            }
            echo '
								</table>';
        }
    }
}
/**
 * Loads all the comments that an article has generated
 *
 * @param int|null $article_id
 * @param int|null $limit limit the number of results
 * @param int|null $start start number for pages
 */
function sportal_get_comments($article_id = null, $limit = null, $start = null)
{
    global $scripturl, $user_info, $color_profile;
    $db = database();
    $request = $db->query('', '
		SELECT
			spc.id_comment, IFNULL(spc.id_member, 0) AS id_author,
			IFNULL(m.real_name, spc.member_name) AS author_name,
			spc.body, spc.log_time,
			m.avatar, m.email_address,
			a.id_attach, a.attachment_type, a.filename
		FROM {db_prefix}sp_comments AS spc
			LEFT JOIN {db_prefix}members AS m ON (m.id_member = spc.id_member)
			LEFT JOIN {db_prefix}attachments AS a ON (a.id_member = m.id_member)
		WHERE spc.id_article = {int:article_id}
		ORDER BY spc.id_comment' . (!empty($limit) ? '
		LIMIT {int:start}, {int:limit}' : ''), array('article_id' => (int) $article_id, 'limit' => (int) $limit, 'start' => (int) $start));
    $return = array();
    $member_ids = array();
    while ($row = $db->fetch_assoc($request)) {
        if (!empty($row['id_author'])) {
            $member_ids[$row['id_author']] = $row['id_author'];
        }
        $return[$row['id_comment']] = array('id' => $row['id_comment'], 'body' => parse_bbc($row['body']), 'time' => htmlTime($row['log_time']), 'author' => array('id' => $row['id_author'], 'name' => $row['author_name'], 'href' => $scripturl . '?action=profile;u=' . $row['id_author'], 'link' => $row['id_author'] ? '<a href="' . $scripturl . '?action=profile;u=' . $row['id_author'] . '">' . $row['author_name'] . '</a>' : $row['author_name'], 'avatar' => determineAvatar(array('avatar' => $row['avatar'], 'filename' => $row['filename'], 'id_attach' => $row['id_attach'], 'email_address' => $row['email_address'], 'attachment_type' => $row['attachment_type']))), 'can_moderate' => allowedTo('sp_admin') || allowedTo('sp_manage_articles') || !$user_info['is_guest'] && $user_info['id'] == $row['id_author']);
    }
    $db->free_result($request);
    // Colorization
    if (!empty($member_ids) && sp_loadColors($member_ids) !== false) {
        foreach ($return as $key => $value) {
            if (!empty($color_profile[$value['author']['id']]['link'])) {
                $return[$key]['author']['link'] = $color_profile[$value['author']['id']]['link'];
            }
        }
    }
    return $return;
}
/**
 * Article Block, show the list of articles in the system
 *
 * @param mixed[] $parameters
 *		'category' => list of categories to choose article from
 *		'limit' => number of articles to show
 *		'type' => 0 latest 1 random
 *		'length' => length for the body text preview
 *		'avatar' => whether to show the author avatar or not
 *
 * @param int $id - not used in this block
 * @param boolean $return_parameters if true returns the configuration options for the block
 */
function sp_articles($parameters, $id, $return_parameters = false)
{
    global $scripturl, $txt, $color_profile;
    $block_parameters = array('category' => array(0 => $txt['sp_all']), 'limit' => 'int', 'type' => 'select', 'length' => 'int', 'avatar' => 'check');
    if ($return_parameters) {
        require_once SUBSDIR . '/PortalAdmin.subs.php';
        $categories = sp_load_categories();
        foreach ($categories as $category) {
            $block_parameters['category'][$category['id']] = $category['name'];
        }
        return $block_parameters;
    }
    // Needed utilities
    require_once SUBSDIR . '/Post.subs.php';
    require_once SUBSDIR . '/PortalArticle.subs.php';
    // Set up for the query
    $category = empty($parameters['category']) ? 0 : (int) $parameters['category'];
    $limit = empty($parameters['limit']) ? 5 : (int) $parameters['limit'];
    $type = empty($parameters['type']) ? 0 : 1;
    $length = isset($parameters['length']) ? (int) $parameters['length'] : 250;
    $avatar = empty($parameters['avatar']) ? 0 : (int) $parameters['avatar'];
    $articles = sportal_get_articles(null, true, true, $type ? 'RAND()' : 'spa.date DESC', $category, $limit);
    $colorids = array();
    foreach ($articles as $article) {
        if (!empty($article['author']['id'])) {
            $colorids[$article['author']['id']] = $article['author']['id'];
        }
    }
    // No articles in the system or none they can see
    if (empty($articles)) {
        echo '
								', $txt['error_sp_no_articles_found'];
        return;
    }
    // Doing the color thing
    if (!empty($colorids) && sp_loadColors($colorids) !== false) {
        foreach ($articles as $k => $p) {
            if (!empty($color_profile[$p['author']['id']]['link'])) {
                $articles[$k]['author']['link'] = $color_profile[$p['author']['id']]['link'];
            }
        }
    }
    // Not showing avatars, just use a compact link view
    if (empty($avatar)) {
        echo '
			<ul class="sp_list">';
        foreach ($articles as $article) {
            echo '
				<li>', sp_embed_image('topic'), ' ', $article['link'], '</li>';
        }
        echo '
			</ul>';
    } else {
        echo '
							<table class="sp_fullwidth">';
        foreach ($articles as $article) {
            // Using the cutoff tag?
            $limited = false;
            if (($cutoff = Util::strpos($article['body'], '[cutoff]')) !== false) {
                $article['body'] = Util::substr($article['body'], 0, $cutoff);
                preparsecode($article['body']);
                $limited = true;
            }
            // Good time to do this is ... now
            censorText($article['subject']);
            censorText($article['body']);
            $article['body'] = sportal_parse_content($article['body'], $article['type'], 'return');
            // Shorten the text, link the ellipsis, etc as needed
            if ($limited || !empty($length)) {
                $ellip = '<a href="' . $scripturl . '?article=' . $article['article_id'] . '">&hellip;</a>';
                $article['body'] = $limited ? $article['body'] . $ellip : Util::shorten_html($article['body'], $length, $ellip, false);
            }
            echo '
								<tr class="sp_articles_row">
									<td class="sp_articles centertext">';
            // If we have an avatar to show, show it
            if ($avatar && !empty($article['author']['avatar']['href'])) {
                echo '
										<a href="', $scripturl, '?action=profile;u=', $article['author']['id'], '">
											<img src="', $article['author']['avatar']['href'], '" alt="', $article['author']['name'], '" style="max-width:40px" />
										</a>';
            }
            echo '
									</td>
									<td>
										<span class="sp_articles_title">', $article['author']['link'], '</span><br />
										', $article['link'], '
									</td>
									<td>', $article['body'], '</td>
								</tr>
								<tr>
									<td colspan="3" class="sp_articles_row"></td>
								</tr>';
        }
        echo '
							</table>';
    }
}
function sportal_articles()
{
    global $smcFunc, $context, $modSettings, $article_request;
    loadLanguage('Stats');
    loadTemplate('PortalArticles');
    $context['sub_template'] = 'articles';
    if (empty($modSettings['articleactive'])) {
        return;
    }
    $request = $smcFunc['db_query']('', '
		SELECT COUNT(*)
		FROM {db_prefix}sp_articles as a
			INNER JOIN {db_prefix}sp_categories AS c ON (c.id_category = a.id_category)
			INNER JOIN {db_prefix}messages AS m ON (m.id_msg = a.id_message)
			INNER JOIN {db_prefix}boards AS b ON (b.id_board = m.id_board)
		WHERE {query_see_board}
			AND a.approved = {int:approved}
			AND publish = {int:publish}', array('approved' => 1, 'publish' => 1));
    list($totalArticles) = $smcFunc['db_fetch_row']($request);
    $smcFunc['db_free_result']($request);
    $modSettings['articleperpage'] = isset($modSettings['articleperpage']) ? (int) $modSettings['articleperpage'] : 5;
    $context['start'] = !empty($_REQUEST['articles']) ? (int) $_REQUEST['articles'] : 0;
    if (!empty($modSettings['articleperpage']) && $totalArticles > 0) {
        $context['page_index'] = constructPageIndex($context['portal_url'] . '?articles=%1$d', $context['start'], $totalArticles, $modSettings['articleperpage'], true);
    }
    if (empty($modSettings['sp_disableColor'])) {
        $members_request = $smcFunc['db_query']('', '
			SELECT m.id_member
			FROM {db_prefix}sp_articles AS a
				INNER JOIN {db_prefix}messages AS m ON (m.id_msg = a.id_message)
				INNER JOIN {db_prefix}boards AS b ON (b.id_board = m.id_board)
				INNER JOIN {db_prefix}sp_categories AS c ON (c.id_category = a.id_category)
			WHERE {query_see_board}
				AND a.approved = {int:approved}
				AND publish = {int:publish}
				AND m.id_member != {int:guest}
			ORDER BY a.id_message DESC' . (empty($modSettings['articleperpage']) ? '' : '
			LIMIT {int:start}, {int:end}'), array('approved' => 1, 'publish' => 1, 'start' => $context['start'], 'end' => $modSettings['articleperpage'], 'guest' => 0));
        $colorids = array();
        while ($row = $smcFunc['db_fetch_assoc']($members_request)) {
            $colorids[] = $row['id_member'];
        }
        $smcFunc['db_free_result']($members_request);
        if (!empty($colorids)) {
            sp_loadColors($colorids);
        }
    }
    $article_request = $smcFunc['db_query']('', '
		SELECT
			a.id_article, a.id_category, a.id_message, a.approved, c.name as cname, c.picture, m.id_member,
			IFNULL(mem.real_name, m.poster_name) AS poster_name, m.icon, m.subject, m.body, m.poster_time,
			m.smileys_enabled, t.id_topic, t.num_replies, t.num_views, t.locked, b.id_board, b.name as bname,
			mem.avatar, at.id_attach, at.attachment_type, at.filename
		FROM {db_prefix}sp_articles AS a
			INNER JOIN {db_prefix}sp_categories AS c ON (c.id_category = a.id_category)
			INNER JOIN {db_prefix}messages AS m ON (m.id_msg = a.id_message)
			INNER JOIN {db_prefix}topics AS t ON (t.id_first_msg = a.id_message)
			INNER JOIN {db_prefix}boards AS b ON (b.id_board = m.id_board)
			LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = m.id_member)
			LEFT JOIN {db_prefix}attachments AS at ON (at.id_member = mem.id_member)
		WHERE {query_see_board}
			AND a.approved = {int:approved}
			AND publish = {int:publish}
		ORDER BY a.id_message DESC' . (empty($modSettings['articleperpage']) ? '' : '
		LIMIT {int:start}, {int:end}'), array('approved' => 1, 'publish' => 1, 'start' => $context['start'], 'end' => $modSettings['articleperpage']));
    $context['get_articles'] = 'sportal_articles_callback';
}