__CLASS__, 'save-key' => 'id', ); return $classes; } /** * Add custom field type to list * * @param array $cf_types - custom field types array. * @return array */ public static function add_cf_type( $cf_types ) { $cf_types[ self::$slug ] = array( 'label' => esc_attr__( 'Date', 'supportcandy' ), 'class' => __CLASS__, ); return $cf_types; } /** * Print operators for ticket form filter * * @param WPSC_Custom_Field $cf - custom field object. * @param array $filter - Existing filters (if any). * @return void */ public static function get_operators( $cf, $filter = array() ) { ?>
$value ? true : false; break; case '>': $response = $operand_1 < $value ? true : false; break; case '<=': $response = $operand_1 >= $value ? true : false; break; case '>=': $response = $operand_1 <= $value ? true : false; break; case 'BETWEEN': $operand_2 = new DateTime( $condition['operand_val_2'] . ' 00:00:00' ); $response = $operand_1 <= $value && $operand_2 >= $value ? true : false; break; } return $response; } /** * Parse filter and return sql query to be merged in ticket model query builder * * @param WPSC_Custom_Field $cf - custom field of this type. * @param mixed $compare - comparison operator. * @param mixed $val - value to compare. * @return string */ public static function parse_filter( $cf, $compare, $val ) { $str = ''; switch ( $compare ) { case '=': $from = WPSC_Functions::get_utc_date_str( $val . ' 00:00:00' ); $to = WPSC_Functions::get_utc_date_str( $val . ' 23:59:59' ); $str = self::get_sql_slug( $cf ) . ' BETWEEN \'' . esc_sql( $from ) . '\' AND \'' . esc_sql( $to ) . '\''; break; case '<': $from = WPSC_Functions::get_utc_date_str( $val . ' 00:00:00' ); $arr = array( self::get_sql_slug( $cf ) . esc_sql( $compare ) . '\'' . esc_sql( $from ) . '\'', self::get_sql_slug( $cf ) . ' != \'0000-00-00 00:00:00\'', ); $str = '(' . implode( ' AND ', $arr ) . ')'; break; case '>': $to = WPSC_Functions::get_utc_date_str( $val . ' 23:59:59' ); $str = self::get_sql_slug( $cf ) . esc_sql( $compare ) . '\'' . esc_sql( $to ) . '\''; break; case '<=': $from = WPSC_Functions::get_utc_date_str( $val . ' 00:00:00' ); $to = WPSC_Functions::get_utc_date_str( $val . ' 23:59:59' ); $arr = array( self::get_sql_slug( $cf ) . esc_sql( $compare ) . '\'' . esc_sql( $from ) . '\'', self::get_sql_slug( $cf ) . ' BETWEEN \'' . esc_sql( $from ) . '\' AND \'' . esc_sql( $to ) . '\'', ); $str = '((' . implode( ' OR ', $arr ) . ') AND ' . self::get_sql_slug( $cf ) . ' != \'0000-00-00 00:00:00\')'; break; case '>=': $from = WPSC_Functions::get_utc_date_str( $val . ' 00:00:00' ); $to = WPSC_Functions::get_utc_date_str( $val . ' 23:59:59' ); $arr = array( self::get_sql_slug( $cf ) . esc_sql( $compare ) . '\'' . esc_sql( $to ) . '\'', self::get_sql_slug( $cf ) . ' BETWEEN \'' . esc_sql( $from ) . '\' AND \'' . esc_sql( $to ) . '\'', ); $str = '(' . implode( ' OR ', $arr ) . ')'; break; case 'BETWEEN': $from = WPSC_Functions::get_utc_date_str( $val['operand_val_1'] . ' 00:00:00' ); $to = WPSC_Functions::get_utc_date_str( $val['operand_val_2'] . ' 23:59:59' ); $str = self::get_sql_slug( $cf ) . ' BETWEEN \'' . esc_sql( $from ) . '\' AND \'' . esc_sql( $to ) . '\''; break; default: $str = '1=1'; } return $str; } /** * Return orderby string * * @param WPSC_Custom_Field $cf - custom field object. * @return string */ public static function get_orderby_string( $cf ) { return self::get_sql_slug( $cf ); } /** * Check ticket condition * * @param array $condition - array with condition data. * @param WPSC_Custom_Field $cf - custom field object. * @param WPSC_Ticket $ticket - ticket object. * @return boolean */ public static function is_valid_ticket_condition( $condition, $cf, $ticket ) { $flag = true; $date = $ticket->{$cf->slug}; if ( ! is_object( $date ) ) { return false; } $date->setTimezone( wp_timezone() ); switch ( $condition['operator'] ) { case '=': $flag = $date->format( 'Y-m-d' ) == $condition['operand_val_1'] ? true : false; break; case '<': $operand = new DateTime( $condition['operand_val_1'] ); $flag = $date < $operand ? true : false; break; case '>': $operand = new DateTime( $condition['operand_val_1'] ); $flag = $date > $operand ? true : false; break; case '<=': $operand = new DateTime( $condition['operand_val_1'] ); $flag = $date <= $operand ? true : false; break; case '>=': $operand = new DateTime( $condition['operand_val_1'] ); $flag = $date >= $operand ? true : false; break; case 'BETWEEN': $operand1 = new DateTime( $condition['operand_val_1'] ); $operand2 = new DateTime( $condition['operand_val_2'] ); $flag = $operand1 <= $date && $operand2 >= $date ? true : false; break; default: $flag = true; } return $flag; } /** * Check customer condition * * @param array $condition - array with condition data. * @param WPSC_Custom_Field $cf - custom field object. * @param WPSC_Customer $customer - customer object. * @return boolean */ public static function is_valid_customer_condition( $condition, $cf, $customer ) { $flag = true; $date = $customer->{$cf->slug}; if ( ! is_object( $date ) ) { return false; } switch ( $condition['operator'] ) { case '=': $flag = $date->format( 'Y-m-d' ) == $condition['operand_val_1'] ? true : false; break; case '<': $operand = new DateTime( $condition['operand_val_1'] ); $flag = $date < $operand ? true : false; break; case '>': $operand = new DateTime( $condition['operand_val_1'] ); $flag = $date > $operand ? true : false; break; case '<=': $operand = new DateTime( $condition['operand_val_1'] ); $flag = $date <= $operand ? true : false; break; case '>=': $operand = new DateTime( $condition['operand_val_1'] ); $flag = $date >= $operand ? true : false; break; case 'BETWEEN': $operand1 = new DateTime( $condition['operand_val_1'] ); $operand2 = new DateTime( $condition['operand_val_2'] ); $flag = $operand1 <= $date && $operand2 >= $date ? true : false; break; default: $flag = true; } return $flag; } /** * Print ticket form field * * @param WPSC_Custom_Field $cf - Custom field object. * @param array $tff - Array of ticket form field settings for this field. * @return string */ public static function print_tff( $cf, $tff ) { $unique_id = uniqid( 'wpsc_' ); $val = ''; if ( $cf->field == 'ticket' ) { $val = $cf->is_auto_fill && $cf->default_value ? $cf->default_value[0] : ''; $val = $val ? new DateTime( $val . ' 00:00:00' ) : ''; } else { $current_user = WPSC_Current_User::$current_user; $val = $current_user->is_customer && $current_user->customer->{$cf->slug} ? $current_user->customer->{$cf->slug} : ''; } ob_start(); ?>
name ); ?> *
extra_info ); ?>
case '': var val = customField.find('input').first().val().trim(); if (customField.hasClass('required') && !val) { isValid = false; alert(supportcandy.translations.req_fields_missing); } break; default_value ? $cf->default_value[0] . ' 00:00:00' : ''; } /** * Check and return custom field value for new ticket to be created. * This function is used by filter for set create ticket form and called directly by my-profile for each applicable custom fields. * Ignore phpcs nonce issue as we already checked where it is called from. * * @param array $data - Array of values to to stored in ticket in an insert function. * @param array $custom_fields - Array containing all applicable custom fields indexed by unique custom field types. * @param boolean $is_my_profile - Whether it or not it is created from my-profile. This function is used by create ticket as well as my-profile. Due to customer fields handling is done same way, this flag gives apportunity to identify where it being called. * @return array */ public static function set_create_ticket_data( $data, $custom_fields, $is_my_profile ) { if ( isset( $custom_fields[ self::$slug ] ) ) { foreach ( $custom_fields[ self::$slug ] as $cf ) { $value = self::get_tff_value( $cf->slug ); if ( $cf->field == 'ticket' ) { $default_val = self::get_default_value( $cf ); $data[ $cf->slug ] = $value ? $value->format( 'Y-m-d H:i:s' ) : $default_val; } elseif ( $cf->field == 'agentonly' ) { $data[ $cf->slug ] = self::get_default_value( $cf ); } elseif ( $cf->field == 'customer' && $data['customer'] != 0 ) { $tff = get_option( 'wpsc-tff' ); if ( ! $is_my_profile && ! isset( $tff[ $cf->slug ] ) ) { continue; } $customer = new WPSC_Customer( $data['customer'] ); $prev_val = $customer->{$cf->slug} && is_object( $customer->{$cf->slug} ) ? $customer->{$cf->slug}->format( 'Y-m-d' ) : ''; $value = $value ? $value : '0000-00-00 00:00:00'; if ( $customer->{$cf->slug} != $value ) { $customer->{$cf->slug} = $value; $customer->save(); $new_val = $value && is_object( $value ) ? $value->format( 'Y-m-d H:i:s' ) : ''; // Set log for this change. WPSC_Log::insert( array( 'type' => 'customer', 'ref_id' => $customer->id, 'modified_by' => WPSC_Current_User::$current_user->customer->id, 'body' => wp_json_encode( array( 'slug' => $cf->slug, 'prev' => $prev_val, 'new' => $new_val, ) ), 'date_created' => ( new DateTime() )->format( 'Y-m-d H:i:s' ), ) ); } } } } return $data; } /** * Set create ticket data for rest api request * * @param array $data - create ticket data array. * @param WP_REST_Request $request - rest request object. * @param array $custom_fields - custom field objects indexed by unique custom field types. * @return array */ public static function set_rest_ticket_data( $data, $request, $custom_fields ) { $current_user = WPSC_Current_User::$current_user; $tff = get_option( 'wpsc-tff' ); if ( isset( $custom_fields[ self::$slug ] ) ) { foreach ( $custom_fields[ self::$slug ] as $cf ) { if ( ! in_array( $cf->field, array( 'ticket', 'agentonly', 'customer' ) ) || ( $cf->field == 'customer' && ! isset( $tff[ $cf->slug ] ) ) ) { continue; } $date = WPSC_Functions::sanitize_date( sanitize_text_field( $request->get_param( $cf->slug ) ) ); if ( in_array( $cf->field, array( 'ticket', 'agentonly' ) ) ) { $data[ $cf->slug ] = $cf->field == 'ticket' && $date ? $date : self::get_default_value( $cf ); } else { $customer = new WPSC_Customer( $data['customer'] ); $format = 'Y-m-d H:i:s'; $date = $date ? DateTime::createFromFormat( $format, $date ) : ''; $existing_val = $customer->{$cf->slug}; $existing_val = $existing_val && is_object( $existing_val ) ? $existing_val->format( $format ) : ''; if ( $date && $date->format( $format ) != $existing_val ) { $customer->{$cf->slug} = $date; $customer->save(); // Set log for this change. WPSC_Log::insert( array( 'type' => 'customer', 'ref_id' => $customer->id, 'modified_by' => $current_user->customer->id, 'body' => wp_json_encode( array( 'slug' => $cf->slug, 'prev' => $existing_val, 'new' => $date->format( $format ), ) ), 'date_created' => ( new DateTime() )->format( 'Y-m-d H:i:s' ), ) ); } } } } return $data; } /** * Return slug string to be used in where condition of ticket model for this type of field * * @param WPSC_Custom_Field $cf - custom field object. * @return string */ public static function get_sql_slug( $cf ) { $join_char = in_array( $cf->field, array( 'ticket', 'agentonly' ) ) ? 't.' : 'c.'; return $join_char . $cf->slug; } /** * Return val field for meta query of this type of custom field * * @param array $condition - condition data. * @return mixed */ public static function get_meta_value( $condition ) { $operator = $condition['operator']; switch ( $operator ) { case '=': case '<': case '<=': case '>': case '>=': return $condition['operand_val_1']; case 'BETWEEN': if ( ! ( isset( $condition['operand_val_1'] ) && preg_match( '/^(\d{4})-\d{2}-(\d{2})$/', $condition['operand_val_1'] ) ) || ! ( isset( $condition['operand_val_2'] ) && preg_match( '/^(\d{4})-\d{2}-(\d{2})$/', $condition['operand_val_2'] ) ) ) { return false; } return array( 'operand_val_1' => $condition['operand_val_1'], 'operand_val_2' => $condition['operand_val_2'], ); } return false; } /** * Print generic input field for this type. * * @param WPSC_Custom_Field $cf - custom field object. * @param DateTime $date - optional. Input field will be printed with given value (if given). * @return void */ public static function print_cf_input( $cf, $date = '' ) { if ( $date && ! is_object( $date ) && $date != '0000-00-00 00:00:00' ) { $date = new DateTime( $date ); } $unique_id = uniqid( 'wpsc_' ); ?>
name ); ?>
extra_info ); if ( $extra_info ) : ?> extra_info ); ?>
slug ] ) ? sanitize_text_field( wp_unslash( $_POST[ $cf->slug ] ) ) : ''; // phpcs:ignore return $date && preg_match( '/\d{4}-\d{2}-\d{2}/', $date ) ? $date . ' 00:00:00' : ''; } /** * Print edit ticket custom field in individual ticket * * @param WPSC_Custom_Field $cf - custom field object. * @param WPSC_Ticket $ticket - ticket object. * @return void */ public static function print_edit_ticket_cf( $cf, $ticket ) { $unique_id = uniqid( 'wpsc_' ); ?>
name ); ?>
extra_info ); if ( $extra_info ) : ?> extra_info ); ?>
{$cf->slug} && is_object( $ticket->{$cf->slug} ) ? $ticket->{$cf->slug}->format( 'Y-m-d' ) : ''; $new = isset( $_POST[ $cf->slug ] ) ? sanitize_text_field( wp_unslash( $_POST[ $cf->slug ] ) ) : ''; // phpcs:ignore // Exit if there is no change. if ( $prev == $new ) { return $ticket; } // Change value. $ticket->{$cf->slug} = $new ? new DateTime( $new ) : ''; $ticket->save(); return $ticket; } /** * Modify ticket field value of this custom field type using rest api * * @param WPSC_Ticket $ticket - ticket object. * @param WPSC_Custom_Field $cf - custom field. * @param mixed $value - value to be set. * @return void */ public static function set_rest_edit_ticket_cf( $ticket, $cf, $value ) { $date = WPSC_Functions::sanitize_date( sanitize_text_field( $value ) ); $new = $date ? $date : ''; $prev = is_object( $ticket->{$cf->slug} ) ? $ticket->{$cf->slug}->format( 'Y-m-d H:i:s' ) : ''; if ( $prev != $new ) { $ticket->{$cf->slug} = $new; } } /** * Insert log thread for this custom field type change * * @param WPSC_Custom_Field $cf - current custom field of this type. * @param WPSC_Ticket $prev - ticket object before making any changes. * @param WPSC_Ticket $new - ticket object after making changes. * @param string $current_date - date string to be stored as create time. * @param int $customer_id - current user customer id for blame. * @return void */ public static function insert_ticket_log( $cf, $prev, $new, $current_date, $customer_id ) { // Exit if there is no change. if ( $prev->{$cf->slug} == $new->{$cf->slug} ) { return; } $prev_val = $prev->{$cf->slug} && is_object( $prev->{$cf->slug} ) ? $prev->{$cf->slug}->format( 'Y-m-d H:i:s' ) : ''; $new_val = $new->{$cf->slug} && is_object( $new->{$cf->slug} ) ? $new->{$cf->slug}->format( 'Y-m-d H:i:s' ) : ''; $thread = WPSC_Thread::insert( array( 'ticket' => $prev->id, 'customer' => $customer_id, 'type' => 'log', 'body' => wp_json_encode( array( 'slug' => $cf->slug, 'prev' => $prev_val, 'new' => $new_val, ) ), 'date_created' => $current_date, 'date_updated' => $current_date, ) ); } /** * Return data for this custom field while creating duplicate ticket * * @param WPSC_Custom_Field $cf - custom field object. * @param WPSC_Ticket $ticket - ticket object. * @return mixed */ public static function get_duplicate_ticket_data( $cf, $ticket ) { return $ticket->{$cf->slug} && is_object( $ticket->{$cf->slug} ) ? $ticket->{$cf->slug}->format( 'Y-m-d H:i:s' ) : ''; } /** * Print edit field for this type in edit customer info * * @param WPSC_Custom_field $cf - custom field object. * @param WPSC_Customer $customer - customer object. * @param array $tff - ticket form field data. * @return string */ public static function print_edit_customer_info( $cf, $customer, $tff ) { $unique_id = uniqid( 'wpsc_' ); $val = $customer->id && $customer->{$cf->slug} ? $customer->{$cf->slug} : ''; ob_start(); ?>
name ); ?>
extra_info ); ?>
default_value ? $cf->default_value[0] : ''; ?>
extra_info = isset( $_POST['extra_info'] ) ? sanitize_text_field( wp_unslash( $_POST['extra_info'] ) ) : ''; // phpcs:ignore } // default value. if ( in_array( 'default_value', $field_class::$allowed_properties ) ) { $default_value = isset( $_POST['default_value'] ) ? sanitize_text_field( wp_unslash( $_POST['default_value'] ) ) : ''; // phpcs:ignore $cf->default_value = $default_value ? array( $default_value ) : array(); } // auto fill. if ( in_array( 'is_auto_fill', $field_class::$allowed_properties ) ) { $cf->is_auto_fill = isset( $_POST['is_auto_fill'] ) ? sanitize_text_field( wp_unslash( $_POST['is_auto_fill'] ) ) : ''; // phpcs:ignore } // placeholder! if ( in_array( 'placeholder_text', $field_class::$allowed_properties ) ) { $cf->placeholder_text = isset( $_POST['placeholder_text'] ) ? sanitize_text_field( wp_unslash( $_POST['placeholder_text'] ) ) : ''; // phpcs:ignore } // date range. $cf->date_range = isset( $_POST['date_range'] ) ? sanitize_text_field( wp_unslash( $_POST['date_range'] ) ) : 'all'; // phpcs:ignore // date range in between. $cf->start_range = isset( $_POST['from-date-range'] ) ? new DateTime( sanitize_text_field( wp_unslash( $_POST['from-date-range'] ) ) ) : ''; // phpcs:ignore $cf->end_range = isset( $_POST['to-date-range'] ) && $cf->start_range ? new DateTime( sanitize_text_field( wp_unslash( $_POST['to-date-range'] ) ) ) : ''; //phpcs:ignore // date format. $cf->date_format = isset( $_POST['date_format'] ) ? sanitize_text_field( wp_unslash( $_POST['date_format'] ) ) : ''; // phpcs:ignore // personal info. if ( in_array( 'is_personal_info', $field_class::$allowed_properties ) ) { $cf->is_personal_info = isset( $_POST['is_personal_info'] ) ? intval( $_POST['is_personal_info'] ) : 0; // phpcs:ignore } // my-profile.. if ( in_array( 'allow_my_profile', $field_class::$allowed_properties ) ) { $cf->allow_my_profile = isset( $_POST['allow_my_profile'] ) ? intval( $_POST['allow_my_profile'] ) : 0; // phpcs:ignore } // ticket form.. if ( in_array( 'allow_ticket_form', $field_class::$allowed_properties ) ) { $cf->allow_ticket_form = isset( $_POST['allow_ticket_form'] ) ? intval( $_POST['allow_ticket_form'] ) : 0; // phpcs:ignore } // tl_width! if ( in_array( 'tl_width', $field_class::$allowed_properties ) ) { $tl_width = isset( $_POST['tl_width'] ) ? intval( $_POST['tl_width'] ) : 0; // phpcs:ignore $cf->tl_width = $tl_width ? $tl_width : 100; } // save! $cf->save(); } /** * Returns printable ticket value for custom field. Can be used in export tickets, replace macros etc. * * @param WPSC_Custom_Field $cf - custom field object. * @param WPSC_Ticket $ticket - ticket object. * @param string $module - module name. * @return string */ public static function get_ticket_field_val( $cf, $ticket, $module = '' ) { if ( ! is_object( $ticket->{$cf->slug} ) ) { return ''; } $gs = get_option( 'wpsc-gs-general' ); $format = $cf->date_format ? $cf->date_format : $gs['default-date-format']; $value = date_i18n( $format, $ticket->{$cf->slug}->getTimestamp(), false ); return apply_filters( 'wpsc_ticket_field_val_date', $value, $cf, $ticket, $module ); } /** * Print ticket value for given custom field on ticket list * * @param WPSC_Custom_Field $cf - custom field object. * @param WPSC_Ticket $ticket - ticket object. * @return void */ public static function print_tl_ticket_field_val( $cf, $ticket ) { echo esc_attr( self::get_ticket_field_val( $cf, $ticket ) ); } /** * Print ticket value for given custom field on widget * * @param WPSC_Custom_Field $cf - custom field object. * @param WPSC_Ticket $ticket - ticket object. * @return void */ public static function print_widget_ticket_field_val( $cf, $ticket ) { echo esc_attr( self::get_ticket_field_val( $cf, $ticket ) ); } /** * Returns printable customer value for custom field. Can be used in export tickets, replace macros etc. * * @param WPSC_Custom_Field $cf - custom field object. * @param WPSC_Customer $customer - customer object. * @return string */ public static function get_customer_field_val( $cf, $customer ) { if ( ! is_object( $customer->{$cf->slug} ) ) { return ''; } $gs = get_option( 'wpsc-gs-general' ); $format = $cf->date_format ? $cf->date_format : $gs['default-date-format']; return date_i18n( $format, $customer->{$cf->slug}->getTimestamp(), false ); } /** * Print customer value for given custom field on ticket list * * @param WPSC_Custom_Field $cf - custom field object. * @param WPSC_Customer $customer - customer object. * @return void */ public static function print_tl_customer_field_val( $cf, $customer ) { echo esc_attr( self::get_customer_field_val( $cf, $customer ) ); } /** * Print customer value for given custom field on widget * * @param WPSC_Custom_Field $cf - custom field object. * @param WPSC_Customer $customer - customer object. * @return void */ public static function print_widget_customer_field_val( $cf, $customer ) { echo esc_attr( self::get_customer_field_val( $cf, $customer ) ); } /** * Print given value for custom field * * @param WPSC_Custom_Field $cf - custom field object. * @param mixed $val - value to convert and print. * @return void */ public static function print_val( $cf, $val ) { if ( ! $val || $val == '0000-00-00 00:00:00' ) { esc_attr_e( 'None', 'supportcandy' ); return; } $gs = get_option( 'wpsc-gs-general' ); $format = $cf->date_format ? $cf->date_format : $gs['default-date-format']; $val = is_object( $val ) ? $val : new DateTime( $val ); echo esc_attr( date_i18n( $format, $val->getTimestamp(), false ) ); } /** * Return printable value for history log macro * * @param WPSC_Custom_Field $cf - custom field object. * @param mixed $val - value to convert and return. * @return string */ public static function get_history_log_val( $cf, $val ) { ob_start(); self::print_val( $cf, $val ); return ob_get_clean(); } /** * Print dashboard activity function * * @param WPSC_Custom_Field $cf - custom field object. * @param array $recent_logs - recent_logs object. * @param array $body - body object. * @param int $view - check if frontend. * @return string */ public static function print_activity( $cf, $recent_logs, $body, $view ) { $url = WPSC_Functions::get_ticket_url( $recent_logs->ticket->id, $view ); $gs = get_option( 'wpsc-gs-general' ); $format = $cf->date_format ? $cf->date_format : $gs['default-date-format']; $new_val = new DateTime( $body->new ); if ( $body->new ) { $log = date_i18n( $format, $new_val->getTimestamp() ); } else { $log = 'None'; } return esc_attr( $recent_logs->customer->name ) . ' updated the ' . esc_attr( $cf->name ) . ' value of #' . esc_attr( $recent_logs->ticket->id ) . ' to ' . esc_attr( $log ); } /** * Return given value for custom field * * @param WPSC_Custom_Field $cf - custom field object. * @param mixed $val - value to convert and print. * @return void */ public static function get_field_value( $cf, $val ) { if ( ! $val || $val == '0000-00-00 00:00:00' ) { esc_attr_e( 'None', 'supportcandy' ); return; } $gs = get_option( 'wpsc-gs-general' ); $format = $cf->date_format ? $cf->date_format : $gs['default-date-format']; $val = is_object( $val ) ? $val : new DateTime( $val ); return esc_attr( date_i18n( $format, $val->getTimestamp(), false ) ); } /** * Clear value of hidden fields * * @return void */ public static function js_clear_value_hidden_fields() { ?> case '': customField.find('input').first().val(''); break;