Files
AtomicOld/api/Variants.old

127 lines
3.9 KiB
Plaintext
Raw Permalink Normal View History

2026-02-14 19:34:54 +03:00
<?php
/**
* Работа с вариантами товаров
*
* @copyright 2011 Denis Pikusov
* @link http://simplacms.ru
* @author Denis Pikusov
*
*/
require_once('Simpla.php');
class Variants extends Simpla
{
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();
}
/**
* Функция возвращает варианты товара
* @param $filter
* @retval array
*/
public function get_variants($filter = array())
{
$product_id_filter = '';
$variant_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['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));
}
}
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));
}
}