admin-moderate.php 4.81 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
<?php
/*
	Question2Answer by Gideon Greenspan and contributors
	http://www.question2answer.org/

	Description: Controller for admin page showing questions, answers and comments waiting for approval


	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
*/

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

Scott committed
27 28 29
require_once QA_INCLUDE_DIR . 'app/admin.php';
require_once QA_INCLUDE_DIR . 'db/selects.php';
require_once QA_INCLUDE_DIR . 'app/format.php';
Scott committed
30 31


Scott committed
32
// Find queued questions, answers, comments
Scott committed
33

Scott committed
34
$userid = qa_get_logged_in_userid();
Scott committed
35

Scott committed
36 37 38 39 40
list($queuedquestions, $queuedanswers, $queuedcomments) = qa_db_select_with_pending(
	qa_db_qs_selectspec($userid, 'created', 0, null, null, 'Q_QUEUED', true),
	qa_db_recent_a_qs_selectspec($userid, 0, null, null, 'A_QUEUED', true),
	qa_db_recent_c_qs_selectspec($userid, 0, null, null, 'C_QUEUED', true)
);
Scott committed
41 42


Scott committed
43
// Check admin privileges (do late to allow one DB query)
Scott committed
44

Scott committed
45 46 47 48 49
if (qa_user_maximum_permit_error('permit_moderate')) {
	$qa_content = qa_content_prepare();
	$qa_content['error'] = qa_lang_html('users/no_permission');
	return $qa_content;
}
Scott committed
50 51


Scott committed
52
// Check to see if any were approved/rejected here
Scott committed
53

Scott committed
54
$pageerror = qa_admin_check_clicks();
Scott committed
55 56


Scott committed
57
// Combine sets of questions and remove those this user has no permission to moderate
Scott committed
58

Scott committed
59
$questions = qa_any_sort_by_date(array_merge($queuedquestions, $queuedanswers, $queuedcomments));
Scott committed
60

Scott committed
61 62 63 64 65 66
if (qa_user_permit_error('permit_moderate')) { // if user not allowed to moderate all posts
	foreach ($questions as $index => $question) {
		if (qa_user_post_permit_error('permit_moderate', $question))
			unset($questions[$index]);
	}
}
Scott committed
67 68


Scott committed
69
// Get information for users
Scott committed
70

Scott committed
71
$usershtml = qa_userids_handles_html(qa_any_get_userids_handles($questions));
Scott committed
72 73


Scott committed
74
// Prepare content for theme
Scott committed
75

Scott committed
76
$qa_content = qa_content_prepare();
Scott committed
77

Scott committed
78 79
$qa_content['title'] = qa_lang_html('admin/recent_approve_title');
$qa_content['error'] = isset($pageerror) ? $pageerror : qa_admin_page_error();
Scott committed
80

Scott committed
81 82 83
$qa_content['q_list'] = array(
	'form' => array(
		'tags' => 'method="post" action="' . qa_self_html() . '"',
Scott committed
84

Scott committed
85 86
		'hidden' => array(
			'code' => qa_get_form_security_code('admin/click'),
Scott committed
87
		),
Scott committed
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
	),

	'qs' => array(),
);

if (count($questions)) {
	foreach ($questions as $question) {
		$postid = qa_html(isset($question['opostid']) ? $question['opostid'] : $question['postid']);
		$elementid = 'p' . $postid;

		$htmloptions = qa_post_html_options($question);
		$htmloptions['voteview'] = false;
		$htmloptions['tagsview'] = !isset($question['opostid']);
		$htmloptions['answersview'] = false;
		$htmloptions['viewsview'] = false;
		$htmloptions['contentview'] = true;
		$htmloptions['elementid'] = $elementid;

		$htmlfields = qa_any_to_q_html_fields($question, $userid, qa_cookie_get(), $usershtml, null, $htmloptions);

		if (isset($htmlfields['what_url'])) // link directly to relevant content
			$htmlfields['url'] = $htmlfields['what_url'];

		$posttype = qa_strtolower(isset($question['obasetype']) ? $question['obasetype'] : $question['basetype']);
		switch ($posttype) {
			case 'q':
			default:
				$approveKey = 'question/approve_q_popup';
				$rejectKey = 'question/reject_q_popup';
				break;
			case 'a':
				$approveKey = 'question/approve_a_popup';
				$rejectKey = 'question/reject_a_popup';
				break;
			case 'c':
				$approveKey = 'question/approve_c_popup';
				$rejectKey = 'question/reject_c_popup';
				break;
		}
Scott committed
127

Scott committed
128 129
		$htmlfields['form'] = array(
			'style' => 'light',
Scott committed
130

Scott committed
131 132 133 134 135 136 137
			'buttons' => array(
				// Possible values for popup: approve_q_popup, approve_a_popup, approve_c_popup
				'approve' => array(
					'tags' => 'name="admin_' . $postid . '_approve" onclick="return qa_admin_click(this);"',
					'label' => qa_lang_html('question/approve_button'),
					'popup' => qa_lang_html($approveKey),
				),
Scott committed
138

Scott committed
139 140 141 142 143 144 145 146
				// Possible values for popup: reject_q_popup, reject_a_popup, reject_c_popup
				'reject' => array(
					'tags' => 'name="admin_' . $postid . '_reject" onclick="return qa_admin_click(this);"',
					'label' => qa_lang_html('question/reject_button'),
					'popup' => qa_lang_html($rejectKey),
				),
			),
		);
Scott committed
147

Scott committed
148 149
		$qa_content['q_list']['qs'][] = $htmlfields;
	}
Scott committed
150

Scott committed
151 152
} else
	$qa_content['title'] = qa_lang_html('admin/no_approve_found');
Scott committed
153 154


Scott committed
155 156
$qa_content['navigation']['sub'] = qa_admin_sub_navigation();
$qa_content['script_rel'][] = 'qa-content/qa-admin.js?' . QA_VERSION;
Scott committed
157 158


Scott committed
159
return $qa_content;