コード例 #1
0
	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
	}