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 : |
<?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; } }