ACC SHELL

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

<?php

/**
 *
 *
 * @version $Id$
 * @copyright 2010
 * @name Zpracování kateogorií
 */

class KnihaNavstev extends Tools {
    public $currentpage = "";
    public $totalpages  = "";
    public $pagesize    = "10";

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

    /*
    * @param  string  configuration option name
    * @return bool
     *
     */
    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;
	}
    }
    function updateIP($ip, $ban){
	dibi::query('UPDATE ip SET ban=%i', $ban, ', modifikovano=now() WHERE ip=%s', $ip);
    }

    public function insertReakci($arr = array()) {
        $arr['ip_id'] = $this->insertIP($arr['ip'], $arr['ban']);
	//Sloupec ip a ban v tabulce knihy navstev nemam, tak ho vyjmu z pole
	unset($arr['ip']);
	unset($arr['ban']);
        dibi::begin();
	$row = dibi::query('SELECT * FROM knihanavstev WHERE id=%i', $arr['parent_id'])->fetch();
	if (!$row){
            $_SESSION['message_ko'][] = 'Takový příspěvek neexistuje';
            return false;
        }
        dibi::query('UPDATE [knihanavstev] SET lft = lft + 2 WHERE lft > %i', $row->rgt);
        dibi::query('UPDATE [knihanavstev] SET rgt = rgt + 2 WHERE rgt >= %i', $row->rgt);
	$arr['lft'] = $row['rgt'];
	$arr['rgt'] = $row['rgt'] + 1;
	$arr['hloubka'] = $row['hloubka'] + 1;

	if (dibi::query('INSERT INTO knihanavstev ', $arr)) {
	    $id = dibi::insertId();
	    dibi::commit();
	    $_SESSION['message_ok'][] = 'Uložení příspěvku proběhlo v pořádku';
            return $id;
	}
	else {
	    dibi::rollback();
	    return false;
	}
    }

    function insertPrispevek($arr = array()) {
	$arr['ip_id'] = $this->insertIP($arr['ip'], $arr['ban']);
	//Sloupec ip a ban v tabulce knihy navstev nemam, tak ho vyjmu z pole
	unset($arr['ip']);
	unset($arr['ban']);

	//Nemam id rodice, tzn. zakladam novy prispevek
	if (!isset($arr['parent_id']) || $arr['parent_id'] == false) {
	    $arr['lft'] = dibi::query('SELECT IFNULL(MAX(rgt), 0) + 1 FROM knihanavstev');
	    $arr['rgt'] = dibi::query('SELECT IFNULL(MAX(rgt), 0) + 2 FROM knihanavstev');
	    $arr['parent_id'] = '0';
	    if (dibi::query('INSERT INTO knihanavstev ', $arr)) {
		$_SESSION['message_ok'][] = 'Uložení příspěvku proběhlo v pořádku';
		return dibi::insertId();
	    }
	    else {
		return false;
	    }
	}
	//Mam id rodice, tzn. reaguju na existujici prispevek
	else {
	    $prispevek_id = $this->insertReakci($arr);
	    if ($prispevek_id != false){
		$_SESSION['message_ok'][] = 'Uložení příspěvku proběhlo v pořádku';
		return $prispevek_id;
	    }
	    else {
		return false;
	    }
	}
    }
    function updatePrispevek($arr = array()) {
        $this->updateIP($arr['ip'], $arr['ban']);
	//ip
	unset($arr['ip']);
        unset($arr['ban']);
	if (dibi::query('UPDATE knihanavstev SET ', $arr, 'WHERE id=%i', $arr['id'])) {
            $_SESSION['message_ok'][] = 'Úprava nastavení ' . $whatToUpdate . ' proběhla v pořádku';
            return true;
        }
        else
            return false;
    }

    /*
     *
     */
    public function delAllTree($id, $table='knihanavstev') {
	dibi::begin();

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

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

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

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

        dibi::commit();
        //exit;

        return true;

    }

    function banIP($id = array()) {
        if (dibi::query('UPDATE ip SET ban=1, modifikovano=now() WHERE id=(SELECT ip_id FROM knihanavstev WHERE id=%i', $id, ')')) {
	    return true;
        }
        else
            return false;
    }
    function UnBanIP($id = array()) {
        if (dibi::query('UPDATE ip SET ban=0, modifikovano=now() WHERE id=(SELECT ip_id FROM knihanavstev WHERE id=%i', $id, ')')) {
	    return true;
        }
        else
            return false;
    }
    function checkIp($ip) {
        $ban = dibi::query('SELECT ban FROM ip WHERE ip=%s', $ip)->fetch();
        if ($ban) {
	    return $ban;
        }
        else
            return false;
    }
    function fetchSingle($id = null) {
	if ($id == null) {
	    return false;
	}
	else
	    return dibi::query('SELECT a.id, a.jmeno, a.nadpis, a.email, a.text, a.datum, b.ip, b.ban
			FROM knihanavstev a
			LEFT JOIN ip b
			    ON a.ip_id = b.id
			WHERE a.id=%i', $id)->fetch();
    }
    function fetchAll() {
        $query = "SELECT a.id, a.jmeno, a.email, a.nadpis, a.text, a.datum, b.ip, b.ban, a.hloubka
			FROM knihanavstev a
			LEFT JOIN ip b
			    ON a.ip_id = b.id
			ORDER BY a.lft, a.datum";
	return dibi::query($query)->fetchAll();
	/*
        if (count($row) > 0) {
	    return $row->fetchAll();
	}
	else {
	    return false;
	}
         *
         */
    }
    function fetchParents() {
        $query = "SELECT a.id, a.jmeno, a.email, a.text, a.datum, b.ip, b.ban
			FROM knihanavstev a
			LEFT JOIN ip b
			    ON a.ip_id = b.id
			WHERE a.parent_id=0
			ORDER BY a.datum";
	$parents = dibi::query($query);

	if (count($parents) == '0') {
	    return false;
	}
	else {
	    return $parents->fetchAll();
	}
    }


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

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

	$query[] = 'SELECT a.id, a.jmeno, a.email, a.text, a.datum, a.hloubka, b.ip, b.ban
			FROM knihanavstev a
			LEFT JOIN ip b
			    ON a.ip_id = b.id
			ORDER BY a.lft, a.datum';

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

	$pocetZaznamu = count($rows);
        if ($pocetZaznamu>$this->pagesize) {

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

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

		$rows = dibi::query($query)->fetchAll($recordstart, $this->pagesize);

        }
	NDebugger::barDump($rows, 'kniha');
        if ($pocetZaznamu == 0) {
            echo "<tr><td colspan='9'>V knize hostů nejsou žádné příspěvky.</td></tr>";
        }
        else {
	    //$rows = dibi::query($query)->fetchAll();
	    foreach ($rows as $n) {
		echo '<tr>';
		echo '<td><input type="checkbox" name="checkbox[]" value="'.$n->id.'" id="" ></td>';

		//Odsazeni podle hloubky
		switch($n->hloubka) {
                    case '0':
                        $a_class = '';
                        $span_class = 'class="url"';
                        $pomlcka = '';
                        break;
		    case '1':
                        $a_class = 'class="vypis_subkat"';
                        $span_class = 'class="url_vypis_subkat"';
                        $pomlcka = '-';
                        break;
                    case '2':
                        $a_class = 'class="vypis_subkat2"';
                        $span_class = 'class="url_vypis_subkat2"';
                        $pomlcka = '-';
                        break;
                    default:
                        $a_class = 'class="vypis_subkat2"';
                        $span_class = 'class="url_vypis_subkat2"';
                        $pomlcka = '-';
                        break;
                } // switch

                $odkaz = "<a $a_class href=\"knihanavstev_edit.php?id={$n->id}\">$pomlcka" . $n->jmeno . "</a><br />";

		echo '<td>'.$odkaz.'</td>';
		echo '<td>'.$n->email.'</td>';
		echo '<td>'.$n->text.'</td>';
		//echo '<td>'.$n->ip.'</td>';
		echo '<td>'.datum_i_cas($n->datum).'</td>';
		$ban = $n->ban=='0'?'povoleno':'zakázáno';
		echo '<td>'.$n->ip.' ('.$ban.')</td>';
		echo '<td>';
		echo '<a href="knihanavstev_edit.php?reagovat='.$n->id.'" title="Reagovat"><img src="images/iko/note_edit.png" alt="Reagovat" /></a>';
		echo '<a href="knihanavstev_edit.php?id='.$n->id.'" title="Editovat"><img src="images/iko/note_edit.png" alt="Editovat" /></a>';
		echo '<a href="?smazat='.$n->id.'" class="potvrzujiciLink" title="Smazat"><img src="images/iko/remove.png" alt="Smazat" /></a></td>';
		echo '</td>';
		echo '</tr>';
	    }
	}
    }
}

//$Kategorie = new Kategorie();
$Guestbook = new KnihaNavstev();

if (isset($_GET['smazat'])) {
    if ($Guestbook->delAllTree($_GET['smazat'], 'knihanavstev')) {
    //if ($Guestbook->deletePrispevek($_GET['smazat'])) {
	$_SESSION['message_ok'][] = 'Vymazání příspěvku číslo ' . $_GET['smazat'] . ' proběhlo v pořádku';
	Tools::redirect('knihanavstev.php');
    }
    else {
	$_SESSION['message_ko'][] = 'Vymazání příspěvku číslo ' . $_GET['smazat'] . ' neproběhlo v pořádku';
	Tools::redirect('knihanavstev.php');
    }
}

if (isset($_POST['aplikovat'])) {

    if (isset($_POST['dropdown'])) {
        if (!isset($_POST['checkbox'])) {
            $_SESSION['message_info'][] = "Není co zpracovat.";
        }
        else {
            switch($_POST['dropdown']) {
                case 'smazat':
		    $uspesnost = true;
                    foreach($_POST['checkbox'] as $akce) {
                        if (!$Guestbook->delAllTree($akce)) {
                        //if (!$Guestbook->deletePrispevek($akce)) {
			    $uspesnost = false;
			    $_SESSION['message_ko'][] = 'Vymazání příspěvku číslo ' . $akce . ' neproběhlo v pořádku';
			}
                    }
		    if ($uspesnost == true) {
			$_SESSION['message_ok'][] = 'Vymazání všech příspěvků proběhlo v pořádku';
		    }
		    $Guestbook->redirect('knihanavstev.php');
                    break;
		case 'ban':
		    $uspesnost = true;
                    foreach($_POST['checkbox'] as $akce) {
                        if (!$Guestbook->banIP($akce)) {
			    $uspesnost = false;
			    $_SESSION['message_ko'][] = 'Zablokování IP adresy neproběhlo v pořádku';
			}
                    }
		    if ($uspesnost == true) {
			$_SESSION['message_ok'][] = 'Zablokování IP adres proběhlo v pořádku';
		    }
		    Tools::redirect('knihanavstev.php');
                    break;
		 case 'unban':
		    $uspesnost = true;
                    foreach($_POST['checkbox'] as $akce) {
                        if (!$Guestbook->UnBanIP($akce)) {
			    $uspesnost = false;
			    $_SESSION['message_ko'][] = 'Povolení IP adresy neproběhlo v pořádku';
			}
                    }
		    if ($uspesnost == true) {
			$_SESSION['message_ok'][] = 'Povolení IP adres proběhlo v pořádku';
		    }
		    Tools::redirect('knihanavstev.php');
                    break;
                default :
                    $_SESSION['message_info'][] = "Není co zpracovat.";
            }
        }
    }
}
?>

ACC SHELL 2018