https://t.me/RX1948
Server : Apache/2.4.18 (Ubuntu)
System : Linux canvaswebdesign 3.13.0-71-generic #114-Ubuntu SMP Tue Dec 1 02:34:22 UTC 2015 x86_64
User : oppastar ( 1041)
PHP Version : 7.0.33-0ubuntu0.16.04.15
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
Directory :  /var/www/indolok.id/application/controllers/admin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/indolok.id/application/controllers/admin/Products.old
<?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;
	private $image1_filename = NULL;
	private $image2_filename = NULL;
	private $image3_filename = NULL;
	private $image4_filename = NULL;
	private $image5_filename = NULL;

	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('size_m');  
		$this->load->library('image_lib');
		$this->load->helper('form');

		if (!in_array('products', $this->data['allowed_module'])) {
			$this->data['allowed'] = false;
		} else {
			$this->data['allowed'] = true;
		}
	}
		
	//this is to list all products
	public 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 {

			//pagination in action. 100 results per page
			$this->load->library('pagination');
			$config = array();
			$this->load->helper('pagination_helper');
			$config = pagination_format(); //function from helper file
			$config['base_url'] = base_url() . 'admin/products/index/';
			$config['per_page'] = 100;
			$config['uri_segment'] = 4; 
			$config['total_rows'] = $this->product_m->record_count(); 
			$this->pagination->initialize($config);
			$this->data['products'] = $this->product_m->get_all_products($config['per_page'],$this->uri->segment($config['uri_segment']));  
			$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'); 	
    }

	
	//to ADD a new product 
	public function add() {

		if($this->data['allowed'] == false) { redirect('admin/dashboard'); }

		$this->data['new_product']			= 'yes'; 
		
		/*get product data*/
		$this->data['products'] 			= $this->product_m->get_new(); 	
		$this->data['parent_categories'] 	= $this->category_m->get_parent_categories();   
		$this->data['brands'] 				= $this->brand_m->get_brands();

		/*get stock*/
		$this->data['stock'] = $this->db->select('*')->from('warehouse')->order_by('location','ASC')->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 product code already exist
			$product_code = $this->input->post('product_code');
			$this->db->select('product_code')->from('products')->where('product_code', $product_code);
			$count_product_code = $this->db->get()->num_rows();
			if($count_product_code > 0) {
				//means product code already exist...must exit with error notification
				$this->session->set_flashdata('result', "<br><p style='background:red; color:white; padding:5px; font-weight:bold;'>Product Code already exist.</p>");
				redirect('admin/products/add');
				
			}

			//check if product code already exist
			$sku = $this->input->post('sku');
			$this->db->select('sku')->from('products')->where('sku', $sku);
			$count_sku = $this->db->get()->num_rows();
			if($count_sku > 0) {
				//means product code already exist...must exit with error notification
				$this->session->set_flashdata('result', "<br><p style='background:red; color:white; padding:5px; font-weight:bold;'>SKU already exist.</p>");
				//$this->add();
				redirect('admin/products/add');
			}

			
			

			$data = $this->table_data_processing();

			$product_id = (int) $this->product_m->add_product($data);

			/*INSERT INTO SHIPMENT*/
			$shipments_id 		= $this->input->post('shipment_id');
			if (!in_array("3", $shipments_id))
			{
				$shipments_id[]		= '3';
			}
			$shipments_id_count = count($shipments_id);

			if ($shipments_id_count > 0) {
				$shipments_keywords = '';
				foreach ($shipments_id as $shipment_id) {
					$data_shipment = array(
					   'product_id'			=> $product_id,
					   'shipment_method_id'	=> $shipment_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,
				);

				$this->db->where('id_products', $product_id);
				$this->db->update('products', $data_shipments); 

			} 
			else {
				$data_shipment = array(
					'product_id' => $product_id,
					'shipment_method_id'=> NULL,
				);

				$this->db->insert('shipment_method_product', $data_shipment); 
			}

			/*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) {

				//add to category_product table
				$categories_keywords = '';
				
				foreach ($categories_id as $category_id) {
				
					$data = array(
					   'id_product' => $product_id,
					   'id_category' => $category_id,
					);

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

					//add to products table, categories column
					$this->db->select('category')->from('categories')->where('id_categories', $category_id);

					//append all categories keywords to this variable
					$categories_keywords .= $this->db->get()->row()->category . ',';
				}

				$data = array(
					'categories' => $categories_keywords,
				);

				$this->db->where('id_products', $product_id);
				$this->db->update('products', $data); 

			} else {

				$data = array(
					   'id_product' => $product_id,
					   'id_category' => NULL,
				);

				$this->db->insert('category_product', $data); 
			} 
			/*INSERT INTO CATEGORY*/

			$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Product Added Successful</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 EDIT product in admin
	public function edit($id) {

		$this->data['new_product']	= 'no'; 

		$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->data['products'] 			= $this->product_m->get($id);  
		$this->data['parent_categories'] 	= $this->category_m->get_parent_categories();

		//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();

		//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 stock*/
		$this->data['stock'] = $this->db->select('*')->from('warehouse')->order_by('location','ASC')->get()->result();

		/*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;
		
		//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); 
		$this->form_validation->set_error_delimiters('<div class="error">', '</div>');

		if($this->form_validation->run($this) == TRUE) {

			//check if product code already exist
			$product_code = $this->input->post('product_code');
			$this->db->select('product_code')->from('products')->where('product_code', $product_code)->where('id_products !=',$id);
			$count_product_code = $this->db->get()->num_rows();
			if($count_product_code > 0) {
				//means product code already exist...must exit with error notification
				$this->session->set_flashdata('result', "<br><p style='background:red; color:white; padding:5px; font-weight:bold;'>Product Code already exist.</p>");
				redirect('admin/products/edit/'.$id);
				
			}

			//check if product code already exist
			$sku = $this->input->post('sku');
			$this->db->select('sku')->from('products')->where('sku', $sku)->where('id_products !=',$id);
			$count_sku = $this->db->get()->num_rows();
			if($count_sku > 0) {
				//means product code already exist...must exit with error notification
				$this->session->set_flashdata('result', "<br><p style='background:red; color:white; padding:5px; font-weight:bold;'>SKU already exist.</p>");
				//$this->add();
				redirect('admin/products/edit/'.$id);
			}

			/*UPDATE INTO WAREHOUSE*/
			if($this->data['role'] == 'super admin'){
				/*delete current stock*/
				$this->db->where('id_product', $id);
				$this->db->delete('stock');
				/*delete current stock*/

				$warehouse_id 		= $this->input->post('warehouse_id');
				$warehouse_stock 	= $this->input->post('warehouse_stock');
				for($a=0;$a<count($warehouse_id);$a++){
					$new_stock = array(
						'id_product' 	=> $id, 
						'warehouse_id'	=> $warehouse_id[$a],
						'stock'			=> $warehouse_stock[$a]
					);
					$this->db->insert('stock', $new_stock); 
				}
			}
			

			/*UPDATE INTO WAREHOUSE*/

			

			$data = $this->table_data_processing();

			$this->product_m->edit_product($id, $data); 

			/*UPDATE INTO SHIPMENT*/
			$shipments_id 		= $this->input->post('shipment_id');
			if (!in_array("3", $shipments_id))
			{
				$shipments_id[]		= '3';
			}
			$shipments_id_count = count($shipments_id);

			if ($shipments_id_count > 0) {

				//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(
					   'product_id'			=> $id,
					   'shipment_method_id'	=> $shipment_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,
				);

				$this->db->where('id_products', $id);
				$this->db->update('products', $data_shipments); 

			} 
			else {
				//firstly, we delete all existing records inside current table
				$this->db->where('product_id', $id);
				$this->db->delete('shipment_method_product');

				$data_shipment = array(
					'product_id' => $id,
					'shipment_method_id'=> NULL,
				);

				$this->db->insert('shipment_method_product', $data_shipment); 
			}

			//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) {

				//firstly, we delete all existing category records inside category_product table
				$this->db->where('id_product', $id);
				$this->db->delete('category_product');

				//secondly, we insert new category_id
				$categories_keywords = '';
				foreach ($categories_id as $category_id) {
				
					$data = array(
					   'id_product' => $id,
					   'id_category' => $category_id,
					);

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

					//add to products table, categories column
					$this->db->select('category')->from('categories')->where('id_categories', $category_id);

					//append all categories keywords to this variable
					$categories_keywords .= $this->db->get()->row()->category . ',';
				}

				$data = array(
					'categories' => $categories_keywords,
				);

				$this->db->where('id_products', $id);
				$this->db->update('products', $data); 	

			} else {

				//no category is checked at edit page

				//firstly, we delete all existing category records inside category_product table
				$this->db->where('id_product', $id);
				$this->db->delete('category_product');

				//secondly, we insert new category_id of NULL
				$data = array(
					   'id_product' => $id,
					   'id_category' => NULL,
				);

				$this->db->insert('category_product', $data); 
			}

			$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Product Edit Successful</p>');
			redirect('admin/products/edit/' . $id);			
		}  
		
		$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
	public function delete($id) {

		if($this->data['allowed'] == false || $this->data['role'] == 'admin') { redirect('admin/dashboard'); }

		//check if id exist. If not exist, show 404.
		$count = $this->product_m->count_exist($id);
		
		if ($count == 0) {  
			//page not exist 
			show_404();
		}	

		//delete image from server

		for ($i = 1; $i <= 5; $i++) { 

			//check if there is an existing image on product table
			$this->db->select("image$i")->from('products')->where('id_products', (int) $id);
			$image = $this->db->get()->row_array(); //use array insted of object
			
			if ($image["image$i"] != '' || $image["image$i"] != NULL) {
				
				//Delete the actual image file from server. FCPATH is codeigniter base path
				
				if (file_exists(base_url() . 'uploads/product/' . $image["image$i"])) {
					unlink(FCPATH .'/uploads/product/'. $image["image$i"]);
				}

				if (file_exists(base_url() . 'uploads/product/large/' . $image["image$i"])) {
					unlink(FCPATH .'/uploads/product/large/'. $image["image$i"]);
				}

				if (file_exists(base_url() . 'uploads/product/small/' . $image["image$i"])) {
					unlink(FCPATH .'/uploads/product/small/'. $image["image$i"]);
				}

				if (file_exists(base_url() . 'uploads/product/thumbnail/' . $image["image$i"])) {
					unlink(FCPATH .'/uploads/product/thumbnail/'. $image["image$i"]);
				}
			}		
		}

		$this->product_m->delete($id);

		$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Product Deleted Successful</p>');
		redirect('admin/products');
	}

	//to delete a product
	public function delete_product_detail($id_product, $id_product_detail) {

		//check if id_product_detail exist. If not exist, show 404.
		$this->db->select('id_product_details')->from('product_details')->where('id_product_details', $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(); }	

		$this->db->where('id_product_details', $id_product_detail);
		$this->db->delete('product_details');
		
		$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Product Detail Deleted Successfully</p>');
		redirect('admin/products/edit/' . $id_product);
	}

	//process image
	private function image_processing($image, $max_width, $max_height) {

		//check & processing IMAGE 1	
		if ($_FILES[$image]['size'] !== 0) { 	

			$config['upload_path'] 		= './uploads/product/'; 
			$config['allowed_types'] 	= 'jpg|png'; 
			$config['max_size']			= '500';
			$config['max_width']  		= $max_width;
			$config['max_height']  		= $max_height;  

			$this->load->library('upload', $config); 
			$this->upload->initialize($config); 

			if (!$this->upload->do_upload($image)) {
				echo $this->upload->display_errors(); exit();
				$this->session->set_flashdata('{$image}-error', '<br>
				<p style="background:red; color:white; padding:5px; font-weight:bold;">Image Upload Error. Wrong format or size.</p>');
				
				redirect('admin/products/add');
			
			} else {
				$image = $this->upload->data();
				$this->resize_image($image['file_name']);
				return  $image['file_name'];
			}
		}
	}

	//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(
			'product_code' 				=> $this->security->xss_clean($this->input->post('product_code')), 
			'sku' 						=> $this->security->xss_clean($this->input->post('sku')), 
			'title' 					=> $this->security->xss_clean($this->input->post('product_name')), 
			'alias' 					=> url_title($this->security->xss_clean($this->input->post('product_name'))),
			'sale_price' 				=> $this->security->xss_clean($this->input->post('sale_price')),
			'discounted_price' 			=> $this->security->xss_clean($this->input->post('discounted_price')),
			'priority' 					=> $this->input->post('priority'),
		);

		//image upload
		if (isset($this->image1_filename)) {
			$data['image1'] = $this->image1_filename; 
		} 

		if (isset($this->image2_filename)) {
			$data['image2'] = $this->image2_filename;
		} 

		if (isset($this->image3_filename)) {
			$data['image3'] = $this->image3_filename;
		} 

		if (isset($this->image4_filename)) {
			$data['image4'] = $this->image4_filename;
		} 

		if (isset($this->image5_filename)) {
			$data['image5'] = $this->image5_filename;
		} 

		return $data;
	}


	//To delete product image file from server, and from database
	public function delete_image($id = NULL, $image_name) { 

		$count = $this->product_m->count_exist($id); 

		if ($id == NULL || $image_name == NULL || $count == 0) {	
			redirect('admin/brands');
		}

		//get image file name for deletion
		$this->db->select($image_name)->from('products')->where('id_products', (int) $id);
		$image = $this->db->get()->row();

		switch ($image_name) {

			case 'image1':
				//Delete the actual image file from server. FCPATH is codeigniter base path
				
				if (file_exists(base_url() . 'uploads/product/' . $image->image1)) {
					unlink(FCPATH .'/uploads/product/'. $image->image1);
				}

				if (file_exists(base_url() . 'uploads/product/large/' . $image->image1)) {
					unlink(FCPATH .'/uploads/product/large/'. $image->image1);
				}	

				if (file_exists(base_url() . 'uploads/product/small/' . $image->image1)) {
					unlink(FCPATH .'/uploads/product/small/'. $image->image1);
				}

				if (file_exists(base_url() . 'uploads/product/thumbnail/' . $image->image1)) {
					unlink(FCPATH .'/uploads/product/thumbnail/'. $image->image1);
				}

				//Delete image field from database
				$data = array( 
					'image1' => NULL,
				);
				break;

			case 'image2':
				//Delete the actual image file from server. FCPATH is codeigniter base path
				if (file_exists(base_url() . 'uploads/product/' . $image->image2)) {
					unlink(FCPATH .'/uploads/product/'. $image->image2);
				}

				if (file_exists(base_url() . 'uploads/product/large/' . $image->image2)) {
					unlink(FCPATH .'/uploads/product/large/'. $image->image2);
				}	

				if (file_exists(base_url() . 'uploads/product/small/' . $image->image2)) {
					unlink(FCPATH .'/uploads/product/small/'. $image->image2);
				}

				if (file_exists(base_url() . 'uploads/product/thumbnail/' . $image->image2)) {
					unlink(FCPATH .'/uploads/product/thumbnail/'. $image->image2);
				}

				//Delete image field from database
				$data = array( 
					'image2' => NULL,
				);
				break;	

			case 'image3':
				//Delete the actual image file from server. FCPATH is codeigniter base path
				if (file_exists(base_url() . 'uploads/product/' . $image->image3)) {
					unlink(FCPATH .'/uploads/product/'. $image->image3);
				}

				if (file_exists(base_url() . 'uploads/product/large/' . $image->image3)) {
					unlink(FCPATH .'/uploads/product/large/'. $image->image3);
				}	

				if (file_exists(base_url() . 'uploads/product/small/' . $image->image3)) {
					unlink(FCPATH .'/uploads/product/small/'. $image->image3);
				}

				if (file_exists(base_url() . 'uploads/product/thumbnail/' . $image->image3)) {
					unlink(FCPATH .'/uploads/product/thumbnail/'. $image->image3);
				}

				//Delete image field from database
				$data = array( 
					'image3' => NULL,
				);
				break;	

			case 'image4':
				//Delete the actual image file from server. FCPATH is codeigniter base path
				if (file_exists(base_url() . 'uploads/product/' . $image->image4)) {
					unlink(FCPATH .'/uploads/product/'. $image->image4);
				}

				if (file_exists(base_url() . 'uploads/product/large/' . $image->image4)) {
					unlink(FCPATH .'/uploads/product/large/'. $image->image4);
				}	

				if (file_exists(base_url() . 'uploads/product/small/' . $image->image4)) {
					unlink(FCPATH .'/uploads/product/small/'. $image->image4);
				}

				if (file_exists(base_url() . 'uploads/product/thumbnail/' . $image->image4)) {
					unlink(FCPATH .'/uploads/product/thumbnail/'. $image->image4);
				}

				//Delete image field from database
				$data = array( 
					'image4' => NULL, 
				);
				break;	

			case 'image5':
				//Delete the actual image file from server. FCPATH is codeigniter base path
				if (file_exists(base_url() . 'uploads/product/' . $image->image5)) {
					unlink(FCPATH .'/uploads/product/'. $image->image5);
				}

				if (file_exists(base_url() . 'uploads/product/large/' . $image->image5)) {
					unlink(FCPATH .'/uploads/product/large/'. $image->image5);
				}	

				if (file_exists(base_url() . 'uploads/product/small/' . $image->image5)) {
					unlink(FCPATH .'/uploads/product/small/'. $image->image5);
				}

				if (file_exists(base_url() . 'uploads/product/thumbnail/' . $image->image5)) {
					unlink(FCPATH .'/uploads/product/thumbnail/'. $image->image5);
				}

				//Delete image field from database
				$data = array( 
					'image5' => NULL,
				);
				break;	
		}

		$this->db->where('id_products', (int) $id);
		$this->db->update('products', $data);	

		$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Image Delete Successful</p>');
		
		redirect('admin/products/edit/' . $id); 
	}

	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'); 

		}
	}	

	public function change_product_ordering() {

		if(!isset($_POST['change_ordering'])) {
			show_404();
		}

		$data = array(
			'website_product_ordering' => $this->input->post('change_product_ordering')
		);
		$this->db->where('id_configuration', 1);
		$this->db->update('configuration', $data);

		$this->session->set_flashdata('success', "<br><p style='background:green; color:white; padding:5px; font-weight:bold;'>Product Ordering changed to  {$this->input->post('change_product_ordering')}</p>");
		redirect('admin/products');
	}

	public function ajax_getproductdetails() {

		//test if ajax call to prevent direct access
		//this script causing error, ajax cannot request
		/* if (!$this->input->is_ajax_request()) {
   			exit('No direct script access allowed');
		} */

		if (empty($_POST))  {show_404();}

		$product_id = (int) $this->input->post('id_product');

		//get product detail
		$this->db->select('id_products, title, alias, product_status')->from('products')->where('id_products', $product_id);
		$data['product'] = $this->db->get()->row();

		$this->load->view('ajax/ajax_quickedit_product', $data); 		
	}

	public function quick_update_product() {

		if(!isset($_POST['quickeditproduct'])) {
			show_404();
		}

		$product_id = (int) $this->input->post('product_id');
		$product_status = $this->input->post('product_status'); 

		//update product
		$data = array(
			'product_status' => $product_status
		);

		$this->db->where('id_products', $product_id);
		$this->db->update('products', $data); 

		//UPDATE STOCK & SKU
		$sku_array = $this->input->post('sku'); 
		$price_array = $this->input->post('price'); 
		$discounted_price_array = $this->input->post('discounted_price'); 
		$weight_array = $this->input->post('weight'); 
		$stock_array = $this->input->post('stock'); 

		$count_stock = count($stock_array);			

		//firstly, we delete all existing records inside stocks table
		$this->db->where('product_id', $product_id);
		$this->db->delete('product_details');

		//then we fill in the data in
		for($i = 0; $i < 10; $i++ ) { 

			if ($stock_array[$i] != '') {

				$attributes_array = $_POST["select{$i}"];
				$attributes_text = implode(' ',$attributes_array);
				
				$data = array(
					'product_id' => $product_id,
					'sku' => $sku_array[$i],
					'price' => $price_array[$i],
					'stock' => $stock_array[$i],
					'attributes' => $attributes_text,
					'weight' => $weight_array[$i],
					'discounted_price' => $discounted_price_array[$i]
				);
				$this->db->insert('product_details', $data); 
			}	
		}

		$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Edit Product Successful.</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
		$this->db->select('id_products')->from('products')->where('id_products', $product_id);
		$count = $this->db->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,
			'created_at' => $current_product->created_at,
			'image1'	 => $current_product->image1,
			'image2'	 => $current_product->image2,
			'image3'	 => $current_product->image3,
			'image4'	 => $current_product->image4,
			'image5'	 => $current_product->image5,
			'product_status'	 => '0',
			'new_arrival'	 => $current_product->new_arrival,
			'best_seller'	 => $current_product->best_seller,
			'popular_product'	 => $current_product->popular_product,
			'meta_description'	 => $current_product->meta_description,
			'meta_keywords'	 => $current_product->meta_keywords,		
		);

		$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);
		}

		$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Product Duplicate Successful.</p>');
			redirect('admin/products');

	}

	public function ajax_add_quantitydiscount() {

		//test if ajax call to prevent direct access
		if (!$this->input->is_ajax_request()) {
   			exit('No direct script access allowed');
		}

		$id_product = (int) $this->input->post('id_product');
		$min_quantity = (int) $this->input->post('min_quantity');
		$quantity_discount = $this->input->post('quantity_discount');

		//check if min quantity already exist 
		$this->db->select('id_quantity_discount')->from('quantity_discount')->where('product_id', $id_product)->where('min_quantity', $min_quantity);
		$count = $this->db->get()->num_rows();

		if ($count == 0) {
			//add quantity discount to quantity discount table 
			$data = array(
				'product_id' => $id_product,
				'min_quantity' => $min_quantity,
				'discount_percentage' => $quantity_discount
			);

			$this->db->insert('quantity_discount', $data);
		
		} else {
			//update quantity discount
			$data = array(
               'discount_percentage' => $quantity_discount
            );

			$this->db->where('product_id', $id_product); 
			$this->db->where('min_quantity', $min_quantity);
			$this->db->update('quantity_discount', $data); 
		}

		//get all quantity discount
		$this->db->select('*')->from('quantity_discount')->where('product_id', $id_product)->order_by('min_quantity', 'ASC');
		$data['quantity_discount'] = $this->db->get()->result();

		$this->load->view('admin/products/ajax_addquantitydiscount', $data);
	}

	public function ajax_delete_quantitydiscount($id_quantitydiscount = NULL) {

		if ($id_quantitydiscount == NULL) { show_404(); }
        //check if product exist
        $this->db->select('id_quantity_discount')->from('quantity_discount')->where('id_quantity_discount', $id_quantitydiscount);
        $count = $this->db->get()->num_rows();
        if($count == 0) {show_404();}  

		//get product id 
		$this->db->select('product_id')->from('quantity_discount')->where('id_quantity_discount', $id_quantitydiscount);
		$product_id = $this->db->get()->row()->product_id;

		//delete id 
		$this->db->where('id_quantity_discount', $id_quantitydiscount);
		$this->db->delete('quantity_discount'); 

		//get all quantity discount
		$this->db->select('*')->from('quantity_discount')->where('product_id', $product_id)->order_by('min_quantity', 'ASC');
		$data['quantity_discount'] = $this->db->get()->result();

		$this->load->view('admin/products/ajax_addquantitydiscount', $data);

	} 

	public function ajax_get_link_products() {

		//test if ajax call to prevent direct access
		if (!$this->input->is_ajax_request()) {
   			exit('No direct script access allowed');
		} 
		
		$category_id = (int) $this->input->post('category_id');

		//get all products belongs to the category
		$this->db->select('id_product')->from('category_product')->where('id_category', $category_id);
		$data['id_products'] = $this->db->get()->result();

		$this->load->view('admin/products/ajax_get_link_products', $data);
	}	

	public function ajax_add_link_products() {

		//test if ajax call to prevent direct access
		if (!$this->input->is_ajax_request()) {
   			exit('No direct script access allowed');
		} 
		
		$data['current_product_id'] = (int) $this->input->post('current_product_id');
		$link_product_id = (int) $this->input->post('link_product_id');

		$data_insert = array(
			'product_id' => $data['current_product_id'],
			'link_to_product_id' => $link_product_id
		);

		$this->db->insert('product_link', $data_insert); 

		$this->load->view('admin/products/ajax_add_link_products', $data);
	}	

	public function delete_link_product($link_id, $product_id) {

		$this->db->where('id_product_link', $link_id);
		$this->db->delete('product_link');

		$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Product Link Deleted Successful.</p>');
		redirect('admin/products/edit/' . $product_id);
	}

	public function upload_products() {

		//upload products data
		if(!isset($_POST['upload_csv'])) { show_404(); }

		//check if the uploaded file is csv format
		$mimes = array('application/vnd.ms-excel','text/plain','text/csv','text/tsv');
		
		if(in_array($_FILES['userfile']['type'],$mimes)){

			ini_set('auto_detect_line_endings', TRUE); //to detect line ending

			//continue import operation
			//open the csv file and put into variable
			$file = fopen($_FILES['userfile']['tmp_name'],'r') or die('cannot open file');

			//initialize array
	   		$csv_data = array();

			//if not reach end of file...
			while (!feof($file)) {
				//put the csv into array..
				$csv_data[] = fgetcsv($file, 10000, '~'); //file, length, separator..
			}
	   		fclose($file); //close the file

	   		/* echo '<pre>';
	   		print_r($csv_data);
	   		echo '</pre>';
	   		exit(); */

			 $row_number = 0;

			 foreach ($csv_data as $item) {

				$row_number = $row_number + 1;
			
				//skip the 1st row...
				if($row_number != 1) {

					if(empty($item)) {continue;} //if array is empty, then continue to next iteration and bypass below script..

					//check if product code already exist, if already exist, update the row, else, insert new
					$this->db->select('product_code')->from('products')->where('product_code', $item[0]);
					$count_sku = $this->db->get()->num_rows();
					
					if($count_sku > 0) {

						//Product Code already exist. so update only...
						//add to products table
						$data = array(
							'title' => $item[1],
							'alias' => url_title(trim($item[1])),
							'description' => $item[2],
							'long_description' => $item[3],
							'image1' => trim($item[4]),
							'image2' => trim($item[5]),
							'image3' => trim($item[6]),
							'image4' => trim($item[7]),
							'image5' => trim($item[8]),
							'product_type' => $item[9],
							'competitor_price' => $item[11],
							'sale_price' => $item[12],
							'discounted_price' => $item[13],
							'minimum_stock' => $item[14],
							'dimension_weight' => $item[17],
							'dimension_length' => $item[18],
							'dimension_width' => $item[19],
							'dimension_height' => $item[20],
							'best_seller' => $item[21],
							'product_status' => $item[24],
							'new_arrival' => $item[25],
							'popular_product' => $item[26],
							'is_backorder' => $item[27],
							'is_discontinue' => $item[28],
							'is_backorder' => $item[27],
							'is_delete' => 'no',
							'meta_description' => strip_tags($item[2]), //need to remove html tag
							'text_satuan_jual' => $item[29],
							'golongan_obat' => $item[30],
							'is_sale' => $item[33]
						);

						//BRANDS
						$this->db->select('id_brands')->from('brands')->where('brand', trim($item[10]));
						$brand = $this->db->get()->row();
						if(count($brand) > 0) {
							$data['brand_id'] = $brand->id_brands;
						} else {
							$data['brand_id'] = NULL;
						}

						//update into products table
						$this->db->where('product_code', $item[0]);
						$this->db->update('products', $data); 

						//get product_id
						$this->db->select('id_products')->from('products')->where('product_code', $item[0]);
						$product_id = $this->db->get()->row()->id_products;

						//SATUAN JUAL & SATUAN BELI

						//first, delete all satuan jual beli dari tabel unit_conversion
						$this->db->where('product_id', $product_id);
						$this->db->delete('unit_convertion');

						$satuan_jual = $item[31];
						$satuan_beli = $item[32];
						$data_conversion = array();

						$data_conversion['product_id'] = $product_id;

						//get satuan jual id
						$this->db->select('id_conversion')->from('conversion')->where('conversion', $satuan_jual);
						$satuan_jual_id = $this->db->get()->row();

						if(count($satuan_jual_id)>0) {
							$data_conversion['satuan_jual_id'] = $satuan_jual_id->id_conversion;
						} 

						//satuan beli
						if (strpos($satuan_beli, '|') == true) {

							$satuan_beli_array = explode('|', $satuan_beli);

							foreach ($satuan_beli_array as $item_satuan_beli) {

								$satuan_beli_content = explode('-', $item_satuan_beli);

								$this->db->select('id_conversion')->from('conversion')->where('conversion', trim($satuan_beli_content[0]));
								$satuan_beli_id = $this->db->get()->row();

								if(count($satuan_beli_id)>0) {
									
									$data_conversion['satuan_beli_id'] = $satuan_beli_id->id_conversion;
									$data_conversion['konversi'] = trim($satuan_beli_content[1]);

									//insert into unit conversion
									$this->db->insert('unit_convertion', $data_conversion);
								}	
							}

						} else {

							//satuan beli hanya ada 1
							$satuan_beli_array = explode('-', $satuan_beli);

							//get satuan beli id
							$this->db->select('id_conversion')->from('conversion')->where('conversion', trim($satuan_beli_array[0]));
							$satuan_beli_id = $this->db->get()->row();	

							if(count($satuan_beli_id)>0) {

								$data_conversion['satuan_beli_id'] = $satuan_beli_id->id_conversion;
								$data_conversion['konversi'] = trim($satuan_beli_array[1]);

								//insert into unit conversion
								$this->db->insert('unit_convertion', $data_conversion);
							}
						}

						//ACTIVE INGREDIENTS
						//first, delete all active ingredients dari tabel active_ingredients_products
						$this->db->where('product_id', $product_id);
						$this->db->delete('active_ingredients_products');

						$active_ingredients = $item[23];

						if (strpos($active_ingredients, '|') == true) {
						
							//this product has more than 1 active ingredients
							$active_ingredients_array = explode('|', $active_ingredients);

							for ($i=0; $i<count($active_ingredients_array); $i++) { 
								
								//get active ingredient id
								$this->db->select('id')->from('active_ingredients')->where('name', trim($active_ingredients_array[$i]));
								$active_ingredients_id = $this->db->get()->row();

								if(count($active_ingredients_id) > 0) {
									$data = array(
										'product_id' => $product_id,
										'active_ingredients_id' => $active_ingredients_id->id,
									);
									$this->db->insert('active_ingredients_products', $data);
								} 
							}

						} else {	

							//this product has only 1 active ingredients
							//get active ingredient id
							$this->db->select('id')->from('active_ingredients')->where('name', trim($active_ingredients));
							$active_ingredients_id = $this->db->get()->row();

							if(count($active_ingredients_id) > 0) {
								$data = array(
									'product_id' => $product_id,
									'active_ingredients_id' => $active_ingredients_id->id,
								);
								$this->db->insert('active_ingredients_products', $data);
							} 	
						}
						
						//SHIPMENT METHOD
						//first, delete all shipment method dari tabel shipment_method_product
						$this->db->where('product_id', $product_id);
						$this->db->delete('shipment_method_product');

						$shipment_method = $item[16];

						if(strpos($shipment_method, '|') == true) {
							
							$shipment_method_array = explode('|', $shipment_method);
							
							for ($i=0; $i<count($shipment_method_array); $i++) { 
								
								$data = array(
									'product_id' => $product_id,
									'shipment_method_id' => $shipment_method_array[$i],
								);
								$this->db->insert('shipment_method_product', $data);
							}

						} else {

							$data = array(
								'product_id' => $product_id,
								'shipment_method_id' => $shipment_method,
							);
							$this->db->insert('shipment_method_product', $data);
						}

						//CATEGORY PRODUCT
						//first, delete all category dari tabel category_product
						$this->db->where('id_product', $product_id);
						$this->db->delete('category_product');

						$category_product = $item[22];

						if (strpos($category_product, '|') == true) {

							//this category has more than 1 parent category
							$category_group = explode('|', $item[22]);
						
							foreach($category_group as $group) {

								//check if has sub categories
								if (strpos($group, '-') == true) {

									//has sub categories
									$categories = explode('-', $group);
								
									if(isset($categories[0])) {
									
										//get parent category_id
										$this->db->select('id_categories')->from('categories')->where('category', trim($categories[0]))->where('parent', NULL);
										$parent_category_id = $this->db->get()->row();

										if(count($parent_category_id) > 0) {
											//add to category_product
											$data = array(
												'id_product' => $product_id,
												'id_category' => $parent_category_id->id_categories
											);
											$this->db->insert('category_product', $data);
										}	
									}

									if(isset($categories[1])) {
										
										//get level1 category_id
										$this->db->select('id_categories')->from('categories')->where('category', trim($categories[1]))->where('parent', $parent_category_id->id_categories);
										$level1_category_id = $this->db->get()->row();

										if(count($level1_category_id) > 0) {
											//add to category_product
											$data = array(
												'id_product' => $product_id,
												'id_category' => $level1_category_id->id_categories
											);
											$this->db->insert('category_product', $data);
										}
									}

									if(isset($categories[2])) {
										
										//get level2 category_id
										$this->db->select('id_categories')->from('categories')->where('category', trim($categories[2]))->where('parent', $level1_category_id->id_categories);
										$level2_category_id = $this->db->get()->row();
										//add to category_product
										$data = array(
											'id_product' => $product_id,
											'id_category' => $level2_category_id->id_categories
										);
										$this->db->insert('category_product', $data);
									}

								} else {

									$this->db->select('id_categories')->from('categories')->where('category', trim($group));
									$category_id = $this->db->get()->row();

									if(count($category_id) >0) {
										//dont have sub categories
										//add to category_product
										$data = array(
											'id_product' => $product_id,
											'id_category' => $category_id->id_categories
										);
										$this->db->insert('category_product', $data);
									}
								}
							}	
						} else {

							//this only have 1 category
							//check if has sub categories
							if (strpos($category_product, '-') == true) {

								//has sub categories
								$categories = explode('-', $category_product);
							
								if(isset($categories[0])) {
								
									//category exist
									//get parent category_id
									$this->db->select('id_categories')->from('categories')->where('category', trim($categories[0]))->where('parent', NULL);
									$parent_category_id = $this->db->get()->row();
									//add to category_product

									if(count($parent_category_id)>0) {
										$data = array(
											'id_product' => $product_id,
											'id_category' => $parent_category_id->id_categories
										);
										$this->db->insert('category_product', $data);
									}
								}

								if(isset($categories[1])) {
									
									//get level1 category_id
									$this->db->select('id_categories')->from('categories')->where('category', trim($categories[1]))->where('parent', $parent_category_id->id_categories);
									$level1_category_id = $this->db->get()->row();

									if(count($level1_category_id) >0) {
										//add to category_product
										$data = array(
											'id_product' => $product_id,
											'id_category' => $level1_category_id->id_categories
										);
										$this->db->insert('category_product', $data);
									}
								}

								if(isset($categories[2])) {
									
									//get level2 category_id
									$this->db->select('id_categories')->from('categories')->where('category', trim($categories[2]))->where('parent', $level1_category_id->id_categories);
									$level2_category_id = $this->db->get()->row();

									if(count($level2_category_id) >0) {
										//add to category_product
										$data = array(
											'id_product' => $product_id,
											'id_category' => $level2_category_id->id_categories
										);
										$this->db->insert('category_product', $data);
									}
								}

							} else {

								$this->db->select('id_categories')->from('categories')->where('category', trim($category_product));
								$category_id = $this->db->get()->row();

								if(count($category_id) >0) {
									//dont have sub categories
									//add to category_product
									$data = array(
										'id_product' => $product_id,
										'id_category' => $category_id->id_categories
									);
									$this->db->insert('category_product', $data);
								}
							}
						}		
						
					} else {
						//insert new
						//add to products table
						$data = array(
							'product_code' => $item[0],
							'title' => $item[1],
							'alias' => url_title(trim($item[1])),
							'description' => $item[2],
							'long_description' => $item[3],
							'image1' => trim($item[4]),
							'image2' => trim($item[5]),
							'image3' => trim($item[6]),
							'image4' => trim($item[7]),
							'image5' => trim($item[8]),
							'product_type' => $item[9],
							'competitor_price' => $item[11],
							'sale_price' => $item[12],
							'discounted_price' => $item[13],
							'minimum_stock' => $item[14],
							'dimension_weight' => $item[17],
							'dimension_length' => $item[18],
							'dimension_width' => $item[19],
							'dimension_height' => $item[20],
							'best_seller' => $item[21],
							'product_status' => $item[24],
							'new_arrival' => $item[25],
							'popular_product' => $item[26],
							'is_backorder' => $item[27],
							'is_discontinue' => $item[28],
							'is_backorder' => $item[27],
							'is_delete' => 'no',
							'meta_description' => strip_tags($item[2]), //need to remove html tag
							'text_satuan_jual' => $item[29],
							'golongan_obat' => $item[30],
							'is_sale' => $item[33]
						);

						//BRANDS
						$this->db->select('id_brands')->from('brands')->where('brand', trim($item[10]));
						$brand = $this->db->get()->row();
						if(count($brand) > 0) {
							$data['brand_id'] = $brand->id_brands;
						} else {
							$data['brand_id'] = NULL;
						}

						//insert into products table
						$this->db->insert('products', $data); 	
						$product_id = $this->db->insert_id();

						//SATUAN JUAL & SATUAN BELI
						$satuan_jual = $item[31];
						$satuan_beli = $item[32];
						$data_conversion = array();

						$data_conversion['product_id'] = $product_id;

						//get satuan jual id
						$this->db->select('id_conversion')->from('conversion')->where('conversion', $satuan_jual);
						$satuan_jual_id = $this->db->get()->row();

						if(count($satuan_jual_id)>0) {
							$data_conversion['satuan_jual_id'] = $satuan_jual_id->id_conversion;
						} 

						//satuan beli
						if (strpos($satuan_beli, '|') == true) {

							$satuan_beli_array = explode('|', $satuan_beli);

							foreach ($satuan_beli_array as $item_satuan_beli) {

								$satuan_beli_content = explode('-', $item_satuan_beli);

								$this->db->select('id_conversion')->from('conversion')->where('conversion', trim($satuan_beli_content[0]));
								$satuan_beli_id = $this->db->get()->row();

								if(count($satuan_beli_id)>0) {
									
									$data_conversion['satuan_beli_id'] = $satuan_beli_id->id_conversion;
									$data_conversion['konversi'] = trim($satuan_beli_content[1]);

									//insert into unit conversion
									$this->db->insert('unit_convertion', $data_conversion);
								}	
							}

						} else {

							//satuan beli hanya ada 1
							$satuan_beli_array = explode('-', $satuan_beli);

							//get satuan beli id
							$this->db->select('id_conversion')->from('conversion')->where('conversion', trim($satuan_beli_array[0]));
							$satuan_beli_id = $this->db->get()->row();	

							if(count($satuan_beli_id)>0) {

								$data_conversion['satuan_beli_id'] = $satuan_beli_id->id_conversion;
								$data_conversion['konversi'] = trim($satuan_beli_array[1]);

								//insert into unit conversion
								$this->db->insert('unit_convertion', $data_conversion);
							}
						}

						//ACTIVE INGREDIENTS
						$active_ingredients = $item[23];

						if (strpos($active_ingredients, '|') == true) {
						
							//this product has more than 1 active ingredients
							$active_ingredients_array = explode('|', $active_ingredients);

							for ($i=0; $i<count($active_ingredients_array); $i++) { 
								
								//get active ingredient id
								$this->db->select('id')->from('active_ingredients')->where('name', trim($active_ingredients_array[$i]));
								$active_ingredients_id = $this->db->get()->row();

								if(count($active_ingredients_id) > 0) {
									$data = array(
										'product_id' => $product_id,
										'active_ingredients_id' => $active_ingredients_id->id,
									);
									$this->db->insert('active_ingredients_products', $data);
								} 
							}

						} else {	

							//this product has only 1 active ingredients
							//get active ingredient id
							$this->db->select('id')->from('active_ingredients')->where('name', trim($active_ingredients));
							$active_ingredients_id = $this->db->get()->row();

							if(count($active_ingredients_id) > 0) {
								$data = array(
									'product_id' => $product_id,
									'active_ingredients_id' => $active_ingredients_id->id,
								);
								$this->db->insert('active_ingredients_products', $data);
							} 	
						}
						
						//SHIPMENT METHOD
						$shipment_method = $item[16];

						if(strpos($shipment_method, '|') == true) {
							
							$shipment_method_array = explode('|', $shipment_method);
							
							for ($i=0; $i<count($shipment_method_array); $i++) { 
								
								$data = array(
									'product_id' => $product_id,
									'shipment_method_id' => $shipment_method_array[$i],
								);
								$this->db->insert('shipment_method_product', $data);
							}

						} else {

							$data = array(
								'product_id' => $product_id,
								'shipment_method_id' => $shipment_method,
							);
							$this->db->insert('shipment_method_product', $data);
						}

						//CATEGORY PRODUCT
						$category_product = $item[22];

						if (strpos($category_product, '|') == true) {

							//this category has more than 1 parent category
							$category_group = explode('|', $item[22]);
						
							foreach($category_group as $group) {

								//check if has sub categories
								if (strpos($group, '-') == true) {

									//has sub categories
									$categories = explode('-', $group);
								
									if(isset($categories[0])) {
									
										//get parent category_id
										$this->db->select('id_categories')->from('categories')->where('category', trim($categories[0]))->where('parent', NULL);
										$parent_category_id = $this->db->get()->row();

										if(count($parent_category_id) > 0) {
											//add to category_product
											$data = array(
												'id_product' => $product_id,
												'id_category' => $parent_category_id->id_categories
											);
											$this->db->insert('category_product', $data);
										}	
									}

									if(isset($categories[1])) {
										
										//get level1 category_id
										$this->db->select('id_categories')->from('categories')->where('category', trim($categories[1]))->where('parent', $parent_category_id->id_categories);
										$level1_category_id = $this->db->get()->row();

										if(count($level1_category_id) > 0) {
											//add to category_product
											$data = array(
												'id_product' => $product_id,
												'id_category' => $level1_category_id->id_categories
											);
											$this->db->insert('category_product', $data);
										}
									}

									if(isset($categories[2])) {
										
										//get level2 category_id
										$this->db->select('id_categories')->from('categories')->where('category', trim($categories[2]))->where('parent', $level1_category_id->id_categories);
										$level2_category_id = $this->db->get()->row();
										//add to category_product
										$data = array(
											'id_product' => $product_id,
											'id_category' => $level2_category_id->id_categories
										);
										$this->db->insert('category_product', $data);
									}

								} else {

									$this->db->select('id_categories')->from('categories')->where('category', trim($group));
									$category_id = $this->db->get()->row();

									if(count($category_id) >0) {
										//dont have sub categories
										//add to category_product
										$data = array(
											'id_product' => $product_id,
											'id_category' => $category_id->id_categories
										);
										$this->db->insert('category_product', $data);
									}
								}
							}	
						} else {

							//this only have 1 category
							//check if has sub categories
							if (strpos($category_product, '-') == true) {

								//has sub categories
								$categories = explode('-', $category_product);
							
								if(isset($categories[0])) {
								
									//category exist
									//get parent category_id
									$this->db->select('id_categories')->from('categories')->where('category', trim($categories[0]))->where('parent', NULL);
									$parent_category_id = $this->db->get()->row();
									//add to category_product

									if(count($parent_category_id)>0) {
										$data = array(
											'id_product' => $product_id,
											'id_category' => $parent_category_id->id_categories
										);
										$this->db->insert('category_product', $data);
									}
								}

								if(isset($categories[1])) {
									
									//get level1 category_id
									$this->db->select('id_categories')->from('categories')->where('category', trim($categories[1]))->where('parent', $parent_category_id->id_categories);
									$level1_category_id = $this->db->get()->row();

									if(count($level1_category_id) >0) {
										//add to category_product
										$data = array(
											'id_product' => $product_id,
											'id_category' => $level1_category_id->id_categories
										);
										$this->db->insert('category_product', $data);
									}
								}

								if(isset($categories[2])) {
									
									//get level2 category_id
									$this->db->select('id_categories')->from('categories')->where('category', trim($categories[2]))->where('parent', $level1_category_id->id_categories);
									$level2_category_id = $this->db->get()->row();

									if(count($level2_category_id) >0) {
										//add to category_product
										$data = array(
											'id_product' => $product_id,
											'id_category' => $level2_category_id->id_categories
										);
										$this->db->insert('category_product', $data);
									}
								}

							} else {

								$this->db->select('id_categories')->from('categories')->where('category', trim($category_product));
								$category_id = $this->db->get()->row();

								if(count($category_id) >0) {
									//dont have sub categories
									//add to category_product
									$data = array(
										'id_product' => $product_id,
										'id_category' => $category_id->id_categories
									);
									$this->db->insert('category_product', $data);
								}
							}
						}
					}

				} /*---end if($row_number != 1) --*/	
			} /*---end foreach ($csv_data as $item) ---*/

			$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Products CSV Imported.</p>');
			redirect('admin/products');

		} else {
			//not a csv file. Not allowed.
			die('Sorry, file type not allowed. Please upload only CSV file.');
		}
	}

	public function upload_stocks() {

		//upload products data
		if(!isset($_POST['upload_csv'])) { show_404(); }

		//check if the uploaded file is csv format
		$mimes = array('application/vnd.ms-excel','text/plain','text/csv','text/tsv');
		
		if(in_array($_FILES['userfile']['type'],$mimes)){

			ini_set('auto_detect_line_endings', TRUE); //to detect line ending

			//continue import operation
			//open the csv file and put into variable
			$file = fopen($_FILES['userfile']['tmp_name'],'r') or die('cannot open file');

			//initialize array
	   		$csv_data = array();

			//if not reach end of file...
			while (!feof($file)) {
				//put the csv into array..
				$csv_data[] = fgetcsv($file, 10000, '~'); //file, length, separator..
			}
	   		fclose($file); //close the file

	   		/* echo '<pre>';
	   		print_r($csv_data);
	   		echo '</pre>';
	   		exit(); */

			 $row_number = 0;

			 foreach ($csv_data as $item) {

				$row_number = $row_number + 1;
			
				//skip the 1st row...
				if($row_number != 1) {

					if(empty($item)) {continue;} //if array is empty, then continue to next iteration and bypass below script..

					//check if product id is exist, if already exist, update the row, else, insert new
					$this->db->select('id_products')->from('products')->where('title', $item[0]);
					$count_product = $this->db->get()->num_rows();
					
					if($count_product > 0) {

						//Product Code is exist. so can proceed...
						//get product id
						$this->db->select('id_products')->from('products')->where('title', $item[0]);
						$product_id = $this->db->get()->row()->id_products;

						//firstly, delete all record
						$this->db->where('id_product', $product_id);
						$this->db->delete('stock');

						//add new record jakarta
						$data1 = array(
							'id_product' => $product_id,
							'warehouse_id' => 1,
							'stock' => $item[1]
						);
						$this->db->insert('stock', $data1);

						//add new record jakarta
						$data2 = array(
							'id_product' => $product_id,
							'warehouse_id' => 2,
							'stock' => $item[2]
						);
						$this->db->insert('stock', $data2);	
						
					} 

				} /*---end if($row_number != 1) --*/	
			} /*---end foreach ($csv_data as $item) ---*/

			$this->session->set_flashdata('success', '<br><p style="background:green; color:white; padding:5px; font-weight:bold;">Stock CSV Imported.</p>');
			redirect('admin/products');

		} else {
			//not a csv file. Not allowed.
			die('Sorry, file type not allowed. Please upload only CSV file.');
		}
	}

	private function resize_image($image) {

		//Get product image dimensions from configuration table
		$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();

		//image resizing (LARGE IMAGE)
		$config['image_library'] = 'gd2';
		$config['source_image'] = './uploads/product/' . $image;
		$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;
		$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;
		$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();	
		
	}	

	/*new ajax by riantk*/
	public function ajax_get_view_satuan_beli(){
		$data['id_satuan_jual']	= $this->input->post('id_satuan_jual');
		$data['conversion']		= $this->db->select('*')->from('conversion')->get()->result();

		$this->load->view('admin/products/ajax_get_view_satuan_beli', $data); 
	}
	/*new ajax by riantk*/

} 

https://t.me/RX1948 - 2025