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 :  /proc/self/root/var/www/laciasmara.com/public_html/shop/application/controllers/admin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

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

class Badge extends Admin_Controller
{
    function __construct()
    {

        parent::__construct();
        $this->load->model('product_m');
        $this->load->model('category_m');
        $this->load->model('brand_m');
        $this->load->model('badge_m');
        $this->load->model('warehouse_m');
        $this->load->model('product_attributes_m');
    }

    public function index()
    {
        $data['userdata'] = $this->session->userdata();
        $data['title'] = 'Pengaturan Badge | Laciasmara';
        $data['badges'] = $this->badge_m->get_all_badges();

        // echo "<pre>";
        // echo print_r($data['badges']);
        // echo "</pre>";
        // exit;
        $this->load->view('admin_new/layouts/header', $data);
        $this->load->view('admin_new/badges/manage');
        $this->load->view('admin_new/layouts/footer');
    }

    public function create()
    {
        $data['userdata'] = $this->session->userdata();

        $data['title'] = 'Tambah Badge | Laciasmara';

        $this->load->view('admin_new/layouts/header', $data);
        $this->load->view('admin_new/badges/create');
        $this->load->view('admin_new/layouts/footer');
    }

    public function store()
    {
        // Generate slug dari name
        $name = $this->input->post('badge_name', true);
        $slug = $this->generate_slug($name);

        // Get last sort_order dan tambahkan 1
        $this->db->select_max('sort_order');
        $query = $this->db->get('badges');
        $last_sort_order = $query->row()->sort_order;
        $new_sort_order = ($last_sort_order !== null) ? $last_sort_order + 1 : 1;

        $data = [
            'name' => $name,
            'slug' => $slug,
            'description' => $this->input->post('badge_description', true),
            'background_color' => $this->input->post('badge_background', true),
            'text_color' => $this->input->post('badge_color', true),
            'icon' => $this->input->post('badge_icon', true),
            'is_active' => 1,
            'sort_order' => $new_sort_order,
        ];

        $this->db->trans_begin();
        $this->db->insert('badges', $data);

        if ($this->db->trans_status() === FALSE) {
            $this->db->trans_rollback();
            $this->session->set_flashdata('error', 'Gagal menyimpan data badge.');
        } else {
            $this->db->trans_commit();
            $this->session->set_flashdata('success', 'Badge berhasil ditambahkan.');
        }

        redirect('admin/badge/manage');
    }

    public function edit($badge_id)
    {
        $data['userdata'] = $this->session->userdata();
        $data['badge'] = $this->badge_m->get_badge_by_id($badge_id);

        $data['title'] = 'Ubah Badge | Laciasmara';

        $this->load->view('admin_new/layouts/header', $data);
        $this->load->view('admin_new/badges/edit');
        $this->load->view('admin_new/layouts/footer');
    }

    public function update($badge_id)
    {
        $name = $this->input->post('badge_name', true);
        $slug = $this->generate_slug($name);

        $data = [
            'name' => $name,
            'slug' => $slug,
            'description' => $this->input->post('badge_description', true),
            'background_color' => $this->input->post('badge_background', true),
            'text_color' => $this->input->post('badge_color', true),
            'icon' => $this->input->post('badge_icon', true),
        ];

        $this->db->trans_begin();
        $this->db->where('id', $badge_id);
        $this->db->update('badges', $data);

        if ($this->db->trans_status() === FALSE) {
            $this->db->trans_rollback();
            $this->session->set_flashdata('error', 'Gagal memperbarui data badge.');
        } else {
            $this->db->trans_commit();
            $this->session->set_flashdata('success', 'Badge berhasil diperbarui.');
        }

        redirect('admin/badge/manage');
    }

    public function delete($badge_id)
    {
        if (!$badge_id) {
            show_404();
        }

        $this->db->trans_begin();
        $this->db->where('id', $badge_id);
        $this->db->delete('badges');

        if ($this->db->trans_status() === FALSE) {
            $this->db->trans_rollback();
            $this->session->set_flashdata('error', 'Gagal menghapus badge.');
        } else {
            $this->db->trans_commit();
            $this->session->set_flashdata('success', 'Badge berhasil dihapus.');
        }

        redirect('admin/badge/manage');
    }

    public function badge_products($badge_id)
    {
        $data['userdata'] = $this->session->userdata();
        $data['title'] = 'Produk Badge | Laciasmara';
        $data['badge_id'] = $badge_id;
        $data['badge_name'] = $this->badge_m->get_badge_name_by_id($badge_id);
        $data['products'] = $this->badge_m->get_products_by_badge_id($badge_id);

        $this->load->view('admin_new/layouts/header', $data);
        $this->load->view('admin_new/badges/products');
        $this->load->view('admin_new/layouts/footer');
    }

    public function delete_badge_product($badge_id, $product_id)
    {
        if (empty($badge_id) || empty($product_id)) {
            show_404();
        }

        $this->badge_m->remove_badge_from_product($badge_id, $product_id);

        redirect('admin/badge/' . $badge_id . '/products');
    }



    public function update_products()
    {

        $badge_id = $this->input->post('badge_id');
        $products_json = $this->input->post('products');
        $products = json_decode($products_json, true);

        if (empty($badge_id)) {
            $response = [
                'success' => false,
                'message' => 'Badge ID tidak valid'
            ];
            echo json_encode($response);
            return;
        }

        if (!is_array($products)) {
            $products = [];
        }

        $this->db->trans_begin();

        try {
            // Soft delete: Set is_active = 0 untuk semua produk yang ada untuk badge ini
            $this->db->where('badge_id', $badge_id);
            $this->db->update('product_badges', array('is_active' => 0));

            $success_count = 0;

            // Insert atau update produk yang dipilih
            if (!empty($products)) {
                foreach ($products as $product) {
                    // Check if product already exists in product_badges
                    $this->db->where('product_id', $product['product_id']);
                    $this->db->where('badge_id', $badge_id);
                    $existing = $this->db->get('product_badges')->row();

                    if ($existing) {
                        // Update existing record to active
                        $this->db->where('product_id', $product['product_id']);
                        $this->db->where('badge_id', $badge_id);
                        $result = $this->db->update('product_badges', array('is_active' => 1));
                    } else {
                        // Insert new record
                        $data = [
                            'product_id' => $product['product_id'],
                            'badge_id' => $badge_id,
                            'is_active' => 1
                        ];
                        $result = $this->db->insert('product_badges', $data);
                    }

                    if ($result) {
                        $success_count++;
                    }
                }
            }

            $this->db->trans_commit();

            $response = [
                'success' => true,
                'message' => "$success_count produk berhasil diupdate"
            ];
        } catch (Exception $e) {
            $this->db->trans_rollback();
            $response = [
                'success' => false,
                'message' => 'Terjadi kesalahan: ' . $e->getMessage()
            ];
        }

        echo json_encode($response);
    }

    public function get_products_with_badge_status()
    {

        $badge_id = $this->input->get('badge_id');

        if (empty($badge_id)) {
            $response = [
                'success' => false,
                'message' => 'Badge ID tidak valid'
            ];
            echo json_encode($response);
            return;
        }

        // Get all active products with complete details (sama seperti referensi)
        $this->db->select('
            p.title,
            p.alias,
            p.product_status,
            p.id_products,
            p.created_at,
            p.updated_at,
            pd.id as product_detail_id,
            MIN(pd.price) as min_price,
            MAX(pd.price) as max_price,
            CASE
                WHEN COUNT(pd.id) > 1 THEN "-"
                ELSE MAX(pd.sku)
            END as sku,
            pi.image as image,
            s.stock as total_stock,
            b.brand as brand_title,
            COALESCE(od_count.total_sold, 0) as total_sold
        ');
        $this->db->from('products p');
        $this->db->join('product_details pd', 'pd.product_id = p.id_products', 'left');
        $this->db->join('stock s', 'pd.id = s.id_product_detail AND s.warehouse_id = 1', 'left');
        $this->db->join('brands b', 'p.brand_id = b.id_brands', 'left');
        $this->db->join('product_images pi', 'pi.product_details_id = pd.id AND pi.priority = 1 AND pi.status = 1', 'left');
        $this->db->join('category_product cp', 'cp.id_product = p.id_products', 'left');
        $this->db->join('(
            SELECT od.product_id, COUNT(*) as total_sold
            FROM orders_detail od
            JOIN orders o ON od.orders_id = o.id_orders
            WHERE o.payment_status = 5
            GROUP BY od.product_id
        ) as od_count', 'p.id_products = od_count.product_id', 'left');

        // Conditions
        $this->db->where('p.deleted_at', null);
        $this->db->where('p.product_status', '1'); // only active products
        $this->db->group_by('p.id_products');
        $this->db->order_by('p.title', 'ASC');

        $query = $this->db->get();
        $products = $query->result_array();

        // Get selected products for this badge (yang sudah ada di product_badges)
        $this->db->select('product_id');
        $this->db->from('product_badges');
        $this->db->where('badge_id', $badge_id);
        $this->db->where('is_active', 1); // sesuai dengan kondisi di method get_products_by_badge_id
        $selected_query = $this->db->get();
        $selected_products = array_column($selected_query->result_array(), 'product_id');

        // Add is_selected flag to products
        foreach ($products as &$product) {
            $product['is_selected'] = in_array($product['id_products'], $selected_products) ? 1 : 0;

            // Format harga untuk display (optional)
            if ($product['min_price'] == $product['max_price']) {
                $product['price_display'] = 'Rp ' . number_format($product['min_price'], 0, ',', '.');
            } else {
                $product['price_display'] = 'Rp ' . number_format($product['min_price'], 0, ',', '.') .
                    ' - Rp ' . number_format($product['max_price'], 0, ',', '.');
            }

            // Ensure image path is complete
            if (!empty($product['image'])) {
                $product['image_url'] = base_url('uploads/product/') . $product['image'];
            } else {
                $product['image_url'] = base_url('assets/images/product-placeholder.png');
            }
        }

        echo json_encode($products);
    }

    // Method helper untuk generate slug
    private function generate_slug($string)
    {
        $slug = strtolower($string);

        $slug = str_replace(' ', '-', $slug);

        $slug = preg_replace('/[^a-z0-9\-]/', '', $slug);

        $slug = preg_replace('/-+/', '-', $slug);

        $slug = trim($slug, '-');

        // Cek apakah slug sudah ada, jika ya tambahkan angka
        $original_slug = $slug;
        $counter = 1;

        while ($this->slug_exists($slug)) {
            $slug = $original_slug . '-' . $counter;
            $counter++;
        }

        return $slug;
    }

    private function slug_exists($slug)
    {
        $this->db->where('slug', $slug);
        $query = $this->db->get('badges');
        return $query->num_rows() > 0;
    }
}

https://t.me/RX1948 - 2025