odeslání mailu s formuláře s dvěma tlačítky

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
premek
Člen | 15
+
0
-

Zdravím, moc prosím o pomoc s odesláním mailu s dvěma tlačítky (ok a cancel), nemám bohužel možnost to jak odzkoušet a nevím jak „špatně mám“ obslužné handlery, a taky jak tak správně natlačit

<?php
} catch (IOException $e) {
                $form->addError($e->getMessage());
        }
?>

Mám vlastní render formáláře, ten šlape ok. A toto v presenteru:

<?php
    protected function createComponentMailForm($name)
        {
            $form = new NAppForm($this, $name);
            $form->addText('predmet', '', 24);
            $form->addTextArea('zprava', '', 55, 5);
            $form->addText('jmeno', '', 24);
            $form->addText('email', '', 24)
                  ->setEmptyValue('@');
            $form->addSubmit('okSubmit', '')
                  ->onClick[] = array($this, 'okClicked');
            $form->addSubmit('cancelSubmit', '')
                  ->setValidationScope(FALSE)
                  ->onClick[] = array($this, 'cancelClicked');

            $form['predmet']->addRule(NForm::FILLED, 'Uveďte předmět zpravy.');
            $form['zprava']->addRule(NForm::FILLED, 'Napište text Vaší zprávy.');
            $form['jmeno']->addRule(NForm::FILLED, 'Uveďte Vaše jméno.');
            $form['email']->addRule(NForm::FILLED, 'Uveďte Váši e-mailovou adresu.')
                          ->addRule(NForm::EMAIL, 'Zadaná adresa není správnou adresou elektronické pošty.');

            $form->addProtection('Vypršel ochranný časový limit, odešlete prosím formulář ještě jednou.', 60 * 15);

            return $form;

        }

    public function okClicked(NSubmitButton $button)
        {
            NDebug::dump($button->getForm()->getValues());
            $this->redirect('MailForm:send');
        }

    public function cancelClicked(NSubmitButton $button)
        {
            $this->redirect('this');
        }

    public function formSubmitted(NAppForm $form)
        {
            if (!$form['cancel']->isSubmittedBy()) {
                $values = $this->getRequest;

                $mail = new NMail;
                $mail->setSubject($values['predmet']);
                $mail->setFrom($values['email'], $values['jmeno']);
                $mail->addTo('Info <info@info.cz>');

                $template = $this->createTemplate();
                $template->name = $values['jmeno'];
                $template->email = $values['email'];
                $template->text = $values['zprava'];

                $mail->setHtmlBody($template);

                if($mail->send()){
                     $this->getPresenter()->flashMessage('Email byl úspěšně odeslán.');
                } else {
                     $this->getPresenter()->flashMessage('Email se nezdařilo odeslat', 'warning');
                }
                $this->redirect('MailForm:send');
            }
        }
?>

Prosím jeslti by se našel někdo kdo by mi v tom popřípadě opravil chyby, bastlím to s přestávkami už nějaký pátek a jsem čím dál víc negramotnejší. :(

Taky se snažím o rozjetí administrace, máme to jako projekt do školy, ale to je spíše otázka „Práce a zakázky“. Pokud by se někdo našel moc by mi to pomohlo.

Patrik Votoček
Člen | 2221
+
0
-

Naco tam máš formSubmitted když k němu nemáš nikde řečeno že se má volat?

// buďto používej
$form->addSubmit('okSubmit', '')
	->onClick[] = callback($this, 'okClicked');
$form->addSubmit('cancelSubmit', '')
	->setValidationScope(FALSE)
	->onClick[] = callback($this, 'cancelClicked');

// nebo
$form->onSubmit[] = callback($this, 'formSubmitted');
premek
Člen | 15
+
0
-

Musel jsem upravit ten svuj blábol. Moc díky za radu.

Editoval premek (11. 5. 2011 8:00)

premek
Člen | 15
+
0
-

Tak ještě moc prosím o pomoc, při zkoušce mailformuláře v této „výsledné“ podobě:

<?php
protected function createComponentMailForm($name)
        {
            // definice formuláře
            $form = new NAppForm($this, $name);
            $form->addText('predmet', '', 24);
            $form->addTextArea('zprava', '', 55, 5);
            $form->addText('jmeno', '', 24);
            $form->addText('email', '', 24)
                  ->setEmptyValue('@');
            $form->addSubmit('okSubmit', '');
            $form->addSubmit('cancelSubmit', '')
                  ->setValidationScope(FALSE);
            $form->onSubmit[] = callback($this, 'formSubmitted');

            // definice validací, podmínek a dalších pravidel
            $form['predmet']->addRule(NForm::FILLED, 'Uveďte předmět zpravy.');
            $form['zprava']->addRule(NForm::FILLED, 'Napište text Vaší zprávy.');
            $form['jmeno']->addRule(NForm::FILLED, 'Uveďte Vaše jméno.');
            $form['email']->addRule(NForm::FILLED, 'Uveďte Váši e-mailovou adresu.')
                          ->addRule(NForm::EMAIL, 'Zadaná adresa není správnou adresou elektronické pošty.');

            $form->addProtection('Vypršel ochranný časový limit, odešlete prosím formulář ještě jednou.', 60 * 15); //ruční nastavení chybové hlášky

            return $form;

        }

    public function formSubmitted(NAppForm $form)
        {
            // process cancelled
            if($form['cancelSubmit']->isSubmittedBy()){
                $this->redirect('this');
            }

            // submitted and valid
            if ($form['okSubmit']->isSubmittedBy()) {
                $values = $form->getValues();

                $mail = new NMail;
                $mail->setSubject($values['predmet']);
                $mail->setFrom($values['email'], $values['jmeno']);
                $mail->addTo('...', '...');

                $template = $this->createTemplate();
                $template->setFile(APP_DIR.'/FrontModule/templates/MailForm.tmpl.latte');
                $template->name = $values['jmeno'];
                $template->email = $values['email'];
                $template->text = $values['zprava'];

                $mail->setHtmlBody($template);

                if($mail->send()){
                     $this->getPresenter()->flashMessage('Email byl úspěšně odeslán.');
                } else {
                     $this->getPresenter()->flashMessage('Email se nezdařilo odeslat', 'warning');
                }
                $this->redirect('MailForm:send');
            }
        }
?>

Mi po najetí na formulář hlásí:

We're sorry! The server encountered an internal error and was unable to complete your request. Please try again later.

Po zapnutí laděnky na dev. toto:
Cannot load presenter ‚Error‘, class ‚ErrorPresenter‘ was not found in …

Presenter tam však je.

Poradí prosím někdo v čem by mohl být problém, popřípadě jak ho odstranit, díky.?

Honza Kuchař
Člen | 1662
+
0
-

ErrorPresenter tam není… (případně zkus smazat cache)

premek
Člen | 15
+
0
-

ErrorPresenter mám, vidím, v app/FrontModule/presenters/. Šablony mám Error.500.latte, atd… Pokud jde o cache, tak v temp se mi nic nevytváří, přitom zaposivatelná je. POkud jde o localhost, tak tam problém není žádnej.

premek
Člen | 15
+
0
-

Ještě jednou poprosím o radu, k tomuto formuláři, na produkčním serveru stále stejná chyba s uvedením Error 500. Ani po promazáni cache bez žádné změny.
Na locale jsem ho však rozchodil a emaily posílá, ale po přepsání posledního redirectu na this, mi po odeslání mailu vypíše zprávu flash mess., že mail se nezdařilo odeslat, idkyž ho odeslal správně a příjde ok? Nechybí v tom ifu něco, prosím?
Moc děkuji za pomoc.