ACC SHELL

Path : /srv/www/vhosts/centrumlb/administrace/libs/
File Upload :
Current File : /srv/www/vhosts/centrumlb/administrace/libs/query.class.php

<?php

/**
 *
 * @version 1.0
 * @copyright 6.11.2011
 */
class Query {

    public static $REFERENCE_TROUBLE = array('Záznam není možné smazat, je navázán na jiné záznamy', 'ERR');
    public static $NOT_EXISTS = array('Takový záznam neexistuje', 'INFO');

    /**
     *
     * @name getUrlSablony
     * @var id id typu kategorie z tabulky kategorie_typ
     * @uses 1 kategorie, 2 galerie, 3 clanky, 4 novinky, 5 kniha hostu
     * @copyright 6.5.2011
     * @return array
     */
    public static function getUrlSablony($id, $lang = 1) {
	return dibi::query('SELECT url FROM kategorie_popis WHERE typ=%i', $id, ' AND lang=%i', $lang, 'LIMIT 1')->fetch();
    }

    /**
     *
     * @name getUrlSablony
     * @var id id typu kategorie z tabulky kategorie_typ
     * @uses 1 kategorie, 2 galerie, 3 clanky, 4 novinky, 5 kniha hostu
     * @copyright 6.5.2011
     * @return array
     */
    public static function getUrlDetailu($id, $lang = 1) {
	return dibi::query('SELECT url FROM kategorie_popis WHERE main_id=%i', $id, ' AND lang=%i', $lang, ' LIMIT 1')->fetch();
    }

    /**
     *
     * @name setNavstevnost
     * @var id id kategorie
     * @var table tabulka (automaticky se doplni _navsteva)
     * @copyright 6.5.2011
     * @return bool
     */
    public static function setNavstevnost($id, $table) {
	return dibi::query("
                INSERT INTO {$table}_navsteva
                VALUES($id, 1, now())
                    ON DUPLICATE KEY UPDATE pocet=pocet+1, last=now()");
    }

    /**
     *
     * @name getNavstevnost
     * @var id id kategorie
     * @var table tabulka (vraci navstevnost dane sablony)
     * @copyright 6.5.2011
     * @return bool
     */
    public static function getNavstevnost($id, $table) {
	return dibi::query("
                SELECT b.pocet FROM {$table}_popis a , {$table}_navsteva b
                WHERE a.id=%i", $id, ' AND a.id=b.id LIMIT 1');
    }

    public static function zalozitHlavniVetev($table = false) {
	if (!$table) {
	    Tools::message('Interní chyba systému', 'ERR');
	    return false;
	}
	$insert = dibi::query('INSERT INTO ', $table, ' (lft, rgt, hloubka) SELECT IFNULL(MAX(rgt), 0) + 1, IFNULL(MAX(rgt), 0) + 2, 0 FROM ', $table);

	if ($insert) {
	    return dibi::insertId();
	} else {
	    return false;
	}
    }

    public static function vlozitDoHlavniVetve($id, $table = false) {
	if (!$table) {
	    Tools::message('Interní chyba systému', 'ERR');
	    return false;
	}
	dibi::begin();
	$row = dibi::query('SELECT * FROM ', $table, ' WHERE id=%i', $id, ' FOR UPDATE')->fetch();

	dibi::query("UPDATE {$table} SET lft = lft + 2 WHERE lft > $row->rgt");
	dibi::query("UPDATE {$table} SET rgt = rgt + 2 WHERE rgt >= $row->rgt");

	$navigace = dibi::query("SELECT navigace FROM {$table} kategorie WHERE lft <= $row[lft] AND rgt >= $row[rgt] AND hloubka=0")->fetchSingle();

	dibi::query("INSERT INTO {$table} (lft, rgt, hloubka, parent_id, navigace) VALUES ($row[rgt], $row[rgt]+1, $row[hloubka]+1, $row[id], $navigace)");

	$id = dibi::insertId();
	dibi::commit();

	return $id;
    }

    /**
     *
     * @param type $ip ip adresa
     * @param type $ban 1 adresa je banovana, 0 neni
     * @return int id ip adresy v databazi
     */
    public static function insertIP($ip, $ban = 0) {
	//NDebugger::barDump($ip, 'ip adresa');
	//NDebugger::barDump($ban, 'ban');
	$id_ip = dibi::query('SELECT id FROM ip WHERE ip=%s', $ip, ' LIMIT 1')->fetchSingle();
	if (!$id_ip) {
	    dibi::query('INSERT INTO ip (ip, ban, modifikovano) VALUES ("' . $ip . '", "' . $ban . '",now())');
	    //echo dibi::insertId();exit;
	    return dibi::insertId();
	} else {
	    //echo 'true';exit;
	    return $id_ip;
	}
    }

    public static function updateIP($ip, $ban) {
	dibi::query('UPDATE ip SET ban=%i', $ban, ', modifikovano=now() WHERE ip=%s', $ip);
    }

    public static function banIP($ip, $ban) {
	dibi::query('UPDATE ip SET ban=%i', $ban, ', modifikovano=now() WHERE ip=%s', $ip);
    }

    /*
     *
     */

    public static function delAllTree($id, $table = false) {
	if (!$table) {
	    return false;
	} else {
	    dibi::begin();

	    $row = dibi::query('SELECT * FROM ' . $table . ' WHERE id=%i', $id)->fetch();
	    dibi::query('DELETE FROM ', $table, ' WHERE lft >=%i', $row->lft, ' AND rgt <=%i', $row->rgt);

	    $rozdil = ($row->rgt - $row->lft) + 1;

	    dibi::query('UPDATE ' . $table . ' SET lft = lft - %i', $rozdil, ' WHERE lft>%i', $row->rgt);

	    dibi::query('UPDATE ' . $table . ' SET rgt = rgt - %i', $rozdil, ' WHERE rgt>%i', $row->rgt);

	    dibi::query('DELETE FROM ' . $table . '_popis WHERE main_id=%i', $row->id);

	    //dibi::query('DELETE FROM ' . $table . '_navsteva WHERE id=%i', $row->id);

	    dibi::commit();

	    return true;
	}
    }

    public static function delete($id, $table = false) {
	if (!$table) {
	    return false;
	} else {
	    try {
		dibi::delete($table)->where('id = %i', $id)->execute();
		if (dibi::affectedRows() == 0) {
		    Tools::message(Query::$NOT_EXISTS);
		    return false;    
		}
		else {
		    return true; 
		}		
	    } catch (Exception $e) {
		switch ($e->getCode()) {
		    case 1451:
			Tools::message(Query::$REFERENCE_TROUBLE);
			//NDebugger::dump($e);
			break;
		    default:
			Tools::message($e, 'ERR');
			break;
		}
		return false;
	    }
	}
    }

    public static function povolit($id, $table = false) {
	if (!$table) {
	    return false;
	} else {
	    $victim = dibi::query('SELECT lft, rgt FROM ' . $table . ' WHERE id = %i', $id, ' LIMIT 1')->fetch();
	    if ($victim['lft'] == $victim['rgt'] - 1) {
		$result = dibi::query('UPDATE ' . $table . '_popis SET stav=1 WHERE main_id=%i', $id);
	    } else {
		$q = dibi::query('SELECT id FROM ' . $table . ' WHERE lft >= %i', $victim['lft'], ' AND rgt <=%i', $victim['rgt'])->fetchAll();
		foreach ($q as $id) {
		    $result = dibi::query('UPDATE ' . $table . '_popis SET stav=1 WHERE main_id=%i', $id);
		}
	    }

	    if (isset($result)) {
		return true;
	    }
	    else
		return false;
	}
    }

    public static function povolitSingle($id, $table = false) {
	if (!$table) {
	    return false;
	} else {
	    $result = dibi::query('UPDATE ' . $table . ' SET stav=1 WHERE id=%i', $id);

	    if (isset($result)) {
		return true;
	    }
	    else
		return false;
	}
    }

    public static function zakazatSingle($id, $table = false) {
	if (!$table) {
	    return false;
	} else {
	    $result = dibi::query('UPDATE ' . $table . ' SET stav=0 WHERE id=%i', $id);

	    if (isset($result)) {
		return true;
	    }
	    else
		return false;
	}
    }

    public static function zmenaStavu($id = false, $column = false, $table = false) {
	if (!$id || !$column || !$table) {
	    return false;
	} else {
	    $result = dibi::query('UPDATE ' . $table . ' SET ' . $column . ' = NOT ' . $column . ' WHERE id=%i', $id);

	    if (isset($result)) {
		return true;
	    }
	    else
		return false;
	}
    }

    public static function zakazat($id, $table = false) {
	if (!$table) {
	    return false;
	} else {
	    $victim = dibi::query('SELECT lft, rgt FROM ' . $table . ' WHERE id = %i', $id, ' LIMIT 1')->fetch();
	    if ($victim['lft'] == $victim['rgt'] - 1) {
		$result = dibi::query('UPDATE ' . $table . '_popis SET stav=0 WHERE main_id=%i', $id);
	    } else {
		$q = dibi::query('SELECT id FROM ' . $table . ' WHERE lft >= %i', $victim['lft'], ' AND rgt <=%i', $victim['rgt'])->fetchAll();
		foreach ($q as $id) {
		    $result = dibi::query('UPDATE ' . $table . '_popis SET stav=0 WHERE main_id=%i', $id);
		}
	    }

	    if (isset($result)) {
		return true;
	    }
	    else
		return false;
	}
    }

    public static function moveUp($id = 0, $kategorie = false) {
	if (!$kategorie) {
	    return false;
	}

	$id = intval($id);

	$query = "SELECT * FROM {$kategorie} WHERE id = $id";
	$row = mysql_fetch_assoc(mysql_query($query));

	$query = "SELECT * FROM {$kategorie} WHERE lft < $row[lft] AND hloubka = $row[hloubka] AND parent_id = $row[parent_id] ORDER BY lft DESC LIMIT 1";

	$result = mysql_query($query);

	//echo $query . "<br />";

	if (mysql_numrows($result) > 0) {
	    $pribuzny = mysql_fetch_assoc($result);

	    $lft = $pribuzny["lft"];
	    $hloubka = $pribuzny["hloubka"];

	    $rozdil = $row["rgt"] - $row["lft"] + 1;

	    if ($lft > $row["lft"]) {
		$lft -= $rozdil;
	    }
	    if ($lft != $row["lft"]) {
		$min_lft = min($lft, $row["lft"]);
		$max_rgt = max($lft + $rozdil - 1, $row["rgt"]);
		$posun = $lft - $row["lft"];
		if ($lft > $row["lft"]) {
		    $rozdil = -$rozdil;
		}

		mysql_query("UPDATE {$kategorie}
                                SET hloubka = hloubka + IF(@podkategorie := lft >= $row[lft] AND rgt <= $row[rgt], " . ($hloubka - $row["hloubka"]) . ", 0),
                                    lft = lft + IF(@podkategorie, $posun, IF(lft >= $min_lft, $rozdil, 0)),
                                    rgt = rgt + IF(@podkategorie, $posun, IF(rgt <= $max_rgt, $rozdil, 0))
                                WHERE rgt >= $min_lft AND lft <= $max_rgt");

		return true;
	    }
	} else {
	    return false;
	}
    }

    public static function moveDown($id = 0, $kategorie = false) {
	if (!$kategorie) {
	    return false;
	}
	$id = intval($id);

	$query = "SELECT * FROM {$kategorie} WHERE id = $id";

	$row = mysql_fetch_assoc(mysql_query($query));

	$query = "SELECT * FROM {$kategorie} WHERE lft > $row[lft] AND hloubka = $row[hloubka] AND parent_id = $row[parent_id] ORDER BY lft ASC LIMIT 1";
	$result = mysql_query($query);

	//echo $query . "<br />";

	if (mysql_numrows($result) > 0) {
	    $pribuzny = mysql_fetch_assoc($result);
	    $lft = $pribuzny["lft"];
	    $hloubka = $pribuzny["hloubka"];

	    $rozdil = $row["rgt"] - $row["lft"] + 1;

	    if ($pribuzny["lft"] != $row["lft"]) {
		$min_lft = min($pribuzny["lft"], $row["lft"]);
		//echo "min lft->" . $min_lft . "<br />";

		$min_lft = min($pribuzny["lft"], $row["lft"]);
		$max_rgt = max($pribuzny['rgt'], $row["rgt"]);
		//$max_rgt = max($pribuzny['rgt'],$row["rgt"]);
		//	echo "max rgt->" . $max_rgt . "<br />";
		$posun = $pribuzny["rgt"] - $row["rgt"];
		//	echo "posun->" . $posun . "<br />";

		if ($pribuzny["lft"] > $row["lft"]) {
		    $rozdil = -$rozdil;
		    //echo "rozdil->" . $rozdil . "<br />";
		}

		mysql_query("UPDATE {$kategorie}
                                SET hloubka = hloubka +	IF(@podkategorie := lft >= $row[lft] AND rgt <= $row[rgt], " . ($hloubka - $row["hloubka"]) . ", 0),
				 	lft = lft + IF(@podkategorie, $posun, IF(lft >= $min_lft, $rozdil, 0)),
				   	rgt = rgt + IF(@podkategorie, $posun, IF(rgt <= $max_rgt, $rozdil, 0))
				WHERE rgt >= $min_lft AND lft <= $max_rgt"
		);
		return true;
	    }
	} else {
	    return false;
	}
    }

    public static function pridatPopis($arr, $table = false) {
	if (!$table) {
	    return false;
	}

	$result = dibi::query('INSERT INTO ', $table, ' ', $arr);

	if ($result) {
	    $_SESSION['message_ok'][] = "Uložení proběhlo v pořádku.";
	    return dibi::insertId();
	} else {
	    $_SESSION['message_ko'][] = "Úprava neproběhla.";
	    return false;
	}
    }

    public static function insert($arr, $table = false) {
	if (!$table) {
	    return false;
	}
	$result = dibi::query('INSERT INTO ', $table, ' ', $arr);

	if ($result) {
	    //NDebugger::dump($result);NDebugger::dump(dibi::insertId());exit;
	    return dibi::insertId();
	} else {
	    //$_SESSION['message_ko'][] = "Úprava neproběhla.";
	    return false;
	}
    }

    public static function insertRating($arr, $table = false) {
	if (!$table) {
	    return false;
	}
	//$result = dibi::query('INSERT INTO ', $table, ' ', $arr, ' ON DUPLICATE KEY UPDATE');
	/*
	  dibi::test("
	  INSERT INTO $table
	  VALUES($arr[id_produktu], 1, $arr[hodnoceni], $arr[hodnoceni])
	  ON DUPLICATE KEY UPDATE
	  pocet_hodnoceni=pocet_hodnoceni+1,
	  celkem_znamka=celkem_znamka+$arr[hodnoceni],
	  hodnoceni=celkem_znamka/pocet_hodnoceni");
	 * 
	 */
	return dibi::query("
                INSERT INTO $table
                VALUES($arr[id_produktu], 1, $arr[hodnoceni], $arr[hodnoceni])
                    ON DUPLICATE KEY UPDATE
			pocet_hodnoceni=pocet_hodnoceni+1,
			celkem_znamka=celkem_znamka+$arr[hodnoceni],
			hodnoceni=celkem_znamka/pocet_hodnoceni");
    }

    public static function updatePopis($arr, $table = false) {
	if (!$table) {
	    return false;
	}
	$result = dibi::query('UPDATE ', $table, ' SET ', $arr, 'WHERE `id`=%i', $arr['id'], ' AND lang=%i', $arr['lang']);
	//exit;
	if ($result) {
	    Tools::message('Úprava proběhla v pořádku', 'OK');
	    return true;
	} else {
	    Tools::message('Úprava neproběhla', 'ERR');
	    return false;
	}
    }

    public static function buildHtmlElementParams($id = false, $table = false, $id_of_victim = false) {
	if (!$id) {
	    return false;
	}
	$params = dibi::query('SELECT * FROM parametry a LEFT JOIN parametry_prirazeni b
				ON a.id = b.id
				WHERE b.id_kategorie = %i', $id, ' AND a.varianty=0 ORDER BY a.id ')->fetchAll();

	if ($table && $id_of_victim) {
	    $params_of_victim = dibi::query('SELECT id_parametru, id_hodnoty_parametru FROM ', $table, ' WHERE id_katalog=%i', $id_of_victim)->fetchAll();
	} else {
	    foreach ($_GET as $name => $value) {
		//element name - "parametr-"+id parametru

		if (preg_match('/^par/', $name)) {
		    $id_parametru = explode('par-', $name);

		    $p['id_parametru'] = $id_parametru[1];

		    if (is_array($value)) {
			foreach ($value as $v) {
			    if (!empty($v)) {
				$p['id_hodnoty_parametru'] = $v;
			    }
			}
		    } else {
			if (!empty($value)) {
			    $p['id_hodnoty_parametru'] = $value;
			}
		    }
		}
	    }
	}

	foreach ($params as $n):
	    $values = dibi::query('SELECT * FROM parametry_hodnoty WHERE id_parametru = %i', $n->id)->fetchAll();
	    ?>
	    <p>
	        <label><?php echo $n->nazev; ?></label><br />
		<?php
		switch ($n->typ_admin) {
		    case 1:
			echo '<select class="small-input" name="par-' . $n->id . '">';
			//echo '<option>-- Default --</option>';
			foreach ($values as $v):
			    $selected = '';
			    if (isset($params_of_victim)) {
				foreach ($params_of_victim as $p) {
				    if ($n->id == $p['id_parametru'] && $v->id == $p['id_hodnoty_parametru']) {
					$selected = 'selected="selected"';
				    }
				}
			    }
			    echo '<option value="' . $v->id . '" ' . $selected . ' >' . $v->nazev . '</option>';
			endforeach;
			echo '</select>';
			break;
		    case 2:
			foreach ($values as $v):
			    $selected = '';
			    if (isset($params_of_victim)) {
				foreach ($params_of_victim as $p) {
				    if ($n->id == $p['id_parametru'] && $v->id == $p['id_hodnoty_parametru']) {
					$selected = 'checked';
				    }
				}
			    }
			    echo '<label>' . $v->nazev . '</label>';
			    echo '<input type="checkbox" name="par-' . $n->id . '[]" value="' . $v->id . '" ' . $selected . ' />';
			endforeach;
			break;
		    case 3:
			foreach ($values as $v):
			    echo '<label>' . $v->nazev . '</label>';
			    echo '<input type="text" name="par-' . $n->id . '[]" value="" />';
			endforeach;
			break;
		    case 4:
			foreach ($values as $v):
			    $selected = '';
			    if (isset($params_of_victim)) {
				foreach ($params_of_victim as $p) {
				    if ($n->id == $p['id_parametru'] && $v->id == $p['id_hodnoty_parametru']) {
					$selected = 'checked';
				    }
				}
			    }
			    echo '<label>' . $v->nazev . '</label>';
			    echo '<input type="radio" name="par-' . $n->id . '" value="' . $v->id . '" ' . $selected . ' />';
			endforeach;
			break;
		}
		?>
	    </p>
	    <br /><br />

	    <?php
	endforeach;
    }

    /**
     *
     * @param type $arr
     * @return array of id_parametru->id_hodnoty_parametru
     */
    public static function searchForParamsFromUrl($arr = array()) {

	foreach ($arr as $name => $value) {
	    //NDebugger::dump($name);exit;
	    //element name - "parametr-"+id parametru
	    if (preg_match('/^par/', $name)) {
		$id_parametru = explode('par-', $name);

		$p[$id_parametru[1]]['id_parametru'] = $id_parametru[1];
		$p[$id_parametru[1]]['id_hodnoty_parametru'] = $value;
	    }
	}
	//NDebugger::dump($p);exit;
	//echo '<pre>';print_r($p);echo '</pre>';
	if (isset($p)) {
	    return $p;
	}
	return false;
    }

    public static function buildHtmlElementFiltersSablona($id = false, $parametryVUrl = false) {
	if (!$id) {
	    return false;
	}
	if ($parametryVUrl) {
	    $parametryVUrl = Query::searchForParamsFromUrl($parametryVUrl);
	}

	// Najdu povolene filtry a prirazene konkretni galerii
	$params = dibi::query('SELECT * FROM parametry a LEFT JOIN parametry_prirazeni b
				ON a.id = b.id
				WHERE b.id_kategorie = %i', $id, ' AND a.filtrovat = 1 ORDER BY a.id ');
	if (count($params) < 1) {
	    return false;
	} else {
	    echo '<form method="get" action="" >';
	}
	foreach ($params as $n):
	    // Najdu prirazene hodnoty konkretnimu parametru a vytvorim box
	    $values = dibi::query('SELECT * FROM parametry_hodnoty WHERE id_parametru = %i', $n->id)->fetchAll();
	    //print_r(count($values));

	    if (count($values) > 0):
		switch ($n->typ) {
		    case 1:

			echo '<select name="par-' . $n->id . '" id="select' . $n->id . '" onChange="this.form.submit();" >';
			echo '<option value="" name="">-- ' . $n->nazev . ' --</option>';
			foreach ($values as $v):

			    $selected = '';
			    if (isset($parametryVUrl) && !empty($parametryVUrl)) {

				foreach ($parametryVUrl as $p) {
				    if ($n->id == $p['id_parametru'] && $v->id == $p['id_hodnoty_parametru']) {
					$selected = 'selected="selected"';
				    }
				}
			    }
			    echo '<option value="' . $v->id . '" ' . $selected . ' >' . $v->nazev . '</option>';
			endforeach;
			echo '</select>';
			break;
		    case 2:
			foreach ($values as $v):
			    $selected = '';
			    if (isset($parametryVUrl)) {
				foreach ($parametryVUrl as $p) {
				    if ($n->id == $p['id_parametru'] && $v->id == $p['id_hodnoty_parametru']) {
					$selected = 'checked';
				    }
				}
			    }
			    echo '<label>' . $v->nazev . '</label>';
			    echo '<input type="checkbox" name="par-' . $n->id . '[]" value="' . $v->id . '" ' . $selected . ' />';
			endforeach;
			break;
		    case 3:
			foreach ($values as $v):
			    echo '<label>' . $v->nazev . '</label>';
			    echo '<input type="text" name="par-' . $n->id . '[]" value="" />';
			endforeach;
			break;
		    case 4:
			foreach ($values as $v):
			    $selected = '';
			    if (isset($parametryVUrl)) {
				foreach ($parametryVUrl as $p) {
				    if ($n->id == $p['id_parametru'] && $v->id == $p['id_hodnoty_parametru']) {
					$selected = 'checked';
				    }
				}
			    }
			    echo '<label>' . $v->nazev . '</label>';
			    echo '<input type="radio" name="par-' . $n->id . '" value="' . $v->id . '" ' . $selected . ' />';
			endforeach;
			break;
		}
	    endif;
	    ?>


	    <?php
	endforeach;
	//echo '<input type="hidden" id="filtruj"  />';
	//echo '<input class="button" type="submit" id="filtruj" />';
	echo '</form>';
    }

    public static function buildHtmlElementFilters($id = false, $table = false, $parametryVUrl = false) {
	if (!$id) {
	    return false;
	}
	if ($parametryVUrl) {
	    $parametryVUrl = Query::searchForParamsFromUrl($parametryVUrl);
	}

	// Najdu povolene filtry a prirazene konkretni galerii
	$params = dibi::query('SELECT * FROM parametry a LEFT JOIN parametry_prirazeni b
				ON a.id = b.id
				WHERE b.id_kategorie = %i', $id, ' AND a.filtrovat = 1 ORDER BY a.id ');
	if (count($params) < 1) {
	    return false;
	} else {
	    echo '<form method="get" action="" >';
	}
	foreach ($params as $n):
	    // Najdu prirazene hodnoty konkretnimu parametru a vytvorim box
	    $values = dibi::query('SELECT * FROM parametry_hodnoty WHERE id_parametru = %i', $n->id)->fetchAll();
	    //print_r(count($values));
	    ?>
	    <p>
		<?php if (count($values) > 0): ?>
		    <label><?php echo $n->nazev; ?></label><br />
		    <?php
		    switch ($n->typ) {
			case 1:

			    echo '<select class="small-input" name="parametr-' . $n->id . '">';
			    //echo '<option value="">-- Default --</option>';
			    foreach ($values as $v):

				$selected = '';
				if (isset($parametryVUrl)) {

				    foreach ($parametryVUrl as $p) {
					if ($n->id == $p['id_parametru'] && $v->id == $p['id_hodnoty_parametru']) {
					    $selected = 'selected="selected"';
					}
				    }
				}
				echo '<option value="' . $v->id . '" ' . $selected . ' >' . $v->nazev . '</option>';
			    endforeach;
			    echo '</select>';

			    break;
			case 2:
			    foreach ($values as $v):
				$selected = '';
				if (isset($parametryVUrl)) {
				    foreach ($parametryVUrl as $p) {
					if ($n->id == $p['id_parametru'] && $v->id == $p['id_hodnoty_parametru']) {
					    $selected = 'checked';
					}
				    }
				}
				echo '<label>' . $v->nazev . '</label>';
				echo '<input type="checkbox" name="parametr-' . $n->id . '[]" value="' . $v->id . '" ' . $selected . ' />';
			    endforeach;
			    break;
			case 3:
			    foreach ($values as $v):
				echo '<label>' . $v->nazev . '</label>';
				echo '<input type="text" name="parametr-' . $n->id . '[]" value="" />';
			    endforeach;
			    break;
			case 4:
			    foreach ($values as $v):
				$selected = '';
				if (isset($parametryVUrl)) {
				    foreach ($parametryVUrl as $p) {
					if ($n->id == $p['id_parametru'] && $v->id == $p['id_hodnoty_parametru']) {
					    $selected = 'checked';
					}
				    }
				}
				echo '<label>' . $v->nazev . '</label>';
				echo '<input type="radio" name="parametr-' . $n->id . '" value="' . $v->id . '" ' . $selected . ' />';
			    endforeach;
			    break;
		    }
		endif;
		?>
	    </p>
	    <br /><br />

	    <?php
	endforeach;
	echo '<input type="hidden" id="filtruj"  />';
	echo '<input class="button" type="submit" id="filtruj" />';
	echo '</form>';
	echo '<br /><br />';
    }

    public static function getLast($lang = 1, $count = '1', $table = false) {
	if (!$table) {
	    return false;
	}
	$query = "
            SELECT a.id AS id_kategorie, b.id AS id, a.hloubka, b.nazev AS nazev, b.seo_nazev, b.seo_url,
                        b.title, c.nazev AS jazyk, c.obrazek, c.kod, b.keywords, b.description, b.stav,
                        b.anotace, b.obsah, b.typ, b.exturl, b.datum, b.obrazek AS hlavni_fotka, IFNULL(d.pocet, 0) navstevnost
            FROM $table AS a
            LEFT JOIN " . $table . "_popis AS b
                ON a.id = b.main_id
            LEFT JOIN jazyk c
                ON c.id = b.lang
	    LEFT JOIN " . $table . "_navsteva d
		ON d.id = b.id
            WHERE b.lang  = '" . $lang . "'
                ORDER BY b.datum DESC
            LIMIT $count
        ";
	return dibi::query($query)->fetchAll();
    }

    /**
     *
     */
    public static function getPremium($lang = 1, $count = '1', $table = false) {
	if (!$table) {
	    return false;
	}
	$query = "
            SELECT a.id AS id_kategorie, b.id AS id, a.hloubka, b.nazev AS nazev, b.seo_nazev, b.seo_url,
                        b.title, c.nazev AS jazyk, c.obrazek, c.kod, b.keywords, b.description, b.stav,
                        b.anotace, b.obsah, b.typ, b.exturl, b.datum, b.obrazek AS hlavni_fotka, IFNULL(d.pocet, 0) navstevnost
            FROM $table AS a
            LEFT JOIN " . $table . "_popis AS b
                ON a.id = b.main_id
            LEFT JOIN jazyk c
                ON c.id = b.lang
	    LEFT JOIN " . $table . "_navsteva d
		ON d.id = b.id
            WHERE b.lang  = '" . $lang . "'
		AND b.premium = 1
                ORDER BY b.datum DESC
            LIMIT $count
        ";
	return dibi::query($query)->fetchAll();
    }

    public static function getLastNovinky($lang = 1, $count = '1') {

	$query = "
            SELECT a.id AS id_kategorie, b.id AS id, a.hloubka, b.nazev AS nazev, b.seo_nazev, b.seo_url,
                        b.title, c.nazev AS jazyk, c.obrazek, c.kod, b.keywords, b.description, b.stav,
                        b.anotace, b.obsah, b.typ, b.exturl, b.datum, b.obrazek AS hlavni_fotka, IFNULL(d.pocet, 0) navstevnost
            FROM novinky AS a
            LEFT JOIN novinky_popis AS b
                ON a.id = b.main_id
            LEFT JOIN jazyk c
                ON c.id = b.lang
	    LEFT JOIN novinky_navsteva d
		ON d.id = b.id
            WHERE
		b.lang  = '" . $lang . "'
                ORDER BY b.datum DESC
            LIMIT $count
        ";
	return dibi::query($query)->fetchAll();
    }

    /**
     * @var id
     */
    public static function getCountOfPremium($table = false) {
	if (!$table) {
	    return false;
	}
	return dibi::query('SELECT COUNT(id) FROM ', $table, ' WHERE premium = 1')->fetchSingle();
    }

    /**
     * Vraci existujici jazykove mutace pro danou tabulku
     * @var id - id kategorie
     * @var table
     */
    public static function getLanguageFlags($id, $table) {
	$flags = dibi::query("SELECT kp.lang, j.nazev, j.obrazek FROM {$table}_popis kp LEFT JOIN jazyk j ON j.id = kp.lang WHERE kp.main_id = %i", $id, ' ORDER BY j.id')->fetchAll();
	if ($flags) {
	    return $flags;
	} else {
	    return false;
	}
    }

    public static function youtube($string) {
	return preg_replace(
	    '#(http://(www.)?youtube.com)?/(v/|watch\?v\=)([-|~_0-9A-Za-z]+)&?.*?#i', '<iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/$4" frameborder="0" allowfullscreen></iframe>', $string
	);

	/*
	  echo Query::youtube('http://www.youtube.com/watch?v=VWsjWCt1PsQ');
	  echo Query::youtube('http://youtube.com/watch?v=VWsjWCt1PsQ');
	  echo Query::youtube('http://youtube.com/v/VWsjWCt1PsQ');
	  echo Query::youtube('http://www.youtube.com/v/VWsjWCt1PsQ');
	 */
    }

}

ACC SHELL 2018