ACC SHELL
<?php
/**
* @author Filip Štencl
* @since 13. 01. 2015
*/
class videa extends base {
const TABLE_NAME = 'videa';
private $id = null;
private $caszalozeni = null;
private $caszmeny = null;
private $iduzivatele = null;
private $nazev = null;
private $mr_url = null;
private $vimeo = null;
private $youtube = null;
private $detail = null;
private $pocet_shlednuti = null;
private $pripraveno = null;
private $sdilet = null;
private $hlavni_strana = null;
private $schvaleno = null;
private $poradi = null;
private $zobrazit = null;
private $promo = null;
private $chyba = null;
public function __construct($id = null) {
if (!is_null($id) && intval($id) != 0) { // Pokud již položka existuje, zpřístupní její vlastnosti
$result = dibi::query('SELECT * FROM ['.self::TABLE_NAME.'] WHERE id=%i',intval($id));
if($result->count() > 0) {
$row = $result->fetch();
$this->id = $row->id;
$this->caszalozeni = $row->caszalozeni;
$this->caszmeny = $row->caszmeny;
$this->iduzivatele = $row->iduzivatele;
$this->nazev = $row->nazev;
$this->mr_url = $row->mr_url;
$this->vimeo = $row->vimeo;
$this->youtube = $row->youtube;
$this->detail = $row->detail;
$this->pocet_shlednuti = $row->pocet_shlednuti;
$this->pripraveno = $row->pripraveno;
$this->sdilet = $row->sdilet;
$this->hlavni_strana = $row->hlavni_strana;
$this->poradi = $row->poradi;
$this->schvaleno = $row->schvaleno;
$this->zobrazit = $row->zobrazit;
$this->promo = $row->promo;
} else { notification::infoBox_error("Požadovaná položka nebyla nalezena");redirect("/404.php"); }
}
}
public function getId() { return $this->id; }
public function getCaszalozeni() { return $this->caszalozeni; }
public function getCaszmeny() { return $this->caszmeny; }
public function getIduzivatele() { return $this->iduzivatele; }
public function getNazev() { return $this->nazev; }
public function getMr_url() { return $this->mr_url; }
public function getVimeo() { return $this->vimeo; }
public function getYoutube() { return $this->youtube; }
public function getDetail() { return $this->detail; }
public function getPocet_shlednuti() { return $this->pocet_shlednuti; }
public function getPripraveno() { return $this->pripraveno; }
public function getSdilet() { return $this->sdilet; }
public function getHlavni_strana() { return $this->hlavni_strana; }
public function getPoradi() { return $this->poradi; }
public function getSchvaleno() { return $this->schvaleno; }
public function getZobrazit() { return $this->zobrazit; }
public function getPromo() { return $this->promo; }
public function setId($id) { $this->id = $id; }
protected function getChyba() { return $this->chyba; }
protected function checkData($data) {
if(array_key_exists("id",$data)) {if(intval($data['id']) > 0) { $this->id = intval($data['id']); } else { $this->chyba .= "ID je v nesprávném formátu<br />"; return false; }}
return true;
}
public function create($variables, $redirectOnEnd = false) {
$arr = pripravPost($variables);
$arr["poradi"] = 0;
$stitky = @$arr["stitky"];
$idkanaly = @$arr["idkanaly"];
$idkategorie = @$arr["idkategorie"];
unset($arr["idkanaly"],$arr["idkategorie"],$arr["stitky"]);
if (isset($arr["youtube"])) { // youtube videa
preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'>]+)/", $arr["youtube"], $matches);
$arr["youtube"] = $matches[1];
$arr["pripraveno"] = date('Y-m-d H:i:s');
parent::create($arr, $redirectOnEnd);
foreach($idkategorie as $item) { dibi::query("INSERT INTO [videa_kategorie] (idvidea,idkategorie) VALUES(%i,%i)",$this->getId(),$item); }
foreach($idkanaly as $item) { dibi::query("INSERT INTO [videa_kanaly] (idvidea,idkanaly) VALUES(%i,%i)",$this->getId(),$item); }
foreach(explode(",",$stitky) as $item) { dibi::query("INSERT INTO [stitky] (idvidea,nazev,mr_url) VALUES(%i,%s,%s)",$this->getId(),$item,mr_url($item)); }
} else { // klasický upload na vimeo
if ($_FILES['file']['name']!= "" && $_FILES['file']['size'] > 0) {
if (move_uploaded_file($_FILES['file']['tmp_name'],DATA_DIR."/fronta_vimeo/".iconv('US-ASCII//TRANSLIT', 'UTF-8//IGNORE',$_FILES['file']['name']))) {
chmod(DATA_DIR."/fronta_vimeo/".iconv('US-ASCII//TRANSLIT', 'UTF-8//IGNORE',$_FILES['file']['name']), 0646 );
parent::create($arr, $redirectOnEnd);
dibi::query("INSERT INTO [videa_fronta] (idvidea,soubor) VALUES(%i,%s)",$this->getId(),iconv('US-ASCII//TRANSLIT', 'UTF-8//IGNORE',$_FILES['file']['name']));
foreach($idkategorie as $item) { dibi::query("INSERT INTO [videa_kategorie] (idvidea,idkategorie) VALUES(%i,%i)",$this->getId(),$item); }
foreach($idkanaly as $item) { dibi::query("INSERT INTO [videa_kanaly] (idvidea,idkanaly) VALUES(%i,%i)",$this->getId(),$item); }
foreach(explode(",",$stitky) as $item) { dibi::query("INSERT INTO [stitky] (idvidea,nazev,mr_url) VALUES(%i,%s,%s)",$this->getId(),$item,mr_url($item)); }
} else { notification::infoBox_alert("Soubor se nepodařilo uložit na server OLTV.cz"); }
} else { notification::infoBox_alert("Nebyl vybrán soubor k nahrání"); }
}
redirect(admin::returnBack()."#".$this->getId());
}
public function edit($variables, $redirectOnEnd = true) {
$arr = pripravPost($variables);
$stitky = @$arr["stitky"];
$idkanaly = $arr["idkanaly"];
$idkategorie = $arr["idkategorie"];
unset($arr["idkanaly"],$arr["idkategorie"],$arr["stitky"]);
dibi::query("DELETE FROM [videa_kategorie] WHERE idvidea = %i",$this->getId());
dibi::query("DELETE FROM [videa_kanaly] WHERE idvidea = %i",$this->getId());
dibi::query("DELETE FROM [stitky] WHERE idvidea = %i",$this->getId());
foreach($idkategorie as $item) { dibi::query("INSERT INTO [videa_kategorie] (idvidea,idkategorie) VALUES(%i,%i)",$this->getId(),$item); }
foreach($idkanaly as $item) { dibi::query("INSERT INTO [videa_kanaly] (idvidea,idkanaly) VALUES(%i,%i)",$this->getId(),$item); }
foreach(explode(",",$stitky) as $item) { dibi::query("INSERT INTO [stitky] (idvidea,nazev,mr_url) VALUES(%i,%s,%s)",$this->getId(),$item,mr_url($item)); }
if ($arr["youtube"]) { // youtube videa
preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'>]+)/", $arr["youtube"], $matches);
$arr["youtube"] = $matches[1];
}
parent::edit($arr,$redirectOnEnd);
}
public function delete($redirectOnEnd = true) {
dibi::query("DELETE FROM [videa_hlasovani] WHERE [idvidea]=%i",intval($this->getId()));
dibi::query("DELETE FROM [videa_kategorie] WHERE idvidea = %i",$this->getId());
dibi::query("DELETE FROM [videa_kanaly] WHERE idvidea = %i",$this->getId());
dibi::query("DELETE FROM [stitky] WHERE idvidea = %i",$this->getId());
parent::delete($redirectOnEnd);
}
public static function vypis($where = null) {
if (is_null($where)) { $where = array(); }
if (!isset($where["order"])) { $where["order"] = "videa.caszalozeni"; }
if (!isset($where["sort"])) { $where["sort"] = "DESC"; }
if (!isset($where["limit"])) { $where["limit"] = 15; }
if (!isset($where["page"])) { $where["page"] = 1; }
if (!isset($where["pager"])) { $where["pager"] = false; }
if (!isset($where["imageWidth"])) { $where["imageWidth"] = 100; }
if (!isset($where["imageHeight"])) { $where["imageHeight"] = 58; }
// if (!isset($where["memcache"])) { $where["memcache"] = false; }
if (!isset($where["folder"])) { $where["folder"] = "/"; }
if (!isset($where["rewritecode"])) { $where["rewritecode"] = "video"; }
if (isset($where["idkanaly"])) { $where["rewritecode"] = "kanal"; }
// if ($where["memcache"] !== false) {
// $memcache = new Memcache;
// $memcache->addserver('127.0.0.1');
// $memcache->connect('127.0.0.1');
// $result = $memcache->get($where["memcache"]);
// }
if(empty($result)){
$sql[] = "SELECT";
if ($where["pager"] == true) { $sql[] = "SQL_CALC_FOUND_ROWS"; }
$sql[] = "
videa.nazev, videa.youtube, videa.mr_url, videa.id, videa.caszalozeni, videa.pocet_shlednuti, videa.vimeo,
kategorie.nazev AS nazevKat, kategorie.mr_url AS kategorie_mr_url
";
$sql[] = "FROM [videa]";
$sql[] = "LEFT JOIN [videa_kategorie] ON videa_kategorie.idvidea = videa.id";
$sql[] = "LEFT JOIN [kategorie] ON videa_kategorie.idkategorie = kategorie.id";
if (isset($where["search"]) || isset($where["stitek"])) { $sql[] = "LEFT JOIN [stitky] ON videa.id = stitky.idvidea"; }
if (isset($where["idkanaly"]) || isset($where["pouze_povoleny_kanal"])) {
$sql[] = "LEFT JOIN [videa_kanaly] ON videa.id = videa_kanaly.idvidea";
$sql[] = "LEFT JOIN [kanaly] ON videa_kanaly.idkanaly = kanaly.id";
}
$sql[] = "WHERE 1=1";
$sql[] = "AND videa.zobrazit = 1 AND videa.schvaleno = 1 AND pripraveno IS NOT NULL";
if (isset($where["idkategorie"])) { array_push($sql,"AND videa_kategorie.idkategorie = %i",$where["idkategorie"]); }
if (isset($where["idkanaly"])) { array_push($sql,"AND videa_kanaly.idkanaly = %i",$where["idkanaly"]); }
if (isset($where["stitek"])) { array_push($sql,"AND stitky.mr_url = %s",$where["stitek"]); }
if (isset($where["search"])) { array_push($sql,"AND (kategorie.nazev LIKE %~like~ OR videa.nazev LIKE %~like~ OR videa.mr_url LIKE %~like~ OR videa.vimeo LIKE %~like~ OR videa.id LIKE %~like~ OR videa.detail LIKE %~like~ OR stitky.mr_url LIKE %~like~ OR stitky.nazev LIKE %~like~)",$where["search"],$where["search"],$where["search"],$where["search"],$where["search"],$where["search"],$where["search"],$where["search"]); }
if (isset($where["notid"])) { array_push($sql,"AND videa.id NOT IN %in",$where["notid"]); } // vstup je array
if (isset($where["iduzivatele"])) { array_push($sql,"AND videa.iduzivatele = %i",$where["iduzivatele"]); }
if (isset($where["promo"])) { array_push($sql,"AND videa.promo = 1"); }
if (isset($where["aktualni_mesic"])) { array_push($sql,"AND MONTH(videa.caszalozeni) = %i AND YEAR(videa.caszalozeni) = %i",date('n'),date('Y')); }
if (isset($where["pouze_povoleny_kanal"]) && $where["pouze_povoleny_kanal"] == 1) {
$sql[] = "AND kanaly.zobrazit = 1";
}
$sql[] = "GROUP BY videa.id";
array_push($sql,"ORDER BY %by",$where["order"], $where["sort"]);
array_push($sql,"%ofs %lmt",($where["page"] * $where["limit"] - $where["limit"]), $where["limit"]);
$result = dibi::query($sql)->fetchAll();
// if ($where["memcache"] !== false) { $memcache->set($where["memcache"],$result,MEMCACHE_COMPRESSED,300); }
}
/*
skript pro nalití ze štítků do kanálu...
if (isset($where["stitek"]) && $where["stitek"] == "moravske-divadlo") {
foreach($result as $row) {
echo $row->id."<br>";
$arr = array("idvidea" => $row->id, "idkanaly" => 22);
dibi::query("INSERT INTO [videa_kanaly] ",$arr);
}
}
*/
$output["html"] = self::renderHtml($result,$where);
if ($where["pager"] == true) {
$output["count"] = dibi::query("SELECT FOUND_ROWS()")->fetchSingle();
$paginator = new \Nette\Utils\Paginator;
$paginator->setItemCount($output["count"]);
$paginator->setItemsPerPage($where["limit"]);
$paginator->setPage($where["page"]);
$output["pager"] = $paginator;
}
return $output;
}
private static function renderHtml($result,$where) {
$pom = "";
foreach ($result as $row) {
$pom .= "<li class=\"item\">";
$pom .= "<a href=\"". $where["folder"] . $row->mr_url."-".$where["rewritecode"]."-".$row->id.".html\" title=\"přehrát video - ".$row->nazev."\" class='imga'>";
if ($row->youtube != "") {
$pom .= "<img src=\"https://img.youtube.com/vi/".$row->youtube."/default.jpg\" alt=\"".$row->nazev."\" width=\"".$where["imageWidth"]."\" height=\"".$where["imageHeight"]."\" />";
} else {
$pom .= "<img src=\"/images-crop/".$where["imageWidth"]."x".$where["imageHeight"]."/videa/".$row->id."/".$row->vimeo.".jpg\" alt=\"".$row->nazev."\" width=\"".$where["imageWidth"]."\" height=\"".$where["imageHeight"]."\" />";
}
$pom .= "<div class=\"dualLine\">".maxlength($row->nazev,250)."</div></a>";
$pom .= "<span class=\"fl\">".datum($row->caszalozeni,"j. n. Y")." |";
if (isset($where["pocet_zobrazeni"]) && $where["pocet_zobrazeni"] == TRUE) { $pom .= " ".$row->pocet_shlednuti."x |"; }
$pom .= "</span>";
$pom .= "<div class=\"kategorie-link\"> <a href=\"/".$row->kategorie_mr_url.".html\" title=\"zobrazit videa z kategorie - ".$row->nazevKat."\">".$row->nazevKat."</a></div>";
$pom .= "</li>";
}
return $pom;
}
public function update_pocet_shlednuti() {
if (!isset($_SESSION["visited_id"]) || !array_key_exists($this->id,$_SESSION["visited_id"])) {
dibi::query("UPDATE [videa] SET pocet_shlednuti = pocet_shlednuti + 1 WHERE id = %i",$this->id);
}
$_SESSION["visited_id"][$this->id] = time();
return $this;
}
public static function vypisDalsiHP() {
$sql = "
SELECT
id, nazev, mr_url, caszalozeni, vimeo, youtube
FROM videa
WHERE
videa.zobrazit = 1
AND videa.schvaleno = 1
AND pripraveno IS NOT NULL
AND hlavni_strana = 1
ORDER BY
poradi ASC
LIMIT 1, 3
";
$result=dibi::query($sql)->fetchAll();
$pom = "";
foreach ($result as $row) {
$pom .='<li class="video'.$row->id.'">';
$pom .='<a href="'.$row->mr_url.'-video-'.$row->id.'.html" title="přehrát video - '.$row->nazev.'">';
if ($row->youtube != "") {
$pom .= "<img src=\"https://img.youtube.com/vi/".$row->youtube."/default.jpg\" alt=\"".$row->nazev."\" width=\"197\" height=\"100\">";
} else {
$pom .='<img src="/images-crop/197x100/videa/'.$row->id.'/'.$row->vimeo.'.jpg" alt="'.$row->nazev.'">';
}
$pom .='<h2>'.maxlength($row->nazev,150).'</h2>';
$pom .='<div class="datum">'.datum($row->caszalozeni,"j.n.Y").'</div>';
$pom .='</a>';
$pom .='</li>';
}
return $pom;
}
}
ACC SHELL 2018