/home/arranoyd/magicraft/wp-content/plugins/incsub-support/admin/class-network-faqs-menu.php
<?php
class Incsub_Support_Network_FAQ_Menu extends Incsub_Support_Admin_Menu {
public function __construct( $slug, $network = false ) {
parent::__construct( $slug, $network );
add_filter( 'set-screen-option', array( $this, 'save_screen_options' ), 10, 3 );
}
public function add_menu() {
parent::add_submenu_page(
'ticket-manager',
__( 'FAQ Manager', INCSUB_SUPPORT_LANG_DOMAIN ),
__( 'FAQ Manager', INCSUB_SUPPORT_LANG_DOMAIN ),
is_multisite() ? 'manage_network' : 'manage_options'
);
add_action( 'load-' . $this->page_id, array( $this, 'set_filters' ) );
}
public function set_filters() {
// FAQs table filters
add_filter( 'support_system_faqs_table_query_args', array( $this, 'set_faqs_table_query_args' ) );
add_filter( 'support_system_faqs_table_menu_url', array( $this, 'get_menu_url' ) );
if ( ! isset( $_GET['action'] ) && incsub_support_current_user_can( 'insert_faq' ) )
add_filter( 'support_system_admin_page_title', array( $this, 'add_new_faq_link' ) );
if ( isset( $_GET['action'] ) && isset( $_GET['fid'] ) && 'edit' === $_GET['action'] )
add_filter( 'support_system_admin_page_title', '__return_empty_string' );
if ( isset( $_GET['action'] ) && 'add' === $_GET['action'] )
add_filter( 'support_system_admin_page_title', array( $this, 'add_new_faq_title' ) );
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_styles' ) );
}
public function enqueue_styles() {
wp_enqueue_style( 'mu-support-faq-css', INCSUB_SUPPORT_PLUGIN_URL . '/admin/assets/css/support-faqs-menu.css', array(), '20130402' );
}
public function add_new_faq_title( $title ) {
return '<h2>' . esc_html( __( 'Add new FAQ', INCSUB_SUPPORT_LANG_DOMAIN ) ) . '</h2>';
}
public function add_new_faq_link( $title ) {
$add_new_link = add_query_arg( 'action', 'add', $this->get_menu_url() );
return '<h2>'. $this->get_menu_title() . ' <a href="' . esc_url( $add_new_link ) . '" class="add-new-h2">' . esc_html__( 'Add new FAQ', INCSUB_SUPPORT_LANG_DOMAIN ) . '</a></h2>';
}
public function save_screen_options( $status, $option, $value ) {
if ( 'incsub_support_faqs_per_page' == $option )
return $value;
return $status;
}
public function render_inner_page() {
$action = isset( $_GET['action'] ) ? $_GET['action'] : false;
if ( 'edit' == $action && isset( $_GET['fid'] ) ) {
$faq = incsub_support_get_faq( $_GET['fid'] );
if ( ! $faq )
wp_die( __( 'The FAQ does not exist', INCSUB_SUPPORT_LANG_DOMAIN ) );
if ( isset( $_POST['category'] ) && $selected_category = incsub_support_get_faq_category( absint( $_POST['category'] ) ) )
$category = $selected_category;
else
$category = $faq->cat_id;
// Categories dropdown
$categories_dropdown = incsub_support_faq_categories_dropdown(
array(
'show_empty' => false,
'echo' => false,
'selected' => $category,
'name' => 'category'
)
);
$question = '';
if ( ! empty( $_POST['question'] ) )
$question = strip_tags( stripslashes_deep( $_POST['question'] ) );
else
$question = $faq->question;
$answer = '';
if ( ! empty( $_POST['answer'] ) )
$answer = wp_kses_post( stripslashes_deep( $_POST['answer'] ) );
else
$answer = $faq->answer;
$list_menu_url = $this->get_menu_url();
include_once( 'views/edit-faq.php' );
}
else if ( 'add' == $action ) {
if ( isset( $_POST['category'] ) && $selected_category = incsub_support_get_faq_category( absint( $_POST['category'] ) ) ) {
$category = $selected_category;
}
else {
$category = incsub_support_get_default_faq_category();
}
// Categories dropdown
$categories_dropdown = incsub_support_faq_categories_dropdown(
array(
'show_empty' => false,
'echo' => false,
'selected' => $category->cat_id,
'name' => 'category'
)
);
$question = '';
if ( ! empty( $_POST['question'] ) ) {
$question = stripslashes_deep( $_POST['question'] );
}
elseif( ! empty( $_REQUEST['tid'] ) ) {
$ticket = incsub_support_get_ticket( $_REQUEST['tid'] );
if ( $ticket )
$question = $ticket->title;
}
$answer = '';
if ( ! empty( $_POST['answer'] ) ) {
$answer = stripslashes_deep( $_POST['answer'] );
}
elseif ( ! empty( $_REQUEST['rid'] ) ) {
$reply = incsub_support_get_ticket_reply( $_REQUEST['rid'] );
if ( $reply )
$answer = $reply->message;
}
$list_menu_url = $this->get_menu_url();
include_once( 'views/add-new-faq.php' );
}
else {
include_once( 'inc/class-table-faqs.php' );
$table = new Incsub_Support_FAQS_Table();
$table->prepare_items();
include_once( 'views/network-faqs.php' );
}
}
public function on_load() {
// Add screen options
add_screen_option( 'per_page', array( 'label' => __( 'FAQs per page', INCSUB_SUPPORT_LANG_DOMAIN ), 'default' => 20, 'option' => 'incsub_support_faqs_per_page' ) );
// Check filtering
if ( isset( $_POST['filter_action'] ) || ! empty( $_POST['s'] ) ) {
$filters = array(
'category' => false,
's' => false
);
$url = false;
if ( ! empty( $_REQUEST['faq-cat'] ) && $cat_id = absint( $_REQUEST['faq-cat'] ) )
$filters['category'] = $cat_id;
if ( ! empty( $_REQUEST['s'] ) )
$filters['s'] = stripslashes_deep( $_REQUEST['s'] );
$url = $_SERVER['REQUEST_URI'];
foreach ( $filters as $key => $value ) {
if ( $value === false )
$url = remove_query_arg( $key, $url );
else
$url = add_query_arg( $key, $value, $url );
}
wp_redirect( $url );
exit();
}
// Adding a new FAQ?
if ( isset( $_POST['submit-new-faq'] ) ) {
check_admin_referer( 'add-new-faq' );
$args = array();
if ( empty( $_POST['answer'] ) )
add_settings_error( 'support_system_submit_new_faq', 'empty_message', __( 'FAQ answer must not be empty', INCSUB_SUPPORT_LANG_DOMAIN ) );
else
$args['answer'] = wpautop( stripslashes_deep( $_POST['answer'] ) );
$question = strip_tags( stripslashes_deep( $_POST['question'] ) );
if ( empty( $question ) )
add_settings_error( 'support_system_submit_new_faq', 'empty_question', __( 'FAQ question must not be empty', INCSUB_SUPPORT_LANG_DOMAIN ) );
else
$args['question'] = $question;
$category = incsub_support_get_faq_category( absint( $_POST['category'] ) );
if ( ! $category ) {
add_settings_error( 'support_system_submit_new_faq', 'wrong_category', __( 'Selected category is not a valid one', INCSUB_SUPPORT_LANG_DOMAIN ) );
}
else {
$args['cat_id'] = $category->cat_id;
}
if ( ! get_settings_errors( 'support_system_submit_new_faq' ) ) {
$result = incsub_support_insert_faq( $args );
if ( is_wp_error( $result ) ) {
add_settings_error( 'support_system_submit_new_faq', 'insert_error', $result->get_error_message() );
}
else {
wp_redirect( $this->get_menu_url() );
exit();
}
}
}
if ( isset( $_POST['submit-edit-faq'] ) ) {
$faq_id = $_POST['faq-id'];
check_admin_referer( 'edit-faq-' . $faq_id );
$args = array();
if ( empty( $_POST['answer'] ) )
add_settings_error( 'support_system_submit_edit_faq', 'empty_message', __( 'FAQ answer must not be empty', INCSUB_SUPPORT_LANG_DOMAIN ) );
else
$args['answer'] = wpautop( stripslashes_deep( $_POST['answer'] ) );
$question = strip_tags( stripslashes_deep( $_POST['question'] ) );
if ( empty( $question ) )
add_settings_error( 'support_system_submit_edit_faq', 'empty_question', __( 'FAQ question must not be empty', INCSUB_SUPPORT_LANG_DOMAIN ) );
else
$args['question'] = $question;
$category = incsub_support_get_faq_category( absint( $_POST['category'] ) );
if ( ! $category ) {
add_settings_error( 'support_system_submit_edit_faq', 'wrong_category', __( 'Selected category is not a valid one', INCSUB_SUPPORT_LANG_DOMAIN ) );
}
else {
$args['cat_id'] = $category->cat_id;
}
if ( ! get_settings_errors( 'support_system_submit_edit_faq' ) ) {
$result = incsub_support_update_faq( $faq_id, $args );
if ( is_wp_error( $result ) ) {
add_settings_error( 'support_system_submit_edit_faq', 'insert_error', $result->get_error_message() );
}
else {
wp_redirect( $this->get_menu_url() );
exit();
}
}
}
}
public function set_faqs_table_query_args( $args ) {
$category = $this->get_filter( 'category' );
$s = $this->get_filter( 's' );
$args['s'] = $s;
$args['category'] = $category;
return $args;
}
private function get_filter( $slug ) {
if ( ! isset( $_REQUEST[ $slug ] ) )
return false;
return $_REQUEST[ $slug ];
}
}