admin-moderate.php 4.85 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-admin-moderate.php
	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
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

Scott committed
28 29 30
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
31 32 33 34


//	Find queued questions, answers, comments

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

Scott committed
37 38 39 40 41
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
42 43 44 45


//	Check admin privileges (do late to allow one DB query)

Scott committed
46 47 48 49 50
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
51 52 53 54


//	Check to see if any were approved/rejected here

Scott committed
55
$pageerror = qa_admin_check_clicks();
Scott committed
56 57 58 59


//	Combine sets of questions and remove those this user has no permission to moderate

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

Scott committed
62 63 64 65 66 67
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
68 69 70 71


//	Get information for users

Scott committed
72
$usershtml = qa_userids_handles_html(qa_any_get_userids_handles($questions));
Scott committed
73 74 75 76


//	Prepare content for theme

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

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

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

Scott committed
86 87
		'hidden' => array(
			'code' => qa_get_form_security_code('admin/click'),
Scott committed
88
		),
Scott committed
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 127
	),

	'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
128

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

Scott committed
132 133 134 135 136 137 138
			'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
139

Scott committed
140 141 142 143 144 145 146 147
				// 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
148

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

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


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


Scott committed
160
return $qa_content;