ACC SHELL
<?php
/**
*
*
* @version $Id$
* @copyright 2010
* @name Zpracování katalogovych produktu
*/
class Katalog extends Tools
{
public $currentpage = "";
public $totalpages = "";
public $pagesize = "100";
/**
* Constructor
*/
function __construct()
{
}
public function update($arr, $table = false)
{
if (!$table)
{
return false;
}
$result = dibi::query('UPDATE ', $table, ' SET ', $arr, ' WHERE id=%i', $arr['id']);
if ($result)
{
return true;
} else
{
return false;
}
}
/**
*
* @param type $id id produktu
* @return boolean
*/
public function delete($id)
{
//$result = dibi::query('DELETE FROM katalog WHERE id_katalog=%i', $id);
$main_id = dibi::query('SELECT main_id FROM katalog_popis WHERE id_produktu=%i', $id)->fetchSingle();
Query::delAllTree($main_id, 'katalog');
$result = dibi::query('DELETE FROM katalog_popis WHERE id_produktu=%i', $id);
$result = dibi::query('DELETE FROM katalog_parametry WHERE id_produktu=%i', $id);
$result = dibi::query('DELETE FROM katalog_hodnoceni WHERE id_produktu=%i', $id);
if ($result)
{
return true;
} else
{
return false;
}
}
/**
*
* @param type $id id row
* @return boolean
*/
public function deleteVariant($id)
{
//$result = dibi::query('DELETE FROM katalog WHERE id_katalog=%i', $id);
$cannotBeDeleted = dibi::query('SELECT * FROM objednavky_detail WHERE id_zbozi=%i', $id)->fetchSingle();
//NDebugger::dump($canIdBeDeleted);exit;
if ($cannotBeDeleted == false)
{
$result = dibi::query('DELETE FROM katalog_popis WHERE id=%i', $id);
$result = dibi::query('DELETE FROM katalog_parametry WHERE id_katalog=%i', $id);
//$result = dibi::query('DELETE FROM katalog_hodnoceni WHERE id_katalog=%i', $id);
if ($result)
{
return 200;
} else
{
return 500;
}
}
return 501;
}
/**
*
* @param type $main_id main_id produktu
* @return boolean
*/
public function deleteAll($main_id)
{
$result = dibi::query('DELETE FROM katalog WHERE id=%i', $main_id);
$pole = dibi::query('SELECT id FROM katalog_popis WHERE main_id=%i', $main_id)->fetchAll();
foreach ($pole as $p)
{
$this->delete($p->id);
}
if ($result)
{
return true;
} else
{
return false;
}
}
public function getAdminTable($katalogId)
{
if (isset($_SESSION['listuj']))
$this->pagesize = $_SESSION['listuj'];
if (isset($_GET['recordstart']))
{
$recordstart = (isset($_GET['recordstart'])) ? (int) $_GET['recordstart'] : 0;
} else
$recordstart = 0;
$query = '
SELECT a.id, a.main_id, a.nazev, a.cena, a.akcni_cena, a.bezna_cena,
a.obrazek,a.obrazek2,a.obrazek3,a.obrazek4,a.obrazek5,
a.stav, a.cislo, a.kod,a.doplnek, a.anotace,a.obsah,
a.varianta, a.doplnek, a.novinka, a.akcni, a.nejprodavanejsi, a.index, a.sklad, a.barvanadpisu,
if(( akcni_od is null OR akcni_od<now()) AND ( akcni_do is null OR akcni_do>now() ) AND ( akcni_cena != 0 ), "ano", "ne") as akcniZbozi,
c.nazev nazev_hodnoty, b.id_hodnoty_parametru, b.id_parametru
FROM katalog_popis a
LEFT JOIN katalog_parametry b
ON a.id=b.id_katalog
LEFT JOIN parametry_hodnoty c
ON c.id=b.id_hodnoty_parametru
LEFT JOIN katalog d
ON d.id = a.main_id
WHERE lang=1
AND a.varianta=0 ';
if (isset($katalogId) && !empty($katalogId))
{
$k = dibiArrayToString($katalogId);
$query .= ' AND id_kategorie IN (' . $k . ') ';
}
$query .= 'ORDER BY d.lft ASC';
$num_rows = dibi::query($query)->count();
if ($num_rows > $this->pagesize)
{
$query .= " LIMIT $recordstart, $this->pagesize";
}
$pole = dibi::query($query)->fetchAll();
//NDebugger::dump($pole);
$this->totalpages = ceil($num_rows / $this->pagesize);
$this->currentpage = ($recordstart / $this->pagesize) + 1;
$id = 0;
$item = '';
foreach ($pole as $value)
{
//echo '<pre>';print_r($value);echo '</pre>';
if ($id != $value->id)
{
$item[$value->id]['pocet_variant'] = dibi::query('SELECT count(id) FROM katalog_popis WHERE varianta=1 AND main_id=%i', $value->main_id)->fetchSingle();
$item[$value->id]['id'] = $value->id;
$item[$value->id]['main_id'] = $value->main_id;
$item[$value->id]['nazev'] = html_entity_decode($value->nazev);
$item[$value->id]['cena'] = $value->cena;
$item[$value->id]['akcni_cena'] = $value->akcni_cena;
$item[$value->id]['bezna_cena'] = $value->bezna_cena;
$item[$value->id]['obrazek'] = $value->obrazek;
$item[$value->id]['anotace'] = html_entity_decode($value->anotace);
$item[$value->id]['obsah'] = html_entity_decode($value->obsah);
$item[$value->id]['cislo'] = $value->cislo;
$item[$value->id]['kod'] = $value->kod;
$item[$value->id]['stav'] = $value->stav;
$item[$value->id]['barvanadpisu'] = $value->barvanadpisu;
$item[$value->id]['sklad'] = $value->sklad;
$item[$value->id]['index'] = $value->index;
$item[$value->id]['akce'] = $value->akcniZbozi = 'ano' ? 1 : 0;
$item[$value->id]['novinka'] = $value->novinka;
$item[$value->id]['nejprodavanejsi'] = $value->nejprodavanejsi;
$item[$value->id]['parametr'][$value->id_parametru] = $value->nazev_hodnoty;
$id = $value->id;
} else
{
$item[$value->id]['parametr'][$value->id_parametru] = $value->nazev_hodnoty;
}
}
return $item;
}
public function fetchAll($arr)
{
if (isset($_SESSION['listuj']))
$this->pagesize = $_SESSION['listuj'];
$recordstart = (isset($_GET['recordstart'])) ? (int) $_GET['recordstart'] : 0;
$arr['lang'] = isset($arr['lang']) && intval($arr['lang']) != 0 ? $arr['lang'] : 1;
$query = '
SELECT a.id, a.main_id, a.id_produktu, a.nazev,
a.cena,a.akcni_cena,a.bezna_cena,a.akcni_od, a.akcni_do,
if(( akcni_od is null OR akcni_od<now()) AND ( akcni_do is null OR akcni_do>now() ) AND ( akcni_cena != 0 ), "ano", "ne") AS akcniZbozi,
a.poznamka,a.cislo,
a.obrazek,a.obrazek2,a.obrazek3,a.obrazek4,a.obrazek5,
a.stav,a.anotace, a.obsah, a.kod, a.url, a.sklad,
a.varianta, a.doplnek, a.novinka, a.akcni, a.nejprodavanejsi, a.index,
d.main_id AS id_kategorie, d.url AS url_kategorie, d.nazev AS nazev_kategorie, d.seo_nazev AS seo_nazev_kategorie, e.hodnoceni, a.barvanadpisu
FROM katalog_popis a
LEFT JOIN katalog_prirazeni b
ON a.id_produktu=b.katalog_id
LEFT JOIN kategorie_popis d
ON b.kategorie_id=d.main_id
LEFT JOIN katalog_hodnoceni e
ON e.id_produktu = a.id_produktu
WHERE ';
$query .= ' a.lang=' . $arr['lang'];
if (isset($arr['main_id']) && intval($arr['main_id']) != 0)
{
$query .= ' AND a.main_id=' . $arr['main_id'];
}
/*
if (isset($arr['id_kategorie']) && intval($arr['id_kategorie']) != 0) {
$query .= ' AND a.id_kategorie=' . $arr['id_kategorie'];
}
*
*/
if (isset($arr['index']))
{
$query .= ' AND a.index=' . intval($arr['index']);
}
if (isset($arr['varianty']))
{
$query .= ' AND a.varianta=' . intval($arr['varianty']);
}
if (isset($arr['musi_mit_varianty']))
{
$query .= ' AND pocet_variant>0';
}
if (isset($arr['zobrazitTyp']))
{
if ($arr['zobrazitTyp'] == 'akcni')
{
$query .= ' AND ( akcni_od is null OR akcni_od<now()) AND ( akcni_do is null OR akcni_do>now() ) AND akcni_cena != 0';
}
if ($arr['zobrazitTyp'] == 'novinky')
{
$query .= ' AND novinka=1';
}
}
/**
* Zobrazeni i produktu vnorenych
*/
if (isset($arr['id_kategorie']))
{
foreach ($arr['id_kategorie'] as $key => $val)
{
$ids_kat[] = $key;
}
if (isset($ids_kat))
{
$ids_kat = implode(',', $ids_kat);
} else
{
$ids_kat = 0;
}
$query .= ' AND b.kategorie_id in (' . $ids_kat . ')';
}
/**
* Zobrazeni variant
*/
if (isset($arr['id_variant']))
{
foreach ($arr['id_variant'] as $key => $val)
{
$ids_kat[] = $key;
//NDebugger::dump($val);exit;
}
if (isset($ids_kat))
{
$ids_kat = implode(',', $ids_kat);
} else
{
$ids_kat = 0;
}
$query .= ' AND a.id in (' . $ids_kat . ')';
}
/**
* Vysledky filtrovani
*/
if (isset($arr['ids']))
{
foreach ($arr['ids'] as $key => $val)
{
$ids[] = $key;
}
if (isset($ids))
{
$ids = implode(',', $ids);
} else
{
$ids = 0;
}
$query .= ' AND a.id_produktu in (' . $ids . ')';
}
if (isset($arr['stav']))
{
$query .= ' AND a.stav = ' . $arr['stav'];
}
$query .= ' GROUP BY a.id';
if (isset($arr['sort']))
{
$query .= ' ORDER BY ' . $arr['sort'] . ' ' . $arr['sort_how'];
}
$sql = dibi::query($query);
$num_rows = $sql->count();
if ($num_rows > $this->pagesize)
{
$query .= " LIMIT $recordstart, $this->pagesize";
}
if (isset($arr['limit']))
{
$query .= ' LIMIT ' . $arr['limit'];
}
//myDebug($query);
$this->totalpages = ceil($num_rows / $this->pagesize);
$this->currentpage = ($recordstart / $this->pagesize) + 1;
//return dibi::test($query);
return dibi::query($query)->fetchAll();
}
public function search($arr)
{
$arr['lang'] = isset($arr['lang']) && intval($arr['lang']) != 0 ? $arr['lang'] : 1;
$query = '
SELECT a.id_produktu
FROM katalog_popis a
WHERE a.stav=1 AND a.pocet_variant>0 AND a.varianta =0 AND MATCH (a.nazev, a.obsah) AGAINST ("' . $arr['search'] . '" IN boolean MODE)';
$id_of_victims = dibi::query($query)->fetchAll();
$query = '
SELECT a.id, a.id_produktu, a.nazev, a.cena,a.akcni_cena,a.bezna_cena, a.obrazek,a.obrazek2,a.obrazek3,a.obrazek4,a.obrazek5,
if(( akcni_od is null OR akcni_od<now()) AND ( akcni_do is null OR akcni_do>now() ) AND ( akcni_cena != 0 ), "ano", "ne") as akcniZbozi,
a.stav,a.anotace, a.obsah, a.kod, a.url,
a.varianta, a.doplnek, a.novinka, a.akcni, a.nejprodavanejsi, a.index,
d.url url_kategorie
FROM katalog_popis a
LEFT JOIN kategorie_popis d
ON a.id_kategorie=d.main_id
WHERE a.varianta =0 AND a.lang=' . $arr['lang'];
if (isset($id_of_victims))
{
foreach ($id_of_victims as $val)
{
$ids[] = $val->id_produktu;
}
//NDebugger::dump($id_of_victims);exit;
if (isset($ids))
{
$ids = implode(',', $ids);
} else
{
$ids = 0;
}
$query .= ' AND a.id_produktu in (' . $ids . ')';
}
if (isset($arr['id_kategorie']) && intval($arr['id_kategorie']) != 0)
{
$query .= ' AND a.id_kategorie=' . $arr['id_kategorie'];
}
if (isset($arr['index']))
{
$query .= ' AND a.index=' . intval($arr['index']);
}
if (isset($arr['sort']))
{
$query .= ' ORDER BY ' . $arr['sort'] . ' ' . $arr['sort_how'];
}
$query .= ' GROUP BY a.id_produktu';
//dibi::test($query);
return dibi::query($query)->fetchAll();
}
public function fetchSingleById($arr)
{
if (!$arr['id'])
{
return false;
}
if (!$arr['lang'])
{
$arr['lang'] = 1;
}
$pole = dibi::query('
SELECT a.id, a.main_id, a.id_kategorie, a.id_produktu, a.nazev,a.dph,
a.cena,a.akcni_cena,a.bezna_cena, a.akcni_od, a.akcni_do, a.poznamka,a.cislo,a.kod,
a.obrazek,a.obrazek2,a.obrazek3,a.obrazek4,a.obrazek5,
a.stav,a.anotace, a.obsah, a.obsah2, a.url,
a.varianta, a.doplnek, a.novinka, a.akcni, a.nejprodavanejsi, a.index,
if(( akcni_od is null OR akcni_od<now()) AND ( akcni_do is null OR akcni_do>now() ) AND ( akcni_cena != 0 ), "ano", "ne") as akcniZbozi,
b.hodnoceni, a.barvanadpisu
FROM katalog_popis a
LEFT JOIN katalog_hodnoceni b
ON b.id_produktu = a.id_produktu
WHERE a.id=%i', $arr['id'], ' AND a.lang=%i', $arr['lang'])->fetch();
//WHERE a.id=%i', $arr['id'], ' AND a.lang=%i', $arr['lang'])->fetch();
$params = dibi::query('
SELECT a.id_katalog, a.id_produktu, a.id_hodnoty_parametru,
b.nazev nazev_hodnoty,
c.id, c.nazev nazev_parametru, c.varianty
FROM katalog_parametry a
LEFT JOIN parametry_hodnoty b
ON a.id_hodnoty_parametru=b.id
LEFT JOIN parametry c
ON c.id=b.id_parametru
WHERE a.id_produktu=%i', $pole['id_produktu'])->fetchAll();
$item['data'] = $pole;
$item['params'] = $params == false ? false : $params;
return $item;
}
/**
*
* @param type $url ziskani zaznamu na zaklade url produktu
* @return boolean
*/
public function fetchSingle($url)
{
if (!$url)
{
return false;
}
// POZOR, pridano varianta=0 !!
return dibi::query('
SELECT a.id, a.main_id, a.id_kategorie, a.id_produktu, a.nazev,
a.cena,a.akcni_cena,a.bezna_cena, a.akcni_od, a.akcni_do, a.poznamka,a.cislo,
a.obrazek,a.obrazek2,a.obrazek3,a.obrazek4,a.obrazek5,
a.stav,a.anotace, a.obsah, a.obsah2, a.kod, a.url,
a.varianta, a.doplnek, a.novinka, a.akcni, a.nejprodavanejsi, a.index,
if(( akcni_od is null OR akcni_od<now()) AND ( akcni_do is null OR akcni_do>now() ) AND ( akcni_cena != 0 ), "ano", "ne") as akcniZbozi,
b.hodnoceni, a.sklad, a.pocet_variant, a.barvanadpisu
FROM katalog_popis a
LEFT JOIN katalog_hodnoceni b
ON b.id_produktu = a.id_produktu
WHERE a.url=%s AND varianta=0', $url)->fetch();
}
/**
*
* @param myId id vyrobku
* @return 2 nejdrazsi polozky
*/
public function fetchMohloBySeVamLibit($myId, $myCategory, $limit = false)
{
if (!$myId || !$myCategory)
{
return false;
//throw new ErrorException('Default id must be set');
}
return dibi::query('
SELECT a.*,
if(( akcni_od is null OR akcni_od<now()) AND ( akcni_do is null OR akcni_do>now() ) AND ( akcni_cena != 0 ), "ano", "ne") as akcniZbozi,
b.url url_kategorie FROM katalog_popis a
LEFT JOIN kategorie_popis b
ON a.id_kategorie = b.main_id
WHERE a.varianta = 0 AND a.id_produktu != %i', $myId, ' AND a.id_kategorie=%i', $myCategory, ' ORDER BY cena DESC LIMIT 2')->fetchAll();
}
/**
*
* @param myId id produktu
* @param myCategory id kategorie
* @return vsechny produkty z dane kategorie, krome $myId
*/
public function fetchSouvisejiciProdukty($myId, $myCategory)
{
if (!$myId || !$myCategory)
{
return false;
//throw new ErrorException('Default id must be set');
}
return dibi::query('
SELECT a.*,
if(( akcni_od is null OR akcni_od<now()) AND ( akcni_do is null OR akcni_do>now() ) AND ( akcni_cena != 0 ), "ano", "ne") as akcniZbozi,
b.url url_kategorie FROM katalog_popis a
LEFT JOIN kategorie_popis b
ON a.id_kategorie = b.main_id
WHERE a.varianta = 0 AND a.id_produktu != %i', $myId, ' AND a.id_kategorie=%i', $myCategory, ' ORDER BY id ASC')->fetchAll();
}
/**
*
* @param type $id Id produktu ke kteremu se parametry vztahuji
* @param type $arr varianty 1/0
* @todo 8.6.2012 zmeneno id_katalog na id_produktu
* @return boolean
*/
public function fetchParams($id, $arr = false)
{
if (!$id || intval($id) == 0)
{
return false;
}
return dibi::query('
SELECT
a.id_katalog,
b.nazev nazev_hodnoty, b.popis popis_hodnoty, b.obrazek popis_obrazek,
c.id, c.nazev nazev_parametru, c.varianty, d.nazev, d.stav, d.sklad, d.cena
FROM katalog_parametry a
LEFT JOIN parametry_hodnoty b
ON a.id_hodnoty_parametru=b.id
LEFT JOIN parametry c
ON c.id=b.id_parametru
LEFT JOIN katalog_popis d
ON a.id_katalog = d.id
WHERE a.id_produktu=%i', $id)->fetchAll();
//WHERE a.id_katalog=%i', $id)->fetchAll();
}
public function fetchParamsByIdProduktu($id, $arr = false)
{
if (!$id || intval($id) == 0)
{
return false;
}
return dibi::query('
SELECT
a.id_katalog,
b.nazev nazev_hodnoty, b.popis popis_hodnoty, b.obrazek popis_obrazek,
c.id, c.nazev nazev_parametru, c.varianty
FROM katalog_parametry a
LEFT JOIN parametry_hodnoty b
ON a.id_hodnoty_parametru=b.id
LEFT JOIN parametry c
ON c.id=b.id_parametru
WHERE a.id_katalog=%i', $id)->fetchAll();
}
/**
* Vrati seznam parametru, podle kterych se maji generovat varianty
* @param type $id id kategorie ke ktere se parametry vztahuji
* @return boolean
*/
public function fetchParamsForVariant($id)
{
if (!$id)
{
return false;
}
return dibi::query('
SELECT * FROM parametry a
LEFT JOIN parametry_prirazeni c
ON c.id=a.id
WHERE a.varianty=1
AND id_kategorie IN %in', $id, ' GROUP BY a.id')->fetchAll();
}
public function povolit($id = false, $table = false)
{
if (!$id || !$table)
{
return false;
}
$result = dibi::query('UPDATE ', $table, ' SET stav=1 WHERE id_produktu=%i', $id);
if ($result)
{
return true;
}
return false;
}
public function zakazat($id = false, $table = false)
{
if (!$id || !$table)
{
return false;
}
$result = dibi::query('UPDATE ', $table, ' SET stav=0 WHERE id_produktu=%i', $id);
if ($result)
{
return true;
}
return false;
}
public function smazatFotku($id, $idObrazku = false)
{
if (!$idObrazku || $idObrazku == 0 || $idObrazku == 1)
{
$idObrazku = '';
}
$obrazek = dibi::query('SELECT obrazek' . $idObrazku . ' FROM katalog_popis WHERE id_produktu=%i', $id)->fetchSingle();
$res = dibi::query('UPDATE katalog_popis SET obrazek' . $idObrazku . '=null WHERE id_produktu=%i', $id);
//exit;
if ($res)
{
unlink(ROOT . KATALOG_F_ADMIN_PATH . $obrazek);
unlink(ROOT . KATALOG_F_S_PATH . $obrazek);
unlink(ROOT . KATALOG_F_M_PATH . $obrazek);
unlink(ROOT . KATALOG_F_L_PATH . $obrazek);
unlink(ROOT . KATALOG_F_XL_PATH . $obrazek);
return true;
} else
{
return false;
}
}
/**
* Ulozi prirazeni do tabulky katalog_prirazeni
* @param type $arr
* @return boolean
*/
public static function insertPrirazeni($arr)
{
$result = dibi::query('INSERT IGNORE INTO katalog_parametry ', $arr);
if ($result)
{
//NDebugger::dump($result);NDebugger::dump(dibi::insertId());exit;
return true;
return dibi::insertId();
} else
{
//$_SESSION['message_ko'][] = "Úprava neproběhla.";
return false;
}
}
/**
* @var [id] => id parametru
* @var [id_kategorie] => id kategorie ke ktere bude parametr prirazen
*/
public function insertPrirazeniKatalog2Kategorie($id, $id_kategorie)
{
$arr = array(
'katalog_id' => $id,
'kategorie_id' => $id_kategorie
);
try
{
dibi::query('INSERT INTO katalog_prirazeni ', $arr);
} catch (Exception $e)
{
return false;
}
return $id;
}
/**
*
* @param type $idProduktu
* @return sum of all product variant stock
*/
public function getSkladoveZasoby($idProduktu = false)
{
if (!$idProduktu)
{
return false;
}
return dibi::query('SELECT SUM(sklad) FROM katalog_popis WHERE id_produktu=%i', $idProduktu)->fetchSingle();
}
}
ACC SHELL 2018