===== PART 4/12 ===== } return $referer_url; } protected function getPaidAds($ad_type, $traffic_source, $country, $alias = null, $force_new = false) { $paidAds = new \stdClass(); if (get_option('earning_mode', 'campaign') === 'simple') { $prices = []; if ($ad_type === 1) { $prices = get_option('payout_rates_interstitial', []); $paidAds->website_url = get_option('interstitial_ad_url', ''); } if ($ad_type === 2) { $prices = get_option('payout_rates_banner', []); $paidAds->banner_size = ''; $paidAds->banner_code = ''; } if ($ad_type === 3) { $prices = get_option('payout_rates_popup', []); $paidAds->website_url = get_option('popup_ad_url', ''); } if ($ad_type === 4) { $prices = get_option('payout_rates_traffic', []); $paidAds->website_url = ''; } $publisher_price = 0; if (!empty($prices[$country][$traffic_source])) { $publisher_price = $prices[$country][$traffic_source]; } elseif (!empty($prices['all'][$traffic_source])) { $publisher_price = $prices['all'][$traffic_source]; } $paidAds->mode = 'simple'; $paidAds->advertiser_price = 0; $paidAds->publisher_price = $publisher_price; $paidAds->ci = 0; $paidAds->cui = 0; $paidAds->cii = 0; return $paidAds; } // Check if we have a saved campaign in session and force_new is not set $session_key = 'campaign_' . $alias . '_' . $ad_type; if (!$force_new && $alias && isset($_SESSION[$session_key])) { $saved_cii = $_SESSION[$session_key]; // Try to load the saved campaign $CampaignItems = TableRegistry::getTableLocator()->get('CampaignItems'); $campaign_item = $CampaignItems->find() ->contain(['Campaigns']) ->where([ 'CampaignItems.id' => $saved_cii, 'CampaignItems.weight <=' => 100, 'CampaignItems.views < (CampaignItems.purchase * 1000)', 'Campaigns.status' => 1, ]) ->first(); // Validate saved campaign against schedule and limits if ($campaign_item) { $campaign = $campaign_item->campaign; $is_valid = true; $current_ip = get_ip(); $time_zone = get_option('timezone', 'UTC'); $now = Time::now($time_zone); // Check start_date if (!empty($campaign->start_date)) { $start_date = $campaign->start_date->timezone($time_zone); if ($now < $start_date) { $is_valid = false; } } // Check end_date if ($is_valid && !empty($campaign->end_date)) { $end_date = $campaign->end_date->timezone($time_zone); if ($now > $end_date) { $is_valid = false; } } // Check daily_limit (only for traffic campaigns) if ($is_valid && $ad_type == 4 && !empty($campaign->daily_limit) && $campaign->daily_limit > 0) { $Statistics = TableRegistry::getTableLocator()->get('Statistics'); // Get today's start and end in local timezone, then convert to UTC for database query $today_start_local = Time::now($time_zone)->startOfDay(); $today_end_local = Time::now($time_zone)->endOfDay(); // Convert to UTC (database stores in UTC) $today_start_utc = $today_start_local->timezone('UTC')->format('Y-m-d H:i:s'); $today_end_utc = $today_end_local->timezone('UTC')->format('Y-m-d H:i:s'); $today_count = $Statistics->find() ->where([ 'campaign_id' => $campaign->id, 'created >=' => $today_start_utc, 'created <=' => $today_end_utc, ]) ->count(); if ($today_count >= $campaign->daily_limit) { $is_valid = false; } } // Check ip_limit (only for traffic campaigns - count from start of today) if ($is_valid && $ad_type == 4 && !empty($campaign->ip_limit) && $campaign->ip_limit > 0) { $Statistics = TableRegistry::getTableLocator()->get('Statistics'); // Count from start of today (same logic as daily_limit) $today_start_local = Time::now($time_zone)->startOfDay(); $today_start_utc = $today_start_local->timezone('UTC')->format('Y-m-d H:i:s'); $ip_count = $Statistics->find() ->where([ 'campaign_id' => $campaign->id, 'ip' => $current_ip, 'created >=' => $today_start_utc, ]) ->count(); if ($ip_count >= $campaign->ip_limit) { $is_valid = false; } } // If saved campaign is still valid, use it if ($is_valid) { $paidAds->mode = 'campaign'; $paidAds->adver