Current File : /home/resuelf/www/wp-content/plugins/nitropack/classes/Integration/Plugin/GeoTargetingWP.php |
<?php
namespace NitroPack\Integration\Plugin;
class GeoTargetingWP {
const STAGE = "very_early";
const allGeoWpCookies = ['geot_rocket_country', 'geot_rocket_state', 'geot_rocket_city'];
const defaultVariationCookies = ['geot_rocket_country'];
private $printedCookies = [];
public static function isActive() {
return defined("GEOWP_VERSION");
}
public function init($stage) {
$siteConfig = get_nitropack()->getSiteConfig();
$geotSettings = null;
if (empty($siteConfig["isGeoTargetingWPActive"])) {
return true;
}
// no need for variation cookies with GEOWP if using Ajax mode
if (function_exists( 'geot_settings' )) {
$geotSettings = geot_settings();
} elseif (function_exists('get_option')) {
$geotSettings = apply_filters( 'geot/settings_page/opts', get_option( 'geot_settings' ) );
}
if (!empty($geotSettings) && !empty($geotSettings['ajax_mode'])) {
return true;
}
// enable geot cookies
add_filter( 'geot/enable_cookies', '__return_true');
// require geot cookies for serving cache
add_filter("nitropack_passes_cookie_requirements", [$this, "hasGeoTargetingWpCookies"]);
// serve cache after geowp has added geot cookies
add_action('init', function() {
nitropack_handle_request('geotargetingwp');
}, 16);
add_action('np_set_cookie_filter', function() {
\NitroPack\SDK\NitroPack::addCookieFilter([$this, "filterCookies"]);
});
return true;
}
public static function getCustomVariationCookies() {
$enabledCookies = self::defaultVariationCookies;
// apply_filter() is unavailable at stage 'very_early'
// $enabledCookies = apply_filter("nitropack_geotargetingwp_enabled_cookies", self::defaultVariationCookies);
return array_intersect(self::allGeoWpCookies, $enabledCookies);
}
public static function configureVariationCookies() {
$siteConfig = get_nitropack()->getSiteConfig();
if (empty($siteConfig["isGeoTargetingWPActive"])) {
removeVariationCookies(self::allGeoWpCookies);
return true;
}
// standard cookie integration
initVariationCookies(self::getCustomVariationCookies());
}
public function hasGeoTargetingWpCookies($currentState) {
$allCookies = array_merge($_COOKIE, getNewCookies());
$neededCookies = self::getCustomVariationCookies();
foreach($neededCookies as $c) {
if (!empty($allCookies[$c])) {
// Needed so reverse proxies don't end up caching these pages.
if (!in_array($c, $this->printedCookies)) {
$val = $allCookies[$c];
if (is_array($val)) {
$val = end($val);
}
setcookie($c, $val, time() + 86000);
$this->printedCookies[] = $c;
}
$neededCookies = array_diff($neededCookies, [$c]);
}
}
if (!empty($neededCookies)) {
return false;
}
return $currentState;
}
public function filterCookies(&$cookies) {
foreach (self::getCustomVariationCookies() as $cookieName) {
$newlySetCookie = getNewCookie($cookieName);
if (empty($_COOKIE[$cookieName]) && !empty($newlySetCookie)) {
$cookies[$cookieName] = $newlySetCookie;
}
}
}
}