You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
3.9 KiB
PHP
101 lines
3.9 KiB
PHP
<?php
|
|
/**
|
|
* URL Parameter Condition logic swiftly crafted.
|
|
*
|
|
* @since 4.14.3
|
|
*
|
|
* @package Divi
|
|
* @sub-package Builder
|
|
*/
|
|
|
|
namespace Module\Field\DisplayConditions;
|
|
|
|
/**
|
|
* URL Parameter Condition Trait.
|
|
*/
|
|
trait UrlParameterCondition {
|
|
|
|
/**
|
|
* Processes "URL Parameter" condition.
|
|
*
|
|
* @since 4.14.3
|
|
*
|
|
* @param array $condition_settings The Condition settings containing:
|
|
* 'displayRule' => string,
|
|
* 'selectUrlParameter' => string,
|
|
* 'urlParameterName' => string,
|
|
* 'urlParameterValue' => string.
|
|
*
|
|
* @return boolean Returns `true` if the condition evaluation is true, `false` otherwise.
|
|
*/
|
|
protected function _process_url_parameter_condition( $condition_settings ) {
|
|
$display_rule = isset( $condition_settings['displayRule'] ) ? $condition_settings['displayRule'] : 'equals';
|
|
$select_url_parameter = isset( $condition_settings['selectUrlParameter'] ) ? $condition_settings['selectUrlParameter'] : 'specificUrlParameter';
|
|
$url_parameter_name = isset( $condition_settings['urlParameterName'] ) ? (string) $condition_settings['urlParameterName'] : '';
|
|
$url_parameter_value = isset( $condition_settings['urlParameterValue'] ) ? (string) $condition_settings['urlParameterValue'] : '';
|
|
|
|
$get_url_parameter = isset( $_GET[ $url_parameter_name ] ) ? sanitize_text_field( $_GET[ $url_parameter_name ] ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- No need to use nonce as there is no form processing.
|
|
$is_url_parameter_set = isset( $_GET[ $url_parameter_name ] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- No need to use nonce as there is no form processing.
|
|
|
|
if ( 'anyUrlParameter' === $select_url_parameter ) {
|
|
$parameter_values = $this->_get_all_parameter_values();
|
|
$output = [
|
|
'equals' => count( $parameter_values ) > 0 && array_intersect( $parameter_values, (array) $url_parameter_value ),
|
|
'exist' => count( $parameter_values ) > 0,
|
|
'doesNotExist' => count( $parameter_values ) === 0,
|
|
'doesNotEqual' => count( $parameter_values ) > 0 && ! array_intersect( $parameter_values, (array) $url_parameter_value ),
|
|
'contains' => count( $parameter_values ) > 0 && $this->_array_contains_string( $parameter_values, $url_parameter_value ),
|
|
'doesNotContain' => count( $parameter_values ) > 0 && ! $this->_array_contains_string( $parameter_values, $url_parameter_value ),
|
|
];
|
|
} else {
|
|
$output = [
|
|
'equals' => $is_url_parameter_set && $get_url_parameter === $url_parameter_value,
|
|
'exist' => $is_url_parameter_set,
|
|
'doesNotExist' => ! $is_url_parameter_set,
|
|
'doesNotEqual' => $is_url_parameter_set && $get_url_parameter !== $url_parameter_value,
|
|
'contains' => $is_url_parameter_set && strpos( $get_url_parameter, $url_parameter_value ) !== false,
|
|
'doesNotContain' => $is_url_parameter_set && strpos( $get_url_parameter, $url_parameter_value ) === false,
|
|
];
|
|
}
|
|
|
|
return isset( $output[ $display_rule ] ) ? $output[ $display_rule ] : false;
|
|
}
|
|
|
|
/**
|
|
* Returns all parameter values.
|
|
*
|
|
* @since 4.14.3
|
|
*
|
|
* @return array
|
|
*/
|
|
protected function _get_all_parameter_values() {
|
|
return array_map(
|
|
function( $value ) {
|
|
return $value;
|
|
},
|
|
$_GET // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- No need to use nonce.
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Checks if `$haystack` items contain `$needle` in their values.
|
|
*
|
|
* @since 4.14.3
|
|
*
|
|
* @param array $haystack The array to search in.
|
|
* @param string $needle The string needle to search for.
|
|
*
|
|
* @return boolean
|
|
*/
|
|
protected function _array_contains_string( $haystack, $needle ) {
|
|
$filtered_array = array_filter(
|
|
$haystack,
|
|
function( $value ) use ( $needle ) {
|
|
return strpos( $value, $needle ) !== false;
|
|
}
|
|
);
|
|
return count( $filtered_array ) > 0 ? true : false;
|
|
}
|
|
|
|
}
|