ACC SHELL

Path : /www/hosting/oltv.cz/_/class/system/
File Upload :
Current File : /www/hosting/oltv.cz/_/class/system/base.php

<?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