<?php

class adminkategorieController extends baseadminController {

  function __construct() {
    $this->controller_name = 'Kategorie';
    $this->controller_fname = 'adminkategorie';
    $this->controller_info = 'Správa kategorií produktu. Kategorie mají stromovou strukturu, produkt může být zařazen do libovolného počtu kategorií';
    $this->entita_classname = 'Kategorie';
    parent::__construct();
  }

  public function seznam($args) {

    $table_id = 'seznamKategorii';
/*
    $this->registry->jscript->addFile('jquery.tablesorter.min.js');
    $this->registry->jscript->addFile('jquery.metadata.js');
    
    $this->registry->jscript->addJqFunction('"#'.$table_id.'"', 'tablesorter','headers: { 
                6: { 
                    sorter: "integer" 
                } 
            }','','',true,'','document_ready');
*/
    $entita = new Kategorie();
    $zaznamy = $entita->getAll();
    array_walk($zaznamy,
      'Tools::addLink',
      array(
        'UPRAVIT' => array(
          'link' => Tools::controllerlink($this->controller_fname, 'upravit'),
          'addindex' => 'ID',
          'text'	 => ICO_UPRAVIT
        ),
        'RWRLINK' => array(
          'link' => Tools::controllerlink('kategorie'),
          'addindex' => 'REWRITE_LINK',
          'text'	 => ICO_NAHLED,
          'target'	 => '_blank'
        ),
        'SMAZAT'	=> array(
          'link' => Tools::controllerlink($this->controller_fname, 'smazat'),
          'addindex' => 'ID',
          'text'	 => ICO_SMAZAT
        )
      )
    );

    $hlavicka = array(
      'TEXT' => 'Název',
      'REWRITE_LINK' => 'Rewrite link',
      'PRODUCT_COUNT' => 'Produktů',
      'S_NAZEV' => 'Stav',
      'RWRLINK' => '',
      'UPRAVIT' => '',
    	'SMAZAT' => ''
    );
  
    $obsah_css = array(
      'ID' => 'a_c',
      'S_NAZEV' => 'a_c',
      'PRODUCT_COUNT'=> 'a_c',
      'UPRAVIT' => 'a_c',
    	'SMAZAT' => 'a_c'
    );
    
    $hlavicka_css = array();

    unset($result); //'class' => 'seznam',
    $this->html = $this->getTable($table_id, $hlavicka, $zaznamy,
      array('class' => 'seznam', 'summary' => $this->controller_name ),
      $obsah_css, array('TEXT', 'SMAZAT'), $hlavicka_css, 'Pole Produktů zobrazuje počet produktů v danné kategorii'
    );
    
    $this->setView();

  }

  public function pridat($args) {
    
    $form_id = 'PridatKategoriiForm';
    $entita = new Kategorie();

    if ($this->registry->form_send) {
      if (Validate::entita($entita,true) !== false) {
        $entita->setFromPost();
        $entita->addNode(@$_POST['pozice']);
        
        if (isset($_POST['uloz'])) {
          $redirect = Tools::ControllerLink($this->controller_fname,'upravit', array( $entita->id) );
          Tools::setMessage('Záznam '.$entita->nazev.' byl přidán', CSS_MESS, 1);
        }
        elseif (isset($_POST['uloz_pokracuj'])) {
          $redirect = Tools::ControllerLink($this->controller_fname,'pridat' );
          Tools::setMessage('Záznam '.$entita->nazev.' byl přidán', CSS_MESS, 1);
        }


        Tools::redirect($redirect);
        die;

      }
      else {
        $valid_err = Validate::error();
        Tools::setMessage('Špatně vyplněné údaje'.$valid_err, 'err_mess', CSS_ERR);
      }
    }
    
    $this->registry->jscript->addScript('function getRewrUrl(entita){
    	var nazev = entita.value;
		$.post("'.URL.'admin/ajaxvalidate",{akce: "getKatURL", nazev: nazev },
      		function(data){
        		if (data != "FALSE"){
					$("#rewrite_link").val(data); 
 				}
  			}
  		);
		if (entita.name == "nazev") {
			if ($("#meta_title").val() == "") {
				$("#meta_title").val(entita.value);
			}
		}
	}
    ');
    
      $this->registry->jscript->addScript('function copyName(){
      		$("#meta_title").val($("#nazev").val());
  		}
      ');
    
    $form = new Form($form_id, '', 'post', array('class' => 'myForm'));
    $form->openFieldset('Přidat kategorii');
    $form->addLabel('Název', 'nazev', array());
    $form->addInput('text', 'nazev', MY,array('onblur' => 'getRewrUrl(this);'), $entita->validate['nazev'],true);

    $form->addLabel('Link', 'rewrite_link',array(), 'Hodnota která bude identifikovat kategorii v URL adrese. Může obsahovat pouze písmena a-z, číslice, podtržítko(_) a pomlžku (-)');
    $form->addInput('text', 'rewrite_link', MY,array('onblur' => 'getRewrUrl(this);'), $entita->validate['rewrite_link'],true);

    $form->addLabel('Titulek', 'meta_title', array(), 'Zobrazuje se v záhlaví stránky');
    $form->addInput('text', 'meta_title', MY,array(), $entita->validate['meta_title']);
		$form->addInput('button', 'copy_name', 'Zkopírovat název',array('onclick' => 'copyName()'),array(), true); 

    $form->addLabel('Klíč. slova', 'meta_keywords', array(), 'Klíčová slova pro vyhledávače. Jednotlivá slova oddělte čárkami');
    $form->addInput('text', 'meta_keywords', MY,array('class' => 'vetsi'), $entita->validate['meta_keywords'],true);

    $form->addLabel('Popis', 'meta_description', array(), 'Popis stránky pro vyhledávače.');
    $form->addInput('text', 'meta_description', MY,array('class' => 'vetsi'), $entita->validate['meta_description'],true);

    $form->addLabel('Nadřazená<br /> kategorie', 'predek');
    $form->addTag('br');
    $form->openSelect('predek', 1, array(), $entita->validate['predek']);
    $zaznamy = $entita->getToSelect();
    foreach($zaznamy as $row){
      $form->addOption($row['ID'],$row['TXT']);
    }
    $form->closeSelect(true);

    $form->addLabel('Pozice', 'pozice');
    $form->openSelect('pozice', 0, array(), array('range' => '[0,1]'));
    $form->addOption(0,'Za ostatní');
    $form->addOption(1,'Před ostatní');
    $form->closeSelect(true);
    
    $form->addLabel('Stav', 'stav' );
    $form->stateSelect($entita, true, 1);

    $form->openTag('div', array('class' => 'bb_l'));
    $form->addTag('hr',array('class' => 'fcleaner '));
    $form->addInput('submit', 'uloz_pokracuj', 'Uložit a vložit další');
    $form->addInput('submit', 'uloz', 'Pouze uložit');
    $form->closeTag();
    $form->closeFieldset();
    $form->closeForm();
    
    $this->html = $form->get();
    $this->setView('content.tpl');

  }

  public function upravit($args) {
    
    $id = $args[0];
    $form_id = 'UpravitKategoriiForm';
    if ($id == 1) {
      Tools::setMessage('Hlavní kategorii nelze upravit!', CSS_MESS);
      $this->seznam('');
    }
    else {
        
      $entita = new Kategorie();
  
      if ($this->registry->form_send) {
        if (Validate::entita($entita) !== false) {

          if (isset($_POST['uloz'])) {
            $redirect = Tools::ControllerLink($this->controller_fname,'upravit', array( $id) );
            Tools::setMessage('Záznam '.$entita->nazev.' byl upraven', CSS_MESS, 1);
          }
          else {
            $this->naruseni();
          }
  
          $entita->upravit($id,$form_id); 
          Tools::redirect($redirect);
          die;
  
        }
        else {
          $valid_err = Validate::error();
          Tools::setMessage('Špatně vyplněné údaje'.$valid_err, 'err_mess', CSS_ERR);
        }
      }

      $this->registry->jscript->addScript('function getRewrUrl(entita){
      	var nazev = entita.value;
  		$.post("'.URL.'admin/ajaxvalidate",{akce: "getKatURL", nazev: nazev },
        		function(data){
          		if (data != "FALSE"){
  					$("#rewrite_link").val(data); 
   				}
    			}
    		);
  		if (entita.name == "nazev") {
  			if ($("#meta_title").val() == "") {
  				$("#meta_title").val(entita.value);
  			}
  		}
  	}
      ');
      
      $this->registry->jscript->addScript('function copyName(){
      		$("#meta_title").val($("#nazev").val());
  		}
      ');
      
      $form_value = $entita->loadByID($id, true, $this->registry->postRestore);
      $form = new Form($form_id, '', 'post', array('class' => 'myForm'));
      if (count($form_value) > 0) {
        $form->setValue($form_value);
      }
      $form->openFieldset('Upravit kategorii');
      $form->addLabel('Název', 'nazev', array());
      $form->addInput('text', 'nazev', MY,array('onblur' => 'getRewrUrl(this);'), $entita->validate['nazev'],true);
  
      $form->addLabel('Link', 'rewrite_link',array(), 'Hodnota která bude identifikovat kategorii v URL adrese. Může obsahovat pouze písmena a-z, číslice, podtržítko(_) a pomlžku (-)');
      $form->addInput('text', 'rewrite_link', MY,array('onblur' => 'getRewrUrl(this);'), $entita->validate['rewrite_link'],true);
  
      $form->addLabel('Titulek', 'meta_title', array(), 'Zobrazuje se v záhlaví stránky');
      $form->addInput('text', 'meta_title', MY,array(), $entita->validate['meta_title']);
      $form->addInput('button', 'copy_name', 'Zkopírovat název',array('onclick' => 'copyName()'),array(), true);  
  
      $form->addLabel('Klíč. slova', 'meta_keywords', array(), 'Klíčová slova pro vyhledávače. Jednotlivá slova oddělte čárkami');
      $form->addInput('text', 'meta_keywords', MY,array('class' => 'vetsi'), $entita->validate['meta_keywords'],true);
  
      $form->addLabel('Popis', 'meta_description', array(), 'Popis stránky pro vyhledávače.');
      $form->addInput('text', 'meta_description', MY,array('class' => 'vetsi'), $entita->validate['meta_description'],true);
  
      $form->addInput('hidden','predek_old',$entita->predek);
      $form->addLabel('Nadřazená<br /> kategorie', 'predek');
      $form->addTag('br');
      $form->openSelect('predek', $entita->predek, array(), $entita->validate['predek']);
      $zaznamy = $entita->getToSelect('', $entita->leva, $entita->prava);
      foreach($zaznamy as $row){
        $form->addOption($row['ID'],$row['TXT']);
      }
      $form->closeSelect(true);
      
      $form->addLabel('Pozice', 'pozice');
      $form->openSelect('pozice', 2, array(), array('range' => '[0,2]'));
      $form->addOption(0,'Za ostatní');
      $form->addOption(1,'Před ostatní');
      $form->addOption(2,'Neměnit', true);
      $form->closeSelect(true);
      
      $form->addLabel('Stav', 'stav' );
      
        if ($form->stateSelect($entita) == true) {
        $form->addInput('hidden', HASH, MY);
        $form->openTag('div', array('class' => 'bb_l'));
        $form->addTag('hr',array('class' => 'fcleaner '));
        $form->addInput('submit', 'uloz', 'Uložit');
        $form->addInput('reset', 'reset', 'Vrátit změny');
        $form->closeTag();
      }
      else {
        $form->openTag('div', array('class' => 'bb_l'));
        $form->addInnerHTML('Nemáte oprávnění pro modifikaci záznamu v uvedeném stavu.<br /><br />');
        $form->addInput('reset', 'reset', 'Vrátit změny');
        $form->closeTag();
      }
      $form->closeTag();
      $form->closeFieldset();
      $form->closeForm();
      
      $this->html = $form->get();
      $this->setView('content.tpl');
    
    }

  }

  public function radit($args) {

    $table_id = 'raditKategorie';

    $entita = new Kategorie();
    
     if (@$args[0] == 'posun') {
       switch(@$args[1]) {
         case 'nahoru':
           $entita->moveNode(@$args[2],1);
           Tools::setMessage('Záznam byl posunut.','',1);
           $redirect = Tools::ControllerLink($this->controller_fname,'radit');
           break;
           
         case 'dolu':
           $entita->moveNode(@$args[2],0);
           Tools::setMessage('Záznam byl posunut.','',1);
           $redirect = Tools::ControllerLink($this->controller_fname,'radit');
           break;
           
         default:
           Tools::setMessage('Neznámý parametr pro posun.','',1);
           $redirect = Tools::ControllerLink($this->controller_fname,'radit' );
           break;
       }
       
       Tools::redirect($redirect);
     }

    $zaznamy = $entita->getAll();
    array_walk($zaznamy,
      'Tools::addLink',
      array(
        'UPRAVIT' => array(
          'link' => Tools::controllerlink($this->controller_fname, 'upravit'),
          'addindex' => 'ID',
          'text'	 => ICO_UPRAVIT
        ),
        'DOLU' => array(
          'link' => Tools::controllerlink($this->controller_fname, 'radit',array('posun','dolu')),
          'addindex' => 'ID',
          'text'	 => ICO_DOLU
        ),
        'NAHORU' => array(
          'link' => Tools::controllerlink($this->controller_fname, 'radit',array('posun','nahoru')),
          'addindex' => 'ID',
          'text'	 => ICO_NAHORU
        )
      )
    );

    $hlavicka = array(
      'TEXT' => 'Název',
      'PRODUCT_COUNT' => 'Produktů',
      'S_NAZEV'   => 'Stav',
      'DOLU' => '',
      'NAHORU' => '',
      'UPRAVIT' => ''
    );
  
    $obsah_css = array(
      'DOLU' => 'a_c',
      'NAHORU'=> 'a_c',
      'UPRAVIT' => 'a_c',
      'PRODUCT_COUNT' =>  'a_c',
      'S_NAZEV' => 'a_c'
    );
    
    unset($result); //'class' => 'seznam',
    $this->html = $this->getTable($table_id, $hlavicka, $zaznamy,
      array('class' => 'seznam', 'summary' => $this->controller_name ),
      $obsah_css, array('TEXT', 'UPRAVIT') );
    
    $this->setView();

  }

	public function smazat($args) {

		$from_id = 'smazatKategorii';
		
		$id = @$args[0];
		$entita = new Kategorie();
		
		if ($this->registry->form_send) {
			$my_id = @$this->registry->smazKategorii;
			if ( $my_id == $id) {
				$entita->deleteNode($id);
				Tools::setMessage('Záznam byl smazán', '', 1);
				Tools::redirect(Tools::controllerlink($this->controller_fname, 'seznam'));
			}
			else {
      	Tools::setMessage('Neoprávněný pokus o smazání položky!');
      	return $this->seznam(array());
			}
		}
		
		$result = dibi::query('SELECT K.ID, K.NAZEV, K.LEVA, K.PRAVA, K.HLOUBKA,
			(SELECT COUNT(*) FROM KAT_PROD WHERE ID_KAT = K.ID) AS PRODUKTU,
			(ROUND((K.PRAVA - K.LEVA -1)/2)) AS DETI 
			FROM KATEGORIE K 
			WHERE K.ID = %i',$id);
		
		if (count($result) == 0) {
      Tools::setMessage('Požadovaný záznam neexistuje!');
      return $this->seznam(array());
    }

    $this->registry->addPersistent('smazKategorii',$id, 1 );
		$r = $result->fetchAll();
		$kat = $r[0];

		$deti = '';
		if ( $kat['DETI'] > 0 ) {
			$result = dibi::query('SELECT CONCAT(REPEAT("&nbsp;&rarr;&nbsp;", K.HLOUBKA - %i),K.NAZEV) AS TEXT,
				K.ID, K.NAZEV, K.HLOUBKA  
				FROM KATEGORIE K 
				WHERE K.LEVA > %i AND K.PRAVA < %i
				ORDER BY LEVA',
			$kat['HLOUBKA'], $kat['LEVA'], $kat['PRAVA']);
			$r = $result->fetchAll();
			
			$deti = '<div class="warning"><h3>Tato kategorie není prázdná!</h3>';
			$deti .= '<p>Pokud odstraníte kategorii '.$kat['NAZEV'].', budou odstraněny i následující podkategorie:<br />'; 
			foreach($r as $row) {
				$deti .= $row['TEXT'].'<br />';
			}
			$deti .= '</p></div>';
		}
		
		$form = new Form($from_id);
		$form->openFieldset('Odstranění kategorie');
		$form->openTag('h2');
		$form->addInnerHTML('Chcete opravdu odstranit kategorii <b>'.$kat['NAZEV'].'</b> (id: '.$kat['ID'].') ?');
		$form->closeTag();
		$form->addInnerHTML($deti);
    $form->openTag('div', array('class' => 'bb_l'));
    $form->addTag('hr',array('class' => 'fcleaner '));
    $form->addInput('submit', 'uloz', 'Smazat');
    $form->openTag('a', array('href' => Tools::controllerlink($this->controller_fname,'seznam')));
    $form->addInput('button', 'reset', 'Zrušit');
    $form->closeTag();
    $form->closeTag();
    
    $this->html = $form->get();
    $this->setView('content.tpl');
		
	}

}
?>