Nette-AntiSpam sloužà jako formulářová komponenta, která pomocà čtyř metod ochránà formulář proti náhodnému spamu.
Do formuláře jsou vygenerována dalšà pole navĂc, která jsou pĹ™ed uĹľivatelem skryta JavaScriptem. Pokud bude nÄ›jakĂ© z polĂ vyplnÄ›no, bude odesĂlajĂcĂ identifikován jako spambot.
SkrytĂ JavaScriptem se dá nahradit vlastnĂ CSS tĹ™Ădou po skrytĂ pro pĹ™Ăpad uĹľivatelĹŻ bez JavaScriptu.
JelikoĹľ spamboti zpravidla odesĂlajĂ formuláře tĂ©měř ihned. Dá se nastavit ve vteĹ™inách doba, pro kterou formulář zablokován.
NáhodnÄ› vygenerovaná, jednoduchá poÄŤetnĂ Ăşloha, kdy ÄŤĂsla jsou náhodnÄ› pĹ™evádÄ›na na Ĺ™etÄ›zce. Tato otázka je uĹľivateli opÄ›t skryta a vyplnÄ›na JavaScriptem. Pokud má uĹľivatel JavaScript vypnutĂ˝, bude vyzván k vyplnÄ›nĂ pole.
Pro tento pĹ™Ăpad je moĹľnĂ© labelu i inputu nastavit vlastnĂ vykreslovánĂ.
Tato prodleva urÄŤuje, za jak dlouho mĹŻĹľe uĹľivatel znova odeslat pĹ™ĂspÄ›vÄ›k.
composer require jzechy/nette-antispam
Do vašeho config.neon do extensions sekce stačà přidat:
antispam: Zet\AntiSpam\AntiSpamExtension
Komponentu lze nakonfigurovat pomocĂ následujĂcĂch nastavenĂ:
- lockTime Časový zámek formuláře, během kterého se nesmà odeslat. Nastavuje se očekávaná prodleva ve vteřinách.
- resendTime ÄŚas, po kterĂ©m uĹľivatel mĹŻĹľe znova odeslat formulář. Nastavuje se oÄŤekávánĂ prodleva ve vteĹ™inách Lze vypnout nastavenĂm nuly.
- numbers Pole ÄŤĂsel pro náhodnĂ˝ pĹ™evod na Ĺ™etÄ›zec. ÄŚĂsla jsou Ĺ™azena od nuly.
- question Zněnà kontrolnà otázky.
- translate Zapne lokalizaci pro kontrolnà otázku. True/false.
RegistrovanĂ© rozšĂĹ™enĂ formuláře lze pak pouĹľĂt následovnÄ›:
protected function createComponentForm() {
$form = new \Nette\Application\UI\Form();
// Vlastnà prvky formuláře ...
$form->addAntiSpam("spamControl", 5, 60);
}
Funkce addAntiSpam pĹ™ĂjĂmá jako prvnĂ parametr název prvku, tento jedinĂ˝ parametr je povinnĂ˝.
Dále lze přidat jako druhý parametr zámek formuláře a jako třetà čas, po kterém bude uživatel moci odeslat znova formulář.
Formulář lze ověřit dle hodnoty, kterou prvek vrátĂ - NavracĂ true, pokud odesĂlatel antispamem prošel nebo false v opaÄŤnĂ©m pĹ™ĂpadÄ›:
$values = $form->getValues();
if($values->spamControl) {
// Všechny podmĂnky pro odeslánĂ formuláře byli splnÄ›ny.
}
$antiSpam->setLockTime(); // NastavĂ, kolik vteĹ™in musĂ uplynout pĹ™ed odeslánĂm formuláře.
$antiSpam->setResendTime(); // NastavĂ, kolik vteĹ™in musĂ uplynout, neĹľ je formulář znova odeslán.
$antiSpam->setNumbers(); // Pole ÄŤĂsel vyjádĹ™enĂ˝ch slovy pro náhodnĂ˝ pĹ™evod na Ĺ™etÄ›zec.
$antispam->setQuestion(); // Zněnà kontrolnà otázky.
$antispam->getError(); // Kod chyby.
$antispam->getHiddenFields(); // VrátĂ generátor skrytĂ˝ch polĂ. UĹľiteÄŤnĂ© pro pĹ™epnutĂ schovánĂ z JS na CSS.
$antispam->getQuestionGenerator(); // Vrátà generátor kontrolnà otázky s prototypy Labelu a inputu.
Pokud budou splnÄ›ny všechny podmĂnky pro odeslánĂ formuláře, bude funkcĂ getError() navrácena 0. Jinak se vracĂ ÄŤĂselnĂ© oznaÄŤenĂ chyby, kterĂ© lze testovat proti konstantám ze tĹ™Ădy Zet\AntiSpam\ErrorType.
class ErrorType {
use StaticClass;
const NO_ERROR = 0;
const LOCK_TIME = 1;
const RESEND_TIME = 2;
const HIDDEN_FIELDS = 3;
const QUESTION = 4;
}