Server : Apache/2.4.18 (Ubuntu) System : Linux canvaswebdesign 3.13.0-71-generic #114-Ubuntu SMP Tue Dec 1 02:34:22 UTC 2015 x86_64 User : oppastar ( 1041) PHP Version : 7.0.33-0ubuntu0.16.04.15 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, Directory : /var/www/laciasmara.com/public_html/shop/application/controllers/ |
Upload File : |
<?php defined('BASEPATH') or exit('No direct script access allowed'); class SpinWheel extends Public_Controller { public function __construct() { parent::__construct(); $this->load->library('session'); $this->load->model('Spin_model'); $this->track_visitor(); } private function track_visitor() { // $session_tracking = $this->session->userdata('visitor_tracking'); $source = $this->determine_traffic_source(); // Generate tracking ID only if there is no existing session data $tracking_id = uniqid('track_'); // Prepare tracking data $tracking_data = array( 'tracking_id' => $tracking_id, 'source' => $source['utm_source'], 'medium' => $source['utm_medium'], 'campaign' => $source['utm_campaign'], 'ip_address' => $this->input->ip_address(), 'full_url' => current_url() ); // Set the tracking data in session $this->session->set_userdata('visitor_tracking', $tracking_data); // Only insert to database if the tracking_id is newly created $track_data = array( 'id' => $tracking_id, 'link_url' => $tracking_data['full_url'], 'source' => $tracking_data['source'], 'ip_address' => $tracking_data['ip_address'], 'user_agent' => $this->input->user_agent(), 'referer' => $this->input->server('HTTP_REFERER'), 'utm_source' => $tracking_data['source'], 'utm_medium' => $tracking_data['medium'], 'utm_campaign' => $tracking_data['campaign'], ); $this->db->insert('link_tracks', $track_data); } private function determine_traffic_source() { // Check UTM Parameters first $utm_source = $this->input->get('utm_source'); $utm_medium = $this->input->get('utm_medium'); $utm_campaign = $this->input->get('utm_campaign'); // Check HTTP Referer if UTM is not present $referer = $this->input->server('HTTP_REFERER'); $parsed_referer = $referer ? parse_url($referer) : null; // Initialize with default values $source = [ 'utm_source' => 'direct', 'utm_medium' => 'organic', 'utm_campaign' => 'organic' ]; // If UTM parameters exist, use them if ($utm_source) { $source['utm_source'] = $utm_source; $source['utm_medium'] = $utm_medium ?: 'unknown'; $source['utm_campaign'] = $utm_campaign ?: 'none'; } // If no UTM but referer exists, try to determine source from referer elseif ($parsed_referer) { $host = strtolower($parsed_referer['host']); // Check for common sources if (strpos($host, 'google') !== false) { $source['utm_source'] = 'google'; $source['utm_medium'] = 'organic'; } elseif (strpos($host, 'facebook.com') !== false) { $source['utm_source'] = 'facebook'; $source['utm_medium'] = 'social'; } elseif (strpos($host, 'instagram.com') !== false) { $source['utm_source'] = 'instagram'; $source['utm_medium'] = 'social'; } elseif (strpos($host, 't.co') !== false || strpos($host, 'twitter.com') !== false) { $source['utm_source'] = 'twitter'; $source['utm_medium'] = 'social'; } elseif (strpos($host, 'linkedin.com') !== false) { $source['utm_source'] = 'linkedin'; $source['utm_medium'] = 'social'; } else { $source['utm_source'] = $host; $source['utm_medium'] = 'organic'; } $source['utm_campaign'] = 'none'; } // If neither UTM nor referer, it's direct traffic else { $source['utm_source'] = 'direct'; $source['utm_medium'] = 'organic'; $source['utm_campaign'] = 'organic'; } // Store raw referer for debugging $source['raw_referer'] = $referer; return $source; } public function index() { $token = $this->input->get('token'); if ($token) { $valid_token = 'N1O4V5'; if ($token === $valid_token) { $this->session->set_userdata('access_token', $token); redirect('SpinWheel'); } else { show_error('Invalid token. Access denied.', 403); } } $access_token = $this->session->userdata('access_token'); if ($access_token) { $this->load->view('spin_wheel'); } else { show_error('No valid token found. Access denied.', 403); } } public function log_prize() { if ($this->input->is_ajax_request()) { $prize_name = $this->input->post('result'); if ($prize_name) { if ($this->Spin_model->is_ip_used($this->input->ip_address())) { echo json_encode(['status' => 'error', 'message' => 'Kamu sudah menggunakan kesempatan kamu.']); return; } if ($this->Spin_model->save_log($prize_name)) { echo json_encode(['status' => 'success', 'message' => 'Log saved successfully.']); } else { echo json_encode(['status' => 'error', 'message' => 'Failed to save log.']); } } else { echo json_encode(['status' => 'error', 'message' => 'Prize name is required.']); } } else { show_error('Unauthorized request', 403); } } }