db->placehold('AND v.product_id in(?@)', (array)$filter['product_id']); if(!empty($filter['id'])) $variant_id_filter = $this->db->placehold('AND v.id in(?@)', (array)$filter['id']); if(!empty($filter['in_stock']) && $filter['in_stock']) $variant_id_filter = $this->db->placehold('AND (v.stock>0 OR v.stock IS NULL)'); if(!$product_id_filter && !$variant_id_filter) return array(); $query = $this->db->placehold("SELECT v.id, v.product_id, v.weight , v.price, NULLIF(v.compare_price, 0) as compare_price, v.sku, IFNULL(v.stock, ?) as stock, (v.stock IS NULL) as infinity, v.name, v.attachment, v.position FROM __variants AS v WHERE 1 $product_id_filter $variant_id_filter ORDER BY v.position ", $this->settings->max_order_amount); $this->db->query($query); return $this->db->results(); } public function get_variant($id) { if(empty($id)) return false; $query = $this->db->placehold("SELECT v.id, v.product_id, v.weight , v.price, NULLIF(v.compare_price, 0) as compare_price, v.sku, IFNULL(v.stock, ?) as stock, (v.stock IS NULL) as infinity, v.name, v.attachment FROM __variants v WHERE id=? LIMIT 1", $this->settings->max_order_amount, $id); $this->db->query($query); $variant = $this->db->result(); return $variant; } public function update_variant($id, $variant) { $query = $this->db->placehold("UPDATE __variants SET ?% WHERE id=? LIMIT 1", $variant, intval($id)); $this->db->query($query); return $id; } public function add_variant($variant) { $query = $this->db->placehold("INSERT INTO __variants SET ?%", $variant); $this->db->query($query); return $this->db->insert_id(); } public function delete_variant($id) { if(!empty($id)) { $this->delete_attachment($id); $query = $this->db->placehold("DELETE FROM __variants WHERE id = ? LIMIT 1", intval($id)); $this->db->query($query); $this->db->query('UPDATE __purchases SET variant_id=NULL WHERE variant_id=?', intval($id)); $this->db->query('DELETE FROM __variants_options WHERE id_veriant = ? ', intval($id)); } } public function delete_attachment($id) { $query = $this->db->placehold("SELECT attachment FROM __variants WHERE id=?", $id); $this->db->query($query); $filename = $this->db->result('attachment'); $query = $this->db->placehold("SELECT 1 FROM __variants WHERE attachment=? AND id!=?", $filename, $id); $this->db->query($query); $exists = $this->db->num_rows(); if(!empty($filename) && $exists == 0) @unlink($this->config->root_dir.'/'.$this->config->downloads_dir.$filename); $this->update_variant($id, array('attachment'=>null)); } public function prices_range($filter = array()) { $product_id_filter = ''; $instock_filter = ''; if(!empty($filter['product_id'])) $product_id_filter = $this->db->placehold('AND v.product_id in(?@)', (array)$filter['product_id']); if(!empty($filter['in_stock']) && $filter['in_stock']) $instock_filter = $this->db->placehold('AND (v.stock>0 OR v.stock IS NULL)'); if(!$product_id_filter) return array(); $query = $this->db->placehold("SELECT min(price) as min, max(price) as max FROM __variants AS v WHERE 1 $product_id_filter $instock_filter "); $this->db->query($query); return $this->db->result(); } }