Statistics
319
2
0
300d
Badges
Dependencies

Nette-AntiSpam

Latest stable license Downloads Total Open Issues

Nette-AntiSpam slouží jako rozšíření nette formuláře o sadu antispamových prvků a mechanismů, které tiše a neviditelně ochraňují formulář před spamem. Rozšíření používá celkem čtyři metody pro zabránění nežádoucího odeslání formuláře:

Skrytá pole

Vygenerována jsou dvě pole do formuláře navíc, která jsou ovšem běžnému uživateli skryta pomocí CSS. Jelikož se běžný spambot pokusí vyplnit celý formulář, měl by vyplnit i tato pole.

Kontrolní otázka

Náhodně vygerovaná a jednoduchá početní úloha. Odpovědní formulář je ovšem automaticky vyplněn JavaScriptem a uživateli skryt. Pokud v uživatelově prohlížeči chybí podpora JS nebo jej má vypnutý, bude požádán o vyplnění.

Minimální doba čtení příspěvku

Tato metoda předpokládá, že spambot odesílá formulář téměř okamžitě. Lze si tedy nastavit minimální prodlevu ve vteřinách, během které předpokládáme, že uživatel bude příspěvek číst nebo psát odpověď.

Prodleva mezi příspěvky

Tato prodleva určuje, za jak dlouho může uživatel znova odeslat příspěvěk.

Composer

composer require jzechy/nette-antispam

Instalace

Do vašeho bootstrap.php souboru stačí přidat následující řádku:

Zet\AntiSpam\AntiSpamControl::register($container);

Použití

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", 120, 60);
}

Funkce addAntiSpam příjímá jako první parametr název prvku, druhým parametrem je prodleva ve vteřinách, kdy bude moci uživatel znova formulář odeslat a třetím parametrem je minimální doba pro čtení stránky ve vteřinách, kdy se formulář nesmí odeslat.

Jediným povinným parametrem je název prvku.

Ověření formuláře

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.
}

Konfigurace

Settery

$antiSpamControl->getQuestionLabelPrototype(); // Vrátí Nette\Utils\Html s definicí labelu pro kontrolní otázku
$antiSpamControl->getQuestionInputPrototype(); // Vrátí Nette\Utils\Html s definicí inputu pro kontrolní otázku.
$antiSpamControl->setHiddenClass("className"); // Vlastní třída pro schování skrytých inputů. Defaultně se vytváří atribut style.
$antiSpamControl->setBlockingTime(5); // Doba, která musí uplynout před dalším odesláním formuláře uživatelem.
$antiSpamControl->setMinimumReadTime(60); // Doba, po kterou nelze odeslat formulář po načtení stránky - bude brán jako odeslán botem.
$antiSpamControl->setNumberString(array(
  "Nula", "Jedna", "Dva", "Tři", "Čtyři", "Pět", "Šest", "Sedm", "Osm", "Devět"
)); // Pole s čísly vyjádřenými jako řetězci. Čísla pro kontrolní otázku se náhodně převádí do řetězců.
$antiSpamControl->setQuestion("Vypočítejte "); // Vlastní začátek kontrolní otázky.

Gettery

$antiSpamControl->hasError(); // Neprošel formulář validací?
$antiSpamControl->getErrorType(); // Kod chyby.

Pokud budou splněny všechny podmínky pro odeslání formuláře, bude funkci getErrorType() navrácena 0. Jinak se vrací číselné označení chyby, které lze testovat proti konstantám ze třídy Zet\AntiSpam\ErrorType.

ErrorType Konstanty

class ErrorType extends \Nette\Object {

	/**
	 * Špatný výsledek otázky.
	 * @var int
	 */
	const WRONG_RESULT = 1;

	/**
	 * Jsou vyplněná skrytá pole.
	 * @var int
	 */
	const FILLED_HIDDEN_FIELDS = 2;

	/**
	 * Neuplynula doba, po kterou nemůže uživatel posílat další příspěvěk.
	 * @var int
	 */
	const BLOCKING_TIME = 3;

	/**
	 * Neuplynula doba od načtení, po které může uživatel odeslat formulář.
	 * @var int
	 */
	const MINIMUM_READ_TIME = 4;
}
  • 1.0.4 Verze 1.0.4

    • Oprava kompability s Nette 2.4
  • 1.0.3

    Oprava 1.0.2 (špatný commit).

  • 1.0.2

    • Opraven způsob validace formuláře. Do values se nyní předává boolean hodnota. True pokud formulář prošel, false pokud ne.
  • 1.0.1

    • Integrace Nette Session
    • Přidány prototypes pro label a input pro kontrolní otázku
    • Oprava možnosti zadání vlastní otázky
    • Zrušení generování příkladu s násobením

    Composer:

    • Přidány závislosti composeru.
  • 1.0.0

Is this addon outdated? Did you find an issue? Please report it.

Componette Componette admin@componette.com