ACC SHELL

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

<?php

/**
 *
 *
 * @version $Id$
 * @copyright 2012
 * @name Zpracování diskografii
 */
class Diskografie extends Tools {
    /*
      public $iddiskografie = array();
      public $id_popisu = array();
      public $nazev = array();
      public $seoNazev = array();
      public $seoUrl = array();
      public $title = array();
      public $keywords = array();
      public $description = array();
      public $stav = array();
      public $anotace = array();
      public $obsah = array();
      public $lang = array();
      public $typ = array();
      public $exturl = array();
      public $datum = array();
     */

    public $komentare = KOMENTARE;
    public $fblike = FBLIKE;
    public $currentpage = "";
    public $totalpages = "";
    public $pagesize = "10";

    /**
     * Constructor
     */
    function __construct() {

    }

    public function fetchSingle($id, $lang = false) {
	$id = intval($id);
	$lang = intval($lang) == 1 ? $lang : $_SESSION['jazyk'];
	$query = "SELECT
		    a.id, a.hloubka, a.parent_id, a.lft, a.rgt,a.rok,
		    b.nazev AS nazev, b.id as id_popisu, b.stav AS stav, b.datum,b.typ,
		    b.seo_nazev, b.seo_url, b.anotace, b.obsah,b.obrazek,b.komentare, b.fblike,
		    b.cena, b.cena_skladba,b.exturl,
		    j.kod
                FROM diskografie a
                LEFT JOIN diskografie_popis b ON a.id = b.main_id
                LEFT JOIN jazyk j ON b.lang = j.id
                WHERE b.lang  = '" . $lang . "'
                AND b.id = $id
                LIMIT 1";

	return dibi::query($query)->fetch();
    }

    /**
     * funkce pro zobrazeni diskografii na vystupu
     * @param type $id seo-url adresa
     * @param type $lang
     * @return type
     */
    public function getDetail($id, $lang = false) {
	$lang = intval($lang) == 1 ? $lang : $_SESSION['jazyk'];
	$query = "SELECT
		    a.id, a.hloubka, a.parent_id, a.lft, a.rgt,a.rok,
		    b.nazev AS nazev, b.id as id_popisu, b.stav AS stav, b.datum,b.typ,
		    b.seo_nazev, b.seo_url, b.anotace, b.obsah,b.obrazek,b.komentare, b.fblike,
		    j.kod
                FROM diskografie a
                LEFT JOIN diskografie_popis b ON a.id = b.main_id
                LEFT JOIN jazyk j ON b.lang = j.id
                WHERE b.lang  = '" . $lang . "'
                AND b.seo_url = '" . $id . "'
                LIMIT 1";

	return dibi::query($query)->fetch();
    }

    public function fetchAll($arr) {
	if (isset($arr['pagesize'])) {
	    $this->pagesize = $arr['pagesize'];
	}
	$lang = isset($arr['lang']) ? $arr['lang'] : '1';

	$recordstart = (isset($_GET['recordstart'])) ? (int) $_GET['recordstart'] : 0;

	$query = "SELECT a.id, a.hloubka, b.nazev AS nazev, a.parent_id, a.lft, a.rgt,
		    b.stav AS stav, b.datum, b.seo_nazev, b.seo_url, b.anotace, b.obsah, b.obrazek, b.typ,
		    j.kod
                FROM diskografie a
                LEFT JOIN diskografie_popis b ON a.id = b.main_id
                LEFT JOIN jazyk j ON b.lang = j.id
                WHERE b.lang  = '" . $_SESSION['jazyk'] . "'";

	if (isset($arr['stav'])) {
	    $query .= ' AND b.stav = ' . $arr['stav'];
	}
	if (isset($arr['value'])) {
	    $query .= ' AND b.typ in (' . $arr['value'].')';
	}
	$query .= ' ORDER BY a.lft DESC';

	$rows = dibi::query($query);

	$pocetZaznamu = count($rows);
	//NDebugger::barDump($pocetZaznamu, 'PocetNovinek');
	//NDebugger::barDump($this->pagesize, 'Pagesize');
	//NDebugger::Dump($pocetZaznamu);
	if ($pocetZaznamu > $this->pagesize) {

	    $this->totalpages = ceil($pocetZaznamu / $this->pagesize);

	    $this->currentpage = ($recordstart / $this->pagesize) + 1;

	    return $rows->fetchAll($recordstart, $this->pagesize);
	} else {
	    return $rows->fetchAll();
	}
    }

    public function getAdminTable() {
	if (isset($_SESSION['listuj']))
	    $this->pagesize = $_SESSION['listuj'];

	if (isset($_GET['recordstart'])) {
	    $recordstart = (isset($_GET['recordstart'])) ? (int) $_GET['recordstart'] : 0;
	}
	else
	    $recordstart = 0;

	$query = "SELECT
		    a.id, a.hloubka, a.parent_id, a.lft, a.rgt,
		    b.nazev AS nazev, b.seo_url, b.stav AS stav, b.datum, b.obrazek
                        FROM diskografie a
                            LEFT JOIN diskografie_popis b ON a.id = b.main_id
                        WHERE b.lang  = '" . $_SESSION['jazyk'] . "'
                        ORDER BY a.lft DESC";

	$num_rows = dibi::query($query)->count();

	if ($num_rows > $this->pagesize) {

	    $query .= " LIMIT $recordstart, $this->pagesize";
	    $this->totalpages = ceil($num_rows / $this->pagesize);
	    $this->currentpage = ($recordstart / $this->pagesize) + 1;
	}

	$result = dibi::query($query)->fetchAll();
	if (!$result) {
	    return false;
	}
	//Zjisteni minimalni a maximalni hodnoty pro kazdou kategorii
	$query = "SELECT parent_id, min(lft) lft, max(rgt) rgt FROM diskografie group by parent_id";
	$test = mysql_query($query);
	while ($test1 = mysql_fetch_assoc($test)) {
	    $showMove[$test1['parent_id']]['lft'] = $test1['lft'];
	    $showMove[$test1['parent_id']]['rgt'] = $test1['rgt'];
	}


	foreach ($result as $row) {
	    echo '<tr>';
	    echo '<td><input type="checkbox" name="checkbox[]" value="' . $row->id . '" id="" ></td>';
	    echo '<td>';
	    if ($row->obrazek != null) {
		$foto_small = DISKOGRAFIE_F_M_PATH . $row->obrazek;
		$foto_large = DISKOGRAFIE_F_L_PATH . $row->obrazek;
		echo '<a href="#"><img class="vypis_nahled" src="' . $foto_small . '" alt="" title="' . $row->nazev . '" /></a>';
	    }
	    echo '</td>';
	    echo '<td><a href="diskografie_edit.php?id=' . $row->id . '">' . $row->nazev . '</a><br />';

	    $query = "SELECT kp.seo_url, kp.lang, j.nazev, j.obrazek, j.kod
                            FROM diskografie_popis kp
                            LEFT JOIN jazyk j ON j.id = kp.lang
                            WHERE kp.main_id = $row->id
                            ORDER BY j.id";
	    $langs = dibi::query($query)->fetchAll();

	    foreach ($langs as $n => $r) {
		$adresa_diskografie = dibi::query('SELECT url FROM kategorie_popis WHERE typ=8 AND lang = %i', $r->lang, ' LIMIT 1')->fetchSingle();
		//NDebugger::dump($adresa_diskografie);
		if (empty($adresa_diskografie)) {
		    echo 'Kategorie diskografie neni definovana';
		}
		echo '<span class="url">';
		$kod_jazyka = $r['lang'] == '1' ? '' : $r['kod'] . '/';
		if ($row->stav == 0) {
		    echo 'Diskografie je zakázána';
		} else {
		    echo 'http://' . SERVER_NAME . '/' . $kod_jazyka . $adresa_diskografie . '/' . $r['seo_url'] . '.html';
		}

		echo '</span><br />';
	    }


	    echo "</td>";
	    $pocet = dibi::query('SELECT count(*) FROM skladby WHERE id_diskografie=%i', $row['id'])->fetchSingle();
	    echo '<td>' . $pocet . '</td>';

	    // jazykove mutace
	    $flags = Query::getLanguageFlags($row['id'], 'diskografie');
	    echo "<td>";
	    foreach ($flags as $f) {
		echo "<img class=\"vypis_jazyky\" src=\"images/flags/$f->obrazek\" alt=\"$f->nazev\" title=\"$f->nazev\" />";
	    }
	    echo "</td>";
	    // end of jazykove mutace

	    $stav = $row['stav'] == '1' ? "Ano" : "Ne";
	    echo '<td><a href="?id=' . $row->id . '&amp;stav=' . $stav . '">' . $stav . '</a></td>';

	    echo '<td>' . datum($row['datum']) . '</td>';

	    echo '<td>';
	    if ($showMove[$row['parent_id']]['lft'] != $row['lft']) {
		echo '<a href="?up=' . $row->id . '" title="Posun nahoru"><img src="images/iko/up.png" alt="Posun nahoru" /></a>';
	    }
	    if ($showMove[$row['parent_id']]['rgt'] != $row['rgt']) {
		echo '<a href="?down=' . $row->id . '" title="Posun dolů"><img src="images/iko/down.png" alt="Posun dolů" /></a>';
	    }
	    echo '</td>';

	    echo '<td>';
	    echo '<a href="diskografie_edit.php?id=' . $row->id . '" title="Editovat"><img src="images/iko/note_edit.png" alt="Editovat" /></a>';

	    if ($row->stav == 0) {
		echo '<a href="#" title="Album nemá povolené prohlížení.">';
	    } else {
		echo '<a href="http://' . SERVER_NAME . '/' . $adresa_diskografie . '/' . $r['seo_url'] . '.html" target="_blank">';
	    }
	    echo '<img src="images/iko/computer.png" alt="Prohlédnout" /></a>';
	    echo '<a href="?smazat=' . $row->id . '" class="potvrzujiciLink"  title="Smazat"><img src="images/iko/remove.png" alt="Smazat" /></a></td>';
	    echo '</tr>';
	}
	return true;
    }

    /**
     *
     * @param type $id id diskografie
     * @param type $lang id jazyka //TODO
     * @return pole skladeb, ktere patri do konkretni diskografie
     */
    public function getSkladby($id=false, $lang=1) {
	if (!$id) {
	    return false;
	    //$query = "SELECT id, nazev, nazev_skladby, pripona, hlavni, stav, alt, title FROM skladby WHERE id_diskografie = '" . intval($id) . "'";
	} else {
	    $query = "SELECT
			a.id, a.nazev, a.file, a.pripona, a.velikost,a.priorita,a.stav,
			b.popis
		      FROM skladby a
		      LEFT JOIN skladby_popis b
			  ON a.id = b.id_skladby
		      WHERE a.id_diskografie = '" . $id . "'
			  AND b.lang='" . $lang . "'
			  ORDER BY a.priorita";
	    //AND a.stav=1";

	    return dibi::query($query)->fetchAll();
	}
    }

    public function fetchSingleSkladbu($id=false) {
	if (!$id) {
	    return false;
	} else {
	    $query = "SELECT
			a.id, a.id_diskografie, a.nazev, a.file, a.pripona, a.velikost,a.priorita,a.stav,
			a.cena, a.exturl,
			b.popis
		      FROM skladby a
		      LEFT JOIN skladby_popis b
			  ON a.id = b.id_skladby
		      WHERE a.id = '" . $id . "'
			  ORDER BY a.priorita
			  LIMIT 1";
	    return dibi::query($query)->fetch();
	}
    }

    public function smazatFotku($id) {
	$obrazek = dibi::select('obrazek')->from('diskografie_popis')->where('main_id=%i', $id)->fetchSingle();
	if ($obrazek == null) {
	    return true;
	}
	if (dibi::query('UPDATE diskografie_popis SET obrazek=NULL where main_id=%i', $id)) {
	    unlink(ROOT . DISKOGRAFIE_F_L_PATH . $obrazek);
	    unlink(ROOT . DISKOGRAFIE_F_M_PATH . $obrazek);
	    return true;
	} else {
	    return false;
	}
    }

    public function smazatSkladbu($id) {
	$row = dibi::query('SELECT file, priorita, id_diskografie FROM skladby WHERE id=%i', $id, ' LIMIT 1')->fetch();

	if (dibi::query('DELETE FROM skladby WHERE id=%i', $id)) {
	    dibi::query('DELETE FROM skladby_popis WHERE id_skladby=%i', $id);
	    unlink(ROOT . MUSIC_PATH . $row->file . '.ogg');
	    unlink(ROOT . MUSIC_PATH . $row->file . '.mp3');
	    unlink(ROOT . MUSIC_PATH . $row->file . '.wmv');
	    $this->nastavPrioritu($row->priorita, $row->id_diskografie);
	    return true;
	} else {
	    return false;
	}
    }

    /**
     *  funkce pro opraveni priorit v pripade smazani kategorie
     *  potrebuju id, diky ktere ziskam stavajici prioritu (vsechny vyssi musim updatnou -1)
     *  update se bude tykat jen vsem s vyssi prioritou a se stejnou diskografii
     */
    public function nastavPrioritu($priorita, $id_diskografie) {
	dibi::query('UPDATE skladby SET priorita=priorita-1 WHERE id_diskografie=%i', $id_diskografie, ' AND priorita>%i', $priorita);
    }

    public function moveUp($id) {
	if (intval($id) == 0) {
	    return false;
	}
	$my = dibi::query('SELECT id_diskografie, priorita FROM skladby WHERE id=%i', $id, ' LIMIT 1')->fetch();
	//NDebugger::dump($my);
	if ($my) {
	    $switch = dibi::query('SELECT id, priorita FROM skladby WHERE priorita<%i', $my->priorita, ' AND id_diskografie=%i', $my->id_diskografie, ' ORDER BY priorita DESC LIMIT 1')->fetch();
	    //NDebugger::dump($switch);
	    if ($switch) {
		dibi::query('UPDATE skladby SET priorita=%i', $switch->priorita, ' WHERE id=%i', $id);
		dibi::query('UPDATE skladby SET priorita=%i', $my->priorita, ' WHERE id=%i', $switch->id);
		return true;
	    } else {
		return false;
	    }
	} else {
	    return false;
	}
    }

    public function moveDown($id, $table) {
	if (intval($id) == 0) {
	    return false;
	}
	$my = dibi::query('SELECT id_diskografie, priorita FROM skladby WHERE id=%i', $id, ' LIMIT 1')->fetch();
	//NDebugger::dump($my);
	if ($my) {
	    $switch = dibi::query('SELECT id, priorita FROM skladby WHERE priorita>%i', $my->priorita, ' AND id_diskografie=%i', $my->id_diskografie, ' ORDER BY priorita ASC LIMIT 1')->fetch();
	    //NDebugger::dump($switch);
	    if ($switch) {
		dibi::query('UPDATE skladby SET priorita=%i', $switch->priorita, ' WHERE id=%i', $id);
		dibi::query('UPDATE skladby SET priorita=%i', $my->priorita, ' WHERE id=%i', $switch->id);
		return true;
	    } else {
		return false;
	    }
	} else {
	    return false;
	}
    }

    /**
     *
     * @param type $id id diskografie, pro kterou playlist generuju
     * @return bool navratova hodnota po dokonceni generovani
     */
    public function generatePlaylist($id) {
	if (!$id) {
	    return false;
	}
	//nema skladby / neexistuje
	$skladby = $this->getSkladby($id);
	if (!$skladby) {
	    return false;
	}
	$nazev = $id . '.js';
	$fh = fopen(ROOT . MUSIC_PATH . $nazev, 'w') or die("Can't open file for generate playlist.");

	fwrite($fh, 'var myPlaylist = [');

	foreach ($skladby as $row) {
	    $data = '{';
	    if ($row->pripona == 'mp3') {
		$data .= 'mp3:\'' .MUSIC_PATH .$row->file . '.mp3\',';
		$data .= 'oga:\'' .MUSIC_PATH . $row->file . '.ogg\',';
	    } else {
		$data .= 'wma:\'' .MUSIC_PATH . $row->file . '.wma\',';
	    }
	    $data .='title:\'' . $row->nazev . '\',';
	    $data .='artist:\'80s Band\',';
	    $data .='rating:4,';
	    $data .='buy:\'#\',';
	    //$data .='cover:\'../fotky/diskografie/medium/1.png\'';
	    $data .='},';
	    fwrite($fh, $data);
	}
	fwrite($fh, '];');
	fclose($fh);
    }

    public function unlink() {
	unlink(ROOT . MUSIC_PATH . '_1.js');
	chmod(ROOT . MUSIC_PATH . '_1.js', 0755);
    }

}

ACC SHELL 2018