<?php

/*
	Question2Answer (c) Gideon Greenspan

	http://www.question2answer.org/


	File: qa-include/qa-page-admin-default.php
	Version: See define()s at top of qa-include/qa-base.php
	Description: Controller for most admin pages which just contain options


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

	if (!defined('QA_VERSION')) { // don't allow this page to be requested directly from browser
		header('Location: ../');
		exit;
	}

	require_once QA_INCLUDE_DIR.'qa-db-admin.php';
	require_once QA_INCLUDE_DIR.'qa-db-maxima.php';
	require_once QA_INCLUDE_DIR.'qa-db-selects.php';
	require_once QA_INCLUDE_DIR.'qa-app-options.php';
	require_once QA_INCLUDE_DIR.'qa-app-admin.php';


	$adminsection=strtolower(qa_request_part(1));


//	Get list of categories and all options

	$categories=qa_db_select_with_pending(qa_db_category_nav_selectspec(null, true));


//	See if we need to redirect

	if (empty($adminsection)) {
		$subnav=qa_admin_sub_navigation();

		if (isset($subnav[@$_COOKIE['qa_admin_last']]))
			qa_redirect($_COOKIE['qa_admin_last']);
		elseif (count($subnav)) {
			reset($subnav);
			qa_redirect(key($subnav));
		}
	}


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

	if (!qa_admin_check_privileges($qa_content))
		return $qa_content;


//	For non-text options, lists of option types, minima and maxima

	$optiontype=array(
		'avatar_message_list_size' => 'number',
		'avatar_profile_size' => 'number',
		'avatar_q_list_size' => 'number',
		'avatar_q_page_a_size' => 'number',
		'avatar_q_page_c_size' => 'number',
		'avatar_q_page_q_size' => 'number',
		'avatar_store_size' => 'number',
		'avatar_users_size' => 'number',
		'columns_tags' => 'number',
		'columns_users' => 'number',
		'feed_number_items' => 'number',
		'flagging_hide_after' => 'number',
		'flagging_notify_every' => 'number',
		'flagging_notify_first' => 'number',
		'hot_weight_a_age' => 'number',
		'hot_weight_answers' => 'number',
		'hot_weight_q_age' => 'number',
		'hot_weight_views' => 'number',
		'hot_weight_votes' => 'number',
		'logo_height' => 'number-blank',
		'logo_width' => 'number-blank',
		'mailing_per_minute' => 'number',
		'max_len_q_title' => 'number',
		'max_num_q_tags' => 'number',
		'max_rate_ip_as' => 'number',
		'max_rate_ip_cs' => 'number',
		'max_rate_ip_flags' => 'number',
		'max_rate_ip_logins' => 'number',
		'max_rate_ip_messages' => 'number',
		'max_rate_ip_qs' => 'number',
		'max_rate_ip_registers' => 'number',
		'max_rate_ip_uploads' => 'number',
		'max_rate_ip_votes' => 'number',
		'max_rate_user_as' => 'number',
		'max_rate_user_cs' => 'number',
		'max_rate_user_flags' => 'number',
		'max_rate_user_messages' => 'number',
		'max_rate_user_qs' => 'number',
		'max_rate_user_uploads' => 'number',
		'max_rate_user_votes' => 'number',
		'min_len_a_content' => 'number',
		'min_len_c_content' => 'number',
		'min_len_q_content' => 'number',
		'min_len_q_title' => 'number',
		'min_num_q_tags' => 'number',
		'moderate_points_limit' => 'number',
		'page_size_activity' => 'number',
		'page_size_ask_check_qs' => 'number',
		'page_size_ask_tags' => 'number',
		'page_size_home' => 'number',
		'page_size_hot_qs' => 'number',
		'page_size_q_as' => 'number',
		'page_size_qs' => 'number',
		'page_size_related_qs' => 'number',
		'page_size_search' => 'number',
		'page_size_tag_qs' => 'number',
		'page_size_tags' => 'number',
		'page_size_una_qs' => 'number',
		'page_size_users' => 'number',
		'page_size_wall' => 'number',
		'pages_prev_next' => 'number',
		'q_urls_title_length' => 'number',
		'show_fewer_cs_count' => 'number',
		'show_fewer_cs_from' => 'number',
		'show_full_date_days' => 'number',
		'smtp_port' => 'number',

		'allow_change_usernames' => 'checkbox',
		'allow_close_questions' => 'checkbox',
		'allow_login_email_only' => 'checkbox',
		'allow_multi_answers' => 'checkbox',
		'allow_private_messages' => 'checkbox',
		'allow_user_walls' => 'checkbox',
		'allow_self_answer' => 'checkbox',
		'allow_view_q_bots' => 'checkbox',
		'approve_user_required' => 'checkbox',
		'avatar_allow_gravatar' => 'checkbox',
		'avatar_allow_upload' => 'checkbox',
		'avatar_default_show' => 'checkbox',
		'captcha_on_anon_post' => 'checkbox',
		'captcha_on_feedback' => 'checkbox',
		'captcha_on_register' => 'checkbox',
		'captcha_on_reset_password' => 'checkbox',
		'captcha_on_unapproved' => 'checkbox',
		'captcha_on_unconfirmed' => 'checkbox',
		'comment_on_as' => 'checkbox',
		'comment_on_qs' => 'checkbox',
		'confirm_user_emails' => 'checkbox',
		'confirm_user_required' => 'checkbox',
		'do_ask_check_qs' => 'checkbox',
		'do_close_on_select' => 'checkbox',
		'do_complete_tags' => 'checkbox',
		'do_count_q_views' => 'checkbox',
		'do_example_tags' => 'checkbox',
		'extra_field_active' => 'checkbox',
		'extra_field_display' => 'checkbox',
		'feed_for_activity' => 'checkbox',
		'feed_for_hot' => 'checkbox',
		'feed_for_qa' => 'checkbox',
		'feed_for_questions' => 'checkbox',
		'feed_for_search' => 'checkbox',
		'feed_for_tag_qs' => 'checkbox',
		'feed_for_unanswered' => 'checkbox',
		'feed_full_text' => 'checkbox',
		'feed_per_category' => 'checkbox',
		'feedback_enabled' => 'checkbox',
		'flagging_of_posts' => 'checkbox',
		'follow_on_as' => 'checkbox',
		'links_in_new_window' => 'checkbox',
		'logo_show' => 'checkbox',
		'mailing_enabled' => 'checkbox',
		'moderate_anon_post' => 'checkbox',
		'moderate_by_points' => 'checkbox',
		'moderate_edited_again' => 'checkbox',
		'moderate_notify_admin' => 'checkbox',
		'moderate_unapproved' => 'checkbox',
		'moderate_unconfirmed' => 'checkbox',
		'moderate_users' => 'checkbox',
		'neat_urls' => 'checkbox',
		'notify_admin_q_post' => 'checkbox',
		'notify_users_default' => 'checkbox',
		'q_urls_remove_accents' => 'checkbox',
		'register_notify_admin' => 'checkbox',
		'show_c_reply_buttons' => 'checkbox',
		'show_custom_answer' => 'checkbox',
		'show_custom_ask' => 'checkbox',
		'show_custom_comment' => 'checkbox',
		'show_custom_footer' => 'checkbox',
		'show_custom_header' => 'checkbox',
		'show_custom_home' => 'checkbox',
		'show_custom_in_head' => 'checkbox',
		'show_custom_register' => 'checkbox',
		'show_custom_sidebar' => 'checkbox',
		'show_custom_sidepanel' => 'checkbox',
		'show_custom_welcome' => 'checkbox',
		'show_home_description' => 'checkbox',
		'show_message_history' => 'checkbox',
		'show_notice_visitor' => 'checkbox',
		'show_notice_welcome' => 'checkbox',
		'show_selected_first' => 'checkbox',
		'show_url_links' => 'checkbox',
		'show_user_points' => 'checkbox',
		'show_user_titles' => 'checkbox',
		'show_view_counts' => 'checkbox',
		'show_view_count_q_page' => 'checkbox',
		'show_when_created' => 'checkbox',
		'site_maintenance' => 'checkbox',
		'smtp_active' => 'checkbox',
		'smtp_authenticate' => 'checkbox',
		'suspend_register_users' => 'checkbox',
		'tag_separator_comma' => 'checkbox',
		'votes_separated' => 'checkbox',
		'voting_on_as' => 'checkbox',
		'voting_on_q_page_only' => 'checkbox',
		'voting_on_qs' => 'checkbox',

		'smtp_password' => 'password',
	);

	$optionmaximum=array(
		'feed_number_items' => QA_DB_RETRIEVE_QS_AS,
		'max_len_q_title' => QA_DB_MAX_TITLE_LENGTH,
		'page_size_activity' => QA_DB_RETRIEVE_QS_AS,
		'page_size_ask_check_qs' => QA_DB_RETRIEVE_QS_AS,
		'page_size_ask_tags' => QA_DB_RETRIEVE_QS_AS,
		'page_size_home' => QA_DB_RETRIEVE_QS_AS,
		'page_size_hot_qs' => QA_DB_RETRIEVE_QS_AS,
		'page_size_qs' => QA_DB_RETRIEVE_QS_AS,
		'page_size_related_qs' => QA_DB_RETRIEVE_QS_AS,
		'page_size_search' => QA_DB_RETRIEVE_QS_AS,
		'page_size_tag_qs' => QA_DB_RETRIEVE_QS_AS,
		'page_size_tags' => QA_DB_RETRIEVE_TAGS,
		'page_size_una_qs' => QA_DB_RETRIEVE_QS_AS,
		'page_size_users' => QA_DB_RETRIEVE_USERS,
		'page_size_wall' => QA_DB_RETRIEVE_MESSAGES,
	);

	$optionminimum=array(
		'flagging_hide_after' => 2,
		'flagging_notify_every' => 1,
		'flagging_notify_first' => 1,
		'max_num_q_tags' => 2,
		'max_rate_ip_logins' => 1,
		'page_size_activity' => 1,
		'page_size_ask_check_qs' => 3,
		'page_size_ask_tags' => 3,
		'page_size_home' => 1,
		'page_size_hot_qs' => 1,
		'page_size_q_as' => 1,
		'page_size_qs' => 1,
		'page_size_search' => 1,
		'page_size_tag_qs' => 1,
		'page_size_tags' => 1,
		'page_size_users' => 1,
		'page_size_wall' => 1,
	);


//	Define the options to show (and some other visual stuff) based on request

	$formstyle='tall';
	$checkboxtodisplay=null;

	$maxpermitpost=max(qa_opt('permit_post_q'), qa_opt('permit_post_a'));
	if (qa_opt('comment_on_qs') || qa_opt('comment_on_as'))
		$maxpermitpost=max($maxpermitpost, qa_opt('permit_post_c'));

	switch ($adminsection) {
		case 'general':
			$subtitle='admin/general_title';
			$showoptions=array('site_title', 'site_url', 'neat_urls', 'site_language', 'site_theme', 'site_theme_mobile', 'tags_or_categories', 'site_maintenance');
			break;

		case 'emails':
			$subtitle='admin/emails_title';
			$showoptions=array(
				'from_email', 'feedback_email', 'notify_admin_q_post', 'feedback_enabled', 'email_privacy',
				 'smtp_active', 'smtp_address', 'smtp_port', 'smtp_secure', 'smtp_authenticate', 'smtp_username', 'smtp_password'
			);

			$checkboxtodisplay=array(
				'smtp_address' => 'option_smtp_active',
				'smtp_port' => 'option_smtp_active',
				'smtp_secure' => 'option_smtp_active',
				'smtp_authenticate' => 'option_smtp_active',
				'smtp_username' => 'option_smtp_active && option_smtp_authenticate',
				'smtp_password' => 'option_smtp_active && option_smtp_authenticate',
			);
			break;

		case 'users':
			$subtitle='admin/users_title';

			$showoptions=array('show_notice_visitor', 'notice_visitor');

			if (!QA_FINAL_EXTERNAL_USERS) {
				require_once QA_INCLUDE_DIR.'qa-util-image.php';

				array_push($showoptions, 'show_custom_register', 'custom_register', 'show_notice_welcome', 'notice_welcome', 'show_custom_welcome', 'custom_welcome');

				array_push($showoptions, '' ,'allow_login_email_only', 'allow_change_usernames', 'allow_private_messages', 'show_message_history', 'allow_user_walls', 'page_size_wall', '', 'avatar_allow_gravatar');

				if (qa_has_gd_image())
					array_push($showoptions, 'avatar_allow_upload', 'avatar_store_size', 'avatar_default_show');
			}

			$showoptions[]='';

			if (!QA_FINAL_EXTERNAL_USERS)
				$showoptions[]='avatar_profile_size';

			array_push($showoptions, 'avatar_users_size', 'avatar_q_page_q_size', 'avatar_q_page_a_size', 'avatar_q_page_c_size',
				'avatar_q_list_size', 'avatar_message_list_size');

			$checkboxtodisplay=array(
				'custom_register' => 'option_show_custom_register',
				'custom_welcome' => 'option_show_custom_welcome',
				'notice_welcome' => 'option_show_notice_welcome',
				'notice_visitor' => 'option_show_notice_visitor',
				'show_message_history' => 'option_allow_private_messages',
				'avatar_store_size' => 'option_avatar_allow_upload',
				'avatar_default_show' => 'option_avatar_allow_gravatar || option_avatar_allow_upload',
			);

			if (!QA_FINAL_EXTERNAL_USERS)
				$checkboxtodisplay=array_merge($checkboxtodisplay, array(
					'page_size_wall' => 'option_allow_user_walls',
					'avatar_profile_size' => 'option_avatar_allow_gravatar || option_avatar_allow_upload',
					'avatar_users_size' => 'option_avatar_allow_gravatar || option_avatar_allow_upload',
					'avatar_q_page_q_size' => 'option_avatar_allow_gravatar || option_avatar_allow_upload',
					'avatar_q_page_a_size' => 'option_avatar_allow_gravatar || option_avatar_allow_upload',
					'avatar_q_page_c_size' => 'option_avatar_allow_gravatar || option_avatar_allow_upload',
					'avatar_q_list_size' => 'option_avatar_allow_gravatar || option_avatar_allow_upload',
					'avatar_message_list_size' => 'option_allow_private_messages || option_allow_user_walls',
				));

			$formstyle='wide';
			break;

		case 'layout':
			$subtitle='admin/layout_title';
			$showoptions=array('logo_show', 'logo_url', 'logo_width', 'logo_height', '', 'show_custom_sidebar', 'custom_sidebar', 'show_custom_sidepanel', 'custom_sidepanel', 'show_custom_header', 'custom_header', 'show_custom_footer', 'custom_footer', 'show_custom_in_head', 'custom_in_head', 'show_custom_home', 'custom_home_heading', 'custom_home_content', 'show_home_description', 'home_description', '');

			$checkboxtodisplay=array(
				'logo_url' => 'option_logo_show',
				'logo_width' => 'option_logo_show',
				'logo_height' => 'option_logo_show',
				'custom_sidebar' => 'option_show_custom_sidebar',
				'custom_sidepanel' => 'option_show_custom_sidepanel',
				'custom_header' => 'option_show_custom_header',
				'custom_footer' => 'option_show_custom_footer',
				'custom_in_head' => 'option_show_custom_in_head',
				'custom_home_heading' => 'option_show_custom_home',
				'custom_home_content' => 'option_show_custom_home',
				'home_description' => 'option_show_home_description',
			);
			break;

		case 'viewing':
			$subtitle='admin/viewing_title';
			$showoptions=array('q_urls_title_length', 'q_urls_remove_accents', 'do_count_q_views', 'show_view_counts', 'show_view_count_q_page', '', 'voting_on_qs', 'voting_on_q_page_only', 'voting_on_as', 'votes_separated', '', 'show_url_links', 'links_in_new_window', 'show_when_created', 'show_full_date_days');

			if (count(qa_get_points_to_titles()))
				$showoptions[]='show_user_titles';

			array_push($showoptions, 'show_user_points', '', 'sort_answers_by', 'show_selected_first', 'page_size_q_as', 'show_a_form_immediate');

			if (qa_opt('comment_on_qs') || qa_opt('comment_on_as'))
				array_push($showoptions, 'show_fewer_cs_from', 'show_fewer_cs_count', 'show_c_reply_buttons');

			$showoptins[]='';

			$widgets=qa_db_single_select(qa_db_widgets_selectspec());

			foreach ($widgets as $widget)
				if ($widget['title']=='Related Questions') {
					array_push($showoptions, 'match_related_qs', 'page_size_related_qs', '');
					break;
				}

			$showoptions[]='pages_prev_next';

			$formstyle='wide';

			$checkboxtodisplay=array(
				'show_view_counts' => 'option_do_count_q_views',
				'show_view_count_q_page' => 'option_do_count_q_views',
				'votes_separated' => 'option_voting_on_qs || option_voting_on_as',
				'voting_on_q_page_only' => 'option_voting_on_qs',
				'show_full_date_days' => 'option_show_when_created',
			);
			break;

		case 'lists':
			$subtitle='admin/lists_title';

			$showoptions=array('page_size_home', 'page_size_activity', 'page_size_qs', 'page_size_hot_qs', 'page_size_una_qs');

			if (qa_using_tags())
				$showoptions[]='page_size_tag_qs';

			$showoptions[]='';

			if (qa_using_tags())
				array_push($showoptions, 'page_size_tags', 'columns_tags');

			array_push($showoptions, 'page_size_users', 'columns_users', '');

			$searchmodules=qa_load_modules_with('search', 'process_search');

			if (count($searchmodules))
				$showoptions[]='search_module';

			$showoptions[]='page_size_search';

			array_push($showoptions, '', 'admin/hotness_factors', 'hot_weight_q_age', 'hot_weight_a_age', 'hot_weight_answers', 'hot_weight_votes');

			if (qa_opt('do_count_q_views'))
				$showoptions[]='hot_weight_views';

			$formstyle='wide';

			break;

		case 'posting':
			$getoptions=qa_get_options(array('tags_or_categories'));

			$subtitle='admin/posting_title';

			$showoptions=array('do_close_on_select', 'allow_close_questions', 'allow_self_answer', 'allow_multi_answers', 'follow_on_as', 'comment_on_qs', 'comment_on_as', '');

			if (count(qa_list_modules('editor'))>1)
				array_push($showoptions, 'editor_for_qs', 'editor_for_as', 'editor_for_cs', '');

			array_push($showoptions, 'show_custom_ask', 'custom_ask', 'extra_field_active', 'extra_field_prompt', 'extra_field_display', 'extra_field_label', 'show_custom_answer', 'custom_answer', 'show_custom_comment', 'custom_comment', '');

			array_push($showoptions, 'min_len_q_title', 'max_len_q_title', 'min_len_q_content');

			if (qa_using_tags())
				array_push($showoptions, 'min_num_q_tags', 'max_num_q_tags', 'tag_separator_comma');

			array_push($showoptions, 'min_len_a_content', 'min_len_c_content', 'notify_users_default');

			array_push($showoptions, '', 'block_bad_words', '', 'do_ask_check_qs', 'match_ask_check_qs', 'page_size_ask_check_qs', '');

			if (qa_using_tags())
				array_push($showoptions, 'do_example_tags', 'match_example_tags', 'do_complete_tags', 'page_size_ask_tags');

			$formstyle='wide';

			$checkboxtodisplay=array(
				'editor_for_cs' => 'option_comment_on_qs || option_comment_on_as',
				'custom_ask' => 'option_show_custom_ask',
				'extra_field_prompt' => 'option_extra_field_active',
				'extra_field_display' => 'option_extra_field_active',
				'extra_field_label' => 'option_extra_field_active && option_extra_field_display',
				'extra_field_label_hidden' => '!option_extra_field_display',
				'extra_field_label_shown' => 'option_extra_field_display',
				'custom_answer' => 'option_show_custom_answer',
				'show_custom_comment' => 'option_comment_on_qs || option_comment_on_as',
				'custom_comment' => 'option_show_custom_comment && (option_comment_on_qs || option_comment_on_as)',
				'min_len_c_content' => 'option_comment_on_qs || option_comment_on_as',
				'match_ask_check_qs' => 'option_do_ask_check_qs',
				'page_size_ask_check_qs' => 'option_do_ask_check_qs',
				'match_example_tags' => 'option_do_example_tags',
				'page_size_ask_tags' => 'option_do_example_tags || option_do_complete_tags',
			);
			break;

		case 'permissions':
			$subtitle='admin/permissions_title';

			$permitoptions=qa_get_permit_options();

			$showoptions=array();
			$checkboxtodisplay=array();

			foreach ($permitoptions as $permitoption) {
				$showoptions[]=$permitoption;

				if ($permitoption=='permit_view_q_page') {
					$showoptions[]='allow_view_q_bots';
					$checkboxtodisplay['allow_view_q_bots']='option_permit_view_q_page<'.qa_js(QA_PERMIT_ALL);

				} else {
					$showoptions[]=$permitoption.'_points';
					$checkboxtodisplay[$permitoption.'_points']='(option_'.$permitoption.'=='.qa_js(QA_PERMIT_POINTS).
						')||(option_'.$permitoption.'=='.qa_js(QA_PERMIT_POINTS_CONFIRMED).')||(option_'.$permitoption.'=='.qa_js(QA_PERMIT_APPROVED_POINTS).')';
				}
			}

			$formstyle='wide';
			break;

		case 'feeds':
			$subtitle='admin/feeds_title';

			$showoptions=array('feed_for_questions', 'feed_for_qa', 'feed_for_activity');

			array_push($showoptions, 'feed_for_hot', 'feed_for_unanswered');

			if (qa_using_tags())
				$showoptions[]='feed_for_tag_qs';

			if (qa_using_categories())
				$showoptions[]='feed_per_category';

			array_push($showoptions, 'feed_for_search', '', 'feed_number_items', 'feed_full_text');

			$formstyle='wide';

			$checkboxtodisplay=array(
				'feed_per_category' => 'option_feed_for_qa || option_feed_for_questions || option_feed_for_unanswered || option_feed_for_activity',
			);
			break;

		case 'spam':
			$subtitle='admin/spam_title';

			$showoptions=array();

			$getoptions=qa_get_options(array('feedback_enabled', 'permit_post_q', 'permit_post_a', 'permit_post_c'));

			if (!QA_FINAL_EXTERNAL_USERS)
				array_push($showoptions, 'confirm_user_emails', 'confirm_user_required', 'moderate_users', 'approve_user_required', 'register_notify_admin', 'suspend_register_users', '');

			$captchamodules=qa_list_modules('captcha');

			if (count($captchamodules)) {
				if (!QA_FINAL_EXTERNAL_USERS)
					array_push($showoptions, 'captcha_on_register', 'captcha_on_reset_password');

				if ($maxpermitpost > QA_PERMIT_USERS)
					$showoptions[]='captcha_on_anon_post';

				if ($maxpermitpost > QA_PERMIT_APPROVED)
					$showoptions[]='captcha_on_unapproved';

				if ($maxpermitpost > QA_PERMIT_CONFIRMED)
					$showoptions[]='captcha_on_unconfirmed';

				if ($getoptions['feedback_enabled'])
					$showoptions[]='captcha_on_feedback';

				$showoptions[]='captcha_module';
			}

			$showoptions[]='';

			if ($maxpermitpost > QA_PERMIT_USERS)
				$showoptions[]='moderate_anon_post';

			if ($maxpermitpost > QA_PERMIT_APPROVED)
				$showoptions[]='moderate_unapproved';

			if ($maxpermitpost > QA_PERMIT_CONFIRMED)
				$showoptions[]='moderate_unconfirmed';

			if ($maxpermitpost > QA_PERMIT_EXPERTS)
				array_push($showoptions, 'moderate_by_points', 'moderate_points_limit', 'moderate_edited_again', 'moderate_notify_admin', 'moderate_update_time', '');

			array_push($showoptions, 'flagging_of_posts', 'flagging_notify_first', 'flagging_notify_every', 'flagging_hide_after', '');

			array_push($showoptions, 'block_ips_write', '');

			if (!QA_FINAL_EXTERNAL_USERS)
				array_push($showoptions, 'max_rate_ip_registers', 'max_rate_ip_logins', '');

			array_push($showoptions, 'max_rate_ip_qs', 'max_rate_user_qs', 'max_rate_ip_as', 'max_rate_user_as');

			if (qa_opt('comment_on_qs') || qa_opt('comment_on_as'))
				array_push($showoptions, 'max_rate_ip_cs', 'max_rate_user_cs');

			$showoptions[]='';

			if (qa_opt('voting_on_qs') || qa_opt('voting_on_as'))
				array_push($showoptions, 'max_rate_ip_votes', 'max_rate_user_votes');

			array_push($showoptions, 'max_rate_ip_flags', 'max_rate_user_flags', 'max_rate_ip_uploads', 'max_rate_user_uploads');

			if (qa_opt('allow_private_messages') || qa_opt('allow_user_walls'))
				array_push($showoptions, 'max_rate_ip_messages', 'max_rate_user_messages');

			$formstyle='wide';

			$checkboxtodisplay=array(
				'confirm_user_required' => 'option_confirm_user_emails',
				'approve_user_required' => 'option_moderate_users',
				'captcha_on_unapproved' => 'option_moderate_users',
				'captcha_on_unconfirmed' => 'option_confirm_user_emails && !(option_moderate_users && option_captcha_on_unapproved)',
				'captcha_module' => 'option_captcha_on_register || option_captcha_on_anon_post || (option_confirm_user_emails && option_captcha_on_unconfirmed) || (option_moderate_users && option_captcha_on_unapproved) || option_captcha_on_reset_password || option_captcha_on_feedback',
				'moderate_unapproved' => 'option_moderate_users',
				'moderate_unconfirmed' => 'option_confirm_user_emails && !(option_moderate_users && option_moderate_unapproved)',
				'moderate_points_limit' => 'option_moderate_by_points',
				'moderate_points_label_off' => '!option_moderate_by_points',
				'moderate_points_label_on' => 'option_moderate_by_points',
				'moderate_edited_again' => 'option_moderate_anon_post || (option_confirm_user_emails && option_moderate_unconfirmed) || (option_moderate_users && option_moderate_unapproved) || option_moderate_by_points',
				'flagging_hide_after' => 'option_flagging_of_posts',
				'flagging_notify_every' => 'option_flagging_of_posts',
				'flagging_notify_first' => 'option_flagging_of_posts',
				'max_rate_ip_flags' =>  'option_flagging_of_posts',
				'max_rate_user_flags' => 'option_flagging_of_posts',
			);

			$checkboxtodisplay['moderate_notify_admin']=$checkboxtodisplay['moderate_edited_again'];
			$checkboxtodisplay['moderate_update_time']=$checkboxtodisplay['moderate_edited_again'];
			break;

		case 'mailing':
			require_once QA_INCLUDE_DIR.'qa-app-mailing.php';

			$subtitle='admin/mailing_title';

			$showoptions=array('mailing_enabled', 'mailing_from_name', 'mailing_from_email', 'mailing_subject', 'mailing_body', 'mailing_per_minute');
			break;

		default:
			$pagemodules=qa_load_modules_with('page', 'match_request');
			$request=qa_request();

			foreach ($pagemodules as $pagemodule)
				if ($pagemodule->match_request($request))
					return $pagemodule->process_request($request);

			return include QA_INCLUDE_DIR.'qa-page-not-found.php';
			break;
	}


//	Filter out blanks to get list of valid options

	$getoptions=array();
	foreach ($showoptions as $optionname)
		if (strlen($optionname) && (strpos($optionname, '/')===false)) // empties represent spacers in forms
			$getoptions[]=$optionname;


//	Process user actions

	$errors=array();

	$recalchotness=false;
	$startmailing=false;
	$securityexpired=false;

	$formokhtml=null;

	if (qa_clicked('doresetoptions')) {
		if (!qa_check_form_security_code('admin/'.$adminsection, qa_post_text('code')))
			$securityexpired=true;

		else {
			qa_reset_options($getoptions);
			$formokhtml=qa_lang_html('admin/options_reset');
		}

	} elseif (qa_clicked('dosaveoptions')) {
		if (!qa_check_form_security_code('admin/'.$adminsection, qa_post_text('code')))
			$securityexpired=true;

		else {
			foreach ($getoptions as $optionname) {
				$optionvalue=qa_post_text('option_'.$optionname);

				if (
					(@$optiontype[$optionname]=='number') ||
					(@$optiontype[$optionname]=='checkbox') ||
					((@$optiontype[$optionname]=='number-blank') && strlen($optionvalue))
				)
					$optionvalue=(int)$optionvalue;

				if (isset($optionmaximum[$optionname]))
					$optionvalue=min($optionmaximum[$optionname], $optionvalue);

				if (isset($optionminimum[$optionname]))
					$optionvalue=max($optionminimum[$optionname], $optionvalue);

				switch ($optionname) {
					case 'site_url':
						if (substr($optionvalue, -1)!='/') // seems to be a very common mistake and will mess up URLs
							$optionvalue.='/';
						break;

					case 'hot_weight_views':
					case 'hot_weight_answers':
					case 'hot_weight_votes':
					case 'hot_weight_q_age':
					case 'hot_weight_a_age':
						if (qa_opt($optionname) != $optionvalue)
							$recalchotness=true;
						break;

					case 'block_ips_write':
						require_once QA_INCLUDE_DIR.'qa-app-limits.php';
						$optionvalue=implode(' , ', qa_block_ips_explode($optionvalue));
						break;

					case 'block_bad_words':
						require_once QA_INCLUDE_DIR.'qa-util-string.php';
						$optionvalue=implode(' , ', qa_block_words_explode($optionvalue));
						break;
				}

				qa_set_option($optionname, $optionvalue);
			}

			$formokhtml=qa_lang_html('admin/options_saved');

		//	Uploading default avatar

			if (is_array(@$_FILES['avatar_default_file']) && $_FILES['avatar_default_file']['size']) {
				require_once QA_INCLUDE_DIR.'qa-util-image.php';

				$oldblobid=qa_opt('avatar_default_blobid');

				$toobig=qa_image_file_too_big($_FILES['avatar_default_file']['tmp_name'], qa_opt('avatar_store_size'));

				if ($toobig)
					$errors['avatar_default_show']=qa_lang_sub('main/image_too_big_x_pc', (int)($toobig*100));

				else {
					$imagedata=qa_image_constrain_data(file_get_contents($_FILES['avatar_default_file']['tmp_name']), $width, $height, qa_opt('avatar_store_size'));

					if (isset($imagedata)) {
						require_once QA_INCLUDE_DIR.'qa-app-blobs.php';

						$newblobid=qa_create_blob($imagedata, 'jpeg');

						if (isset($newblobid)) {
							qa_set_option('avatar_default_blobid', $newblobid);
							qa_set_option('avatar_default_width', $width);
							qa_set_option('avatar_default_height', $height);
							qa_set_option('avatar_default_show', 1);
						}

						if (strlen($oldblobid))
							qa_delete_blob($oldblobid);

					} else
						$errors['avatar_default_show']=qa_lang_sub('main/image_not_read', implode(', ', qa_gd_image_formats()));
				}
			}
		}
	}


//	Mailings management

	if ($adminsection=='mailing') {
		if ( qa_clicked('domailingtest') || qa_clicked('domailingstart') || qa_clicked('domailingresume') || qa_clicked('domailingcancel') ) {
			if (!qa_check_form_security_code('admin/'.$adminsection, qa_post_text('code')))
				$securityexpired=true;

			else {
				if (qa_clicked('domailingtest')) {
					$email=qa_get_logged_in_email();

					if (qa_mailing_send_one(qa_get_logged_in_userid(), qa_get_logged_in_handle(), $email, qa_get_logged_in_user_field('emailcode')))
						$formokhtml=qa_lang_html_sub('admin/test_sent_to_x', qa_html($email));
					else
						$formokhtml=qa_lang_html('main/general_error');
				}

				if (qa_clicked('domailingstart')) {
					qa_mailing_start();
					$startmailing=true;
				}

				if (qa_clicked('domailingresume'))
					$startmailing=true;

				if (qa_clicked('domailingcancel'))
					qa_mailing_stop();
			}
		}

		$mailingprogress=qa_mailing_progress_message();

		if (isset($mailingprogress)) {
			$formokhtml=qa_html($mailingprogress);

			$checkboxtodisplay=array(
				'mailing_enabled' => '0',
			);

		} else {
			$checkboxtodisplay=array(
				'mailing_from_name' => 'option_mailing_enabled',
				'mailing_from_email' => 'option_mailing_enabled',
				'mailing_subject' => 'option_mailing_enabled',
				'mailing_body' => 'option_mailing_enabled',
				'mailing_per_minute' => 'option_mailing_enabled',
				'domailingtest' => 'option_mailing_enabled',
				'domailingstart' => 'option_mailing_enabled',
			);
		}
	}


//	Get the actual options

	$options=qa_get_options($getoptions);


//	Prepare content for theme

	$qa_content=qa_content_prepare();

	$qa_content['title']=qa_lang_html('admin/admin_title').' - '.qa_lang_html($subtitle);
	$qa_content['error']=$securityexpired ? qa_lang_html('admin/form_security_expired') : qa_admin_page_error();

	$qa_content['script_rel'][]='qa-content/qa-admin.js?'.QA_VERSION;

	$qa_content['form']=array(
		'ok' => $formokhtml,

		'tags' => 'method="post" action="'.qa_self_html().'" name="admin_form" onsubmit="document.forms.admin_form.has_js.value=1; return true;"',

		'style' => $formstyle,

		'fields' => array(),

		'buttons' => array(
			'save' => array(
				'tags' => 'id="dosaveoptions"',
				'label' => qa_lang_html('admin/save_options_button'),
			),

			'reset' => array(
				'tags' => 'name="doresetoptions"',
				'label' => qa_lang_html('admin/reset_options_button'),
			),
		),

		'hidden' => array(
			'dosaveoptions' => '1', // for IE
			'has_js' => '0',
			'code' => qa_get_form_security_code('admin/'.$adminsection),
		),
	);

	if ($recalchotness) {
		$qa_content['form']['ok']='<span id="recalc_ok"></span>';
		$qa_content['form']['hidden']['code_recalc']=qa_get_form_security_code('admin/recalc');

		$qa_content['script_var']['qa_warning_recalc']=qa_lang('admin/stop_recalc_warning');

		$qa_content['script_onloads'][]=array(
			"qa_recalc_click('dorecountposts', document.getElementById('dosaveoptions'), null, 'recalc_ok');"
		);

	} elseif ($startmailing) {

		if (qa_post_text('has_js')) {
			$qa_content['form']['ok']='<span id="mailing_ok">'.qa_html($mailingprogress).'</span>';

			$qa_content['script_onloads'][]=array(
				"qa_mailing_start('mailing_ok', 'domailingpause');"
			);

		} else { // rudimentary non-Javascript version of mass mailing loop
			echo '<tt>';

			while (true) {
				qa_mailing_perform_step();

				$message=qa_mailing_progress_message();

				if (!isset($message))
					break;

				echo qa_html($message).str_repeat('    ', 1024)."<br>\n";

				flush();
				sleep(1);
			}

			echo qa_lang_html('admin/mailing_complete').'</tt><p><a href="'.qa_path_html('admin/mailing').'">'.qa_lang_html('admin/admin_title').' - '.qa_lang_html('admin/mailing_title').'</a>';

			qa_exit();
		}
	}


	function qa_optionfield_make_select(&$optionfield, $options, $value, $default)
	{
		$optionfield['type']='select';
		$optionfield['options']=$options;
		$optionfield['value']=isset($options[qa_html($value)]) ? $options[qa_html($value)] : @$options[$default];
	}

	$indented=false;

	foreach ($showoptions as $optionname)
		if (empty($optionname)) {
			$indented=false;

			$qa_content['form']['fields'][]=array(
				'type' => 'blank'
			);

		} elseif (strpos($optionname, '/')!==false) {
			$qa_content['form']['fields'][]=array(
				'type' => 'static',
				'label' => qa_lang_html($optionname),
			);

			$indented=true;

		} else {
			$type=@$optiontype[$optionname];
			if ($type=='number-blank')
				$type='number';

			$value=$options[$optionname];

			$optionfield=array(
				'id' => $optionname,
				'label' => ($indented ? '&ndash; ' : '').qa_lang_html('options/'.$optionname),
				'tags' => 'name="option_'.$optionname.'" id="option_'.$optionname.'"',
				'value' => qa_html($value),
				'type' => $type,
				'error' => qa_html(@$errors[$optionname]),
			);

			if (isset($optionmaximum[$optionname]))
				$optionfield['note']=qa_lang_html_sub('admin/maximum_x', $optionmaximum[$optionname]);

			$feedrequest=null;
			$feedisexample=false;

			switch ($optionname) { // special treatment for certain options
				case 'site_language':
					require_once QA_INCLUDE_DIR.'qa-util-string.php';

					qa_optionfield_make_select($optionfield, qa_admin_language_options(), $value, '');

					$optionfield['suffix']=strtr(qa_lang_html('admin/check_language_suffix'), array(
						'^1' => '<a href="'.qa_html(qa_path_to_root().'qa-include/qa-check-lang.php').'">',
						'^2' => '</a>',
					));

					if (!qa_has_multibyte())
						$optionfield['error']=qa_lang_html('admin/no_multibyte');
					break;

				case 'neat_urls':
					$neatoptions=array();

					$rawoptions=array(
						QA_URL_FORMAT_NEAT,
						QA_URL_FORMAT_INDEX,
						QA_URL_FORMAT_PARAM,
						QA_URL_FORMAT_PARAMS,
						QA_URL_FORMAT_SAFEST,
					);

					foreach ($rawoptions as $rawoption)
						$neatoptions[$rawoption]=
							'<iframe src="'.qa_path_html('url/test/'.QA_URL_TEST_STRING, array('dummy' => '', 'param' => QA_URL_TEST_STRING), null, $rawoption).'" width="20" height="16" style="vertical-align:middle; border:0" scrolling="no" frameborder="0"></iframe>&nbsp;'.
							'<small>'.
							qa_html(urldecode(qa_path('123/why-do-birds-sing', null, '/', $rawoption))).
							(($rawoption==QA_URL_FORMAT_NEAT) ? strtr(qa_lang_html('admin/neat_urls_note'), array(
								'^1' => '<a href="http://www.question2answer.org/htaccess.php" target="_blank">',
								'^2' => '</a>',
							)) : '').
							'</small>';

					qa_optionfield_make_select($optionfield, $neatoptions, $value, QA_URL_FORMAT_SAFEST);

					$optionfield['type']='select-radio';
					$optionfield['note']=qa_lang_html_sub('admin/url_format_note', '<span style=" '.qa_admin_url_test_html().'/span>');
					break;

				case 'site_theme':
				case 'site_theme_mobile':
					$themeoptions=qa_admin_theme_options();
					if (!isset($themeoptions[$value]))
						$value='Classic'; // check here because we also need $value for qa_admin_addon_metadata()

					qa_optionfield_make_select($optionfield, $themeoptions, $value, 'Classic');

					$contents=file_get_contents(QA_THEME_DIR.$value.'/qa-styles.css');

					$metadata=qa_admin_addon_metadata($contents, array(
						'uri' => 'Theme URI',
						'version' => 'Theme Version',
						'date' => 'Theme Date',
						'author' => 'Theme Author',
						'author_uri' => 'Theme Author URI',
						'license' => 'Theme License',
						'update' => 'Theme Update Check URI',
					));

					if (strlen(@$metadata['version']))
						$namehtml='v'.qa_html($metadata['version']);
					else
						$namehtml='';

					if (strlen(@$metadata['uri'])) {
						if (!strlen($namehtml))
							$namehtml=qa_html($value);

						$namehtml='<a href="'.qa_html($metadata['uri']).'">'.$namehtml.'</a>';
					}

					if (strlen(@$metadata['author'])) {
						$authorhtml=qa_html($metadata['author']);

						if (strlen(@$metadata['author_uri']))
							$authorhtml='<a href="'.qa_html($metadata['author_uri']).'">'.$authorhtml.'</a>';

						$authorhtml=qa_lang_html_sub('main/by_x', $authorhtml);

					} else
						$authorhtml='';

					if (strlen(@$metadata['version']) && strlen(@$metadata['update'])) {
						$elementid='version_check_'.$optionname;

						$updatehtml='(<span id="'.$elementid.'">...</span>)';

						$qa_content['script_onloads'][]=array(
							"qa_version_check(".qa_js($metadata['update']).", 'Theme Version', ".qa_js($metadata['version'], true).", 'Theme URI', ".qa_js($elementid).");"
						);

					} else
						$updatehtml='';

					$optionfield['suffix']=$namehtml.' '.$authorhtml.' '.$updatehtml;
					break;

				case 'tags_or_categories':
					qa_optionfield_make_select($optionfield, array(
						'' => qa_lang_html('admin/no_classification'),
						't' => qa_lang_html('admin/tags'),
						'c' => qa_lang_html('admin/categories'),
						'tc' => qa_lang_html('admin/tags_and_categories'),
					), $value, 'tc');

					$optionfield['error']='';

					if (qa_opt('cache_tagcount') && !qa_using_tags())
						$optionfield['error'].=qa_lang_html('admin/tags_not_shown').' ';

					if (!qa_using_categories())
						foreach ($categories as $category)
							if ($category['qcount']) {
								$optionfield['error'].=qa_lang_html('admin/categories_not_shown');
								break;
							}
					break;

				case 'smtp_secure':
					qa_optionfield_make_select($optionfield, array(
						'' => qa_lang_html('options/smtp_secure_none'),
						'ssl' => 'SSL',
						'tls' => 'TLS',
					), $value, '');
					break;

				case 'custom_sidebar':
				case 'custom_sidepanel':
				case 'custom_header':
				case 'custom_footer':
				case 'custom_in_head':
				case 'home_description':
					unset($optionfield['label']);
					$optionfield['rows']=6;
					break;

				case 'custom_home_content':
					$optionfield['rows']=16;
					break;

				case 'show_custom_register':
				case 'show_custom_welcome':
				case 'show_notice_welcome':
				case 'show_notice_visitor':
					$optionfield['style']='tall';
					break;

				case 'custom_register':
				case 'custom_welcome':
				case 'notice_welcome':
				case 'notice_visitor':
					unset($optionfield['label']);
					$optionfield['style']='tall';
					$optionfield['rows']=3;
					break;

				case 'avatar_allow_gravatar':
					$optionfield['label']=strtr($optionfield['label'], array(
						'^1' => '<a href="http://www.gravatar.com/" target="_blank">',
						'^2' => '</a>',
					));

					if (!qa_has_gd_image()) {
						$optionfield['style']='tall';
						$optionfield['error']=qa_lang_html('admin/no_image_gd');
					}
					break;

				case 'avatar_store_size':
				case 'avatar_profile_size':
				case 'avatar_users_size':
				case 'avatar_q_page_q_size':
				case 'avatar_q_page_a_size':
				case 'avatar_q_page_c_size':
				case 'avatar_q_list_size':
				case 'avatar_message_list_size':
					$optionfield['note']=qa_lang_html('admin/pixels');
					break;

				case 'avatar_default_show';
					$qa_content['form']['tags'].='enctype="multipart/form-data"';
					$optionfield['label'].=' <span style="margin:2px 0; display:inline-block;">'.
						qa_get_avatar_blob_html(qa_opt('avatar_default_blobid'), qa_opt('avatar_default_width'), qa_opt('avatar_default_height'), 32).
						'</span> <input name="avatar_default_file" type="file" style="width:16em;">';
					break;

				case 'logo_width':
				case 'logo_height':
					$optionfield['suffix']=qa_lang_html('admin/pixels');
					break;

				case 'pages_prev_next':
					qa_optionfield_make_select($optionfield, array(0 => 0, 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5), $value, 3);
					break;

				case 'columns_tags':
				case 'columns_users':
					qa_optionfield_make_select($optionfield, array(1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5), $value, 2);
					break;

				case 'min_len_q_title':
				case 'q_urls_title_length':
				case 'min_len_q_content':
				case 'min_len_a_content':
				case 'min_len_c_content':
					$optionfield['note']=qa_lang_html('admin/characters');
					break;

				case 'min_num_q_tags':
				case 'max_num_q_tags':
					$optionfield['note']=qa_lang_html_sub('main/x_tags', ''); // this to avoid language checking error: a_lang('main/1_tag')
					break;

				case 'show_full_date_days':
					$optionfield['note']=qa_lang_html_sub('main/x_days', '');
					break;

				case 'sort_answers_by':
					qa_optionfield_make_select($optionfield, array(
						'created' => qa_lang_html('options/sort_time'),
						'votes' => qa_lang_html('options/sort_votes'),
					), $value, 'created');
					break;

				case 'page_size_q_as':
					$optionfield['note']=qa_lang_html_sub('main/x_answers', '');
					break;

				case 'show_a_form_immediate':
					qa_optionfield_make_select($optionfield, array(
						'always' => qa_lang_html('options/show_always'),
						'if_no_as' => qa_lang_html('options/show_if_no_as'),
						'never' => qa_lang_html('options/show_never'),
					), $value, 'if_no_as');
					break;

				case 'show_fewer_cs_from':
				case 'show_fewer_cs_count':
					$optionfield['note']=qa_lang_html_sub('main/x_comments', '');
					break;

				case 'match_related_qs':
				case 'match_ask_check_qs':
				case 'match_example_tags':
					qa_optionfield_make_select($optionfield, qa_admin_match_options(), $value, 3);
					break;

				case 'block_bad_words':
					$optionfield['style']='tall';
					$optionfield['rows']=4;
					$optionfield['note']=qa_lang_html('admin/block_words_note');
					break;

				case 'editor_for_qs':
				case 'editor_for_as':
				case 'editor_for_cs':
					$editors=qa_list_modules('editor');

					$selectoptions=array();
					$optionslinks=false;

					foreach ($editors as $editor) {
						$selectoptions[qa_html($editor)]=strlen($editor) ? qa_html($editor) : qa_lang_html('admin/basic_editor');

						if ($editor==$value) {
							$module=qa_load_module('editor', $editor);

							if (method_exists($module, 'admin_form'))
								$optionfield['note']='<a href="'.qa_admin_module_options_path('editor', $editor).'">'.qa_lang_html('admin/options').'</a>';
						}
					}

					qa_optionfield_make_select($optionfield, $selectoptions, $value, '');
					break;

				case 'show_custom_ask':
				case 'extra_field_active':
				case 'show_custom_answer':
				case 'show_custom_comment':
					$optionfield['style']='tall';
					break;

				case 'custom_ask':
				case 'custom_answer':
				case 'custom_comment':
					$optionfield['style']='tall';
					unset($optionfield['label']);
					$optionfield['rows']=3;
					break;

				case 'extra_field_display':
					$optionfield['style']='tall';
					$optionfield['label']='<span id="extra_field_label_hidden" style="display:none;">'.$optionfield['label'].'</span><span id="extra_field_label_shown">'.qa_lang_html('options/extra_field_display_label').'</span>';
					break;

				case 'extra_field_prompt':
				case 'extra_field_label':
					$optionfield['style']='tall';
					unset($optionfield['label']);
					break;

				case 'search_module':
					foreach ($searchmodules as $modulename => $module) {
						$selectoptions[qa_html($modulename)]=strlen($modulename) ? qa_html($modulename) : qa_lang_html('options/option_default');

						if (($modulename==$value) && method_exists($module, 'admin_form'))
							$optionfield['note']='<a href="'.qa_admin_module_options_path('search', $modulename).'">'.qa_lang_html('admin/options').'</a>';
					}

					qa_optionfield_make_select($optionfield, $selectoptions, $value, '');
					break;

				case 'hot_weight_q_age':
				case 'hot_weight_a_age':
				case 'hot_weight_answers':
				case 'hot_weight_votes':
				case 'hot_weight_views':
					$optionfield['note']='/ 100';
					break;

				case 'moderate_by_points':
					$optionfield['label']='<span id="moderate_points_label_off" style="display:none;">'.$optionfield['label'].'</span><span id="moderate_points_label_on">'.qa_lang_html('options/moderate_points_limit').'</span>';
					break;

				case 'moderate_points_limit';
					unset($optionfield['label']);
					$optionfield['note']=qa_lang_html('admin/points');
					break;

				case 'flagging_hide_after':
				case 'flagging_notify_every':
				case 'flagging_notify_first':
					$optionfield['note']=qa_lang_html_sub('main/x_flags', '');
					break;

				case 'block_ips_write':
					$optionfield['style']='tall';
					$optionfield['rows']=4;
					$optionfield['note']=qa_lang_html('admin/block_ips_note');
					break;

				case 'allow_view_q_bots':
					$optionfield['note']=$optionfield['label'];
					unset($optionfield['label']);
					break;

				case 'permit_view_q_page':
				case 'permit_post_q':
				case 'permit_post_a':
				case 'permit_post_c':
				case 'permit_vote_q':
				case 'permit_vote_a':
				case 'permit_vote_down':
				case 'permit_edit_q':
				case 'permit_retag_cat':
				case 'permit_edit_a':
				case 'permit_edit_c':
				case 'permit_edit_silent':
				case 'permit_flag':
				case 'permit_close_q':
				case 'permit_select_a':
				case 'permit_hide_show':
				case 'permit_moderate':
				case 'permit_delete_hidden':
				case 'permit_anon_view_ips':
				case 'permit_view_voters_flaggers':
				case 'permit_post_wall':
					$dopoints=true;

					if ($optionname=='permit_retag_cat')
						$optionfield['label']=qa_lang_html(qa_using_categories() ? 'profile/permit_recat' : 'profile/permit_retag').':';
					else
						$optionfield['label']=qa_lang_html('profile/'.$optionname).':';

					if ( ($optionname=='permit_view_q_page') || ($optionname=='permit_post_q') || ($optionname=='permit_post_a') || ($optionname=='permit_post_c') || ($optionname=='permit_anon_view_ips') )
						$widest=QA_PERMIT_ALL;
					elseif ( ($optionname=='permit_close_q') || ($optionname=='permit_select_a') || ($optionname=='permit_moderate')|| ($optionname=='permit_hide_show') )
						$widest=QA_PERMIT_POINTS;
					elseif ($optionname=='permit_delete_hidden')
						$widest=QA_PERMIT_EDITORS;
					elseif ( ($optionname=='permit_view_voters_flaggers') || ($optionname=='permit_edit_silent') )
						$widest=QA_PERMIT_EXPERTS;
					else
						$widest=QA_PERMIT_USERS;

					if ($optionname=='permit_view_q_page') {
						$narrowest=QA_PERMIT_APPROVED;
						$dopoints=false;
					} elseif ( ($optionname=='permit_edit_c') || ($optionname=='permit_close_q') || ($optionname=='permit_select_a') || ($optionname=='permit_moderate')|| ($optionname=='permit_hide_show') || ($optionname=='permit_anon_view_ips') )
						$narrowest=QA_PERMIT_MODERATORS;
					elseif ( ($optionname=='permit_post_c') || ($optionname=='permit_edit_q') || ($optionname=='permit_retag_cat') || ($optionname=='permit_edit_a') || ($optionname=='permit_flag') )
						$narrowest=QA_PERMIT_EDITORS;
					elseif ( ($optionname=='permit_vote_q') || ($optionname=='permit_vote_a') || ($optionname=='permit_post_wall') )
						$narrowest=QA_PERMIT_APPROVED_POINTS;
					elseif ( ($optionname=='permit_delete_hidden') || ($optionname=='permit_edit_silent') )
						$narrowest=QA_PERMIT_ADMINS;
					elseif ($optionname=='permit_view_voters_flaggers')
						$narrowest=QA_PERMIT_SUPERS;
					else
						$narrowest=QA_PERMIT_EXPERTS;

					$permitoptions=qa_admin_permit_options($widest, $narrowest, (!QA_FINAL_EXTERNAL_USERS) && qa_opt('confirm_user_emails'), $dopoints);

					if (count($permitoptions)>1)
						qa_optionfield_make_select($optionfield, $permitoptions, $value,
							($value==QA_PERMIT_CONFIRMED) ? QA_PERMIT_USERS : min(array_keys($permitoptions)));
					else {
						$optionfield['type']='static';
						$optionfield['value']=reset($permitoptions);
					}
					break;

				case 'permit_post_q_points':
				case 'permit_post_a_points':
				case 'permit_post_c_points':
				case 'permit_vote_q_points':
				case 'permit_vote_a_points':
				case 'permit_vote_down_points':
				case 'permit_flag_points':
				case 'permit_edit_q_points':
				case 'permit_retag_cat_points':
				case 'permit_edit_a_points':
				case 'permit_edit_c_points':
				case 'permit_close_q_points':
				case 'permit_select_a_points':
				case 'permit_hide_show_points':
				case 'permit_moderate_points':
				case 'permit_delete_hidden_points':
				case 'permit_anon_view_ips_points':
				case 'permit_post_wall_points':
					unset($optionfield['label']);
					$optionfield['type']='number';
					$optionfield['prefix']=qa_lang_html('admin/users_must_have').'&nbsp;';
					$optionfield['note']=qa_lang_html('admin/points');
					break;

				case 'feed_for_qa':
					$feedrequest='qa';
					break;

				case 'feed_for_questions':
					$feedrequest='questions';
					break;

				case 'feed_for_hot':
					$feedrequest='hot';
					break;

				case 'feed_for_unanswered':
					$feedrequest='unanswered';
					break;

				case 'feed_for_activity':
					$feedrequest='activity';
					break;

				case 'feed_per_category':
					if (count($categories)) {
						$category=reset($categories);
						$categoryslug=$category['tags'];

					} else
						$categoryslug='example-category';

					if (qa_opt('feed_for_qa'))
						$feedrequest='qa';
					elseif (qa_opt('feed_for_questions'))
						$feedrequest='questions';
					else
						$feedrequest='activity';

					$feedrequest.='/'.$categoryslug;
					$feedisexample=true;
					break;

				case 'feed_for_tag_qs':
					$populartags=qa_db_select_with_pending(qa_db_popular_tags_selectspec(0, 1));

					if (count($populartags)) {
						reset($populartags);
						$feedrequest='tag/'.key($populartags);
					} else
						$feedrequest='tag/singing';

					$feedisexample=true;
					break;

				case 'feed_for_search':
					$feedrequest='search/why do birds sing';
					$feedisexample=true;
					break;

				case 'moderate_users':
					$optionfield['note']='<a href="'.qa_path_html('admin/users', null, null, null, 'profile_fields').'">'.qa_lang_html('admin/registration_fields').'</a>';
					break;

				case 'captcha_module':
					$captchaoptions=array();

					foreach ($captchamodules as $modulename) {
						$captchaoptions[qa_html($modulename)]=qa_html($modulename);

						if ($modulename==$value) {
							$module=qa_load_module('captcha', $modulename);

							if (method_exists($module, 'admin_form'))
								$optionfield['note']='<a href="'.qa_admin_module_options_path('captcha', $modulename).'">'.qa_lang_html('admin/options').'</a>';
						}
					}

					qa_optionfield_make_select($optionfield, $captchaoptions, $value, '');
					break;

				case 'moderate_update_time':
					qa_optionfield_make_select($optionfield, array(
						'0' => qa_lang_html('options/time_written'),
						'1' => qa_lang_html('options/time_approved'),
					), $value, '0');
					break;

				case 'max_rate_ip_as':
				case 'max_rate_ip_cs':
				case 'max_rate_ip_flags':
				case 'max_rate_ip_logins':
				case 'max_rate_ip_messages':
				case 'max_rate_ip_qs':
				case 'max_rate_ip_registers':
				case 'max_rate_ip_uploads':
				case 'max_rate_ip_votes':
					$optionfield['note']=qa_lang_html('admin/per_ip_hour');
					break;

				case 'max_rate_user_as':
				case 'max_rate_user_cs':
				case 'max_rate_user_flags':
				case 'max_rate_user_messages':
				case 'max_rate_user_qs':
				case 'max_rate_user_uploads':
				case 'max_rate_user_votes':
					unset($optionfield['label']);
					$optionfield['note']=qa_lang_html('admin/per_user_hour');
					break;

				case 'mailing_per_minute':
					$optionfield['suffix']=qa_lang_html('admin/emails_per_minute');
					break;
			}

			if (isset($feedrequest) && $value)
				$optionfield['note']='<a href="'.qa_path_html(qa_feed_request($feedrequest)).'">'.qa_lang_html($feedisexample ? 'admin/feed_link_example' : 'admin/feed_link').'</a>';

			$qa_content['form']['fields'][$optionname]=$optionfield;
		}


//	Extra items for specific pages

	switch ($adminsection) {
		case 'users':
			if (!QA_FINAL_EXTERNAL_USERS) {
				$userfields=qa_db_single_select(qa_db_userfields_selectspec());

				$listhtml='';

				foreach ($userfields as $userfield) {
					$listhtml.='<li><b>'.qa_html(qa_user_userfield_label($userfield)).'</b>';

					$listhtml.=strtr(qa_lang_html('admin/edit_field'), array(
						'^1' => '<a href="'.qa_path_html('admin/userfields', array('edit' => $userfield['fieldid'])).'">',
						'^2' => '</a>',
					));

					$listhtml.='</li>';
				}

				$listhtml.='<li><b><a href="'.qa_path_html('admin/userfields').'">'.qa_lang_html('admin/add_new_field').'</a></b></li>';

				$qa_content['form']['fields'][]=array('type' => 'blank');

				$qa_content['form']['fields']['userfields']=array(
					'label' => qa_lang_html('admin/profile_fields'),
					'id' => 'profile_fields',
					'style' => 'tall',
					'type' => 'custom',
					'html' => strlen($listhtml) ? '<ul style="margin-bottom:0;">'.$listhtml.'</ul>' : null,
				);
			}

			$qa_content['form']['fields'][]=array('type' => 'blank');

			$pointstitle=qa_get_points_to_titles();

			$listhtml='';

			foreach ($pointstitle as $points => $title) {
				$listhtml.='<li><b>'.$title.'</b> - '.(($points==1) ? qa_lang_html_sub('main/1_point', '1', '1')
				: qa_lang_html_sub('main/x_points', qa_html(number_format($points))));

				$listhtml.=strtr(qa_lang_html('admin/edit_title'), array(
					'^1' => '<a href="'.qa_path_html('admin/usertitles', array('edit' => $points)).'">',
					'^2' => '</a>',
				));

				$listhtml.='</li>';
			}

			$listhtml.='<li><b><a href="'.qa_path_html('admin/usertitles').'">'.qa_lang_html('admin/add_new_title').'</a></b></li>';

			$qa_content['form']['fields']['usertitles']=array(
				'label' => qa_lang_html('admin/user_titles'),
				'style' => 'tall',
				'type' => 'custom',
				'html' => strlen($listhtml) ? '<ul style="margin-bottom:0;">'.$listhtml.'</ul>' : null,
			);
			break;

		case 'layout':
			$listhtml='';

			$widgetmodules=qa_load_modules_with('widget', 'allow_template');

			foreach ($widgetmodules as $tryname => $trywidget)
				if (method_exists($trywidget, 'allow_region')) {
					$listhtml.='<li><b>'.qa_html($tryname).'</b>';

					$listhtml.=strtr(qa_lang_html('admin/add_widget_link'), array(
						'^1' => '<a href="'.qa_path_html('admin/layoutwidgets', array('title' => $tryname)).'">',
						'^2' => '</a>',
					));

					if (method_exists($trywidget, 'admin_form'))
						$listhtml.=strtr(qa_lang_html('admin/widget_global_options'), array(
							'^1' => '<a href="'.qa_admin_module_options_path('widget', $tryname).'">',
							'^2' => '</a>',
						));

					$listhtml.='</li>';
				}

			if (strlen($listhtml))
				$qa_content['form']['fields']['plugins']=array(
					'label' => qa_lang_html('admin/widgets_explanation'),
					'style' => 'tall',
					'type' => 'custom',
					'html' => '<ul style="margin-bottom:0;">'.$listhtml.'</ul>',
				);

			$widgets=qa_db_single_select(qa_db_widgets_selectspec());

			$listhtml='';

			$placeoptions=qa_admin_place_options();

			foreach ($widgets as $widget) {
				$listhtml.='<li><b>'.qa_html($widget['title']).'</b> - '.
					'<a href="'.qa_path_html('admin/layoutwidgets', array('edit' => $widget['widgetid'])).'">'.
					@$placeoptions[$widget['place']].'</a>';

				$listhtml.='</li>';
			}

			if (strlen($listhtml))
				$qa_content['form']['fields']['widgets']=array(
					'label' => qa_lang_html('admin/active_widgets_explanation'),
					'type' => 'custom',
					'html' => '<ul style="margin-bottom:0;">'.$listhtml.'</ul>',
				);

			break;

		case 'permissions':
			$qa_content['form']['fields']['permit_block']=array(
				'type' => 'static',
				'label' => qa_lang_html('options/permit_block'),
				'value' => qa_lang_html('options/permit_moderators'),
			);

			if (!QA_FINAL_EXTERNAL_USERS) {
				$qa_content['form']['fields']['permit_approve_users']=array(
					'type' => 'static',
					'label' => qa_lang_html('options/permit_approve_users'),
					'value' => qa_lang_html('options/permit_moderators'),
				);

				$qa_content['form']['fields']['permit_create_experts']=array(
					'type' => 'static',
					'label' => qa_lang_html('options/permit_create_experts'),
					'value' => qa_lang_html('options/permit_moderators'),
				);

				$qa_content['form']['fields']['permit_see_emails']=array(
					'type' => 'static',
					'label' => qa_lang_html('options/permit_see_emails'),
					'value' => qa_lang_html('options/permit_admins'),
				);

				$qa_content['form']['fields']['permit_delete_users']=array(
					'type' => 'static',
					'label' => qa_lang_html('options/permit_delete_users'),
					'value' => qa_lang_html('options/permit_admins'),
				);

				$qa_content['form']['fields']['permit_create_eds_mods']=array(
					'type' => 'static',
					'label' => qa_lang_html('options/permit_create_eds_mods'),
					'value' => qa_lang_html('options/permit_admins'),
				);

				$qa_content['form']['fields']['permit_create_admins']=array(
					'type' => 'static',
					'label' => qa_lang_html('options/permit_create_admins'),
					'value' => qa_lang_html('options/permit_supers'),
				);

			}
			break;

		case 'mailing':
			require_once QA_INCLUDE_DIR.'qa-util-sort.php';

			if (isset($mailingprogress)) {
				unset($qa_content['form']['buttons']['save']);
				unset($qa_content['form']['buttons']['reset']);

				if ($startmailing) {
					unset($qa_content['form']['hidden']['dosaveoptions']);

					foreach ($showoptions as $optionname)
						$qa_content['form']['fields'][$optionname]['type']='static';

					$qa_content['form']['fields']['mailing_body']['value']=qa_html(qa_opt('mailing_body'), true);

					$qa_content['form']['buttons']['stop']=array(
						'tags' => 'name="domailingpause" id="domailingpause"',
						'label' => qa_lang_html('admin/pause_mailing_button'),
					);

				} else {
					$qa_content['form']['buttons']['resume']=array(
						'tags' => 'name="domailingresume"',
						'label' => qa_lang_html('admin/resume_mailing_button'),
					);

					$qa_content['form']['buttons']['cancel']=array(
						'tags' => 'name="domailingcancel"',
						'label' => qa_lang_html('admin/cancel_mailing_button'),
					);
				}

			} else {
				$qa_content['form']['buttons']['spacer']=array();

				$qa_content['form']['buttons']['test']=array(
					'tags' => 'name="domailingtest" id="domailingtest"',
					'label' => qa_lang_html('admin/send_test_button'),
				);

				$qa_content['form']['buttons']['start']=array(
					'tags' => 'name="domailingstart" id="domailingstart"',
					'label' => qa_lang_html('admin/start_mailing_button'),
				);
			}

			if (!$startmailing) {
				$qa_content['form']['fields']['mailing_enabled']['note']=qa_lang_html('admin/mailing_explanation');
				$qa_content['form']['fields']['mailing_body']['rows']=12;
				$qa_content['form']['fields']['mailing_body']['note']=qa_lang_html('admin/mailing_unsubscribe');
			}
			break;
	}


	if (isset($checkboxtodisplay))
		qa_set_display_rules($qa_content, $checkboxtodisplay);

	$qa_content['navigation']['sub']=qa_admin_sub_navigation();


	return $qa_content;


/*
	Omit PHP closing tag to help avoid accidental output
*/