Zpracování formuláře – problém s podmínkami
- Vajalit
- Člen | 11
Ahoj vespolek,
delší dobu řeším problém se zpracování formuláře. Už z toho mám
hlavu v pejru ale prostě nevím.
Odesílám data z formuláře. Nejprve se zkontroluje jestli existuje ID. Pokud
ne, volá se metoda k vytvoření. Pokud ano, volá se metoda k editaci.
Form:
protected function createComponentEvidenceForm(){
$id = $this->id;
$zaznam = $this->evidenceRepository->findAll()->where('id', $id)->fetch();
$zakaznik = $this->zakaznikRepository->findAll()->fetchPairs('id', 'nazevSpolecnosti');
$provozovna = $this->provozovnaRepository->findAll()->where('obsazena',False)->fetchPairs('id', 'nazev');
$provozovnaAct = $this->provozovnaRepository->findAll()->where('id',$zaznam['provozovna_id'])->fetchPairs('id','nazev');
$provozovnaSelect = Arrays::mergeTree($provozovnaAct, $provozovna);
$router = $this->routerRepository->findAll()->where('umisten',False)->fetchPairs('id','evidencniCislo');
$routerAct = $this->routerRepository->findAll()->where('id',$zaznam['router_id'])->fetchPairs('id','evidencniCislo');
$routerSelect = Arrays::mergeTree($routerAct, $router);
//dump($provozovnaSelect);
$protokol = $this->protokolRepository->findAll()->fetchPairs('id','cislo');
$datum = new DateTime();
$form = new EvidenceForm();
$form['zakaznik_id']->setItems($zakaznik);
$form['provozovna_id']->setItems($provozovnaSelect);
$form['router_id']->setItems($routerSelect);
$form['protokol_id']->setItems($protokol);
$form->addHidden('id')->setDefaultValue($id);
if($id!==null){
$form['zakaznik_id']->setDefaultValue($zaznam['zakaznik_id']);
$form['provozovna_id']->setValue($zaznam['provozovna_id']);
$form['router_id']->setDefaultValue($zaznam['router_id']);
$form['datumZahajeni']->setDefaultValue($zaznam['datumZahajeni']);
$form['datumUkonceni']->setDefaultValue($zaznam['datumUkonceni']);
$form->addSubmit('submit','Upravit záznam')->getControlPrototype()
->class('ajax');
}else{
$form['datumZahajeni']->setDefaultValue($datum);
$form->addSubmit('submit','Přidat záznam')->getControlPrototype()
->class('ajax');
}
$form->onSuccess[] = callback($this, 'akceEvidence');
return $form;
}
public function akceEvidence(EvidenceForm $form){
$values = $form->getValues();
$userId = $this->context->user->getIdentity()->id;
if($values['id'] == NULL){
$this->evidenceRepository->novyZaznam($userId,$values);
$this->predavkaRepository->novaPredavka($values);
$this->provozovnaRepository->zmenStav($values['provozovna_id']);
$this->routerRepository->zmenStav($values['router_id']);
$this->flashMessage('Záznam '.$values['id'].' byl přidán');
}else{
$evidence = $this->evidenceRepository->findAll()->where('id',$values['id'])->fetch();
if ($evidence['router_id'] !== $values['router_id']) {
$this->routerRepository->zmenStav($evidence['router_id']);
$this->routerRepository->zmenStav($values['router_id']);
}
if ($evidence['provozovna_id'] !== $values['provozovna_id']) {
$this->provozovnaRepository->zmenStav($evidence['provozovna_id']);
$this->provozovnaRepository->zmenStav($values['provozovna_id']);
}
$this->predavkaRepository->upravitPredavku($values);
$this->evidenceRepository->upravaZaznamu($userId,$values);
$this->flashMessage('Záznam '.$values['id'].' byl upraven');
}
$form->setValues(array(), TRUE);
if(!$this->isAjax()){
$this->redirect('this');
}
}
Pokud zakládám nový, je vše v pořádku. Pokud ale edituji nastává
problém.
Ve formuláři je několik polí, ale zde jsou důležitá dvě:
router_id
provozovna_id
Pokud se jedno nebo druhé změní, provedou se určité metody.
Pokud změní obě dvě, není problém. Pokud změní jenom jednu z nich,
nedoběhne vše až dokonce.
Pokud by v tom někdo viděl vyloženě chybu na první pohled, budu rád za echo.
Díky
Jirka
- Vajalit
- Člen | 11
Tak problém bude zde:
$provozovna = $this->provozovnaRepository->findAll()->where('obsazena',False)->fetchPairs('id', 'nazev');
$provozovnaAct = $this->provozovnaRepository->findAll()->where('id',$zaznam['provozovna_id'])->fetchPairs('id','nazev');
zde---> $provozovnaSelect = Arrays::mergeTree($provozovnaAct, $provozovna);
$router = $this->routerRepository->findAll()->where('umisten',False)->fetchPairs('id','evidencniCislo');
$routerAct = $this->routerRepository->findAll()->where('id',$zaznam['router_id'])->fetchPairs('id','evidencniCislo');
zde---> $routerSelect = Arrays::mergeTree($routerAct, $router);
Pokud tam hodím pouze $router a $provozovna tak všechno šlape.
Nemá někdo nějaký nápad?