<?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 ? '– ' : '').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> '. '<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').' '; $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 */