ACC SHELL
<?php
/**
* Základní třída připravená pro dědění
*
* @author Filip Štencl
* @since 16.8.2014
*
*/
abstract class base {
const TABLE_NAME = 'undefined';
private $id;
private $chyba;
public function __construct() {}
public function create($variables,$redirectOnEnd = true) {
$table = get_called_class();
// pokud již byla prom. variables přeložena na pole, tak nepřekládej...
if (!is_array($variables)) { $arr = pripravPost($variables); }
else { $arr = $variables; }
// pokud není nastaven mr_url a pritom v databázi mr_url je, tak se jej pokusím vyplnit z atributu název
if (!isset($arr["mr_url"]) && isset($arr["nazev"])) {
$struktura = dibi::query("DESCRIBE [".$table::TABLE_NAME."]");
foreach($struktura as $sloupec) {
if ($sloupec['Field'] == "mr_url") {
$arr["mr_url"] = mr_url($arr["nazev"]);
}
}
}
// pokud existuje v databázi pořadí a nebylo předáno, pokusím se jej vypočítat sám, vložím poradí jako poslední pořadí + 1
if (!isset($arr["poradi"])) {
$struktura = dibi::query("DESCRIBE [".$table::TABLE_NAME."]");
foreach($struktura as $sloupec) {
if ($sloupec['Field'] == "poradi") {
$arr['poradi'] = dibi::query("SELECT MAX(poradi) FROM [".$table::TABLE_NAME."]")->fetchSingle() + 1;
}
}
}
if($this->checkData($arr)) {
$table = get_called_class();
if(!dibi::query('INSERT INTO ['.$table::TABLE_NAME.']', $arr)) { notification::infoBox_error("Při ukládání položky se vyskytla chyba"); }
else {
$this->setId(dibi::insertId());
$pomobjekt = new $table($this->getId());
$this->updateCasZmeny();
notification::infoBox_success("Přidání položky <strong>".$pomobjekt->getNazev()."</strong><br />");
notification::zaloguj("Přidání položky <strong>".$this->getNazev()."</strong>",$this->getId(),$table::TABLE_NAME);
}
} else {notification::infoBox_error("<strong>Některý z povinných údajů nebyl vyplněn</strong><br />" . $this->getChyba());}
if ($redirectOnEnd == true) { redirect(admin::returnBack()."#".$this->getId()); }
}
public function edit($variables,$redirectOnEnd = true) {
$table = get_called_class();
if (!is_array($variables)) { $arr = pripravPost($variables); }
else { $arr = $variables; }
// pokud není nastaven mr_url a pritom v databázi mr_url je, tak se jej pokusím vyplnit z atributu název
if (!isset($arr["mr_url"]) && isset($arr["nazev"])) {
$struktura = dibi::query("DESCRIBE [".$table::TABLE_NAME."]");
foreach($struktura as $sloupec) {
if ($sloupec['Field'] == "mr_url") {
$arr["mr_url"] = mr_url($arr["nazev"]);
}
}
}
//dump($arr);
if($this->checkData($arr)) {
if(!dibi::query('UPDATE ['.$table::TABLE_NAME.'] SET ',$arr,'WHERE [id]=%i',$this->getId())) { /*notification::infoBox("Při editaci nebyla provedena žádná úprava"); */ }
else {
dibi::query('UPDATE ['.$table::TABLE_NAME.'] SET caszmeny = CURRENT_TIMESTAMP() WHERE [id]=%i',$this->getId());
$this->updateCasZmeny();
notification::infoBox_success("Úprava položky: <strong>".$this->getNazev()."</strong>");
notification::zaloguj("Úprava položky: <strong>".$this->getNazev()."</strong>",$this->getId(),$table::TABLE_NAME);
}
} else {notification::infoBox_error("<strong>Některý z povinných údajů nebyl vyplněn</strong><br />" . $this->chyba);}
if ($redirectOnEnd == true) { redirect(admin::returnBack()."#".$this->getId()); }
dibi::test('UPDATE ['.$table::TABLE_NAME.'] SET ',$arr,'WHERE [id]=%i',$this->getId());
}
public function delete($redirectOnEnd = true) {
$table = get_called_class();
if(dibi::query("DELETE FROM [".$table::TABLE_NAME."] WHERE [id]=%i",intval($this->getId()))) {
$this->updateCasZmeny();
notification::infoBox_success("Položka <strong>".$this->getNazev()."</strong> byla smazána");
notification::zaloguj("Položka <strong>".$this->getNazev()."</strong> byla smazána",$this->getId(),$table::TABLE_NAME);
} else { notification::infoBox_error("Při mazání položky z databáze se vyskytla chyba"); }
if ($redirectOnEnd == true) { redirect(admin::returnBack()); }
}
public function razeni($razeni,$redirectOnEnd = true) {
$table = get_called_class();
$razeni = explode("-", substr($razeni, 0, strlen($razeni)-1));
$ids = implode(',', $razeni);
$sql = "UPDATE [".$table::TABLE_NAME."] SET poradi = CASE [id] ";
for($i=0; $i<count($razeni); $i++) { $sql .= "WHEN ".$razeni[$i]." THEN ".($i+1)." "; }
$sql .= " END WHERE [id] IN ($ids)";
if(!dibi::query($sql)) { notification::infoBox_error("Při řazení položek se vyskytla chyba<br />"); }
else {
notification::infoBox_success("Položky byly seřazeny");
notification::zaloguj("Položky byly seřazeny",$this->getId(),$table::TABLE_NAME);
} if ($redirectOnEnd == true) { redirect(admin::returnBack()); }
}
public function updateCasZmeny() {
}
}
ACC SHELL 2018