HEX
Server: nginx/1.27.0
System: Linux 20d173156d2c 6.8.0-88-generic #89-Ubuntu SMP PREEMPT_DYNAMIC Sat Oct 11 01:02:46 UTC 2025 x86_64
User: www-data (33)
PHP: 8.1.29
Disabled: NONE
Upload Files
File: /var/www/html/wp-content/plugins/content-egg/application/ModuleUpdateVisit.php
<?php

namespace ContentEgg\application;

defined('\ABSPATH') || exit;

use ContentEgg\application\components\ModuleManager;
use ContentEgg\application\components\ContentManager;
use ContentEgg\application\admin\GeneralConfig;
use ContentEgg\application\vendor\CrawlerDetect\CrawlerDetect;

/**
 * ModuleUpdateVisit class file
 *
 * @author keywordrush.com <support@keywordrush.com>
 * @link https://www.keywordrush.com
 * @copyright Copyright &copy; 2025 keywordrush.com
 */
class ModuleUpdateVisit
{

    private static $instance = null;

    public static function getInstance()
    {
        if (self::$instance == null)
            self::$instance = new self;

        return self::$instance;
    }

    private function __construct()
    {
    }

    public function init()
    {
        if (defined('\WP_CLI') && \WP_CLI)
            return;

        if (GeneralConfig::getInstance()->option('filter_bots'))
        {
            $cd = new CrawlerDetect();
            if ($cd->isCrawler())
            {
                return;
            }
        }
        // exec before post layout
        \add_filter('template_redirect', array($this, 'update'), 10);
    }

    public function update()
    {
        if (!is_single() && !is_page())
            return;

        $this->updateByKeyword();
        $this->updateItems();
    }

    private function updateByKeyword()
    {
        global $post;

        if (empty($post))
            return;

        foreach (ModuleManager::getInstance()->getParsers(true) as $module)
        {
            $is_visit_update = in_array($module->config('update_mode'), array('visit', 'visit_cron'));
            $is_data_exists = ContentManager::isDataExists($post->ID, $module->getId());

            // parse data if not exists in any case
            if (!$is_visit_update && $is_data_exists)
                continue;

            $ttl = $module->config('ttl');
            if (!$ttl && $is_data_exists)
                continue;

            if (!ContentManager::getAutoupdateKeyword($post->ID, $module->getId()))
                continue;

            $last_update = (int) \get_post_meta($post->ID, ContentManager::META_PREFIX_LAST_BYKEYWORD_UPDATE . $module->getId(), true);
            if ($last_update && time() - $last_update < $ttl)
                continue;

            ContentManager::updateByKeyword($post->ID, $module->getId());
        }
    }

    private function updateItems()
    {
        global $post;

        if (empty($post))
            return;

        foreach (ModuleManager::getInstance()->getAffiliateParsers(true) as $module)
        {
            if (!in_array($module->config('update_mode'), array('visit', 'visit_cron')))
                continue;

            if (!$module->isItemsUpdateAvailable())
                continue;

            if (!$ttl_items = $module->config('ttl_items'))
                continue;

            $last_items_update = (int) \get_post_meta($post->ID, ContentManager::META_PREFIX_LAST_ITEMS_UPDATE . $module->getId(), true);
            if (!$last_items_update || time() - $last_items_update < $ttl_items)
                continue;
            ContentManager::updateItems($post->ID, $module->getId());
        }
    }
}