questions.php 4.25 KB
Newer Older
Scott committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
<?php
/*
	Question2Answer by Gideon Greenspan and contributors
	http://www.question2answer.org/

	File: qa-include/qa-page-questions.php
	Description: Controller for page listing recent questions


	This program is free software; you can redistribute it and/or
	modify it under the terms of the GNU General Public License
	as published by the Free Software Foundation; either version 2
	of the License, or (at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	More about this license: http://www.question2answer.org/license.php
*/

23 24 25 26
if (!defined('QA_VERSION')) { // don't allow this page to be requested directly from browser
	header('Location: ../');
	exit;
}
Scott committed
27

28 29 30
require_once QA_INCLUDE_DIR . 'db/selects.php';
require_once QA_INCLUDE_DIR . 'app/format.php';
require_once QA_INCLUDE_DIR . 'app/q-list.php';
Scott committed
31

32 33
$categoryslugs = qa_request_parts(1);
$countslugs = count($categoryslugs);
Scott committed
34

35 36 37
$sort = ($countslugs && !QA_ALLOW_UNINDEXED_QUERIES) ? null : qa_get('sort');
$start = qa_get_start();
$userid = qa_get_logged_in_userid();
Scott committed
38 39


Scott committed
40
// Get list of questions, plus category information
Scott committed
41

42 43 44 45
switch ($sort) {
	case 'hot':
		$selectsort = 'hotness';
		break;
Scott committed
46

47 48 49
	case 'votes':
		$selectsort = 'netvotes';
		break;
Scott committed
50

51 52 53
	case 'answers':
		$selectsort = 'acount';
		break;
Scott committed
54

55 56 57
	case 'views':
		$selectsort = 'views';
		break;
Scott committed
58

59 60 61 62
	default:
		$selectsort = 'created';
		break;
}
Scott committed
63

64 65 66 67 68
list($questions, $categories, $categoryid) = qa_db_select_with_pending(
	qa_db_qs_selectspec($userid, $selectsort, $start, $categoryslugs, null, false, false, qa_opt_if_loaded('page_size_qs')),
	qa_db_category_nav_selectspec($categoryslugs, false, false, true),
	$countslugs ? qa_db_slugs_to_category_id_selectspec($categoryslugs) : null
);
Scott committed
69

70
if ($countslugs) {
Scott committed
71
	if (!isset($categoryid)) {
72
		return include QA_INCLUDE_DIR . 'qa-page-not-found.php';
Scott committed
73
	}
Scott committed
74

75 76
	$categorytitlehtml = qa_html($categories[$categoryid]['title']);
	$nonetitle = qa_lang_html_sub('main/no_questions_in_x', $categorytitlehtml);
Scott committed
77

78 79 80
} else {
	$nonetitle = qa_lang_html('main/no_questions_found');
}
Scott committed
81 82


83 84 85
$categorypathprefix = QA_ALLOW_UNINDEXED_QUERIES ? 'questions/' : null; // this default is applied if sorted not by recent
$feedpathprefix = null;
$linkparams = array('sort' => $sort);
Scott committed
86

87 88 89 90 91
switch ($sort) {
	case 'hot':
		$sometitle = $countslugs ? qa_lang_html_sub('main/hot_qs_in_x', $categorytitlehtml) : qa_lang_html('main/hot_qs_title');
		$feedpathprefix = qa_opt('feed_for_hot') ? 'hot' : null;
		break;
Scott committed
92

93 94 95
	case 'votes':
		$sometitle = $countslugs ? qa_lang_html_sub('main/voted_qs_in_x', $categorytitlehtml) : qa_lang_html('main/voted_qs_title');
		break;
Scott committed
96

97 98 99
	case 'answers':
		$sometitle = $countslugs ? qa_lang_html_sub('main/answered_qs_in_x', $categorytitlehtml) : qa_lang_html('main/answered_qs_title');
		break;
Scott committed
100

101 102 103
	case 'views':
		$sometitle = $countslugs ? qa_lang_html_sub('main/viewed_qs_in_x', $categorytitlehtml) : qa_lang_html('main/viewed_qs_title');
		break;
Scott committed
104

105 106 107 108 109 110 111
	default:
		$linkparams = array();
		$sometitle = $countslugs ? qa_lang_html_sub('main/recent_qs_in_x', $categorytitlehtml) : qa_lang_html('main/recent_qs_title');
		$categorypathprefix = 'questions/';
		$feedpathprefix = qa_opt('feed_for_questions') ? 'questions' : null;
		break;
}
Scott committed
112 113


Scott committed
114
// Prepare and return content for theme
Scott committed
115

116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
$qa_content = qa_q_list_page_content(
	$questions, // questions
	qa_opt('page_size_qs'), // questions per page
	$start, // start offset
	$countslugs ? $categories[$categoryid]['qcount'] : qa_opt('cache_qcount'), // total count
	$sometitle, // title if some questions
	$nonetitle, // title if no questions
	$categories, // categories for navigation
	$categoryid, // selected category id
	true, // show question counts in category navigation
	$categorypathprefix, // prefix for links in category navigation
	$feedpathprefix, // prefix for RSS feed paths
	$countslugs ? qa_html_suggest_qs_tags(qa_using_tags()) : qa_html_suggest_ask($categoryid), // suggest what to do next
	$linkparams, // extra parameters for page links
	$linkparams // category nav params
);

if (QA_ALLOW_UNINDEXED_QUERIES || !$countslugs) {
	$qa_content['navigation']['sub'] = qa_qs_sub_navigation($sort, $categoryslugs);
}


return $qa_content;