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.
80 lines
2.4 KiB
PHTML
80 lines
2.4 KiB
PHTML
8 months ago
|
<?php
|
||
|
/**
|
||
|
* Number of Views condition logic swiftly crafted.
|
||
|
*
|
||
|
* @since 4.11.0
|
||
|
*
|
||
|
* @package Divi
|
||
|
* @sub-package Builder
|
||
|
*/
|
||
|
|
||
|
namespace Module\Field\DisplayConditions;
|
||
|
|
||
|
/**
|
||
|
* Number of Views Condition Trait.
|
||
|
*/
|
||
|
trait NumberOfViewsCondition {
|
||
|
|
||
|
/**
|
||
|
* Processes "Number of Views" condition.
|
||
|
*
|
||
|
* @since 4.11.0
|
||
|
*
|
||
|
* @param array $condition_id Condition ID.
|
||
|
* @param array $condition_settings Containing all settings of the condition.
|
||
|
*
|
||
|
* @return boolean Condition output.
|
||
|
*/
|
||
|
protected function _process_number_of_views_condition( $condition_id, $condition_settings ) {
|
||
|
|
||
|
if ( ! isset( $_COOKIE['divi_module_views'] ) ) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
// Get condition's settings.
|
||
|
$number_of_views = isset( $condition_settings['numberOfViews'] ) ? $condition_settings['numberOfViews'] : '0';
|
||
|
$cookie_array = [];
|
||
|
$visit_count = 0;
|
||
|
$current_datetime = current_datetime();
|
||
|
$cookie_array = json_decode( base64_decode( $_COOKIE['divi_module_views'] ), true ); // phpcs:ignore ET.Sniffs.ValidatedSanitizedInput, WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_decode -- Cookie is not stored or displayed therefore XSS safe, The returned data is an array and necessary validation checks are performed.
|
||
|
|
||
|
if ( ! is_array( $cookie_array ) ) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
// Logic evaluation.
|
||
|
$col = array_column( $cookie_array, 'id' );
|
||
|
$is_condition_set_in_cookie = array_search( $condition_id, $col, true ) !== false;
|
||
|
|
||
|
if ( ! $is_condition_set_in_cookie ) {
|
||
|
// Display module if condition is not set in Cookie yet.
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
$is_reset_after_duration_on = 'on' === $condition_settings['resetAfterDuration'] ? true : false;
|
||
|
|
||
|
if ( $is_reset_after_duration_on ) {
|
||
|
$first_visit_timestamp = $cookie_array[ $condition_id ]['first_visit_timestamp'];
|
||
|
$display_again_after = $condition_settings['displayAgainAfter'] . ' ' . $condition_settings['displayAgainAfterUnit'];
|
||
|
$first_visit_datetime = $current_datetime->setTimestamp( $first_visit_timestamp );
|
||
|
$display_again_datetime = $first_visit_datetime->modify( $display_again_after );
|
||
|
if ( $current_datetime > $display_again_datetime ) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$visit_count = $cookie_array[ $condition_id ]['visit_count'];
|
||
|
|
||
|
if ( (int) $visit_count >= (int) $number_of_views ) {
|
||
|
$is_displayable = false;
|
||
|
} else {
|
||
|
$is_displayable = true;
|
||
|
}
|
||
|
|
||
|
// Evaluation output.
|
||
|
return $is_displayable;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|