/home/arranoyd/magicraft/wp-content/plugins/incsub-support/admin/class-parent-support-menu.php
<?php
class Incsub_Support_Parent_Support_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 );
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_styles' ) );
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
// Tickets table filters
add_filter( 'support_system_tickets_table_menu_url', array( $this, 'get_menu_url' ) );
}
public function enqueue_styles( $page_id ) {
if ( $page_id === $this->page_id )
wp_enqueue_style( 'support-menu-styles', INCSUB_SUPPORT_PLUGIN_URL . '/admin/assets/css/support-menu.css' );
}
public function enqueue_scripts( $page_id ) {
if ( $page_id === $this->page_id ) {
incsub_support_enqueue_main_script();
}
}
public function save_screen_options( $status, $option, $value ) {
if ( 'incsub_support_tickets_per_page' == $option )
return $value;
return $status;
}
public function add_menu() {}
public function on_load() {
// Add screen options
$action = isset( $_GET['action'] ) ? $_GET['action'] : '';
if ( $action !== 'edit' )
add_screen_option( 'per_page', array( 'label' => __( 'Tickets per page', INCSUB_SUPPORT_PLUGIN_URL ), 'default' => 20, 'option' => 'incsub_support_tickets_per_page' ) );
// Check filtering
if ( isset( $_POST['filter_action'] ) || ! empty( $_POST['s'] ) ) {
$filters = array(
'category' => false,
'priority' => false,
's' => false
);
$url = false;
if ( ! empty( $_REQUEST['ticket-cat'] ) && $cat_id = absint( $_REQUEST['ticket-cat'] ) )
$filters['category'] = $cat_id;
if ( isset( $_REQUEST['ticket-priority'] ) && $_REQUEST['ticket-priority'] !== '' )
$filters['priority'] = $_REQUEST['ticket-priority'];
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();
}
// Are we updating a ticket?
if ( ! empty( $_POST['submit-ticket-details'] ) ) {
$ticket_id = absint( $_POST['ticket_id'] );
check_admin_referer( 'update-ticket-details-' . $ticket_id );
$ticket = incsub_support_get_ticket( $ticket_id );
if ( ! $ticket )
wp_die( __( 'The ticket does not exist', INCSUB_SUPPORT_LANG_DOMAIN ) );
$plugin = incsub_support();
$args = array();
// Update Super Admin
if ( isset( $_POST['super-admins'] ) ) {
$possible_users = array_merge( call_user_func( array( $plugin, 'get_super_admins' ) ) );
if ( in_array( $_POST['super-admins'], $possible_users ) ) {
$user = get_user_by( 'login', $_POST['super-admins'] );
if ( $user )
$args['admin_id'] = $user->data->ID;
}
if ( empty( $_POST['super-admins'] ) )
$args['admin_id'] = 0;
}
if ( isset( $_POST['ticket-priority'] ) ) {
$possible_values = array_keys( $plugin::$ticket_priority );
if ( in_array( absint( $_POST['ticket-priority'] ), $possible_values ) )
$args['ticket_priority'] = absint( $_POST['ticket-priority'] );
}
if ( isset( $_POST['ticket-cat'] ) ) {
$cat_id = absint( $_POST['ticket-cat'] );
if ( incsub_support_get_ticket_category( $cat_id ) )
$args['cat_id'] = $cat_id;
}
// Close ticket?
if ( isset( $_POST['close-ticket'] ) && incsub_support_current_user_can( 'close_ticket', $ticket_id ) ) {
incsub_support_close_ticket( $ticket_id );
}
elseif ( incsub_support_current_user_can( 'open_ticket', $ticket_id ) && $ticket->is_closed() ) {
incsub_support_restore_ticket_previous_status( $ticket_id );
}
if ( incsub_support_current_user_can( 'update_ticket' ) ) {
incsub_support_update_ticket( $ticket_id, $args );
}
$redirect = add_query_arg( 'updated', 'true' );
wp_redirect( $redirect );
exit();
}
// Are we adding a reply?
if ( isset( $_POST['submit-ticket-reply'] ) ) {
$ticket_id = absint( $_POST['ticket_id'] );
check_admin_referer( 'add-ticket-reply-' . $ticket_id );
$plugin = incsub_support();
$ticket = incsub_support_get_ticket( $ticket_id );
if ( ! $ticket )
wp_die( __( 'The ticket does not exist', INCSUB_SUPPORT_LANG_DOMAIN ) );
$reply_args = array();
$message = isset( $_POST['message-text'] ) ? wpautop( stripslashes_deep( $_POST['message-text'] ) ) : '';
if ( empty( $message ) )
add_settings_error( 'support_system_submit_reply', 'empty-message', __( 'Message cannot be empty', INCSUB_SUPPORT_LANG_DOMAIN ) );
else
$reply_args['message'] = $message;
$reply_args['poster_id'] = get_current_user_id();
// Attachments
if ( ! empty( $_FILES['support-attachment'] ) ) {
$files_uploaded = incsub_support_upload_ticket_attachments( $_FILES['support-attachment'] );
if ( ! $files_uploaded['error'] && ! empty( $files_uploaded['result'] ) ) {
$reply_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_reply', 'file_upload_error', $error );
}
}
}
if ( ! get_settings_errors( 'support_system_submit_reply' ) ) {
$ticket_args = array();
if ( isset( $_POST['category'] ) ) {
$category = incsub_support_get_ticket_category( absint( $_POST['category'] ) );
if ( $category )
$ticket_args['cat_id'] = $category->cat_id;
}
if ( isset( $_POST['ticket-priority'] ) ) {
$possible_values = array_keys( $plugin::$ticket_priority );
if ( in_array( absint( $_POST['ticket-priority'] ), $possible_values ) )
$ticket_args['ticket_priority'] = absint( $_POST['ticket-priority'] );
}
$responsibility = isset( $_POST['responsibility'] ) ? $_POST['responsibility'] : 'accept';
if ( in_array( $responsibility, $plugin::$responsibilities ) ) {
switch ( $responsibility ) {
case 'punt': { $ticket_args['admin_id'] = 0; break; }
case 'accept': { $ticket_args['admin_id'] = get_current_user_id(); break; }
default: { break; }
}
}
// Order is important on this
if ( incsub_support_current_user_can( 'update_ticket' ) ) {
incsub_support_update_ticket( $ticket->ticket_id, $ticket_args );
}
if ( incsub_support_current_user_can( 'insert_reply' ) ) {
incsub_support_insert_ticket_reply( $ticket->ticket_id, $reply_args );
}
$ticket = incsub_support_get_ticket( $ticket->ticket_id );
if ( $ticket->admin_id && $ticket->admin_id === get_current_user_id() && $ticket->user_id != $ticket->admin_id ) {
$status = 2;
}
elseif ( ! $ticket->admin_id && $ticket->user_id === get_current_user_id() && $ticket->ticket_status != 0 ) {
$status = 1;
}
elseif ( ! $ticket->admin_id && $ticket->user_id === get_current_user_id() && $ticket->ticket_status == 0 ) {
$status = 0;
}
elseif ( $ticket->admin_id && $ticket->user_id === get_current_user_id() && $ticket->user_id != $ticket->admin_id ) {
$status = 3;
}
elseif ( $ticket->admin_id && $ticket->admin_id === get_current_user_id() ) {
$status = 1;
}
else {
$status = $ticket->ticket_status;
}
if ( isset( $_POST['closeticket'] ) && incsub_support_current_user_can( 'close_ticket', $ticket->ticket_id ) )
incsub_support_close_ticket( $ticket->ticket_id );
elseif ( incsub_support_current_user_can( 'open_ticket', $ticket->ticket_id ) )
incsub_support_ticket_transition_status( $ticket->ticket_id, $status );
// Redirecting to ticket history
$link = add_query_arg( 'updated', 'true' );
wp_redirect( $link );
exit();
}
}
// Are we creating a FAQ based on a response?
if ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] === 'create-faq-from-ticket' && isset( $_REQUEST['tid'] ) && isset( $_REQUEST['rid'] ) ) {
$ticket_id = absint( $_REQUEST['tid'] );
$reply_id = absint( $_REQUEST['rid'] );
check_admin_referer( 'create-faq-from-ticket-' . $ticket_id . '-' . $reply_id );
if ( ! incsub_support_current_user_can( 'insert_faq' ) )
return;
$ticket = incsub_support_get_ticket( $ticket_id );
if ( ! $ticket )
return;
$reply = incsub_support_get_ticket_reply( $reply_id );
if ( ! $reply )
return;
if ( is_multisite() ) {
$redirect_to = add_query_arg(
'page',
'support-faq-manager',
trailingslashit( network_admin_url() ) . '/admin.php'
);
}
else {
$redirect_to = add_query_arg(
'page',
'support-faq-manager',
trailingslashit( admin_url() ) . '/admin.php'
);
}
$redirect_to = add_query_arg(
array(
'action' => 'add',
'tid' => $ticket_id,
'rid' => $reply_id
),
$redirect_to
);
wp_redirect( $redirect_to );
exit;
}
}
protected function render_inner_page_details() {
$ticket = incsub_support_get_ticket( absint( $_GET['tid'] ) );
if ( ! $ticket )
wp_die( __( 'The ticket does not exist', INCSUB_SUPPORT_LANG_DOMAIN ) );
if ( ! $ticket->view_by_super_admin && incsub_support_current_user_can( 'update_ticket' ) )
incsub_support_update_ticket( $ticket->ticket_id, array( 'view_by_superadmin' => 1 ) );
$user_can_update_ticket = incsub_support_current_user_can( 'update_ticket' );
$user_can_close_ticket = incsub_support_current_user_can( 'close_ticket', $ticket->ticket_id );
$screen = get_current_screen();
add_meta_box( 'support-system-ticket-details', __( 'Ticket Details', INCSUB_SUPPORT_LANG_DOMAIN ), array( $this, 'render_details_metabox' ), $screen->id, 'normal' );
add_meta_box( 'support-system-ticket-history', __( 'Ticket History', INCSUB_SUPPORT_LANG_DOMAIN ), array( $this, 'render_history_metabox' ), $screen->id, 'normal' );
if ( $user_can_update_ticket || $user_can_close_ticket )
add_meta_box( 'support-system-ticket-update', __( 'Update ticket', INCSUB_SUPPORT_LANG_DOMAIN ), array( $this, 'render_update_metabox' ), $screen->id, 'side' );
$columns = ( $user_can_update_ticket || $user_can_close_ticket ) ? 2 : 1;
?>
<h2><?php echo stripslashes_deep( $ticket->title ); ?></h2>
<?php if ( $ticket->is_closed() ): ?>
<div class="error"><p><?php _e( 'This ticket has been closed', INCSUB_SUPPORT_LANG_DOMAIN ); ?></p></div>
<?php endif; ?>
<div id="poststuff">
<div id="post-body" class="metabox-holder columns-<?php echo $columns; ?>">
<div id="postbox-container-1" class="postbox-container">
<?php do_meta_boxes( $screen->id, 'side', $ticket->ticket_id ); ?>
</div>
<div id="postbox-container-2" class="postbox-container">
<?php do_meta_boxes( $screen->id, 'normal', $ticket->ticket_id ); ?>
</div>
</div>
</div>
<?php
}
public function render_details_metabox( $ticket_id ) {
$ticket = incsub_support_get_ticket( $ticket_id );
// Last reply user
$last_reply_user_name = '';
$last_reply_user = get_userdata( $ticket->last_reply_user_id );
if ( $last_reply_user )
$last_reply_user_name = $last_reply_user->data->user_nicename;
// Submitted from
$submitted_blog_link = __( 'Unknown', INCSUB_SUPPORT_LANG_DOMAIN );
if ( is_multisite() ) {
$blog_details = get_blog_details( $ticket->blog_id );
if ( ! empty( $blog_details ) ) {
$blog_address = get_blogaddress_by_id( $ticket->blog_id );
$submitted_blog_link = '<a href="' . $blog_address . '">' . $blog_details->blogname . '</a>';
}
}
else {
$user = get_userdata( $ticket->user_id );
if ( ! empty( $user ) )
$submitted_blog_link = '<a href="' . admin_url( 'user-edit.php?user_id=' . $user->ID ) . '">' . $user->user_nicename . '</a>';
}
$fields = array(
'ticket-status' => array(
'label' => __( 'Current Status', INCSUB_SUPPORT_LANG_DOMAIN ),
'content' => incsub_support_get_ticket_status_name( $ticket->ticket_status )
),
'ticket-created' => array(
'label' => __( 'Created On (GMT)', INCSUB_SUPPORT_LANG_DOMAIN ),
'content' => incsub_support_get_translated_date( $ticket->ticket_opened )
),
'ticket-user' => array(
'label' => __( 'Reporting User', INCSUB_SUPPORT_LANG_DOMAIN ),
'content' => $ticket->get_user_name()
),
'ticket-last-reply-from' => array(
'label' => __( 'Last Reply From', INCSUB_SUPPORT_LANG_DOMAIN ),
'content' => $last_reply_user_name
),
'ticket-updated' => array(
'label' => __( 'Last Updated (GMT)', INCSUB_SUPPORT_LANG_DOMAIN ),
'content' => incsub_support_get_translated_date( $ticket->ticket_updated )
),
'ticket-submitted-from' => array(
'label' => __( 'Submitted from', INCSUB_SUPPORT_LANG_DOMAIN ),
'content' => $submitted_blog_link
)
);
$fields = apply_filters( 'support_network_ticket_details_fields', $fields, $ticket );
include_once( 'views/edit-ticket-details-metabox.php' );
}
public function render_update_metabox( $ticket_id ) {
$ticket = incsub_support_get_ticket( $ticket_id );
if ( incsub_support_current_user_can( 'update_ticket' ) ) {
// Super admins dropdown
$super_admins_dropdown = incsub_support_super_admins_dropdown(
array(
'show_empty' => __( 'Not yet assigned', INCSUB_SUPPORT_LANG_DOMAIN ) ,
'echo' => false,
'selected' => $ticket->get_staff_login()
)
);
// Priorities dropdown
$priorities_dropdown = incsub_support_priority_dropdown(
array(
'show_empty' => false,
'echo' => false,
'selected' => $ticket->ticket_priority
)
);
// Categories dropdown
$categories_dropdown = incsub_support_ticket_categories_dropdown(
array(
'show_empty' => false,
'echo' => false,
'selected' => $ticket->cat_id
)
);
}
else {
$super_admins_dropdown = ! $ticket->get_staff_login() ? __( 'Not yet assigned', INCSUB_SUPPORT_LANG_DOMAIN ) : $ticket->get_staff_login();
$priorities_dropdown = incsub_support_get_ticket_priority_name( $ticket->ticket_priority );
$ticket_category = incsub_support_get_ticket_category( $ticket->cat_id );
$categories_dropdown = $ticket_category->cat_name;
}
$fields = array(
'ticket-staff' => array(
'label' => '<label for="super-admins">' . __( 'Staff Representative', INCSUB_SUPPORT_LANG_DOMAIN ) . '</label>',
'content' => $super_admins_dropdown
),
'ticket-priority' => array(
'label' => '<label for="ticket-priority">' . __( 'Priority', INCSUB_SUPPORT_LANG_DOMAIN ) . '</label>',
'content' => $priorities_dropdown
),
'ticket-category' => array(
'label' => '<label for="ticket-cat">' . __( 'Category', INCSUB_SUPPORT_LANG_DOMAIN ) . '</label>',
'content' => $categories_dropdown
)
);
if ( incsub_support_current_user_can( 'close_ticket', $ticket->ticket_id ) ) {
$fields['ticket-closed'] = array(
'label' => '<label for="close-ticket-checkbox">' . __( 'Ticket closed', INCSUB_SUPPORT_LANG_DOMAIN ) . '</label>',
'content' => '<input name="close-ticket" id="close-ticket-checkbox" type="checkbox" ' . checked( $ticket->is_closed(), true, false ) . ' />'
);
}
$fields = apply_filters( 'support_network_ticket_update_fields', $fields, $ticket );
include_once( 'views/edit-ticket-update-metabox.php' );
}
public function render_history_metabox() {
$ticket = incsub_support_get_ticket( absint( $_GET['tid'] ) );
if ( ! $ticket )
wp_die( __( 'The ticket does not exist', INCSUB_SUPPORT_LANG_DOMAIN ) );
if ( ! $ticket->view_by_super_admin && incsub_support_current_user_can( 'update_ticket' ) )
incsub_support_update_ticket( $ticket->ticket_id, array( 'view_by_superadmin' => 1 ) );
include_once( 'inc/class-table-tickets-history.php' );
$ticket_history_table = new Incsub_Support_Tickets_History_Table();
$ticket_history_table->set_ticket( absint( $_GET['tid'] ) );
$ticket_history_table->prepare_items();
$ticket_history_table->display();
if ( isset( $_POST['category'] ) )
$ticket->cat_id = absint( $_POST['category'] );
if ( isset( $_POST['ticket-priority'] ) )
$ticket->ticket_priority = absint( $_POST['ticket-priority'] );
if ( isset( $_POST['responsibility'] ) ) {
$responsibility = $_POST['responsibility'];
}
else {
if ( $ticket->admin_id == get_current_user_id() )
$responsibility = 'keep';
else
$responsibility = 'accept';
}
if ( isset( $_POST['closeticket'] ) )
$ticket->ticket_status = 5;
$ticket_message = '';
if ( ! empty( $_POST['message-text'] ) )
$ticket_message = wpautop( stripslashes_deep( $_POST['message-text'] ) );
if ( incsub_support_current_user_can( 'update_ticket' ) ) {
// Categories dropdown
$categories_dropdown = incsub_support_ticket_categories_dropdown(
array(
'echo' => false,
'name' => 'category',
'id' => 'category',
'selected' => $ticket->cat_id,
'show_empty' => false
)
);
$priorities_dropdown = incsub_support_priority_dropdown(
array(
'show_empty' => false,
'echo' => false,
'selected' => $ticket->ticket_priority
)
);
}
else {
$priorities_dropdown = incsub_support_get_ticket_priority_name( $ticket->ticket_priority );
$ticket_category = incsub_support_get_ticket_category( $ticket->cat_id );
$categories_dropdown = $ticket_category->cat_name;
}
$errors = get_settings_errors( 'support_system_submit_reply' );
include_once( 'views/edit-ticket-history-metabox.php' );
if ( incsub_support_current_user_can( 'insert_reply' ) && ! $ticket->is_closed() )
include( 'views/edit-ticket-history.php' );
}
protected function render_inner_page_tickets_table() {
include_once( 'inc/class-table-tickets.php' );
$status = $this->get_status_filter();
$category = $this->get_filter( 'category' );
$priority = $this->get_filter( 'priority' );
$tickets_table = new Incsub_Support_Tickets_Table( array( 'status' => $status ) );
$tickets_table->prepare_items();
$counts_args = array();
if ( false !== $priority )
$counts_args['priority'] = absint( $priority );
if ( false !== $category )
$counts_args['category'] = absint( $category );
/**
* Filters the arguments that will be passed to the function that counts the tickets
* in the admin page
*
* @param Array $counts_args Count arguments
*/
$counts_args = apply_filters( 'support_system_support_menu_counts_args', $counts_args );
$all_tickets_count = incsub_support_get_tickets_count( $counts_args );
$counts_args['status'] = 'archive';
$archived_tickets_count = incsub_support_get_tickets_count( $counts_args );
$active_tickets_count = $all_tickets_count - $archived_tickets_count;
include( 'views/network-tickets.php' );
}
public function render_inner_page() {}
protected function get_status_filter() {
if ( ! isset( $_GET['status'] ) )
return 'all';
return $_GET['status'];
}
protected function get_filter( $slug ) {
if ( ! isset( $_REQUEST[ $slug ] ) )
return false;
return $_REQUEST[ $slug ];
}
}