/home/arranoyd/magicraft/wp-content/plugins/incsub-support/inc/helpers/ticket-category.php
<?php
function incsub_support_sanitize_ticket_category_fields( $cat ) {
$int_fields = array( 'cat_id', 'user_id', 'site_id' );
foreach ( get_object_vars( $cat ) as $name => $value ) {
if ( in_array( $name, $int_fields ) )
$value = intval( $value );
$cat->$name = $value;
}
$cat = apply_filters( 'support_system_sanitize_ticket_category_fields', $cat );
return $cat;
}
function incsub_support_get_ticket_category( $cat ) {
$cat = Incsub_Support_Ticket_Category::get_instance( $cat );
$cat = apply_filters( 'support_system_get_ticket_category', $cat );
return $cat;
}
function incsub_support_get_ticket_categories( $args = array() ) {
global $wpdb, $current_site;
$defaults = array(
'orderby' => 'cat_name',
'order' => 'asc',
'per_page' => -1,
'count' => false,
'page' => 1,
'defcat' => null
);
$args = wp_parse_args( $args, $defaults );
extract( $args );
$table = incsub_support()->model->tickets_cats_table;
$current_site_id = ! empty ( $current_site ) ? $current_site->id : 1;
// WHERE
$where = array();
$where[] = $wpdb->prepare( "site_id = %d", $current_site_id );
if ( $defcat !== null ) {
// This is an enum field type!!
if ( $defcat )
$where[] = "defcat = 2";
else
$where[] = "defcat = 1";
}
$where = "WHERE " . implode( " AND ", $where );
// ORDER
$order = strtoupper( $order );
$order = "ORDER BY $orderby $order";
$limit = '';
if ( $per_page > -1 )
$limit = $wpdb->prepare( "LIMIT %d, %d", intval( ( $page - 1 ) * $per_page ), intval( $per_page ) );
if ( $count ) {
$query = "SELECT COUNT(cat_id) FROM $table $where";
$results = $wpdb->get_var( $query );
$cats = apply_filters( 'support_system_get_ticket_categories_count', $results, $args );
}
else {
$query = "SELECT cat_id, cat_name, defcat, user_id FROM $table $where $order $limit";
$_cats = $wpdb->get_results( $query );
$cats = array_map( 'incsub_support_get_ticket_category', $_cats );
if ( empty( $cats ) )
$cats = array();
$cats = apply_filters( 'support_system_get_ticket_categories', $cats, $args );
}
return $cats;
}
function incsub_support_get_ticket_categories_count( $args = array() ) {
$args['count'] = true;
$args['per_page'] = -1;
return incsub_support_get_ticket_categories( $args );
}
function incsub_support_ticket_categories_dropdown( $args = array() ) {
$defaults = array(
'name' => 'ticket-cat',
'id' => false,
'show_empty' => __( '-- Select a category --', INCSUB_SUPPORT_LANG_DOMAIN ),
'selected' => '',
'class' => '',
'echo' => true
);
$args = wp_parse_args( $args, $defaults );
extract( $args );
if ( ! $id )
$id = $name;
if ( ! $echo )
ob_start();
$cats = incsub_support_get_ticket_categories();
?>
<select class="<?php echo esc_attr( $class ); ?>" name="<?php echo esc_attr( $name ); ?>" id="<?php echo esc_attr( $id ); ?>">
<?php if ( ! empty( $show_empty ) ): ?>
<option value="" <?php selected( empty( $selected ) ); ?>><?php echo esc_html( $show_empty ); ?></option>
<?php endif; ?>
<?php foreach ( $cats as $cat ): ?>
<option value="<?php echo esc_attr( $cat->cat_id ); ?>" <?php selected( $selected == $cat->cat_id ); ?>><?php echo esc_html( $cat->cat_name ); ?></option>
<?php endforeach; ?>
</select>
<?php
if ( ! $echo )
return ob_get_clean();
}
function incsub_support_insert_ticket_category( $name, $user_id = false ) {
global $wpdb, $current_site;
$current_site_id = ! empty ( $current_site ) ? $current_site->id : 1;
$tickets_cats_table = incsub_support()->model->tickets_cats_table;
$user_id = $user_id === false ? get_current_user_id() : absint( $user_id );
$name = trim( wp_unslash( $name ) );
if ( empty( $name ) )
return false;
$ticket_category = incsub_support_get_ticket_category( $name );
if ( $ticket_category )
return false;
$res = $wpdb->insert(
$tickets_cats_table,
array(
'cat_name' => $name,
'site_id' => $current_site_id,
'user_id' => $user_id,
),
array( '%s', '%d', '%d' )
);
if ( ! $res )
return false;
$cat_id = $wpdb->insert_id;
do_action( 'support_system_insert_ticket_category', $cat_id );
return $cat_id;
}
function incsub_support_update_ticket_category( $ticket_category_id, $args = array() ) {
global $wpdb, $current_site;
$tickets_cats_table = incsub_support()->model->tickets_cats_table;
$ticket_category = incsub_support_get_ticket_category( $ticket_category_id );
if ( ! $ticket_category )
return false;
$defaults = array(
'cat_name' => $ticket_category->cat_name,
'user_id' => $ticket_category->user_id,
'defcat' => $ticket_category->defcat
);
$args = wp_parse_args( $args, $defaults );
extract( $args );
$cat_name = trim( $cat_name );
if ( empty( $cat_name ) )
return false;
$update = array();
$update_wildcards = array();
$update['cat_name'] = wp_unslash( $cat_name );
$update_wildcards[] = '%s';
$update['user_id'] = $user_id;
$update_wildcards[] = '%d';
if ( $defcat )
incsub_support_set_default_ticket_category( $ticket_category_id );
$result = $wpdb->update(
$tickets_cats_table,
$update,
array( 'cat_id' => $ticket_category_id ),
$update_wildcards,
array( '%d' )
);
if ( ! $result )
return false;
incsub_support_clean_ticket_category_cache( $ticket_category_id );
$old_ticket_category = $ticket_category;
do_action( 'support_system_update_ticket_category', $ticket_category_id, $args, $old_ticket_category );
return true;
}
function incsub_support_get_default_ticket_category() {
$default_category = wp_cache_get( 'support_system_default_ticket_category', 'support_system_ticket_categories' );
if ( $default_category )
return $default_category;
$results = incsub_support_get_ticket_categories( array( 'per_page' => 1, 'defcat' => 1 ) );
if ( isset( $results[0] ) ) {
wp_cache_set( 'support_system_default_ticket_category', $results[0], 'support_system_ticket_categories' );
return $results[0];
}
return false;
}
function incsub_support_set_default_ticket_category( $ticket_category_id ) {
global $wpdb;
$tickets_cats_table = incsub_support()->model->tickets_cats_table;
$ticket_category = incsub_support_get_ticket_category( $ticket_category_id );
if ( ! $ticket_category )
return false;
$default_category = incsub_support_get_default_ticket_category();
if ( $default_category )
$wpdb->query( "UPDATE $tickets_cats_table SET defcat = 1" ); // enum type field!!
$result = $wpdb->update(
$tickets_cats_table,
array( 'defcat' => 2 ), // enum type field!!
array( 'cat_id' => $ticket_category_id ),
array( '%d' ),
array( '%d' )
);
wp_cache_delete( 'support_system_default_ticket_category', 'support_system_ticket_categories' );
incsub_support_clean_ticket_category_cache( $ticket_category_id );
incsub_support_clean_ticket_category_cache( $default_category->cat_id );
if ( ! $result )
return false;
return true;
}
function incsub_support_delete_ticket_category( $ticket_category_id ) {
global $wpdb;
$tickets_cats_table = incsub_support()->model->tickets_cats_table;
$ticket_category = incsub_support_get_ticket_category( $ticket_category_id );
if ( ! $ticket_category )
return false;
// Don't allow to remove the default category
if ( $ticket_category->defcat )
return false;
$default_category = incsub_support_get_default_ticket_category();
$category_tickets = incsub_support_get_tickets(
array(
'per_page' => -1,
'category' => $ticket_category_id
)
);
if ( $category_tickets && $default_category ) {
foreach ( $category_tickets as $ticket )
incsub_support_update_ticket( $ticket->ticket_id, array( 'cat_id' => $default_category->cat_id ) );
}
$wpdb->query( $wpdb->prepare( "DELETE FROM $tickets_cats_table WHERE cat_id = %d", $ticket_category_id ) );
incsub_support_clean_ticket_category_cache( $ticket_category_id );
$old_ticket_category = $ticket_category;
do_action( 'support_system_delete_ticket_category', $ticket_category_id, $old_ticket_category );
return true;
}
function incsub_support_clean_ticket_category_cache( $ticket_category ) {
$ticket_category = incsub_support_get_ticket_category( $ticket_category );
if ( empty( $ticket_category ) )
return;
wp_cache_delete( $ticket_category->cat_id, 'support_system_ticket_categories' );
wp_cache_delete( $ticket_category->cat_id, 'support_system_ticket_categories_counts' );
do_action( 'support_system_clean_ticket_category_cache', $ticket_category );
}