Kcko
4/14/2016 - 5:07 PM

From http://pavelbier.cz/tagged/nette

require_once('./Nette/loader.php');

define(HESLO_MIN_ZNAKU,6);
define(URL_ADRESA_OBCHODNICH_PODMINEK,'http://www.example.com/');

function loginValidator($item){
  return dibi::query('SELECT [id] FROM [zakaznici] WHERE [nick]=%s LIMIT 1',$item->getValue())->count() == 0 ? true : false;
}


$form = new Form('registracni_formular');
$form->setMethod('post');
$form->getElementPrototype()->id = 'registrace';
$form->getElementPrototype()->class = 'formular';
$form->addGroup('Přihlašovací údaje');
$form->addText('nick','Login:',25)
     ->addRule(Form::FILLED, 'Login nebyl vyplněn')
     ->addRule('loginValidator', 'Tento login již existuje');
$form->addPassword('heslo','Heslo:',25)
      ->addRule(Form::FILLED, 'Heslo nebylo vyplněno')
      ->addRule(Form::MIN_LENGTH, 'Heslo je příliš krátké', HESLO_MIN_ZNAKU)
      ->setOption('description','Heslo musí mít minimálně '.HESLO_MIN_ZNAKU.' znaků'); 
$form->addPassword('heslo2','Zopakujte heslo:',25)
      ->addRule(Form::FILLED, 'Heslo nebylo vyplněno')
      ->addRule(Form::EQUAL, 'Hesla se neshodují',$form['heslo']); 

$form->addGroup('Povinné údaje');

$form->addText('email', 'Email:',35)
      ->addRule(Form::FILLED, 'Email nebyl vyplněn')
      ->addRule(Form::EMAIL, 'Zadaný email není platným emailem')
      ->emptyValue = '@';

$typ_osoby = array(
  '1' => 'Fyzická osoba',
  '2' => 'Právnická osoba',
);

$form->addRadioList('typ', 'Typ:', $typ_osoby)->addRule(Form::FILLED, 'Vyberte typ registrovaného subjektu')->addCondition(Form::EQUAL, 2)->toggle('povinneUdajePravnicka');
$form->addText('jmeno','Jméno:',35)->addRule(Form::FILLED, 'Zadejte jméno');
$form->addText('prijmeni','Příjmení:',35)->addRule(Form::FILLED, 'Zadejte příjmení');
$form->addText('ulice','Ulice:',35)->addRule(Form::FILLED, 'Zadejte ulici');
$form->addText('mesto','Město:',35)->addRule(Form::FILLED, 'Zadejte město');
$form->addText('psc','PSČ:',35)->addRule(Form::FILLED, 'Zadejte PSČ');
$souhlasLabel = Html::el()->setHtml('Souhlasím s <a href="'.URL_ADRESA_OBCHODNICH_PODMINEK.'" target="_blank">obchodními</a> podmínkami.');
$form->addCheckbox('souhlas', $souhlasLabel)->addRule(Form::FILLED, 'Pro pokračování je nutné souhlasit s podmínkami.');

$form->addGroup('Povinné údaje právnické osoby')->setOption('container', Html::el('fieldset')->id('povinneUdajePravnicka'));
$form->addText('firma','Firma:',35)->addConditionOn($form['typ'], Form::EQUAL, 2)->addRule(Form::FILLED,'Zadejte firmu');
$form->addText('ico','IČO:',35)->addConditionOn($form['typ'], Form::EQUAL, 2)->addRule(Form::FILLED,'Zadejte IČO');
$form->addText('dic','DIČ:',35)->addConditionOn($form['typ'], Form::EQUAL, 2)->addRule(Form::FILLED,'Zadejte DIČ');
$form->addGroup('Nepovinné údaje')->setOption('container', Html::el('fieldset')->id('nepovinneUdaje'));
$form->addText('telefon','Telefon:',35);
$form->addText('mobil','Mobil:',35);
$form->addText('fax','Fax:',35);
$form->setCurrentGroup(NULL);

$form->addSubmit('ok','Registrovat se')->getControlPrototype()->class = 'submit';
$form->addProtection('Vypršela platnost formuláře.');

if ($form->isSubmitted() and $form->isValid()) {
  $values = $form->getValues();
  unset($values['heslo2']);
  unset($values['souhlas']);
  $ok = dibi::query('INSERT INTO [zakaznici] %v',$values);
  //..... nasleduje redirect
  
} else {

  $defaults = array('typ'=>1);
  $form->setDefaults($defaults);
  
}