ACC SHELL
<?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 . '&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