|
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/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') !== null ? $this->input->post('badge_icon', true) : null,
'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;
}
}