static function wpv_render_custom_field_options( $args, $view_settings = array() ) { global $WP_Views_fapi; $compare = array( '=' => __( 'equal to', 'wpv-views' ), '!=' => __( 'different from', 'wpv-views' ), '>' => __( 'greater than', 'wpv-views' ), '>=' => __( 'greater than or equal', 'wpv-views' ), '<' => __( 'lower than', 'wpv-views' ), '<=' => __( 'lower than or equal', 'wpv-views' ), 'LIKE' => __( 'like', 'wpv-views' ), 'NOT LIKE' => __( 'not like', 'wpv-views' ), 'IN' => __( 'in', 'wpv-views' ), 'NOT IN' => __( 'not in', 'wpv-views' ), 'BETWEEN' => __( 'between', 'wpv-views' ), 'NOT BETWEEN' => __( 'not between', 'wpv-views' ) ); $types = array( 'CHAR' => __( 'string', 'wpv-views' ), 'NUMERIC' => __( 'number', 'wpv-views' ), 'BINARY' => __( 'boolean', 'wpv-views' ), 'DECIMAL' => 'DECIMAL', 'DATE' => 'DATE', 'DATETIME' => 'DATETIME', 'TIME' => 'TIME', 'SIGNED' => 'SIGNED', 'UNSIGNED' => 'UNSIGNED' ); $options = array( __( 'Constant', 'wpv-views' ) => 'constant', __( 'URL parameter', 'wpv-views' ) => 'url', __( 'Shortcode attribute', 'wpv-views' ) => 'attribute', 'NOW' => 'now', 'TODAY' => 'today', 'FUTURE_DAY' => 'future_day', 'PAST_DAY' => 'past_day', 'THIS_MONTH' => 'this_month', 'FUTURE_MONTH' => 'future_month', 'PAST_MONTH' => 'past_month', 'THIS_YEAR' => 'this_year', 'FUTURE_YEAR' => 'future_year', 'PAST_YEAR' => 'past_year', 'SECONDS_FROM_NOW' => 'seconds_from_now', 'MONTHS_FROM_NOW' => 'months_from_now', 'YEARS_FROM_NOW' => 'years_from_now', 'DATE' => 'date' ); $options_with_framework = array( __( 'Constant', 'wpv-views' ) => 'constant', __( 'URL parameter', 'wpv-views' ) => 'url', __( 'Shortcode attribute', 'wpv-views' ) => 'attribute', __( 'Framework value', 'wpv-views' ) => 'framework', 'NOW' => 'now', 'TODAY' => 'today', 'FUTURE_DAY' => 'future_day', 'PAST_DAY' => 'past_day', 'THIS_MONTH' => 'this_month', 'FUTURE_MONTH' => 'future_month', 'PAST_MONTH' => 'past_month', 'THIS_YEAR' => 'this_year', 'FUTURE_YEAR' => 'future_year', 'PAST_YEAR' => 'past_year', 'SECONDS_FROM_NOW' => 'seconds_from_now', 'MONTHS_FROM_NOW' => 'months_from_now', 'YEARS_FROM_NOW' => 'years_from_now', 'DATE' => 'date' ); $options_with_framework_broken = array( __( 'Select one option...', 'wpv-views' ) => '', __( 'Constant', 'wpv-views' ) => 'constant', __( 'URL parameter', 'wpv-views' ) => 'url', __( 'Shortcode attribute', 'wpv-views' ) => 'attribute', 'NOW' => 'now', 'TODAY' => 'today', 'FUTURE_DAY' => 'future_day', 'PAST_DAY' => 'past_day', 'THIS_MONTH' => 'this_month', 'FUTURE_MONTH' => 'future_month', 'PAST_MONTH' => 'past_month', 'THIS_YEAR' => 'this_year', 'FUTURE_YEAR' => 'future_year', 'PAST_YEAR' => 'past_year', 'SECONDS_FROM_NOW' => 'seconds_from_now', 'MONTHS_FROM_NOW' => 'months_from_now', 'YEARS_FROM_NOW' => 'years_from_now', 'DATE' => 'date' ); $fw_key_options = array(); $fw_key_options = apply_filters( 'wpv_filter_extend_framework_options_for_custom_field', $fw_key_options ); $name_sanitized = str_replace( ' ', '_', $args['name'] ); if ( isset( $view_settings['custom-field-' . $name_sanitized . '_value'] ) ) { $value = $view_settings['custom-field-' . $name_sanitized . '_value']; } else { $value = ''; } $parts = array( $value ); $value = WPV_Filter_Item::encode_date( $value ); if ( isset( $view_settings['custom-field-' . $name_sanitized . '_compare'] ) ) { $compare_selected = $view_settings['custom-field-' . $name_sanitized . '_compare']; } else { $compare_selected = '='; } if ( isset( $view_settings['custom-field-' . $name_sanitized . '_type'] ) ) { $type_selected = $view_settings['custom-field-' . $name_sanitized . '_type']; } else { $type_selected = 'CHAR'; } $name = 'custom-field-' . $name_sanitized . '%s'; switch ( $compare_selected ) { case 'BETWEEN': case 'NOT BETWEEN': $parts = explode( ',', $value ); // Make sure we have only 2 items while ( count( $parts ) < 2 ) { $parts[] = ''; } while ( count( $parts ) > 2 ) { array_pop($parts); } break; case 'IN': case 'NOT IN': $parts = explode( ',', $value ); if ( count( $parts ) < 1 ) { $parts = array( $value ); } break; } $value = WPV_Filter_Item::unencode_date( $value ); ?> <?php echo sprintf( __( 'The custom field %s is a', 'wpv-views' ), $args['nicename'] ); ?> <select name="<?php echo esc_attr( sprintf( $name, '_type' ) ); ?>" class="js-wpv-custom-field-type-select" autocomplete="off"> <?php foreach ( $types as $type_key => $type_val ) { ?> <option value="<?php echo esc_attr( $type_key ); ?>" <?php selected( $type_selected, $type_key ); ?>><?php echo $type_val; ?></option> <?php } ?> </select> <?php _e( 'that is', 'wpv-views' ); ?> <select name="<?php echo esc_attr( sprintf( $name, '_compare' ) ); ?>" class="wpv_custom_field_compare_select js-wpv-custom-field-compare-select" autocomplete="off"> <?php foreach ( $compare as $com_key => $com_val ) { ?> <option value="<?php echo esc_attr( $com_key ); ?>" <?php selected( $compare_selected, $com_key ); ?>><?php echo $com_val; ?></option> <?php } ?> </select> <div class="wpv-filter-multiple-element-options-mode js-wpv-custom-field-values"> <input type="hidden" class="js-wpv-custom-field-values-real" name="<?php echo esc_attr( sprintf( $name, '_value' ) ); ?>" value="<?php echo esc_attr( $value ); ?>" autocomplete="off" /> <?php foreach ( $parts as $i => $value_part ) { ?> <div class="wpv_custom_field_value_div js-wpv-custom-field-value-div"> <?php _e( 'the', 'wpv-views' ); ?> <?php $function_value = WPV_Filter_Item::get_custom_filter_function_and_value( $value_part ); $selected_function = $function_value['function']; $options_to_pass = $options; if ( $WP_Views_fapi->framework_valid ) { $options_to_pass = $options_with_framework; } else if ( $selected_function == 'framework' ) { $options_to_pass = $options_with_framework_broken; } echo wpv_form_control( array( 'field' => array( '#name' => 'wpv_custom_field_compare_mode-' . $name_sanitized . $i , '#type' => 'select', '#attributes' => array( 'style' => '', 'class' => 'wpv_custom_field_compare_mode js-wpv-custom-field-compare-mode js-wpv-element-not-serialize js-wpv-filter-validate', 'data-type' => 'select', 'autocomplete' => 'off' ), '#inline' => true, '#options' => $options_to_pass, '#default_value' => $selected_function, ) ) ); $validate_class = ''; $validate_type = 'none'; $hidden_input = ''; $hidden_date = ''; $hidden_framework_select = ''; switch ( $selected_function ) { case 'constant': case 'future_day': case 'past_day': case 'future_month': case 'past_month': case 'future_year': case 'past_year': case 'seconds_from_now': case 'months_from_now': case 'years_from_now': $hidden_date = ' style="display:none"'; $hidden_framework_select = ' style="display:none"'; break; case 'url': $validate_class = 'js-wpv-filter-validate'; $validate_type = 'url'; $hidden_date = ' style="display:none"'; $hidden_framework_select = ' style="display:none"'; break; case 'attribute': $validate_class = 'js-wpv-filter-validate'; $validate_type = 'shortcode'; $hidden_date = ' style="display:none"'; $hidden_framework_select = ' style="display:none"'; break; case 'date': $hidden_input = ' style="display:none"'; $hidden_framework_select = ' style="display:none"'; break; case 'framework': $hidden_input = ' style="display:none"'; $hidden_date = ' style="display:none"'; break; default: $hidden_input = ' style="display:none"'; $hidden_date = ' style="display:none"'; $hidden_framework_select = ' style="display:none"'; break; } ?> <span class="js-wpv-custom-field-value-combo-input" <?php echo $hidden_input; ?>> <input type="text" class="js-wpv-custom-field-value-text js-wpv-element-not-serialize <?php echo $validate_class; ?>" value="<?php echo esc_attr( $function_value['value'] ); ?>" data-class="js-wpv-custom-field-<?php echo esc_attr( $args['name'] ); ?>-value-text" data-type="<?php echo esc_attr( $validate_type ); ?>" name="wpv-custom-field-<?php echo esc_attr( $args['name'] ); ?>-value-text" autocomplete="off" /> </span> <span class="js-wpv-custom-field-value-combo-framework" <?php echo $hidden_framework_select; ?>> <?php if ( $WP_Views_fapi->framework_valid ) { ?> <select class="js-wpv-custom-field-framework-value js-wpv-custom-field-framework-value-text js-wpv-element-not-serialize" name="wpv-custom-field-<?php echo esc_attr( $args['name'] ); ?>-framework-value-text" autocomplete="off"> <option value=""><?php _e( 'Select a key', 'wpv-views' ); ?></option> <?php foreach ( $fw_key_options as $index => $value ) { ?> <option value="<?php echo esc_attr( $index ); ?>" <?php selected( $function_value['value'], $index ); ?>><?php echo $value; ?></option> <?php } ?> </select> <?php } else { ?> <span class="wpv-combo"> <input type="hidden" class="js-wpv-custom-field-framework-value js-wpv-custom-field-framework-value-text js-wpv-element-not-serialize" value="" autocomplete="off" /> <?php $WP_Views_fapi->framework_missing_message_for_filters( false, false ); ?> </span> <?php } ?> </span> <span class="js-wpv-custom-field-value-combo-date" <?php echo $hidden_date; ?>> <?php WPV_Filter_Item::date_field_controls( $function_value['function'], $function_value['value'] ); ?> </span> <button class="button-secondary js-wpv-custom-field-remove-value"><i class="icon-remove"></i> <?php echo __( 'Remove', 'wpv-views' ); ?></button> </div> <?php } ?> <button class="button button-secondary js-wpv-custom-field-add-value" style="margin-top:10px;"><i class="icon-plus"></i> <?php echo __( 'Add another value', 'wpv-views' ); ?></button> </div> <?php }