|
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 Products extends Admin_Controller
{
//this property is used for validating existing category title on call back edit category
private $product_current_id;
function __construct()
{
parent::__construct();
$this->load->model('product_m');
$this->load->model('category_m');
$this->load->model('configuration_m');
$this->load->model('brand_m');
$this->load->model('product_attributes_m');
$this->load->helper('form');
}
function index()
{
/*----FILTER SEARCH PRODUCT--*/
if (isset($_POST['search_product'])) {
//get product name from form
$this->data['keyword'] = $this->security->xss_clean($this->input->post('product'));
$this->data['products'] = $this->product_m->get_all_products_search_product($this->data['keyword']);
} else {
//Add pagination
$this->load->helper('pagination_helper');
add_pagination(base_url() . 'admin/products/index', $this->product_m->record_count(), 100, 4);
$this->data['products'] = $this->product_m->get_all_products(100, $this->uri->segment(4));
$this->data['use_pagination'] = 'yes';
}
//get website product ordering
$this->db->select('website_product_ordering')->from('configuration')->where('id_configuration', 1);
$this->data['website_product_ordering'] = $this->db->get()->row()->website_product_ordering;
//load view
$this->data['subview'] = 'admin/products/index';
$this->load->view('admin/templates/header', $this->data_header);
$this->load->view('admin/_layout_main', $this->data);
$this->load->view('admin/templates/footer');
}
function bundle()
{
//Add pagination
$this->load->helper('pagination_helper');
add_pagination(base_url() . 'admin/products/bundle', $this->product_m->record_count_bundle(), 100, 4);
$this->data['bundle'] = $this->product_m->get_bundle(100, $this->uri->segment(4));
$this->data['use_pagination'] = 'yes';
//load view
$this->data['subview'] = 'admin/products/bundle';
$this->load->view('admin/templates/header', $this->data_header);
$this->load->view('admin/_layout_main', $this->data);
$this->load->view('admin/templates/footer');
}
function add_bundle()
{
$this->data['bundle'] = $this->product_m->get_new_bundle();
$this->data['products'] = $this->db
->distinct()
->select('title,id_products')
->from('products')
->where('product_status', 1)
->order_by('title')
->get()
->result();
//validation in action
//validation check in action
$config = $this->product_m->rules_bundle;
$this->form_validation->set_rules($config);
$this->form_validation->set_error_delimiters(
'<div class="error">',
'</div>'
);
if ($this->form_validation->run($this) == true) {
if ($_FILES['image']['size'] !== 0) {
$config['upload_path'] = './uploads/bundle/';
$config['allowed_types'] = 'jpeg|jpg|png|pdf';
$config['max_size'] = '5000';
$this->load->library('upload', $config);
$this->upload->initialize($config);
if (!$this->upload->do_upload('image')) {
echo $this->upload->display_errors();
die;
$this->session->set_flashdata('receipt_file_error', '<br>
<p style="background:red; color:white; padding:5px; font-weight:bold;">Image Upload Error. Wrong format.</p>');
//echo $this->upload->display_errors(); exit();
redirect('/admin/products/add_bundle');
} else {
$image = $this->upload->data();
$image_name = $image['file_name'];
}
}
$created_date = date('Y-m-d H:i:s');
$Selled = 0;
$Product_id = "11,12";
$data = $this->table_data_processing_bundle(
$this->input->post('title'),
$Selled,
$this->input->post('stock'),
$Product_id,
$this->input->post('price'),
$image_name,
$this->input->post('status'),
$created_date
);
$this->product_m->add_bundle($data);
$bundle_name = $this->input->post('title');
$user_id = $this->session->userdata('admin')['id'];
$activity = 'User menambah bundle (' . $bundle_name . ')';
log_activity($user_id, $activity);
$this->session->set_flashdata(
'success',
'<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Voucher Add Successful</p>'
);
redirect('admin/products/bundle');
}
//load view
$this->data['subview'] = 'admin/products/edit_bundle';
$this->load->view('admin/templates/header', $this->data_header);
$this->load->view('admin/_layout_main', $this->data);
$this->load->view('admin/templates/footer');
}
function edit_bundle($id = null)
{
//check if id exist. If not exist, show 404.
$count = $this->product_m->count_exist_bundle($id);
if ($count == 0) {
//page not exist
show_404();
}
$this->data['products'] = $this->db
->distinct()
->select('title,id_products')
->from('products')
->where('product_status', 1)
->order_by('title')
->get()
->result();
$this->data['bundle'] = $this->product_m->get_bundle_1($id);
//get all chosen (active) product
$active_product = $this->data['bundle']->product_id;
if ($active_product != null) {
$this->data['chosen_products'] = array_filter(
explode(',', $active_product)
); //array_filter to remove empty array element
}
$config = $this->product_m->rules_bundle;
$this->form_validation->set_rules($config);
$this->form_validation->set_error_delimiters(
'<div class="error">',
'</div>'
);
if ($this->form_validation->run($this) == true) {
if ($_FILES['image']['size'] !== 0) {
$config['upload_path'] = './uploads/bundle/';
$config['allowed_types'] = 'jpeg|jpg|png|webp';
$config['max_size'] = '5000';
$this->load->library('upload', $config);
$this->upload->initialize($config);
if (!$this->upload->do_upload('image')) {
echo $this->upload->display_errors();
die;
$this->session->set_flashdata('receipt_file_error', '<br>
<p style="background:red; color:white; padding:5px; font-weight:bold;">Image Upload Error. Wrong format.</p>');
//echo $this->upload->display_errors(); exit();
redirect('/admin/products/add_bundle');
} else {
$image = $this->upload->data();
$image_name = $image['file_name'];
}
} else {
// Gunakan gambar yang sudah ada
$image_name = $this->data['bundle']->image;
}
$created_date = date('Y-m-d H:i:s');
$Selled = 0;
$Product_id = "11,12";
$data = $this->table_data_processing_bundle(
$this->input->post('title'),
$Selled,
$this->input->post('stock'),
$Product_id,
$this->input->post('price'),
$image_name,
$this->input->post('status'),
$created_date
);
$this->product_m->edit_bundle($id, $data);
$bundle_name = $this->input->post('title');
$user_id = $this->session->userdata('admin')['id'];
$activity = 'User mengedit bundle (' . $bundle_name . ')';
log_activity($user_id, $activity);
$this->session->set_flashdata(
'success',
'<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Voucher Add Successful</p>'
);
redirect('admin/products/bundle');
}
//load view
$this->data['subview'] = 'admin/products/edit_bundle';
$this->load->view('admin/templates/header', $this->data_header);
$this->load->view('admin/_layout_main', $this->data);
$this->load->view('admin/templates/footer');
}
function specialdiscount()
{
//Add pagination
$this->load->helper('pagination_helper');
add_pagination(base_url() . 'admin/products/specialdiscount', $this->product_m->record_count_special_discount(), 100, 4);
$this->data['special_discount'] = $this->product_m->get_special_discount(100, $this->uri->segment(4));
$this->data['use_pagination'] = 'yes';
//get website product ordering
$this->db->select('website_product_ordering')->from('configuration')->where('id_configuration', 1);
$this->data['website_product_ordering'] = $this->db->get()->row()->website_product_ordering;
//load view
$this->data['subview'] = 'admin/products/specialdiscount';
$this->load->view('admin/templates/header', $this->data_header);
$this->load->view('admin/_layout_main', $this->data);
$this->load->view('admin/templates/footer');
}
function add_special_discount()
{
$this->data['special_discount'] = $this->product_m->get_new_special_discount();
//get parent product categories
$this->load->model('category_m');
$this->data['parent_categories'] = $this->category_m->get_parent_categories();
//get products
$this->data['products'] = $this->db
->distinct()
->select('title,id_products')
->from('products')
->where('product_status', 1)
->order_by('title')
->get()
->result();
//get brands
$this->db
->select('id_brands, brand')
->from('brands')
->order_by('brand', 'ASC');
$this->data['brands'] = $this->db->get()->result();
//validation in action
//validation check in action
$config = $this->product_m->rules_special_discount;
$this->form_validation->set_rules($config);
$this->form_validation->set_error_delimiters(
'<div class="error">',
'</div>'
);
if ($this->form_validation->run($this) == true) {
$created_date = date('Y-m-d H:i:s');
$Status = 'Next';
$data = $this->table_data_processing_special_discount(
$this->input->post('title'),
$this->input->post('discount_type'),
$this->input->post('discount_value'),
$this->input->post('promostart'),
$this->input->post('promoend'),
$Status,
$created_date,
);
$this->input->post('discount_type') == 'Brand'
? ($data['brand_id'] = implode(',', $this->input->post('brand_id')))
: ($data['brand_id'] = null);
$this->input->post('discount_type') == 'Produk'
? ($data['product_id'] = implode(
',',
$this->input->post('product_id')
))
: ($data['product_id'] = null);
$this->product_m->add_special_discount($data);
$voucher_name = $this->input->post('title');
$user_id = $this->session->userdata('admin')['id'];
$activity = 'User menambah discount (' . $voucher_name . ')';
log_activity($user_id, $activity);
$this->session->set_flashdata(
'success',
'<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Voucher Add Successful</p>'
);
redirect('admin/products/specialdiscount');
}
//load view
$this->data['subview'] = 'admin/products/edit_special_discount';
$this->load->view('admin/templates/header', $this->data_header);
$this->load->view('admin/_layout_main', $this->data);
$this->load->view('admin/templates/footer');
}
function edit_special_discount($id = null)
{
//check if id exist. If not exist, show 404.
$count = $this->product_m->count_exist_special_discount($id);
if ($count == 0) {
//page not exist
show_404();
}
$this->data['products'] = $this->db
->distinct()
->select('title,id_products')
->from('products')
->where('product_status', 1)
->order_by('title')
->get()
->result();
//get Categories
$this->load->model('category_m');
$this->data['parent_categories'] = $this->category_m->get_parent_categories();
//get brands
$this->db
->select('id_brands, brand')
->from('brands')
->order_by('brand', 'ASC');
$this->data['brands'] = $this->db->get()->result();
$this->data['special_discount'] = $this->product_m->get_special_discount_1($id);
//get all chosen (active) product
$active_product = $this->data['special_discount']->product_id;
if ($active_product != null) {
$this->data['chosen_products'] = array_filter(
explode(',', $active_product)
); //array_filter to remove empty array element
}
//get all chosen (active) categories
$active_categories = $this->data['special_discount']->category_id;
if ($active_categories != null) {
$this->data['chosen_categories'] = array_filter(
explode(',', $active_categories)
); //array_filter to remove empty array element
}
$active_brands = $this->data['special_discount']->brand_id;
if ($active_brands != null) {
$this->data['chosen_brands'] = array_filter(explode(',', $active_brands)); //array_filter to remove empty array element
}
$config = $this->product_m->rules_special_discount;
$this->form_validation->set_rules($config);
$this->form_validation->set_error_delimiters(
'<div class="error">',
'</div>'
);
if ($this->form_validation->run($this) == true) {
//get current created date from table
$this->db
->select('created_date')
->from('special_discount')
->where('id_discount', (int) $id);
$created_date = $this->db->get()->row()->created_date;
$Status = 'Next';
$data = $this->table_data_processing_special_discount(
$this->input->post('title'),
$this->input->post('discount_type'),
$this->input->post('discount_value'),
$this->input->post('promostart'),
$this->input->post('promoend'),
$Status,
$created_date,
);
$this->input->post('discount_type') == 'Brand'
? ($data['brand_id'] = implode(',', $this->input->post('brand_id')))
: ($data['brand_id'] = null);
$this->input->post('discount_type') == 'Produk'
? ($data['product_id'] = implode(
',',
$this->input->post('product_id')
))
: ($data['product_id'] = null);
$this->product_m->edit_special_discount($id, $data);
$voucher_name = $this->input->post('title');
$user_id = $this->session->userdata('admin')['id'];
$activity = 'User mengedit discount (' . $voucher_name . ')';
log_activity($user_id, $activity);
$this->session->set_flashdata(
'success',
'<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Discount Edit Successful</p>'
);
redirect('admin/products/edit_special_discount/' . $id);
}
//load view
$this->data['subview'] = 'admin/products/edit_special_discount';
$this->load->view('admin/templates/header', $this->data_header);
$this->load->view('admin/_layout_main', $this->data);
$this->load->view('admin/templates/footer');
}
//to ADD or EDIT a product content
function edit($id = NULL)
{
if ($id != NULL) {
$this->db->select('id_products')->from('products')->where('id_products', $id);
$count_product = $this->db->get()->num_rows();
if ($count_product === 0) {
show_404();
}
//this is an existing product
$this->data['new_product'] = 'no';
$this->data['products'] = $this->product_m->get($id);
$this->data['productssuggest'] = $this->db
->distinct()
->select('title,id_products')
->from('products')
->where('product_status', 1)
->order_by('title')
->get()
->result();
$this->data['parent_categories'] = $this->category_m->get_parent_categories();
// Get active product_suggest and convert it into an array
$active_product = $this->data['products']->product_suggest;
if ($active_product != null) {
$this->data['chosen_products'] = array_filter(
explode(',', $active_product)
);
}
//get all chosen (active) categories
$this->db->select('*')->from('category_product')->where('id_product', $id);
$this->data['chosen_categories'] = $this->db->get()->result();
//get all brands
$this->data['brands'] = $this->brand_m->get_brands();
$this->db->select('id_customers, name')->from('customers')->where('reseller_id IS NOT NULL');
$this->data['customers'] = $this->db->get()->result();
//get current brand id
$this->db->select('brand_id')->from('products')->where('id_products', (int) $id);
$products = $this->db->get()->row();
$this->data['brand_id'] = $products->brand_id;
/*get shipment method*/
$this->data['shipment'] = $this->db->select('*')->from('shipment_method')->order_by('id', 'ASC')->get()->result();
/*get all chosen (active) shipment*/
$this->db->select('*')->from('shipment_method_product')->where('product_id', $id);
$this->data['chosen_shipments'] = $this->db->get()->result();
//assign to properties, used for custom callback validation
$this->product_current_id = (int) $this->data['products']->id_products;
} else {
if (($this->data['membership_type'] == "starter" && $this->data['jml_produk'] >= 100) || ($this->data['membership_type'] == "business" && $this->data['jml_produk'] >= 500)) {
redirect('admin/products');
}
//id is null. this is a new product
$this->data['new_product'] = 'yes';
/*get product data*/
$this->data['products'] = $this->product_m->get_new();
$this->data['productssuggest'] = $this->db
->distinct()
->select('title,id_products')
->from('products')
->where('product_status', 1)
->order_by('title')
->get()
->result();
$this->data['parent_categories'] = $this->category_m->get_parent_categories();
$this->data['brands'] = $this->brand_m->get_brands();
$this->db->select('id_customers, name')->from('customers')->where('reseller_id IS NOT NULL');
$this->data['customers'] = $this->db->get()->result();
/*get shipment method*/
$this->data['shipment'] = $this->db->select('*')->from('shipment_method')->order_by('id', 'ASC')->get()->result();
//get ordering number and display at add form
$this->db->select_max('priority')->from('products');
$current_priority = $this->db->get()->row()->priority;
if ($current_priority == NULL) {
$this->data['products']->priority = 1;
} else {
$this->data['products']->priority = $current_priority + 1;
}
}
//validation in action
//validation check in action
$config = $this->product_m->rules;
$this->load->library('form_validation');
$this->form_validation->set_error_delimiters('<div class="error">', '</div>'); //above is to add class to form validation error, to be styled
$this->form_validation->set_rules($config);
if ($this->form_validation->run($this) == TRUE) {
//check if SKU already exist in product details table
foreach ($this->input->post('product_details') as $product_detail) {
if ($id == NULL) {
$this->db->select('sku')->from('product_details')->where('sku', $product_detail['sku']);
} else {
$this->db->select('sku')->from('product_details')->where('product_id !=', $id)->where('sku', $product_detail['sku']);
}
$count_sku = $this->db->get()->num_rows();
if ($count_sku > 0) {
//means sku already exist...must exit with error notification
$this->session->set_flashdata('sku_error', "<br><p style='background:red; color:white; padding:5px; font-weight:bold;'>Kode SKU {$product_detail['sku']} sudah ada. Gunakan SKU/Kode Produk unik lainnya.</p>");
if ($id == NULL) {
redirect('admin/products/edit');
} else {
redirect('admin/products/edit/' . $id);
}
}
}
$data = $this->table_data_processing();
// Mengambil pemilihan produk dari formulir
$selectedProducts = $this->input->post('product_id');
// Periksa apakah ada produk yang dipilih
if (!empty($selectedProducts)) {
$productSuggest = implode(',', $selectedProducts);
} else {
$productSuggest = '';
}
// Menyimpan pemilihan produk dalam kolom product_suggest
$data['product_suggest'] = $productSuggest;
if ($id == NULL) {
$product_id = (int) $this->product_m->add_product($data);
} else {
$this->product_m->edit_product($id, $data);
}
/*INSERT INTO SHIPMENT*/
$shipments_id = $this->input->post('shipment_id');
if (!in_array("3", $shipments_id)) {
$shipments_id[] = '3'; //add regular shipping method
}
if ($id != NULL) {
//firstly, we delete all existing records inside current table
$this->db->where('product_id', $id);
$this->db->delete('shipment_method_product');
}
$shipments_keywords = '';
foreach ($shipments_id as $shipment_id) {
$data_shipment = array(
'shipment_method_id' => $shipment_id,
);
if ($id != NULL) {
$data_shipment['product_id'] = $id;
} else {
$data_shipment['product_id'] = $product_id;
}
$this->db->insert('shipment_method_product', $data_shipment);
$this->db->select('name')->from('shipment_method')->where('id', $shipment_id);
$shipments_keywords .= $this->db->get()->row()->name . ',';
}
$data_shipments = array(
'shipment_method' => $shipments_keywords,
);
if ($id != NULL) {
$this->db->where('id_products', $id);
} else {
$this->db->where('id_products', $product_id);
}
$this->db->update('products', $data_shipments);
/*INSERT INTO CATEGORY*/
//get category_id from view, then insert together with product_id to category_product table
$categories_id = $this->input->post('category_id');
//check id there is content inside category array
$categories_id_count = count($categories_id);
if ($categories_id_count > 0) {
if ($id != NULL) {
//firstly, we delete all existing category records inside category_product table
$this->db->where('id_product', $id);
$this->db->delete('category_product');
}
foreach ($categories_id as $category_id) {
$data = array(
'id_category' => $category_id,
);
if ($id != NULL) {
$data['id_product'] = $id;
} else {
$data['id_product'] = $product_id;
}
$this->db->insert('category_product', $data);
}
} else {
if ($id != NULL) {
//firstly, we delete all existing category records inside category_product table
$this->db->where('id_product', $id);
$this->db->delete('category_product');
}
$data = array(
'id_category' => NULL,
);
if ($id != NULL) {
$data['id_product'] = $id;
} else {
$data['id_product'] = $product_id;
}
$this->db->insert('category_product', $data);
}
//Varians and attributes
foreach ($this->input->post('product_details') as $product_detail) {
if (!empty($product_detail['sku'])) {
$data = array(
'sku' => $product_detail['sku'],
'price' => $product_detail['price'],
'discounted_price' => $product_detail['discounted_price'],
'length' => $product_detail['length'],
'width' => $product_detail['width'],
'height' => $product_detail['height'],
'is_indent' => $product_detail['is_indent'],
);
if ($id != NULL) {
$data['product_id'] = $id;
} else {
$data['product_id'] = $product_id;
}
if (empty($product_detail['weight'])) {
$data['weight'] = 1;
} else {
$data['weight'] = $product_detail['weight'];
}
if ($id != NULL) {
//check if sku with current product id already exist in table. If already exist, then update, else, insert new
$this->db->select('sku')->from('product_details')->where('sku', $product_detail['sku'])->where('product_id', $id);
$count_sku = $this->db->get()->num_rows();
} else {
$count_sku = 0;
}
if ($count_sku > 0) {
//update product detail
$this->db->where('sku', $product_detail['sku']);
$this->db->where('product_id', $id);
$this->db->update('product_details', $data);
//get $product_details_id
$this->db->select('id')->from('product_details')->where('sku', $product_detail['sku'])->where('product_id', $id);
$product_details_id = $this->db->get()->row()->id;
} else {
//insert new product detail
$this->db->insert('product_details', $data);
$product_details_id = $this->db->insert_id();
}
//adit product_combination table
//first, delete combination table
$this->db->where('product_details_id', $product_details_id);
$this->db->delete('product_combination');
for ($i = 0; $i < 20; $i++) {
if (!empty($product_detail['variant'][$i]) && !empty($product_detail['attribute'][$i])) {
$data = array(
'product_details_id' => $product_details_id,
'attribute_id' => $product_detail['variant'][$i],
'attribute_detail_id' => $product_detail['attribute'][$i],
);
if ($id == NULL) {
$data['product_id'] = $product_id;
} else {
$data['product_id'] = $id;
}
$this->db->insert('product_combination', $data);
}
}
}
}
if ($id != NULL) {
$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Produk berhasil diedit</p>');
redirect('admin/products/edit/' . $id);
} else {
$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Produk berhasil dibuat</p>');
redirect('admin/products');
}
}
$this->data['subview'] = 'admin/products/edit';
$this->load->view('admin/templates/header', $this->data_header);
$this->load->view('admin/_layout_main', $this->data);
$this->load->view('admin/templates/footer');
}
//to delete a product
function delete($id)
{
//check if id exist. If not exist, show 404.
$count = $this->product_m->count_exist($id);
if ($count == 0) {
//page not exist
show_404();
}
$user_id = $this->session->userdata('admin')['id'];
// Query untuk mengambil title dari tabel product
$this->db->select('title');
$this->db->from('products');
$this->db->where('id_products', $id);
$query_product = $this->db->get();
$product_data = $query_product->row();
// Buat string "title/SKU"
if ($product_data) {
$activity = 'User menghapus produk (' . $product_data->title . ')';
} else {
// Handle jika data produk atau detail produk tidak ditemukan
$activity = 'User menghapus produk (' . $id . ')';
}
log_activity($user_id, $activity);
$this->product_m->delete($id);
$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Produk berhasil dihapus</p>');
redirect('admin/products');
}
//to delete a product
function delete_product_detail($id_product, $id_product_detail)
{
//check if id_product_detail exist. If not exist, show 404.
$this->db->select('id')->from('product_details')->where('id', $id_product_detail);
$count_product_detail = $this->db->get()->num_rows();
if ($count_product_detail == 0) {
show_404();
}
//check if id_product. If not exist, show 404.
$this->db->select('id_products')->from('products')->where('id_products', $id_product);
$count_product = $this->db->get()->num_rows();
if ($count_product == 0) {
show_404();
}
$user_id = $this->session->userdata('admin')['id'];
// Query untuk mengambil title dari tabel product
$this->db->select('sku');
$this->db->from('product_details');
$this->db->where('id', $id_product_detail);
$query_product = $this->db->get();
$product_data = $query_product->row();
// Buat string "title/SKU"
if ($product_data) {
$activity = 'User menghapus SKU (' . $product_data->sku . ')';
} else {
// Handle jika data produk atau detail produk tidak ditemukan
$activity = 'User menghapus varian (' . $id_product_detail . ')';
}
log_activity($user_id, $activity);
$this->db->where('id', $id_product_detail);
$this->db->delete('product_details');
$this->db->where('product_id', $id_product);
$this->db->where('product_details_id', $id_product_detail);
$this->db->delete('product_combination');
$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Produk Varian berhasil dihapus</p>');
redirect('admin/products/edit/' . $id_product);
}
function delete_special_discount($id)
{
//check if id exist. If not exist, show 404.
$count = $this->product_m->count_exist_special_discount($id);
if ($count == 0) {
//page not exist
show_404();
}
$user_id = $this->session->userdata('admin')['id'];
// Query untuk mengambil title dari tabel product
$this->db->select('title');
$this->db->from('special_discount');
$this->db->where('id_discount', $id);
$query_product = $this->db->get();
$product_data = $query_product->row();
// Buat string "title/SKU"
if ($product_data) {
$activity = 'User menghapus special discount (' . $product_data->title . ')';
} else {
// Handle jika data produk atau detail produk tidak ditemukan
$activity = 'User menghapus special discount (' . $id . ')';
}
log_activity($user_id, $activity);
$this->product_m->delete_special_discount($id);
$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Discount berhasil dihapus</p>');
redirect('admin/products/specialdiscount');
}
function delete_bundle($id)
{
//check if id exist. If not exist, show 404.
$count = $this->product_m->count_exist_bundle($id);
if ($count == 0) {
//page not exist
show_404();
}
$user_id = $this->session->userdata('admin')['id'];
// Query untuk mengambil title dari tabel product
$this->db->select('title');
$this->db->from('bundle');
$this->db->where('id', $id);
$query_product = $this->db->get();
$product_data = $query_product->row();
// Buat string "title/SKU"
if ($product_data) {
$activity = 'User menghapus bundle (' . $product_data->title . ')';
} else {
// Handle jika data produk atau detail produk tidak ditemukan
$activity = 'User menghapus bundle (' . $id . ')';
}
log_activity($user_id, $activity);
$this->product_m->delete_bundle($id);
$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Bundle berhasil dihapus</p>');
redirect('admin/products/bundle');
}
function product_images($product_id = NULL)
{
if ($product_id == NULL) {
redirect(base_url('admin/products'));
}
//pagination in action. 100 results per page
$this->load->library('pagination');
$config['base_url'] = base_url() . 'admin/products/product_images';
$config['per_page'] = 100;
$config['uri_segment'] = 3;
//fetch all product images
$this->db->select('id')->from('product_images')->where('product_id', $product_id);
$config['total_rows'] = $this->db->get()->num_rows();
$this->pagination->initialize($config);
$this->db->select('*');
$this->db->from('product_images');
$this->db->where('product_id', $product_id);
$this->db->order_by('product_details_id', 'ASC');
$this->db->order_by('priority', 'ASC');
$this->db->limit($config['per_page'], $this->uri->segment($config['uri_segment']));
$this->data['product_images'] = $this->db->get()->result();
$this->data['product_id'] = $product_id;
//get product name
$this->db->select('title')->from('products')->where('id_products', $product_id);
$this->data['product_name'] = $this->db->get()->row()->title;
//load view
$this->data['subview'] = 'admin/products/product_images';
$this->load->view('admin/templates/header', $this->data_header);
$this->load->view('admin/_layout_main', $this->data);
$this->load->view('admin/templates/footer');
}
function edit_product_image($product_id = NULL, $product_image_id = NULL, $case_addnew = false)
{
if ($product_id == NULL) {
redirect(base_url('admin/products'));
}
$case_save = $this->input->post('case_save');
if (isset($case_save)) {
if ($case_save == 'addnew') {
$config = array(
array(
'field' => 'title',
'label' => 'Banner Title',
'rules' => 'trim|required'
),
array(
'field' => 'title_en',
'label' => 'Banner Title English',
'rules' => 'trim|required'
),
array(
'field' => 'product_detail_id',
'label' => 'Varian',
'rules' => 'required'
),
array(
'field' => 'priority[]',
'label' => 'Priority',
'rules' => 'trim|required|numeric'
),
array(
'field' => 'status[]',
'label' => 'status',
'rules' => 'trim|required'
)
);
$this->load->library('form_validation');
$this->form_validation->set_rules($config);
$this->form_validation->set_error_delimiters('<div class="error">', '</div>');
if ($this->form_validation->run() == TRUE) {
$this->db->select('product_image_width, product_image_height, product_image_large_width,
product_image_large_height, product_image_small_width, product_image_small_height, product_image_thumbnail_width, product_image_thumbnail_height')->from('configuration')->where('id_configuration', 1);
$image_dimension = $this->db->get()->row();
$ar_status = $this->input->post('status[]');
$ar_priority = $this->input->post('priority[]');
$cpt = count($_FILES['image']['name']);
$config['upload_path'] = './uploads/product/';
$config['allowed_types'] = 'jpg|png|gif|jpeg|webp';
$config['max_size'] = '600';
$config['max_width'] = $image_dimension->product_image_width;
$config['max_height'] = $image_dimension->product_image_height;
$this->load->library('upload', $config);
$files = $_FILES;
for ($i = 0; $i < $cpt; $i++) {
if ($_FILES['image']['size'][$i] !== 0) {
$_FILES['image']['name'] = $files['image']['name'][$i];
$_FILES['image']['type'] = $files['image']['type'][$i];
$_FILES['image']['tmp_name'] = $files['image']['tmp_name'][$i];
$_FILES['image']['error'] = $files['image']['error'][$i];
$_FILES['image']['size'] = $files['image']['size'][$i];
$this->upload->initialize($config);
if (!$this->upload->do_upload('image')) {
echo $this->upload->display_errors();
die();
$this->session->set_flashdata('image_error', '<br>
<p style="background:orange; color:white; padding:5px; font-weight:bold;">Image Upload Error. Salah format atau ukuran.</p>');
redirect('admin/products/edit_product_image/' . $product_id . '/' . $this->input->post('correct_product_details_id') . '/addnew');
} else {
$image = $this->upload->data();
$image_filename[$i] = $image['file_name'];
}
$this->load->library('image_lib');
//image resizing (LARGE IMAGE)
$config['image_library'] = 'gd2';
$config['source_image'] = './uploads/product/' . $image_filename[$i];
$config['new_image'] = './uploads/product/large/';
$config['create_thumb'] = FALSE;
$config['maintain_ratio'] = TRUE;
$config['width'] = $image_dimension->product_image_large_width;
$config['height'] = $image_dimension->product_image_large_height;
$this->image_lib->initialize($config);
$this->image_lib->resize();
//image resizing (SMALL IMAGE)
$config['image_library'] = 'gd2';
$config['source_image'] = './uploads/product/' . $image_filename[$i];
$config['new_image'] = './uploads/product/small/';
$config['create_thumb'] = FALSE;
$config['maintain_ratio'] = TRUE;
$config['width'] = $image_dimension->product_image_small_width;
$config['height'] = $image_dimension->product_image_small_height;
$this->image_lib->initialize($config);
$this->image_lib->resize();
//image resizing (THUMBNAIL)
$config['image_library'] = 'gd2';
$config['source_image'] = './uploads/product/' . $image_filename[$i];
$config['new_image'] = './uploads/product/thumbnail/';
$config['create_thumb'] = FALSE;
$config['maintain_ratio'] = TRUE;
$config['width'] = $image_dimension->product_image_thumbnail_width;
$config['height'] = $image_dimension->product_image_thumbnail_height;
$this->image_lib->initialize($config);
$this->image_lib->resize();
}
$data = array(
'product_id' => $product_id,
'product_details_id' =>
$this->input->post('correct_product_details_id'),
'title' =>
$this->security->xss_clean($this->input->post('title')),
'title_en' =>
$this->security->xss_clean($this->input->post('title_en')),
'priority' =>
$this->input->post('priority')[$i],
'status' =>
$this->input->post('status')[$i],
'alt' =>
$this->input->post('alt')[$i]
);
if (isset($image_filename[$i])) {
$data['image'] = $image_filename[$i];
}
$this->db->insert('product_images', $data);
}
$user_id = $this->session->userdata('admin')['id'];
$activity = 'User menambahkan gambar produk(' . $data['title'] . ')';
log_activity($user_id, $activity);
redirect(base_url('admin/products/product_images/' . $product_id));
}
// else{
// // jika error
// // echo validation_errors();
// redirect('admin/products/edit_product_image/' . $product_id . '/' . $this->input->post('correct_product_details_id').'/addnew');
// }
}
// return false;
}
if ($product_image_id == NULL) {
//create new photo
$product_image = new stdClass();
$product_image->title = '';
$product_image->title_en = '';
$product_image->image = '';
$product_image->priority = '';
$product_image->alt = '';
$product_image->status = '';
$product_image->product_details_id = '';
$this->data['product_image'] = $product_image;
//get ordering number and display at add form
$this->db->select_max('priority')->from('product_images');
$current_priority = $this->db->get()->row()->priority;
if ($current_priority == NULL) {
$this->data['product_image']->priority = 1;
} else {
$this->data['product_image']->priority = $current_priority + 1;
}
} else {
//edit current photo
$this->db->select('*')->from('product_images')->where('id', $product_image_id);
$this->data['product_image'] = $this->db->get()->row();
if (count($this->data['product_image']) == 0) {
if (empty($case_addnew) || $case_addnew != 'addnew') {
redirect(base_url('admin/products/product_images/' . $product_id));
}
}
}
//validation check in action
$config = array(
array(
'field' => 'title',
'label' => 'Banner Title',
'rules' => 'trim|required'
),
array(
'field' => 'product_detail_id',
'label' => 'Varian',
'rules' => 'required'
),
array(
'field' => 'priority',
'label' => 'Priority',
'rules' => 'trim|required|numeric'
),
array(
'field' => 'status',
'label' => 'status',
'rules' => 'trim|required'
)
);
$this->load->library('form_validation');
$this->form_validation->set_rules($config);
$this->form_validation->set_error_delimiters('<div class="error">', '</div>');
if ($this->form_validation->run() == TRUE) {
$this->db->select('product_image_width, product_image_height, product_image_large_width,
product_image_large_height, product_image_small_width, product_image_small_height, product_image_thumbnail_width, product_image_thumbnail_height')->from('configuration')->where('id_configuration', 1);
$image_dimension = $this->db->get()->row();
if ($_FILES['image']['size'] !== 0) {
$config['upload_path'] = './uploads/product/';
$config['allowed_types'] = 'jpg|png|gif|jpeg|webp';
$config['max_size'] = '600';
$config['max_width'] = $image_dimension->product_image_width;
$config['max_height'] = $image_dimension->product_image_height;
$this->load->library('upload', $config);
if (!$this->upload->do_upload('image')) {
$this->session->set_flashdata('image_error', '<br>
<p style="background:orange; color:white; padding:5px; font-weight:bold;">Image Upload Error. Salah format atau ukuran.</p>');
redirect('admin/products/edit_product_image/' . $product_id);
} else {
$image = $this->upload->data();
$image_filename = $image['file_name'];
}
$this->load->library('image_lib');
//image resizing (LARGE IMAGE)
$config['image_library'] = 'gd2';
$config['source_image'] = './uploads/product/' . $image_filename;
$config['new_image'] = './uploads/product/large/';
$config['create_thumb'] = FALSE;
$config['maintain_ratio'] = TRUE;
$config['width'] = $image_dimension->product_image_large_width;
$config['height'] = $image_dimension->product_image_large_height;
$this->image_lib->initialize($config); //firstly autoload image_lib, then initialize it. Dont repeatly load it.
$this->image_lib->resize();
//image resizing (SMALL IMAGE)
$config['image_library'] = 'gd2';
$config['source_image'] = './uploads/product/' . $image_filename;
$config['new_image'] = './uploads/product/small/';
$config['create_thumb'] = FALSE;
$config['maintain_ratio'] = TRUE;
$config['width'] = $image_dimension->product_image_small_width;
$config['height'] = $image_dimension->product_image_small_height;
$this->image_lib->initialize($config); //firstly autoload image_lib, then initialize it. Dont repeatly load it.
$this->image_lib->resize();
//image resizing (THUMBNAIL)
$config['image_library'] = 'gd2';
$config['source_image'] = './uploads/product/' . $image_filename;
$config['new_image'] = './uploads/product/thumbnail/';
$config['create_thumb'] = FALSE;
$config['maintain_ratio'] = TRUE;
$config['width'] = $image_dimension->product_image_thumbnail_width;
$config['height'] = $image_dimension->product_image_thumbnail_height;
$this->image_lib->initialize($config); //firstly autoload image_lib, then initialize it. Dont repeatly load it.
$this->image_lib->resize();
}
$data = array(
'product_id' => $product_id,
'product_details_id' => $this->input->post('product_detail_id'),
'title' => $this->security->xss_clean($this->input->post('title')),
'title_en' => $this->security->xss_clean($this->input->post('title_en')),
'priority' => $this->input->post('priority'),
'alt' => $this->input->post('alt'),
'status' => $this->input->post('status')
);
if (isset($image_filename)) {
$data['image'] = $image_filename;
}
if ($product_image_id == NULL) {
$this->db->insert('product_images', $data);
$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Foto produk berhasil ditambahkan</p>');
redirect('admin/products/product_images/' . $product_id);
} else {
$user_id = $this->session->userdata('admin')['id'];
$activity = 'User mengedit gambar produk(' . $data['title'] . ')';
log_activity($user_id, $activity);
$this->db->where('id', $product_image_id);
$this->db->update('product_images', $data);
$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Foto produk berhasil diedit</p>');
redirect('admin/products/edit_product_image/' . $product_id . '/' . $product_image_id);
}
}
$this->data['product_id'] = $product_id;
//get product name
$this->db->select('title')->from('products')->where('id_products', $product_id);
$this->data['product_name'] = $this->db->get()->row()->title;
//get product details
$this->db->select('id, product_id, sku')->from('product_details')->where('product_id', $product_id)->order_by('id', 'ASC');
$this->data['product_details'] = $this->db->get()->result();
if ($case_addnew == 'addnew') {
$this->data['case_addnew'] = $case_addnew;
}
$this->data['product_image_id'] = $product_image_id;
$this->data['subview'] = 'admin/products/edit_product_image';
$this->load->view('admin/templates/header', $this->data_header);
$this->load->view('admin/_layout_main', $this->data);
$this->load->view('admin/templates/footer');
}
function delete_product_image($product_id = NULL, $product_image_id = NULL)
{
if ($product_id == NULL || $product_image_id == NULL) {
redirect(base_url('admin/products'));
}
//get image file name for deletion
$this->db->select('image')->from('product_images')->where('id', $product_image_id);
$image = $this->db->get()->row()->image;
if (file_exists(base_url() . 'uploads/product/' . $image)) {
unlink(FCPATH . '/uploads/product/' . $image);
}
if (file_exists(base_url() . 'uploads/product/large/' . $image)) {
unlink(FCPATH . '/uploads/product/large/' . $image);
}
if (file_exists(base_url() . 'uploads/product/small/' . $image)) {
unlink(FCPATH . '/uploads/product/small/' . $image);
}
if (file_exists(base_url() . 'uploads/product/thumbnail/' . $image)) {
unlink(FCPATH . '/uploads/product/thumbnail/' . $image);
}
$this->db->where('id', $product_image_id);
$this->db->delete('product_images');
//logging
$user_id = $this->session->userdata('admin')['id'];
// Query untuk mengambil title dari tabel product
$this->db->select('title');
$this->db->from('products');
$this->db->where('id_products', $product_id);
$query_product = $this->db->get();
$product_data = $query_product->row();
// Buat string "title/SKU"
if ($product_data) {
$activity = 'User menghapus gambar produk (' . $product_data->title . ')';
} else {
// Handle jika data produk atau detail produk tidak ditemukan
$activity = 'User menghapus gambar produk (' . $product_id . ')';
}
log_activity($user_id, $activity);
$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Foto produk berhasil dihapus</p>');
redirect('admin/products/product_images/' . $product_id);
}
//callback function validation add new product
public function _cek_existing_product_code($str)
{
$num_rows = $this->product_m->cek_existing_product_code($str, $this->product_current_id);
if ($num_rows != 0) {
$this->form_validation->set_message('_cek_existing_product_code', 'Product code already exist !');
return FALSE;
} else {
return TRUE;
}
}
//NOT USED CURRENTLY ! callback function validation add new product check SKU
public function _cek_existing_sku($str)
{
//check if the code is already exist in products detail table..
$this->db->select('sku')->from('product_details')->where('sku', $str);
$count_code_productstable = $this->db->get()->num_rows();
//check if the code is already exist in stocks table..
$this->db->select('sku')->from('stocks')->where('sku', $str);
$count_code_stockstable = $this->db->get()->num_rows();
if ($count_code_productstable != 0 || $count_code_stockstable != 0) {
$this->form_validation->set_message('_cek_existing_product_code', 'Product Code (SKU) already exist !');
return FALSE;
} else {
return TRUE;
}
}
private function table_data_processing()
{
$data = array(
'title' => $this->security->xss_clean($this->input->post('product_name')),
'alias' => url_title($this->security->xss_clean($this->input->post('product_name'))),
'description' => $this->security->xss_clean($this->input->post('description')),
'description_en' => $this->security->xss_clean($this->input->post('description_en')),
'long_description' => $this->security->xss_clean($this->input->post('long_description')),
'long_description_en' => $this->security->xss_clean($this->input->post('long_description_en')),
'additional_information' => $this->security->xss_clean($this->input->post('additional_information')),
'additional_information_en' => $this->security->xss_clean($this->input->post('additional_information_en')),
'media_file_link' => $this->security->xss_clean($this->input->post('media_file_link')),
'product_video_link' => $this->security->xss_clean($this->input->post('product_video_link')),
'product_guide_link' => $this->security->xss_clean($this->input->post('product_guide_link')),
'brand_id' => (int) $this->input->post('brand_id'),
'product_status' => $this->input->post('product_status'),
'priority' => $this->input->post('priority'),
'new_arrival' => $this->input->post('new_arrival'),
'best_seller' => $this->input->post('best_seller'),
'restock' => $this->input->post('restock'),
'customer_id_exc' => $this->input->post('customer_eksklusif'),
'popular_product' => $this->input->post('popular_product'),
'meta_description' => $this->security->xss_clean($this->input->post('meta_description')),
'meta_title' => $this->security->xss_clean($this->input->post('meta_title')),
'indent_time' => $this->security->xss_clean($this->input->post('indent_time')),
'indent_dp' => $this->security->xss_clean($this->input->post('indent_dp'))
);
return $data;
}
private function table_data_processing_special_discount(
$title,
$discount_type,
$discount_value,
$promostart,
$promoend,
$Status,
$created_date
) {
$data = [
'title' => $this->security->xss_clean($title),
'type' => $this->security->xss_clean($discount_type),
'value' => (int) $this->security->xss_clean($discount_value),
'time_start' => $promostart,
'time_end' => $promoend,
'status' => $Status,
'created_date' => $created_date,
];
//Promo by Product Category
//get category_id from view,
$categories_id = $this->input->post('category_id');
//check id there is content inside category array
if (is_array($categories_id)) {
$categories_id_count = count($categories_id);
} else {
$categories_id_count = 0;
}
if ($categories_id_count > 0) {
$data['category_id'] = implode(',', $categories_id);
} else {
$data['category_id'] = null;
}
//Promo by Brand
//get brand_id from view,
$brands_id = $this->input->post('brand_id');
//check id there is content inside brand array
if (is_array($brands_id)) {
$brands_id_count = count($brands_id);
} else {
$brands_id_count = 0;
}
if ($brands_id_count > 0) {
$data['brand_id'] = implode(',', $brands_id);
} else {
$data['brand_id'] = null;
}
return $data;
}
private function table_data_processing_bundle(
$title,
$selled,
$stock,
$product_id,
$price,
$image,
$status,
$created_date
) {
$data = [
'title' => $this->security->xss_clean($title),
'selled' => $this->security->xss_clean($selled),
'stock' => (int) $this->security->xss_clean($stock),
'price' => (int) $this->security->xss_clean($price),
'image' => $image,
'status' => $status,
'created_date' => $created_date,
];
$product_id = $this->input->post('product_id');
//check id there is content inside category array
if (is_array($product_id)) {
$product_id_count = count($product_id);
} else {
$product_id_count = 0;
}
if ($product_id_count > 0) {
$data['product_id'] = implode(',', $product_id);
} else {
$data['product_id'] = null;
}
return $data;
}
public function search_brand()
{
if (!isset($_POST['search_brand'])) {
show_404();
}
//get product name from form
$this->data['brand_id'] = $this->input->post('brand', TRUE);
if ($this->data['brand_id'] != '') {
//get all brands which only consist this brand_id
$this->db->select('*')->from('products')->where('brand_id', (int) $this->data['brand_id']);
$this->db->order_by('title', 'ASC');
$this->data['products'] = $this->db->get()->result();
} else {
//get all brands
$this->db->select('*')->from('products');
$this->db->order_by('priority', 'ASC');
$this->data['products'] = $this->db->get()->result();
}
//load view
$this->data['subview'] = 'admin/products/index';
$this->load->view('admin/templates/header', $this->data_header);
$this->load->view('admin/_layout_main', $this->data);
$this->load->view('admin/templates/footer');
}
public function search_category()
{
if (!isset($_POST['search_category'])) {
show_404();
}
//get product name from form
$this->data['category_id'] = $this->input->post('category', TRUE);
if ($this->data['category_id'] == '') {
$this->db->select('*')->from('products')->order_by('priority', 'ASC');
$this->data['products'] = $this->db->get()->result();
//load view
$this->data['subview'] = 'admin/products/index';
$this->load->view('admin/templates/header', $this->data_header);
$this->load->view('admin/_layout_main', $this->data);
$this->load->view('admin/templates/footer');
} else {
$this->db->select('*');
$this->db->from('products');
$this->db->join('category_product', 'category_product.id_product = products.id_products');
$this->db->where('category_product.id_category', (int) $this->data['category_id']);
$this->data['products'] = $this->db->get()->result();
//load view
$this->data['subview'] = 'admin/products/index';
$this->load->view('admin/templates/header', $this->data_header);
$this->load->view('admin/_layout_main', $this->data);
$this->load->view('admin/templates/footer');
}
}
function ajax_get_attributes()
{
if (!$this->input->is_ajax_request()) {
exit('No direct script access allowed');
}
$varian_id = $this->input->post('id_varian');
//get all attribute details
$this->db->select('id, attribute_detail')->from('product_attributes_detail')->where('product_attribute_id', $varian_id)->order_by('priority', 'ASC');
$data['attributes'] = $this->db->get()->result();
$this->load->view('admin/products/ajax_get_attributes', $data);
}
function upload_products()
{
if (!$_POST) {
redirect('admin/products');
}
//ini hanya contoh saja, perlu di mofif sesuai excel yg baru...
$config['upload_path'] = 'uploads/excel/';
$config['allowed_types'] = 'xlsx|xls';
$this->load->library('upload', $config);
if (!$this->upload->do_upload('userfile')) {
$this->session->set_flashdata('error', '<p style="background:red; color:white; padding:5px; font-weight:bold;">' . strip_tags($this->upload->display_errors()) . '</p>');
redirect('admin/products');
} else {
require_once APPPATH . 'third_party/PHPExcel/IOFactory.php';
$data = array('upload_data' => $this->upload->data());
$upload_data = $this->upload->data(); //Mengambil detail data yang di upload
$filename = $upload_data['file_name']; //Nama File
//ini_set('memory_limit', '-1');
$inputFileName = 'uploads/excel/' . $filename;
try {
$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
} catch (Exception $e) {
die('Error loading file :' . $e->getMessage());
}
$worksheet = $objPHPExcel->getActiveSheet()->toArray(null, true, true, true);
$numRows = count($worksheet);
for ($i = 1; $i < ($numRows + 1); $i++) {
if ($i > 50) {
break;
}
if ($i != 1) {
$nama_product = $worksheet[$i]["A"];
$sku = $worksheet[$i]["B"];
$merek = $worksheet[$i]["C"];
$kategori = $worksheet[$i]["D"];
$harga_normal = $worksheet[$i]["E"];
$harga_diskon = $worksheet[$i]["F"];
$panjang_cm = $worksheet[$i]["G"];
$lebar_cm = $worksheet[$i]["H"];
$tinggi_cm = $worksheet[$i]["I"];
$berat_cm = $worksheet[$i]["J"];
$is_indent = $worksheet[$i]["K"];
$varian = $worksheet[$i]["L"];
$short_descr_id = $worksheet[$i]["M"];
$short_descr_en = $worksheet[$i]["N"];
$long_descr_id = $worksheet[$i]["O"];
$long_descr_en = $worksheet[$i]["P"];
$kurir_pengiriman = $worksheet[$i]["Q"];
$is_new_arrivals = $worksheet[$i]["R"];
$is_featured = $worksheet[$i]["S"];
$is_best_sellers = $worksheet[$i]["T"];
$seo_judul = $worksheet[$i]["U"];
$seo_descr_meta = $worksheet[$i]["V"];
$dp_produk_persen = $worksheet[$i]["W"];
$durasi_info_indent = $worksheet[$i]["X"];
$is_product_active = $worksheet[$i]["Y"];
$is_restock = $worksheet[$i]["Z"];
$is_exc = $worksheet[$i]["AA"];
// query product
$query_products = $this->db->get_where('products', array(
'title' => $nama_product,
));
// query brands
$query_brands = $this->db->get_where('brands', array(
'brand' => $merek,
));
$id_brands = null;
if ($query_brands->num_rows() > 0) {
$id_brands = $query_brands->row()->id_brands;
}
// shipment method
$output_kurir_pengiriman = '';
$kurir_pengiriman = str_replace('.', ',', (string)$kurir_pengiriman);
$id_kurir_pengiriman = explode(',', $kurir_pengiriman);
// query shipment method
for ($j = 0; $j < count($id_kurir_pengiriman); $j++) {
$query_shipment_method = $this->db->get_where('shipment_method', array(
'id' => $id_kurir_pengiriman[$j],
));
if ($query_shipment_method->num_rows() > 0) {
$output_kurir_pengiriman .= $query_shipment_method->row()->name . ",";
}
}
$output_kurir_pengiriman = substr($output_kurir_pengiriman, 0, -1);
// data categories
$data_group_categories = [];
$group_categories = explode(', ', $kategori);
$cntr_categories = -1;
for ($j = 0; $j < count($group_categories); $j++) {
$each_categories = explode('>', $group_categories[$j]);
for ($k = 0; $k < count($each_categories); $k++) {
$cntr_categories++;
$data_group_categories[$cntr_categories] = $each_categories[$k];
}
}
// data varian
$data_group_varians = [];
$group_varians = explode(', ', $varian);
for ($j = 0; $j < count($group_varians); $j++) {
$data_group_varians[$j] = explode('>', $group_varians[$j]);
}
// status produk
if ($is_product_active == 'ya' || $is_product_active == 'yes') {
$is_product_active = 1;
} else {
$is_product_active = 0;
}
// best seller
if ($is_best_sellers == 'ya' || $is_best_sellers == 'yes') {
$is_best_sellers = 'yes';
} else {
$is_best_sellers = 'no';
}
// restock
if ($is_restock == 'ya' || $is_restock == 'yes') {
$is_restock = 'yes';
} else {
$is_restock = 'no';
}
// eksklusif
if ($is_exc == 'ya' || $is_exc == 'yes') {
$is_exc = 'yes';
} else {
$is_exc = 'no';
}
// new arrivals
if ($is_new_arrivals == 'ya' || $is_new_arrivals == 'yes') {
$is_new_arrivals = 'yes';
} else {
$is_new_arrivals = 'no';
}
// featured
if ($is_featured == 'ya' || $is_featured == 'yes') {
$is_featured = 'yes';
} else {
$is_featured = 'no';
}
// is_indent
if ($is_indent == 'ya' || $is_indent == 'yes') {
$is_indent = 'yes';
} else {
$is_indent = 'no';
}
// data products
$data_products = array(
"brand_id" => $id_brands,
"alias" => preg_replace('/\s+/', '-', $nama_product),
"description" => $short_descr_id,
"description_en" => $short_descr_en,
"long_description" => $long_descr_id,
"long_description_en" => $long_descr_en,
"shipment_method" => $output_kurir_pengiriman,
"best_seller" => $is_best_sellers,
"restock" => $is_restock,
"customer_id_exc" => $is_exc,
"new_arrival" => $is_new_arrivals,
"popular_product" => $is_featured,
"indent_dp" => $dp_produk_persen,
"meta_title" => $seo_judul,
"meta_description" => $seo_descr_meta,
"indent_time" => $durasi_info_indent,
"product_status" => $is_product_active,
);
// data product details
$data_product_details = array(
"weight" => $berat_cm,
"length" => $panjang_cm,
"width" => $lebar_cm,
"height" => $tinggi_cm,
"price" => $harga_normal,
"discounted_price" => $harga_diskon,
"is_indent" => $is_indent,
);
$id_product = null;
if ($query_products->num_rows() > 0) {
// update products
$id_product = $query_products->row()->id_products;
$upd_products = $this->db->update("products", $data_products, array('title' => $nama_product));
} else {
// insert products
$data_products['title'] = $nama_product;
if ($data_products['title'] != null) {
$this->db->insert("products", $data_products);
$id_product = $this->db->insert_id();
}
}
// query product details
$query_product_details = $this->db->get_where(
'product_details',
array(
'sku' => $sku,
)
);
$id_product_details = null;
if ($query_product_details->num_rows() > 0) {
// update product details
$id_product_details = $query_product_details->row()->id;
$upd_products = $this->db->update("product_details", $data_product_details, array(
'id' => $id_product_details,
'sku' => $sku,
));
} else {
// insert product details
$data_product_details['sku'] = $sku;
$data_product_details['product_id'] = $id_product;
if ($data_product_details['weight'] != null) {
$this->db->insert("product_details", $data_product_details);
$id_product_details = $this->db->insert_id();
}
}
if ($id_product != null) {
// delete categories by id product
if ($i <= 2) {
$del_categories = $this->db->delete('category_product', array('id_product' => $id_product));
$del_shipment = $this->db->delete('shipment_method_product', array('product_id' => $id_product));
}
for ($j = 0; $j < count($id_kurir_pengiriman); $j++) {
// insert shipment product
$query_check_shipment_product =
$this->db->get_where('shipment_method_product', array(
"product_id" => $id_product,
"shipment_method_id" => $id_kurir_pengiriman[$j],
));
if ($query_check_shipment_product->num_rows() == 0) {
$ins_shipment_product = $this->db->insert('shipment_method_product', array(
"product_id" => $id_product,
"shipment_method_id" => $id_kurir_pengiriman[$j],
));
}
}
for ($j = 0; $j < count($data_group_categories); $j++) {
$this_val_for_search = strtolower($data_group_categories[$j]);
$query_categories = $this->db->select('*')
->from('categories')
->where('category', $this_val_for_search)
->or_where('category_en', $this_val_for_search)
->or_where('alias', $this_val_for_search)
->or_where('alias_en', $this_val_for_search)
->get();
if ($query_categories->num_rows() > 0) {
$id_categories = $query_categories->row()->id_categories;
// insert category product
$ins_category_product = $this->db->insert('category_product', array(
"id_product" => $id_product,
"id_category" => $id_categories,
));
}
}
}
if ($id_product != null && $id_product_details != null) {
// delete varians by id product
if ($i <= 2) {
$del_varians = $this->db->delete('product_combination', array(
'product_id' => $id_product,
'product_details_id' => $id_product_details,
));
}
for ($j = 0; $j < count($data_group_varians); $j++) {
$key_product_attributes = strtolower($data_group_varians[$j][0]);
$key_product_attributes_detail = strtolower($data_group_varians[$j][1]);
$query_product_attributes = $this->db->select("*")
->from("product_attributes")
->where('product_attribute', $key_product_attributes)
->or_where('product_attribute_en', $key_product_attributes)->get();
if ($query_product_attributes->num_rows() > 0) {
$attribute_id = $query_product_attributes->row()->id;
$query_product_detail_attributes = $this->db->select("*")
->from("product_attributes_detail")
->where('attribute_detail', $key_product_attributes_detail)
->or_where('attribute_detail_en', $key_product_attributes_detail)
->where('product_attribute_id', $attribute_id)->get();
if ($query_product_detail_attributes->num_rows() > 0) {
$attribute_detail_id = $query_product_detail_attributes->row()->id;
$ins_p_combination = $this->db->insert('product_combination', array(
'product_id' => $id_product,
'product_details_id' => $id_product_details,
'attribute_id' => $attribute_id,
'attribute_detail_id' => $attribute_detail_id,
));
}
}
}
}
}
}
unlink('uploads/excel/' . $filename);
$this->session->set_flashdata('success', '<p style="background:green; color:white; padding:5px; font-weight:bold;">Upload produk Sukses</p>');
redirect('admin/products');
}
}
//duplicate products
public function duplicate_product($product_id = null)
{
if ($product_id == null) {
show_404();
}
//check if id exist in current table
$count = $this->db->select('id_products')->from('products')->where('id_products', $product_id)->get()->num_rows();
if ($count == 0) {
show_404();
}
//select current chosen product
$this->db->select('*')->from('products')->where('id_products', $product_id);
$current_product = $this->db->get()->row();
//get title, and check the title how many title is similar exist..
$current_product_title = $current_product->title;
$this->db->select('id_products')->from('products')->like('title', $current_product_title);
$count_title = $this->db->get()->num_rows();
//insert to new row
$data = array(
'brand_id' => $current_product->brand_id,
'title' => $current_product->title . ' (' . ($count_title + 1) . ')',
'alias' => $current_product->alias . '-' . ($count_title + 1),
'description' => $current_product->description,
'description_en' => $current_product->description_en,
'long_description' => $current_product->long_description,
'long_description_en' => $current_product->long_description_en,
'additional_information' => $current_product->additional_information,
'additional_information_en' => $current_product->additional_information_en,
'product_status' => '0',
'new_arrival' => $current_product->new_arrival,
'best_seller' => $current_product->best_seller,
'restock' => $current_product->restock,
'customer_id_exc' => $current_product->is_exc,
'popular_product' => $current_product->popular_product,
'meta_description' => $current_product->meta_description,
);
$this->db->insert('products', $data);
$new_product_id = $this->db->insert_id();
//Copy category as well
$this->db->select('id_category')->from('category_product')->where('id_product', $product_id);
$current_categories = $this->db->get()->result();
foreach ($current_categories as $current_category) {
$data = array(
'id_product' => $new_product_id,
'id_category' => $current_category->id_category,
);
$this->db->insert('category_product', $data);
}
//Copy product details as well
$current_product_details = $this->db->select('*')->from('product_details')->where('product_id', $product_id)->get()->result();
foreach ($current_product_details as $detail) {
$data = array(
'product_id' => $new_product_id,
'sku' => $detail->sku,
'weight' => $detail->weight,
'price' => $detail->price,
'discounted_price' => $detail->discounted_price,
'length' => $detail->length,
'width' => $detail->width,
'height' => $detail->height,
'is_indent' => $detail->is_indent
);
$this->db->insert('product_details', $data);
$new_product_detail_id = $this->db->insert_id();
//get old product images for current product details
$old_product_images = $this->db->select('*')->from('product_images')->where('product_id', $product_id)->where('product_details_id', $detail->id)->get()->result();
foreach ($old_product_images as $old_image) {
//insert into new image row
$data = array(
'product_id' => $new_product_id,
'product_details_id' => $new_product_detail_id,
'title' => $old_image->title,
'title_en' => $old_image->title_en,
'image' => $old_image->image,
'status' => $old_image->status,
'priority' => $old_image->priority,
'alt' => $old_image->alt
);
$this->db->insert('product_images', $data);
}
//insert new stock of 0 stock for each detail
$data = array(
'id_product' => $new_product_id,
'id_product_detail' => $new_product_detail_id,
'stock' => 0,
'warehouse_id' => 1
);
$this->db->insert('stock', $data);
}
$user_id = $this->session->userdata('admin')['id'];
$activity = 'User melakukan duplikat produk(' . $current_product_title . ')';
log_activity($user_id, $activity);
$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Produk berhasil di diduplikat. Sikahkan edit lebih lanjut.</p>');
redirect('admin/products');
}
}