2021-12-07 11:08:05 +00:00
< ? php
/**
* Page Visit Condition logic swiftly crafted .
*
* @ since 4.11 . 0
*
* @ package Divi
* @ sub - package Builder
*/
namespace Module\Field\DisplayConditions ;
/**
* Page Visit Condition Trait .
*/
trait PageVisitCondition {
/**
* Processes " Page Visit " condition .
*
* @ since 4.11 . 0
*
* @ param array $condition_settings Containing all settings of the condition .
*
* @ return boolean Condition output .
*/
protected function _process_page_visit_condition ( $condition_settings ) {
2021-12-20 18:06:11 +00:00
// Checks for additional display rule for compatibility with Conditional Display older versions which didn't use `displayRule` key.
$legacy_display_rule = isset ( $condition_settings [ 'pageVisitDisplay' ] ) ? $condition_settings [ 'pageVisitDisplay' ] : 'hasVisitedSpecificPage' ;
$display_rule = isset ( $condition_settings [ 'displayRule' ] ) ? $condition_settings [ 'displayRule' ] : $legacy_display_rule ;
2021-12-07 11:08:05 +00:00
$pages_raw = isset ( $condition_settings [ 'pages' ] ) ? $condition_settings [ 'pages' ] : [];
$pages_ids = array_map (
function ( $item ) {
return isset ( $item [ 'value' ] ) ? ( int ) $item [ 'value' ] : '' ;
},
$pages_raw
);
$has_visited_specific_page = false ;
2021-12-20 18:06:11 +00:00
$cookie = [];
2021-12-07 11:08:05 +00:00
if ( isset ( $_COOKIE [ 'divi_post_visit' ] ) ) {
// phpcs:ignore ET.Sniffs.ValidatedSanitizedInput, WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_decode -- Cookie is not stored or displayed therefore XSS safe, base64_decode returned data is an array and necessary validation checks are performed.
2021-12-20 18:06:11 +00:00
$cookie = json_decode ( base64_decode ( $_COOKIE [ 'divi_post_visit' ] ), true );
}
if ( $cookie && is_array ( $cookie ) ) {
2021-12-07 11:08:05 +00:00
$col = array_column ( $cookie , 'id' );
$has_visited_specific_page = array_intersect ( $pages_ids , $col ) ? true : false ;
}
$should_display = $has_visited_specific_page ;
return ( 'hasVisitedSpecificPage' === $display_rule ) ? $should_display : ! $should_display ;
}
}