/home/arranoyd/magicraft/wp-content/plugins/incsub-support/inc/helpers/ticket-reply.php
<?php
function incsub_support_get_ticket_replies( $ticket_id ) {
global $wpdb, $current_site;
$_replies = array();
$ticket = incsub_support_get_ticket( $ticket_id );
if ( ! $ticket )
return $_replies;
$current_site_id = ! empty ( $current_site ) ? $current_site->id : 1;
$tickets_replies_table = incsub_support()->model->tickets_messages_table;
$query = $wpdb->prepare(
"SELECT * FROM $tickets_replies_table
WHERE ticket_id = %d
ORDER BY message_id ASC",
$ticket_id
);
$results = wp_cache_get( 'support-ticket-' . $ticket_id, 'support_system_ticket_replies' );
if ( $results === false ){
$results = $wpdb->get_results( $query );
wp_cache_set( 'support-ticket-' . $ticket_id, $results, 'support_system_ticket_replies' );
}
if ( $results )
$_replies = $results;
$replies = array();
$i = 0;
foreach ( $_replies as $_reply ) {
$reply = incsub_support_get_ticket_reply( $_reply );
if ( $i === 0 )
$reply->is_main_reply = true;
$replies[] = $reply;
$i++;
}
$replies = apply_filters( 'support_system_get_ticket_replies', $replies, $ticket_id );
return $replies;
}
function incsub_support_get_ticket_reply( $ticket_reply ) {
$ticket_reply = Incsub_Support_Ticket_Reply::get_instance( $ticket_reply );
$ticket_reply = apply_filters( 'support_system_get_ticket_reply', $ticket_reply );
return $ticket_reply;
}
/**
* Insert a new reply for a ticket
*
* @param int $ticket_id
* @param array $args
* @return int|boolean
*/
function incsub_support_insert_ticket_reply( $ticket_id, $args = array() ) {
global $wpdb, $current_site;
$current_site_id = ! empty ( $current_site ) ? $current_site->id : 1;
$ticket = incsub_support_get_ticket( absint( $ticket_id ) );
if ( ! $ticket )
return false;
wp_cache_delete( 'support-ticket-' . $ticket_id, 'support_system_ticket_replies' );
wp_cache_delete( $ticket_id, 'support_system_tickets' );
$defaults = array(
'site_id' => $current_site_id,
'poster_id' => 0,
'subject' => 'Re: ' . wp_unslash( $ticket->title ),
'message' => '',
'message_date' => current_time( 'mysql', 1 ),
'attachments' => array(),
'send_emails' => true
);
$args = wp_parse_args( $args, $defaults );
extract( $args );
$plugin = incsub_support();
$tickets_replies_table = $plugin->model->tickets_messages_table;
$message = wp_kses_post( wp_unslash( $message ) );
$result = $wpdb->insert(
$tickets_replies_table,
array(
'site_id' => $site_id,
'ticket_id' => absint( $ticket_id ),
'admin_id' => is_super_admin( $poster_id ) ? absint( $poster_id ) : 0,
'user_id' => is_super_admin( $poster_id ) ? 0 : absint( $poster_id ),
'subject' => $subject,
'message' => $message,
'message_date' => $message_date,
'attachments' => maybe_serialize( $attachments )
),
array( '%d', '%d', '%d', '%d', '%s', '%s', '%s', '%s' )
);
if ( ! $result )
return false;
$reply_id = $wpdb->insert_id;
if ( ! $reply_id )
return false;
$reply = incsub_support_get_ticket_reply( $reply_id );
incsub_support_recount_ticket_replies( $reply->ticket_id );
$users_tagged = incsub_support_get_ticket_meta( $ticket_id, 'tagged_users', array() );
if ( ! in_array( $poster_id, $users_tagged ) ) {
$users_tagged[] = $poster_id;
incsub_support_update_ticket_meta( $ticket_id, 'tagged_users', $users_tagged );
}
do_action( 'support_system_insert_ticket_reply', $reply_id, $send_emails );
return $reply_id;
}
function incsub_support_delete_ticket_reply( $reply_id ) {
global $wpdb, $current_site;
$ticket_reply = incsub_support_get_ticket_reply( $reply_id );
if ( ! $ticket_reply )
return false;
$ticket = incsub_support_get_ticket( $ticket_reply->ticket_id );
if ( ! $ticket )
return false;
wp_cache_delete( 'support-ticket-' . $ticket->ticket_id, 'support_system_ticket_replies' );
wp_cache_delete( $ticket->ticket_id, 'support_system_tickets' );
$replies = $ticket->get_replies();
$main_reply = wp_list_filter( $replies, array( 'is_main_reply' => true ) );
$main_reply = $main_reply[0];
if ( $main_reply->message_id == $reply_id ) {
// Do not allow to delete the main reply
return false;
}
$tickets_replies_table = incsub_support()->model->tickets_messages_table;
$wpdb->query( $wpdb->prepare( "DELETE FROM $tickets_replies_table WHERE message_id = %d", $reply_id ) );
incsub_support_recount_ticket_replies( $ticket_reply->ticket_id );
$old_ticket_reply = $ticket_reply;
do_action( 'support_system_delete_ticket_reply', $reply_id, $old_ticket_reply );
return true;
}