|
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);
}
}
}