<?php

class adminatributhodnotaController extends baseadminController {
  
  function __construct() {
    $this->controller_name = 'Hodnoty atributů';
    $this->controller_fname = 'adminatributhodnota';
    $this->controller_info = 'Správa hodnot atributů produktu.  Při vytváření produktu lze vybrat jednu z hodnot atributu. U produktu bude zobrazena ve tvaru: Titul: Hodnota atributu.';
    $this->entita_classname = 'Atributhodnota';
    parent::__construct();
  }

  public function seznam($args) {

    $table_id = 'seznamAtributHodnota';
    $entita = new $this->entita_classname();

    $this->registry->jscript->addJqFunction('"#'.$table_id.'"', 'tablesorter','','','','','','document_ready');
    
    $this->html = ''; 
    if (@$args[0] == 'atribut' AND (Validate::check(@$args[1],'digits') == true)) {
      $atribut = new Atribut();
      $atr_array = $atribut->loadById($args[1]);
      $this->html .= '<div id="RL"><h1 class="RL"> Hodnoty pro '.$atribut->nazev.'</h1>';
      $this->html .= '<span class="RL_nazev">Titul: </span><span class="RL_hodnota">'.$atribut->titul.'</span>';
      $this->html .= '<span class="RL_nazev">Popis: </span><span class="RL_hodnota">'.$atribut->popis.'</span>';
      $this->html .= '<span class="RL_nazev">Stav: </span><span class="RL_hodnota">'.$atribut->stavy[$atr_array['stav']]['nazev'].'</span>';
      $this->html .= '<span class="RL_hodnota"><a class="backlink" href="'.Tools::controllerlink('adminatribut','seznam').'">'.ICO_ZPET.' Seznam atributů </a>'
      	.'</span>
      	<span class="RL_hodnota">
      		<a href="'.Tools::controllerlink('adminatributhodnota','pridat',array($atribut->id)).'">'.ICO_PRIDAT_HODNOTU.' Přidat hodnotu </a>
      	</span></div>';
      $this->html .= '<br/>';
      $_POST['ID_ATR'] = $args[1];
    }

    $query = $entita->getAllQuery();
    $filtr_query = array();
    $this->setFilter($filtr_query, $entita);
    $this->myOrder($filtr_query, $entita);
    $strankovani = $this->addLimit($query, $filtr_query ,$entita);
  	$query = array_merge($query,$filtr_query);
    $result = dibi::query($query);
    $zaznamy = $result->fetchAll();
    unset($result);

    array_walk($zaznamy,
      'Tools::addLink',
      array('UPRAVIT' => array(
          'link' => Tools::controllerlink($this->controller_fname, 'upravit'),
          'addindex' => 'ID',
          'text'	 => ICO_UPRAVIT
        ),
        'SMAZAT' => array(
          'link' => Tools::controllerlink($this->controller_fname, 'smazat'),
          'addindex' => 'ID',
          'text'	 => ICO_SMAZAT
        )
      )
    );

    $hlavicka = array(
      'ID' => 'Id',
      'A_NAZEV' => 'Atribut',
      'HODNOTA' => 'Hodnota',
      'S_NAZEV' => 'Stav',
      'UPRAVIT' => '',
    	'SMAZAT' => ''
    );
  
    $obsah_css = array(
      'ID' => 'a_c',
      'S_NAZEV' => 'a_c',
      'UPRAVIT' => 'a_c',
    	'SMAZAT' => ''
    );
    
    $hlavicka_css = array(
      'UPRAVIT' => 'nosort',
      'SMAZAT'	=> 'nosort'
    );
    $this->thCss($hlavicka_css);

    $this->html .= $this->getTable($table_id, $hlavicka, $zaznamy,
      array('class' => 'seznam tablesorter', 'summary' => $this->controller_name ),
      $obsah_css, array('ID', 'HODNOTY'), $hlavicka_css, 'multisort', $entita->filtry, false
    );
		$this->html .= '<div class="strankovani">'.$strankovani.'</div></form>';
    $this->setView();

  }

  public function pridat($args) {

    $form_id = 'PridatHodnotuAtributuForm';
    $entita = new $this->entita_classname();
    $entita->id_atr = @$args[0];

    if ($this->registry->form_send) {
      if (Validate::entita($entita,true) !== false) {
        $entita->setFromPost();
        $entita->insert();
        Tools::setMessage('Záznam "'.$entita->hodnota.'" byl přidán', CSS_MESS, 1);

				if (isset($_POST['uloz_vloz'])) {
          $redirect = Tools::ControllerLink($this->controller_fname,'pridat', array( $entita->id_atr) );
        }
        elseif (isset($_POST['uloz_pokracuj'])) {
          $redirect = Tools::ControllerLink($this->controller_fname,'seznam', array('atribut', $entita->id_atr) );
        }
        else {
          $redirect = Tools::ControllerLink($this->controller_fname,'seznam' );  
        }

        Tools::redirect($redirect);
        die;

      }
      else {
        $valid_err = Validate::error();
        Tools::setMessage('Špatně vyplněné údaje'.$valid_err, 'err_mess', CSS_ERR);
      }
    }
    
    $atrib = new Atribut();
    $atr = $atrib->getAll();

    if (count($atr) > 0) {
      $form = new Form($form_id, '', 'post', array('class' => 'myForm'));
      $form->setEntitaRef($entita);
      $form->setValue($entita->toArray());
      $form->openFieldset('Přidat hodnotu atributu');  
  
      $form->addLabel('Atribut', 'id_atr' );
      $form->openSelect('id_atr', MY, array(), $entita->validate['id_atr']);
      foreach($atr as $key=>$value) {
        $form->addOption($key, $value['NAZEV']);
      }
      $form->closeSelect();
      $form->addTag('br');
      $form->addLabel('Hodnota', 'hodnota', array());
      $form->addInput('text', 'hodnota', MY,array(), $entita->validate['hodnota'],true);
      $form->addLabel('Stav', 'stav' );
      $form->stateSelect($entita, true);
  
      $form->openTag('div', array('class' => 'bb_c'));
      $form->addTag('hr',array('class' => 'fcleaner '));
      $form->addInput('submit', 'uloz_vloz', 'Uložit a vložit další');
      $form->addInput('submit', 'uloz_seznam', 'Uložit a zobrazit seznam');
			$form->addInput('submit', 'uloz_pokracuj', 'Uložit a zobrazit hodnoty');
      $form->closeTag();
      $form->closeFieldset();
      $form->closeForm();
      
      $this->html = $form->get();

    }
    else {
      $this->setMessage('Nelze vytvořit hodnotu atributu, dokud neexistují atributy!');
      $this->html = '';

    }
    $this->setView('content.tpl');

  }

  public function upravit($args) {

    $form_id = 'UpravitAtributHodnotaForm';
  	$id = @$args[0];
    $entita = new $this->entita_classname();

    if ($this->registry->form_send) {
      if (Validate::entita($entita) !== false) {
      	
      	$entita->upravit($id,$form_id);
      	
        if (isset($_POST['uloz'])) {
          $redirect = Tools::ControllerLink('adminatributhodnota','upravit', array( $id) );          
        }
        elseif (isset($_POST['uloz_pokracuj'])) {
          $redirect = Tools::ControllerLink('adminatributhodnota','seznam', array('atribut', $entita->id_atr) );          
        }
        else {
          $redirect = Tools::ControllerLink($this->controller_fname,'seznam' );  
        }

        Tools::setMessage('Záznam '.$_POST['hodnota'].' byl upraven', '', 1);
        Tools::redirect($redirect);
        die;

      }
      else {
        $valid_err = Validate::error();
        Tools::setMessage('Špatně vyplněné údaje'.$valid_err, CSS_ERR);
      }
    }

    $form_value = $entita->loadByID($id, true, $this->registry->postRestore);

    $atrib = new Atribut();
    $atr = $atrib->getAll();

    if (count($atr) > 0) { 
      $form = new Form($form_id, '', 'post', array('class' => 'myForm'));
      $form->setEntitaRef($entita);
      $form->setValue($form_value);
      $form->openFieldset('Upravit hodnotu atributu');  
  
      $form->addLabel('Atribut', 'id_atr' );
      $form->openSelect('id_atr', MY, array(), $entita->validate['id_atr']);
      foreach($atr as $key=>$value) {
        $form->addOption($key, $value['NAZEV']);
      }
      $form->closeSelect();
      $form->addTag('br');
      $form->addLabel('Hodnota', 'hodnota', array());
      $form->addInput('text', 'hodnota', MY,array(), $entita->validate['hodnota'],true);
      $form->addTag('br');
      $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('submit', 'uloz_pokracuj', 'Uložit a zobrazit hodnoty ');
        $form->addInput('submit', 'uloz_seznam', 'Uložit a zobrazit seznam');
        $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->closeFieldset();
      $form->closeForm();
      
      $this->html = $form->get();

    }
    else {
      $this->setMessage('Nelze vytvořit hodnotu atributu, dokud neexistují atributy!');
      $this->html = '';

    }
    
    $this->setView('content.tpl');
  }

  public function smazat($args) {

		$form_id = 'smazatHodnotuAtributu';
		$id = @$args[0];
		$entita = new $this->entita_classname();
		
		if ($this->registry->form_send) {
			$my_id = @$this->registry->$form_id;

			if ( $my_id == $id) {
				$entita->delete($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());
      	die;
			}
		}
		
		$result = dibi::query('SELECT HA.*,
				(SELECT COUNT(*) FROM [KOMBINACE_HODNOTA] KH
  			WHERE KH.ID_HATR = HA.ID) AS PRODUKTY
			FROM [HODNOTA_ATRIBUTU] HA
			WHERE HA.ID = %i',$id);
		
		if (count($result) == 0) {
      Tools::setMessage('Požadovaný záznam neexistuje!');
      return $this->seznam(array());
    }

		$r = $result->fetchAll();
		$zaznam = $r[0];

  	if ( $zaznam['PRODUKTY'] > 0 ) {
			$result = dibi::query('SELECT P.ID, P.NAZEV
				FROM [PRODUKT] P
				INNER JOIN [KOMBINACE_HODNOTA] KH ON KH.ID_PROD = P.ID
  			WHERE KH.ID_HATR = %i', $id);
			$r = $result->fetchAssoc('ID');
			
			$produkty = '<div class="warning"><h3>Hodnota je používána následujícími produkty</h3>';
			$produkty .= '<p><ul class="smazat">'; 
			foreach($r as $row) {
				$produkty .= '<li> #id: '.$row['ID'].' - '.$row['NAZEV'].'</li>';
			}
			$produkty .= '</ul>Chcete-li hodnotu odstranit, odeberte ji nejprve z uvedených produktů.</p>
			</div>';
		}
		
		$form = new Form($form_id);
		$form->openFieldset('Smazat záznam');
		if ( $zaznam['PRODUKTY'] > 0 ) {
  		$form->openTag('h3');
  		$form->addInnerHTML('Hodnotu <b>'.$zaznam['HODNOTA'].'</b> nelze smazat!');
  		$form->closeTag();
  		$form->addInnerHTML($produkty);
      $form->openTag('div', array('class' => 'bb_l'));
      $form->addTag('hr',array('class' => 'fcleaner '));
      $form->openTag('a', array('href' => Tools::controllerlink($this->controller_fname,'seznam')));
      $form->addInput('button', 'reset', 'Zrušit');
      $form->closeTag();
      $form->closeTag();
		}
		else {
			$this->registry->addPersistent($form_id,$id, 2);
  		$form->openTag('h2');
  		$form->addInnerHTML('Chcete opravdu odstranit hodnotu <b>'.$zaznam['HODNOTA'].'</b> (id: '.$zaznam['ID'].') ?');
  		$form->closeTag();
      $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');
		
	}

}
?>