ACC SHELL

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

<?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")."&nbsp;&nbsp;|";
			if (isset($where["pocet_zobrazeni"]) && $where["pocet_zobrazeni"] == TRUE) { $pom .= "&nbsp;&nbsp;".$row->pocet_shlednuti."x&nbsp;&nbsp;|"; }
			$pom .= "</span>";
			$pom .= "<div class=\"kategorie-link\">&nbsp;&nbsp;<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