/home/arranoyd/magicraft/wp-content/plugins/incsub-support/admin/class-admin-support-menu.php
<?php
class Incsub_Support_Admin_Support_Menu extends Incsub_Support_Parent_Support_Menu {
public function add_menu() {
$settings = incsub_support_get_settings();
$menu_title = esc_html( $settings['incsub_support_menu_name'] );
parent::add_menu_page(
$menu_title,
$menu_title,
'read',
'dashicons-sos'
);
add_action( 'load-' . $this->page_id, array( $this, 'maybe_insert_new_ticket' ) );
add_action( 'load-' . $this->page_id, array( $this, 'set_filters' ) );
if ( incsub_support_current_user_can( 'insert_ticket' ) ) {
add_submenu_page(
$this->slug,
__( 'Add New Ticket', INCSUB_SUPPORT_LANG_DOMAIN ),
__( 'Add New Ticket', INCSUB_SUPPORT_LANG_DOMAIN ),
'read',
"admin.php?page=$this->slug&action=add"
);
}
}
public function set_filters() {
if ( ! isset( $_GET['action'] ) && incsub_support_current_user_can( 'insert_ticket' ) )
add_filter( 'support_system_admin_page_title', array( $this, 'add_new_ticket_link' ) );
if ( isset( $_GET['action'] ) && isset( $_GET['tid'] ) && '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_ticket_title' ) );
// Tickets table filters
add_filter( 'support_system_tickets_table_query_args', array( $this, 'set_tickets_table_query_args' ) );
add_filter( 'support_system_support_menu_counts_args', array( $this, 'set_counts_args' ) );
add_filter( 'support_network_ticket_columns', array( $this, 'set_tickets_table_columns' ) );
}
public function add_new_ticket_link( $title ) {
$settings = incsub_support_get_settings();
$menu_title = esc_html( $settings['incsub_support_menu_name'] );
$add_new_link = add_query_arg( 'action', 'add', $this->get_menu_url() );
return '<h2>'. $menu_title . ' <a href="' . esc_url( $add_new_link ) . '" class="add-new-h2">' . esc_html__( 'Add new ticket', INCSUB_SUPPORT_LANG_DOMAIN ) . '</a></h2>';
}
public function add_new_ticket_title( $title ) {
return '<h2>' . __( 'Add new ticket', INCSUB_SUPPORT_LANG_DOMAIN ) . '</h2>';
}
public function render_inner_page() {
$action = isset( $_GET['action'] ) ? $_GET['action'] : false;
if ( 'edit' == $action && isset( $_GET['tid'] ) ) {
$this->render_inner_page_details();
}
elseif ( 'add' == $action && incsub_support_current_user_can( 'insert_ticket' ) ) {
$priority = 0;
if ( isset( $_POST['priority'] ) )
$priority = absint( $_POST['priority'] );
if ( isset( $_POST['category'] ) && $selected_category = incsub_sbe_get_ticket_category( absint( $_POST['category'] ) ) ) {
$category = $selected_category;
}
else {
$category = incsub_support_get_default_ticket_category();
}
// Priorities dropdown
$priorities_dropdown = incsub_support_priority_dropdown(
array(
'show_empty' => false,
'echo' => false,
'selected' => $priority
)
);
// Categories dropdown
$categories_dropdown = incsub_support_ticket_categories_dropdown(
array(
'show_empty' => false,
'echo' => false,
'selected' => $category->cat_id
)
);
$message = '';
if ( ! empty( $_POST['message-text'] ) )
$message = stripslashes_deep( $_POST['message-text'] );
$subject = '';
if ( ! empty( $_POST['subject'] ) )
$subject = strip_tags( stripslashes_deep( $_POST['subject'] ) );
include( 'views/add-new-ticket.php' );
}
else {
$this->render_inner_page_tickets_table();
}
}
public function maybe_insert_new_ticket() {
if ( isset( $_POST['submit-new-ticket'] ) ) {
check_admin_referer( 'add-new-ticket' );
$args = array();
if ( empty( $_POST['message-text'] ) )
add_settings_error( 'support_system_submit_new_ticket', 'empty_message', __( 'Ticket message must not be empty', INCSUB_SUPPORT_LANG_DOMAIN ) );
else
$args['message'] = wpautop( stripslashes_deep( $_POST['message-text'] ) );
$title = strip_tags( stripslashes_deep( $_POST['subject'] ) );
if ( empty( $title ) )
add_settings_error( 'support_system_submit_new_ticket', 'empty_subject', __( 'Ticket subject must not be empty', INCSUB_SUPPORT_LANG_DOMAIN ) );
else
$args['title'] = $title;
$category = incsub_support_get_ticket_category( absint( $_POST['ticket-cat'] ) );
if ( ! $category ) {
add_settings_error( 'support_system_submit_new_ticket', 'wrong_category', __( 'Selected category is not a valid one', INCSUB_SUPPORT_LANG_DOMAIN ) );
}
else {
$args['cat_id'] = $category->cat_id;
}
$args['ticket_priority'] = isset( $_POST['ticket-priority'] ) ? absint( $_POST['ticket-priority'] ) : 0;
if ( ! empty( $_FILES['support-attachment'] ) ) {
$files_uploaded = incsub_support_upload_ticket_attachments( $_FILES['support-attachment'] );
if ( ! $files_uploaded['error'] && ! empty( $files_uploaded['result'] ) ) {
$args['attachments'] = wp_list_pluck( $files_uploaded['result'], 'url' );
}
elseif ( $files_uploaded['error'] && ! empty( $files_uploaded['result'] ) ) {
foreach ( $files_uploaded['result'] as $error ) {
add_settings_error( 'support_system_submit_new_ticket', 'file_upload_error', $error );
}
}
}
if ( ! get_settings_errors( 'support_system_submit_new_ticket' ) ) {
if ( is_super_admin() )
$args['view_by_superadmin'] = 1;
$result = incsub_support_insert_ticket( $args );
if ( is_wp_error( $result ) ) {
add_settings_error( 'support_system_submit_new_ticket', 'insert_error', $result->get_error_message() );
}
else {
$redirect_to = add_query_arg(
array(
'action' => 'edit',
'tid' => $result,
),
$this->get_menu_url()
);
wp_redirect( $redirect_to );
exit();
}
}
}
}
public function set_tickets_table_query_args( $args ) {
$settings = incsub_support_get_settings();
$category = $this->get_filter( 'category' );
$priority = $this->get_filter( 'priority' );
$s = $this->get_filter( 's' );
$args['priority'] = $priority;
$args['category'] = $category;
$args['s'] = $s;
$args['blog_id'] = get_current_blog_id();
return $args;
}
public function set_counts_args( $args ) {
$settings = incsub_support_get_settings();
$args['blog_id'] = get_current_blog_id();
if ( 'requestor' === $settings['incsub_ticket_privacy'] && ! incsub_support_current_user_can( 'manage_options' ) )
$args['user_in'] = array( get_current_user_id() );
return $args;
}
public function set_tickets_table_columns( $columns ) {
unset( $columns['submitted'] );
return $columns;
}
}