===== PART 10/12 ===== $user_referred_by->referral_earnings = price_database_format($user_referred_by->referral_earnings + $referral_value); $this->Links->Users->save($user_referred_by); $referral_id = $user_update->referred_by; $referral_earn = $referral_value; } } } $country = $this->Links->Statistics->get_country($cookie['ip']); $statistic = $this->Links->Statistics->newEntity(); $statistic->link_id = $link->id; $statistic->user_id = $link->user_id; $statistic->ad_type = $ad_type; $statistic->campaign_id = $data['ci']; $statistic->campaign_user_id = $data['cui']; $statistic->campaign_item_id = $data['cii']; $statistic->ip = $cookie['ip']; $statistic->country = $country; $statistic->owner_earn = price_database_format($owner_earn - $referral_earn); $statistic->publisher_earn = price_database_format($publisher_earn); $statistic->referral_id = $referral_id; $statistic->referral_earn = price_database_format($referral_earn); $statistic->referer_domain = (parse_url($referer_url, PHP_URL_HOST) ?: 'Direct'); $statistic->referer = $referer_url; $statistic->user_agent = env('HTTP_USER_AGENT'); $statistic->reason = 1; $this->Links->Statistics->save($statistic); if ($data['mode'] === 'campaign') { /** * Update campaign item views and weight */ $campaign_item_update = $CampaignItems->newEntity(); $campaign_item_update->id = $campaign_item['id']; $campaign_item_update->views = $campaign_item['views'] + 1; $campaign_item_update->weight = (($campaign_item['views'] + 1) / ($campaign_item['purchase'] * 1000)) * 100; $CampaignItems->save($campaign_item_update); /** * Finish Campaign */ if ($campaign_item_update->weight >= 100) { $campaign_weight_items = $CampaignItems->find() ->where([ 'campaign_id' => $data['ci'], 'weight <' => 100, ]) ->count(); if ($campaign_weight_items === 0) { $Campaigns = TableRegistry::getTableLocator()->get('Campaigns'); $campaign_complete = $Campaigns->newEntity(); $campaign_complete->id = $data['ci']; $campaign_complete->status = 4; $Campaigns->save($campaign_complete); } } } // Update link hits $this->updateLinkHits($link); $content = [ 'status' => 'success', //'message' => 'Go With earning :)', 'message' => '', 'url' => $link->url, ]; return $content; } protected function addNormalStatisticEntry($link, $ad_type, $data, $ip, $reason = 0) { if ((bool)get_option('store_only_paid_clicks_statistics', 0)) { return; } $referer_url = $this->getRefererCookie($link->alias); if (!$ip) { $ip = get_ip(); } if (empty($data['country'])) { $data['country'] = $this->Links->Statistics->get_country(get_ip()); } $statistic = $this->Links->Statistics->newEntity(); $statistic->link_id = $link->id; $statistic->user_id = $link->user_id; $statistic->ad_type = $ad_type; $statistic->campaign_id = $data['ci']; $statistic->campaign_user_id = $data['cui']; $statistic->campaign_item_id = $data['cii']; $statistic->ip = $ip; $statistic->country = $data['country']; $statistic->owner_earn = 0; $statistic->publisher_earn = 0; $statistic->referer_domain = (parse_url($referer_url, PHP_URL_HOST) ?: 'Direct'); $statistic->referer = $referer_url; $statistic->user_agent = env('HTTP_USER_AGENT'); $statistic->reason = $reason; $this->Links->Statistics->save($statistic); } protected function isRefererBlocked($referer_url) { $domains = explode(',', get_option('block_referers_domains')); $domains = array_map('trim', $domains); $domains = array_map('strtolower', $domains); $domains = array_filter($domains); if (empty($domains)) { return false; } $url_main_domain = strtolower(parse_url($referer_url, PHP_URL_HOST)); if (in_array($url_main_domain, $domains)) { return true; } $domains = array_filter($domains, function ($value) { return substr($value, 0, 2) === "*."; }); if (empty($domains)) { return false; } $domains = array_map(function ($value) { return substr($value, 1); }, $domains); foreach ($domains as $domain) { if (preg_match("/" . preg_quote($domain, '/') . "$/", $url_main_domain)) { return true; } } return false; } protected function setVisitorCookie() { $cookie = $this->Cookie->read('app_visitor'); if (isset($cookie)) { return true; } $cookie_data = [ 'ip' => get_ip(), 'date' => (new Time())->toDateTimeString(), ]; $this->Cookie->configKey('app_visitor', [ 'expires' => '+1 day', 'httpOnly' => true, ]); $this->Cookie->write('app_visitor', $cookie_data); return true; } /** * @param \App\Model\Entity\Link $link * @return null */ protected function updateLinkHits($link = null) { if (!$link) { return null; } $link->hits += 1; $link->last_a