<?php
class uzivatelController extends baseController {

  function __construct() {
    $this->controller_name = 'Uživatel';
    $this->controller_fname = 'uzivatel';
    $this->controller_info = 'Uživatel';
    $this->entita_classname = 'Uzivatel';
    parent::__construct();
    $this->tpl = 'page.tpl';
  }
  
  public function index($args) {
  	$this->html = '<h1>Informace o uživateli</h1>';
		$this->setView();
  }
  
  public function stav($args) {
  	
  	switch(@$args[0]) {
  		case 1:
  			$nadpis = 'Uživatelský účet není autorizovaný!';
  			$text = '<p>Váš účet však zatím není aktivní. Na Vaši e-mailovou adresu byl zaslán ověřovací e-mail.
       			V tomto e-mailu naleznete odkaz pro aktivaci vašehu účtu</p>
  				<p><b>Bez autorizece se není možné přihlásit!</b><br/>
  				Pokud Vám e-mail nepřišel, kontaktujte prosím administrátora serveru.
  				</p>';
  			break;

  		case 3:
  			$nadpis = 'Uživatelský účet je blokován!';
  			$text = '<p>Váš účet zablokován<br />
  				Pro odblokování kontaktujte prosím administrátora serveru.
  				</p>';
  			break;

  		case 4:
  			$nadpis = 'Uživatelský účet byl zrušen!';
  			$text = '<p>Váš účet zablokován<br />
  				Pro obnovení kontaktujte prosím administrátora serveru.
  				</p>';
  			break;
  			
  		case 5:	// nová registrace
       	$nadpis = 'Aktivace účtu';
       	$text   = 'Váš účet zatím není aktivní. Na Vaši e-mailovou adresu byl zaslán ověřovací e-mail.<br />
         			V tomto e-mailu naleznete odkaz pro aktivaci vašehu účtu.';
$text .= $this->registry->activate_link;       	
  			break;
  			
  		case 6:
  			$nadpis = 'Uživatelský účet se nepodařilo aktivovat!';
  			$text = '<p>Zkontrolujte prosím zadanou adresu a zkuste akci opakovat.<br />
  				Pokud potíže přetrvají,kontaktujte prosím administrátora serveru.
  				</p>';
  			break;
  	}
        	$this->html = '<h1>'.$nadpis.'</h1>';
        	$this->html .= $text;
					$this->setView();
  }

	public function prihlasit($args) {
	
    $form_id = 'loginForm';
    if ($this->registry->user->login) {
    	return $this->index($args);
    }

    if (Validate::check($_POST['auth_mail'],'email') AND Validate::check($_POST['auth_heslo'], 'required')) {
      if ($this->registry->user->login($_POST['auth_mail'], $_POST['auth_heslo']) == true) {

        $this->setMessage('Přihlášení proběhlo úspěšně', CSS_MESS, 1);
      	Tools::redirect(Tools::controllerlink($this->controller_fname, 'udaje'));
      	die;

      }
      else {
        $this->setMessage('Špatné přihlašovací údaje', CSS_ERR, 1);
      }
    }
    else {
      $this->setMessage('Špatně vyplněné přihlašovací údaje', CSS_ERR, 1);
    }

		
    Tools::redirect(URL);
	}

	public function odhlasit($args) {
    $this->registry->user->neregistrovany();
    Tools::redirect(URL);
	}

	public function aktivace($args) {
		
		$id = @$args[0];
		$hash = @$args[1];
		$result = dibi::query('SELECT SHA1(CONCAT(ID,"-",MAIL,"-",DT_VYTVOREN,"AKTIVACE")) AS HASH FROM UZIVATEL WHERE ID = %i AND STAV="1"',$id);

		if (count($result) > 0) {
			$db_hash = $result->fetchSingle();
			if ($hash == $db_hash) {
				dibi::query('UPDATE UZIVATEL SET STAV = 2 WHERE STAV = 1 AND ID = %i',$id);
				Tools::setMessage('Váš účet byl aktivován, nyní se můžete přihlásit', '', 1);
				Tools::redirect(URL);
				die;
			}
			else {
				Tools::redirect(Tools::controllerlink($this->controller_fname, 'stav', array(6)));
			}
		}
		Tools::setMessage('Účet již byl aktivován', '', 1);
		Tools::redirect(URL);
		die;
	}
	
	public function registrace() {

		$form_id = 'Registrace';
		$entita = new User();
    $adresa = new Adresa();

    if ($this->registry->form_send) {
    	if ($_POST['z_f'] == 'firma') {
    		$_POST['id_skup'] = 3;
    	}
    	else {
    		$_POST['id_skup'] = 2;
    	}
    	$_POST['stav'] = 1;

    	$result = dibi::query('SELECT 1 as EXISTUJE FROM UZIVATEL WHERE MAIL = %s', $_POST['mail']);

    	if (count($result) == 0) {
      	if (Validate::entita($entita,true) !== false) {
  
      		try {
        		dibi::begin();
        		$_POST['heslo_hash'] = sha1($_POST['heslo']);
        		unset($_POST['heslo']);
        		$entita->setFromPost();
        		$entita->insert();
        		$id = dibi::insertId();
						dibi::query('INSERT INTO UZIVATEL_ROLE (ID_UZIV, ID_ROLE, STAV) VALUES (%i,%i, 1)', $id, 2);
        		$_POST['id_uziv'] = $id;
        		$_POST['titul'] = $_POST['adr_titul'];
        		$_POST['jmeno'] = $_POST['adr_jmeno'];
        		$_POST['prijmeni'] = $_POST['adr_prijmeni'];
        		$_POST['stav'] = 1;
        		
        		if (Validate::entita($adresa,true) !== false) {
        			$adresa->setFromPost();
            	$adresa->insert();
            	
            	$entita->neregistrovany();
            	$result = dibi::query('SELECT SHA1(CONCAT(ID,"-",MAIL,"-",DT_VYTVOREN,"AKTIVACE")) AS HASH FROM UZIVATEL WHERE ID = %i',$id);
            	$this->setMessage('Registrace proběhla úspěšně', CSS_MESS, 1);
  
            	if (count($result) == 1) {
            		$hash = $result->fetchSingle();

            		if ($_POST['mailnews']) {
            	  	$result = dibi::query('SELECT COUNT(*) FROM EMAIL_SEZNAM WHERE EMAIL = %s;', $_POST['mail']);
            			$pocet = $result->fetchSingle();
            			if ($pocet == 0) {
	            			dibi::query('INSERT INTO EMAIL_SEZNAM SET EMAIL = %s, STAV = 1, DT_VYTVOREN = NOW();', $_POST['mail']);
            			}
            		}
            		dibi::commit();
            		
//odkaz pro aktivaci            		
$this->registry->addPersistent('activate_link','<p>Odkaz: '.Tools::controllerlink('uzivatel','aktivace',array($id, $hash)).'</p>',1);
  							Tools::redirect(Tools::controllerlink('uzivatel','stav',array(5)));
  							die;
            	}
            	else {
            		dibi::rollback();
            		$this->setMessage('Chyba při práci s databází', CSS_ERR, 1);
            	}
  
    					$this->setView();
    					return 1;
        		}
        	  else {
        	  	$entita->neregistrovany();
        	  	dibi::rollback();
            	$valid_err = Validate::error();
            	$this->setMessage('Špatně vyplněné údaje o adrese'.$valid_err, CSS_ERR, 1);
          	}
      		}
      		catch(AppliException $e) {
      			$entita->neregistrovany();
  					$this->setMessage('Chyba při práci s databází', CSS_ERR, 1);
      		}
      	}
        else {
          $this->setMessage('Špatně vyplněné Registrační údaje'.$valid_err, 'err_mess', CSS_ERR);
        }
    	}
    	else {
    		$this->setMessage('Uživatel s e-mailem <b>'.$_POST['mail'].'</b> je již registrován!', CSS_ERR);
    	}
    	$entita->neregistrovany();
    }
    
    $_POST['heslo'] = '';
    $_POST['heslo2'] = '';
    $this->registry->jscript->addScript('
    $("#firma_form").hide();
    $("#z_f_zakaznik").attr("checked","checked");
    
    $("#z_f_zakaznik").click(
    	function (){
    		$("#firma_form").hide("slow");
    	}
    )	
    
    $("#z_f_firma").click(
    	function (){
    		$("#firma_form").show("slow");
    	}
    )
    ', 'document_ready');
    
    $this->registry->jscript->addScript('
    function copyMail(){
    	var mail = $("#mail").val();
    	var kontakt_mail = $("#kontakt_mail").val();
    	if (kontakt_mail == "" && mail != "") {
    		if ($("#'.$form_id.'").validate().element("#mail")) {
    			$("#kontakt_mail").val(mail);
    		}   		
			}
		}

    function copyJmeno(){
    	var jmeno = $("#jmeno").val();
    	var adr_jmeno = $("#adr_jmeno").val();
    	if (adr_jmeno == "" && jmeno != "") {
    		if ($("#'.$form_id.'").validate().element("#jmeno")) {
    			$("#adr_jmeno").val(jmeno);
    		}   		
			}
		}

    function copyPrijmeni(){
    	var prijmeni = $("#prijmeni").val();
    	var adr_prijmeni = $("#adr_prijmeni").val();
    	if (adr_prijmeni == "" && prijmeni != "") {
    		if ($("#'.$form_id.'").validate().element("#prijmeni")) {
    			$("#adr_prijmeni").val(prijmeni);
    		}   		
			}
		}
    ');
    
    $form = new Form($form_id);
    $form->openFieldset('Přihlašovací údaje');
    $form->addLabel('Přihlašovací e-mail', 'mail');
    $form->addInput('text', 'mail', MY, array('onblur' => 'copyMail()'), $entita->validate['mail'], true);
    $form->addLabel('Jméno', 'jmeno');
    $form->addInput('text', 'jmeno', MY, array('onblur' => 'copyJmeno()'), $entita->validate['jmeno'], true);
    $form->addLabel('Příjmení', 'prijmeni');
    $form->addInput('text', 'prijmeni', MY, array('onblur' => 'copyPrijmeni()'), $entita->validate['prijmeni'], true);
    $form->addLabel('Zasílat novinky', 'mailnews');
    $form->addInput('checkbox', 'mailnews', MY);
    $form->addTag('br');
    $form->addTag('br');
    $form->addLabel('Heslo', 'heslo');
    $form->addInput('password', 'heslo', MY, array(), $entita->validate['heslo'], true);
    $form->addLabel('Heslo znovu', 'heslo2');
    $form->addInput('password', 'heslo2', MY, array(), $entita->validate['heslo2'], true);

    $form->closeFieldset();
    
    $form->openFieldset('Adresa');
    $form->openTag('div', array('class' => 'bb_c'));
    $form->addInput('radio', 'z_f_zakaznik', 'zakaznik', array('name' => 'z_f', 'checked' => 'checked'));
    $form->addLabel('koncový zákazník ','z_f_zakaznik', array('class' => 'after_input'));
    $form->addInput('radio', 'z_f_firma', 'firma', array('name' => 'z_f'));
    $form->addLabel('firma','z_f_firma', array('class' => 'after_input'));
    $form->closeTag('div');
    $form->addLabel('Titul', 'adr_titul');
    $form->addInput('text', 'adr_titul', MY, array(), $adresa->validate['titul'], true);
    $form->addLabel('Jméno', 'adr_jmeno');
    $form->addInput('text', 'adr_jmeno', MY, array(), $adresa->validate['jmeno'], true);
    $form->addLabel('Příjmení', 'adr_prijmeni');
    $form->addInput('text', 'adr_prijmeni', MY, array(), $adresa->validate['prijmeni'], true);

$form->openTag('div', array('id' => 'firma_form'));
    $form->addLabel('Firma', 'nazev_firmy', array(), 'Vyplňte pouze pokud se jedná o firmu. Do kolonek Jméno a Příjmení vyplňte údaje o kontaktní osobě');
    $form->addInput('text', 'nazev_firmy', MY, array(), $adresa->validate['nazev_firmy'], true);
    $form->addLabel('IČO', 'ico', array(), 'Pouze pokud se jedná o firmu.');
    $form->addInput('text', 'ico', MY, array(), $adresa->validate['ico'], true);
    $form->addLabel('DIČO', 'dic', array(), 'Pouze pokud se jedná o firmu.');
    $form->addInput('text', 'dic', MY, array(), $adresa->validate['dic'], true);
$form->closeTag();
    $form->addTag('br');
    $form->addLabel('Kontaktní e-mail', 'kontakt_mail');
    $form->addInput('text', 'kontakt_mail', MY, array(), $adresa->validate['kontakt_mail'], true);
    $form->addLabel('Telefon', 'kontakt_telefon');
    $form->addInput('text', 'kontakt_telefon', MY, array(), $adresa->validate['kontakt_telefon'], true); 
    $form->addLabel('Ulice', 'ulice', array(), 'Pokud obec nemá ulice, napište do pole název obce');
    $form->addInput('text', 'ulice', MY, array(), $adresa->validate['ulice'], true);
    $form->addLabel('Č.p.', 'cislo_popisne', array(), 'Číslo popisné, případně Orientační číslo/ Číslo popisné');
    $form->addInput('text', 'cislo_popisne', MY, array(), $adresa->validate['cislo_popisne'], true); 
    $form->addLabel('Obec', 'obec');
    $form->addInput('text', 'obec', MY, array(), $adresa->validate['obec'], true);
    $form->addLabel('PSČ', 'psc');
    $form->addInput('text', 'psc', MY, array(), $adresa->validate['psc'], true); 

    $form->openTag('div', array('class' => 'bb_l'));
    $form->addInput('reset','reset', 'Smazat');
    $form->addInput('submit','uloz', 'Registrovat');
    
    $form->closeTag();
    $form->closeFieldset();
    $form->closeForm();
    
    $this->html = '<h1>Nová registrace</h1>';
    $this->html .= $form->get();
		$this->setView();
	}

	public function udaje($args) {

		$form_id = 'OsobniUdaje';

		$entita = $this->registry->user;

    if ($this->registry->form_send) {
    	$entita->jmeno = $_POST['jmeno'];
    	$entita->prijmeni = $_POST['prijmeni'];
    	$entita->update();
    	if ($_POST['mailnews_old'] AND empty($_POST['mailnews'])) {
    		dibi::query('DELETE FROM EMAIL_SEZNAM WHERE EMAIL = %s;', $entita->mail);
    	}
      elseif (!$_POST['mailnews_old'] AND !empty($_POST['mailnews'])) {
    		dibi::query('INSERT INTO EMAIL_SEZNAM SET EMAIL = %s;', $entita->mail);
    	}
     	$this->setMessage('Údaje byly změněny', CSS_MESS, 1);
      Tools::redirect(Tools::controllerlink($this->controller_fname,'udaje'));
      die;
    }

		$hodnoty = $entita->toArray();

    $form = new Form($form_id);
    $form->setEntitaRef($entita);
    $form->setValue($hodnoty);
    $form->openFieldset('Změnit osobní údaje');
    $form->addLabel('Přihlašovací e-mail', 'mail');
    $form->addInput('text', 'mail', MY, array('onblur' => 'copyMail()', 'readonly' => 'readonly'), $entita->validate['mail'], true);
    $form->addLabel('Jméno', 'jmeno');
    $form->addInput('text', 'jmeno', MY, array('onblur' => 'copyJmeno()'), $entita->validate['jmeno'], true);
    $form->addLabel('Příjmení', 'prijmeni');
    $form->addInput('text', 'prijmeni', MY, array('onblur' => 'copyPrijmeni()'), $entita->validate['prijmeni'], true);
    $result = dibi::query('SELECT COUNT(*) FROM EMAIL_SEZNAM WHERE EMAIL = %s;', $entita->mail);
    $count = $result->fetchSingle();
    $form->addInput('hidden', 'mailnews_old', $count);
    $form->addLabel('Zasílat novinky', 'mailnews');
    $form->addInput('checkbox', 'mailnews', $count);

    $form->addTag('div', array('class' => 'bb_l'));
    $form->addInput('submit','uloz', 'Uložit');
    $form->addInput('reset','reset', 'Vrátit změny');
    $form->closeTag();
    $form->closeFieldset();
    $this->html = $form->get();
    $this->setView();
	}

	public function zmenheslo($args) {

		$form_id = 'ZmenitHeslo';

		$entita = $this->registry->user;
    if ($this->registry->form_send) {
    	if ($_POST['heslo'] == $_POST['heslo2']) {
    		dibi::query('UPDATE UZIVATEL SET HESLO_HASH = SHA1(%s) WHERE HESLO_HASH = SHA1(%s) AND ID = %i;', $_POST['heslo'], $_POST['heslo_old'], $entita->id);
    		if (dibi::affectedRows()) {
    			$this->setMessage('Heslo bylo změněno', CSS_MESS, 1);
    		}
    		else {
    			$this->setMessage('Změna hesla neproběhla. Zadané heslo není správné.', CSS_ERR, 1);
    		}
    		
      	Tools::redirect(Tools::controllerlink($this->controller_fname,'zmenheslo'));
      	die;
    	}
    	$this->setMessage('Nová hesla nesouhlasí', CSS_MESS);
    }

		$hodnoty = $entita->toArray();

    $form = new Form($form_id);
    $form->setEntitaRef($entita);
    $form->setValue($hodnoty);
    $form->openFieldset('Změnit heslo');
    $form->addLabel('Staré heslo', 'heslo_old');
    $form->addInput('password', 'heslo_old', '', array(), $entita->validate['heslo'], true);
    $form->addLabel('Nové heslo', 'heslo');
    $form->addInput('password', 'heslo', '', array(), $entita->validate['heslo'], true);
    $form->addLabel('Nové heslo znovu', 'heslo2');
    $form->addInput('password', 'heslo2', '', array(), $entita->validate['heslo2'], true);

    $form->addTag('div', array('class' => 'bb_l'));
    $form->addInput('submit','uloz', 'Uložit');
    $form->addInput('reset','reset', 'Vrátit změny');
    $form->closeTag();
    $form->closeFieldset();
    $this->html = $form->get();
    $this->setView();
	}

  public function treeNav() {

    $this->registry->template->set('is_tree_nav', true, true);
    if (empty($this->registry->template->akt_nazev)) {
    	$this->registry->template->set('akt_nazev', 'Uživatel');
    }
    
  }

}
?>