ACC SHELL
<?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