[addon captcha] Captcha form control

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

Diskuse ke stránce Captcha form control


V případě návrhů na vylepšení klidně aktualizujte archiv v repozitáři. WTFPL rules!

Honza Marek
Člen | 1664
+
0
-

Nefunguje horní stahovací odkaz, ale neumím to opravit, protože nevidím chybu.

rokerkony
Člen | 122
+
0
-

je tam vynechany 164 za lomitkem… za files// misto files/164/

Editoval rokerkony (18. 6. 2009 10:21)

pmg
Člen | 372
+
0
-

Chyba vznikla tak, že jsem vytvořil novou stránku s odkazem na soubor, který jsem připojil až v další revizi (pro novou stránku tam není pole). Teď jsem stránku zkusil znovu uložit a vypadá to, že už odkaz funguje. Dík.

pmg
Člen | 372
+
0
-

Zkusil jsem třídu a je to parádní. Perfektní objektovej kód!

pmg
Člen | 372
+
0
-

Dík, to mě těší… jen sis zapomněl změnit login.

o5
Člen | 416
+
0
-

???? :-D

jasir
Člen | 746
+
0
-

Hahahaha, hele, teď si mě strašně pobavil :-) Super. Jdu se na tu třídu teda hned podívat abych sem mohl napsat něco podobnýho. Ale už předem díky za práci na té komponentě, už teď vím že se můžu těšít na parádní třídu a perfektní objektový kód :)

Editoval jasir (19. 6. 2009 22:39)

nAS
Člen | 277
+
0
-

LOL Tak tomu říkám marketing! :-DDD

pmg
Člen | 372
+
0
-

Výborně, přesně tohle jsem chtěl slyšet. :-D Až zjistíš, že to zas tak skvělé není, třeba to poslouží aspoň pro inspiraci. Kód je ve verzi 0.1, tudíž předmětem vývoje.

Editoval pmg (19. 6. 2009 22:46)

Honza Marek
Člen | 1664
+
0
-

Hehe… ale příště se můžem domluvit a něco si nenápadně pochválit navzájem :-D

pmg
Člen | 372
+
0
-

OK, co za komponentu plánuješ teď? Abych měl čas si připravit oslavnou píseň… :-)

Honza Marek
Člen | 1664
+
0
-

RssControl a CalendarControl. Ovšem musim pořešit filozofickou otázku jak do těch komponent cpát data, aby byly dostatečně obecné a znovupoužitelné.

pmg
Člen | 372
+
0
-

Nabízelo by se třeba podědit něco z Nette\Collections a překrýt metodu beforeAdd, aby byla data reprezentovaná samostatným objektem. Otázku znovupoužitelnosti to ale moc neřeší. Nevím, jestli je pro kalendářová data nějaký standardizovaný formát.

jasir
Člen | 746
+
0
-

pmg napsal(a):

Výborně, přesně tohle jsem chtěl slyšet. :-D Až zjistíš, že to zas tak skvělé není, třeba to poslouží aspoň pro inspiraci. Kód je ve verzi 0.1, tudíž předmětem vývoje.

Tak jsem to tak nějak doprozkoumal. A? Fakt skvělá práce! Krásný kód, spoustu jsem se z toho přiučil. Takže moc díky!

pmg
Člen | 372
+
0
-

Dík za otestování, opisoval jsem odsud. :-)

Tomik
Nette Evangelist | 485
+
0
-

OT: Kód je to pěkný! :) A jen tak mimochodem, kdo je ten kamarád s tím IQ 160? :)

pmg
Člen | 372
+
0
-

Asi ho neznáš, dělá u filmu. :-P

tom
Člen | 171
+
0
-

jakym zpusobem by slo pridat tlacitko pro znovunacteni obrazku? kdyby si nekdo chtel vygenerovat jine nez je mu nabidnuto?

pmg
Člen | 372
+
0
-
  • Při generování se nepoužívají snadno zaměnitelné znaky.
  • Při špatném opsání se vygeneruje obrázek s novým distortem.

Ale abych odpověděl na otázku, muselo by to být submitovací tlačítko, které by ve třídě zavolalo metodu, která by nastavila $this->word = NULL. Snad by to takhle šlo.

Máš pocit, že by tam taková metoda měla být?

buff
Člen | 63
+
0
-

Zdravím. Hází mi to chybičku:

Notice: Use of undefined constant IMG_FILTER_SMOOTH - assumed 'IMG_FILTER_SMOOTH' in /home/miroslav/www/teachers/libs/nette-extras/Captcha.php on line 600

Nevíte prosím někdo, co s tím? (Když obě volání filtrů na řádcích 600 a 601 zakomentuju, tak to funguje, ale asi je to bez těch filtrů)

Mám nainstalovaný GD modul do PHP a nahodil jsem naslepo i php-imagemagick, ale žádná změna.

Jan Tvrdík
Nette guru | 2595
+
0
-

Nedávno jsem řešil stejný problém. Tohle je důvod celého problému:

Note: This function (imagefilter) is only available if PHP is compiled with the bundled version of the GD library.

Editoval Jan Tvrdík (24. 7. 2009 15:17)

buff
Člen | 63
+
0
-

Jan Tvrdík: Mockrát díky za informaci. Teď jen nevím, jak se k tomu postavit, rekompilovat? Ale to už si rozhodnu sám ;-)

Gringo
Člen | 32
+
0
-

Dale by se nějak zařídit, aby se captcha neobjevila v $form->getValues()?

pmg
Člen | 372
+
0
-

Asi by šlo v konstruktoru nastavit $this->setDisabled() a upravit metodu Captcha::getInput:

$control = parent::getControl();
$control->disabled = FALSE;

ConventionalRenderer jinak z pochopitelných důvodů neumožňuje čistou metodou přidávat další typy prvků, takže je to spíš takový hack.

Sám jsem control zatím nikde neuplatnil, používám jednodušší ochranu.

$session = Environment::getSession('contact');
if ($session->key === NULL) {
	$session->key = mt_rand(20, 99);
}

$key = $session->key;

$a = mt_rand(10, $key - 10);
$b = $key - $a;

$form->addText('age', "$a + $b =")
	->addRule(Form::EQUAL, 'Prove that you are human by computing the expression.', $key);

Další věci, které by chtěly fixnout:

  • Odstranit řádek require_once NetteLoader::getInstance()->base . '/Forms/Controls/TextBase.php';, protože přináší více škody než užitku. A je to hack. [fixed]
  • Extension method přidávat na FormContainer a ne na Form. FormContainer by mohl umožnit přidávat jiné prvky pomocí přetěžování, ale celkem chápu, proč to nedělá. [fixed]
  • Celý projekt na někoho delegovat, nebo utopit. :-)

Editoval pmg (9. 8. 2009 21:37)

pmg
Člen | 372
+
0
-

Celý projekt na někoho delegovat, nebo utopit. :-)

Už vím: Captcha se ode dneška bude jmenovat Adminer.

PetrP
Člen | 587
+
0
-

Gringo napsal(a):

Dale by se nějak zařídit, aby se captcha neobjevila v $form->getValues()?

Jaký je k tomu důvod?

pmg
Člen | 372
+
0
-

Třeba když se z toho rovnou staví dotaz do databáze.

jasir
Člen | 746
+
0
-

pmg napsal(a):

Celý projekt na někoho delegovat, nebo utopit. :-)

Už vím: Captcha se ode dneška bude jmenovat Adminer.

Jediné racionální řešení iracionálního problému. Gratuluji. ;-)

PetrP
Člen | 587
+
0
-

pmg napsal(a):

Třeba když se z toho rovnou staví dotaz do databáze.

Tak pořád můzu unset($value['captcha'])

pmg
Člen | 372
+
0
-

Někdy dříve se to tady řešilo u dvojího zadávání hesla a prý to není pěkné řešení. Cílem prostě je to hnedka kopnout do databáze. :-)

Teď mě napadlo, že by to šlo řešit přidáním více kontejnerů do formuláře, které by oddělily zrno od plev. FormContainer::addContainer().

PetrP
Člen | 587
+
0
-

addContainer by ti nepomohl aspoň myslím:
Tedy jen by se ti to zanořilo do dalšího pole

//getValues
array(
	'text' => 'bla bka',
	'nazev_contejneru' => array(
		'captcha' => 'xczxc'
	)
)

Možná by ve forms mohlo existovat nejake nastaveni na Controlu, neco jako disabled, ale co by se neprojevovalo do Html, ale jen do getValues

něco jako $form->addText(...)->ignore()

pmg
Člen | 372
+
0
-

addContainer by ti nepomohl

Jasně, možná jen u více položek, že by se to nemuselo jmenovat všechno.

Možná by ve forms mohlo existovat nejake nastaveni na Controlu, neco jako disabled, ale co by se neprojevovalo do Html, ale jen do getValues

Ano, ale v něktěrých případech by stejně bylo potřeba předělat celou metodu getValues.

Inza
Člen | 330
+
0
-

Captcha je zcela dokonalá – a odedneška ji máme i ve 3D!

Homepage: http://beta.dvojmo.cz/…e-framework/
Stránka v Nette/Extras: https://componette.org/search/?…
Thread zde na fóru: https://forum.nette.org/…-formcontrol?…

Co na to říkáte?

Martin Mates
Člen | 179
+
0
-

Zdravíčko. Mě ta captcha nefunguje. Dostanu hned

Compile Error

Declaration of Captcha::loadHttpData() must be compatible with that of IFormControl::loadHttpData()

Ná řádku 736 v Captcha.php. Možná se v Nette něco změnilo. Mám verzi z minulého týdne. Nějaké nápady? Díky.

redhead
Člen | 1313
+
0
-

Řekl bych, že s vývojovou verzí nette nebude zcela kompatibilní. Nejspíš se změnila definice metody loadHttpData v té interface.

tom
Člen | 171
+
0
-

redhead napsal(a):

Řekl bych, že s vývojovou verzí nette nebude zcela kompatibilní. Nejspíš se změnila definice metody loadHttpData v té interface.

Me tohle hlasi na stabilni verzi 0.9.1 stable (ze dne 18. 9. 2009) :(

tom
Člen | 171
+
0
-

redhead napsal(a):

… Nejspíš se změnila definice metody loadHttpData v té interface.

metoda loadHttpData, ktera je nyni ve FormControl jiz neobsahuje parametr

  • @param array
tom
Člen | 171
+
0
-

Funguje tato Captcha nekomu na Nette verzi 0.9?

Panda
Člen | 569
+
0
-

Po úpravách ano. Zkus toto: http://jan.smitka.org/…/Captcha.zip.

raketoplan2005
Člen | 147
+
0
-

Bohužel stále nejsem schopen captchu zprovoznit na Nette 0.9.1 stable:

Originální verze captchy:
Declaration of Captcha::loadHttpData() must be compatible with that of IFormControl::loadHttpData()

Upravená verze od uživatele „Panda“:
Fatal error: Call to undefined function get_called_class() in /var/www/web/libs/Nette/Object.php on line 141

Ondřej Mirtes
Člen | 1536
+
0
-

U Pandovy verze musíš poslední řádek upravit takto:

- FormContainer::extensionMethod('addCaptcha', array('Captcha', 'addCaptcha'));
+ FormContainer::extensionMethod('FormContainer::addCaptcha', array('Captcha', 'addCaptcha'));

Jde o fix pro PHP 5.2 (které si samo neumí zjistit, jakou třídu rozšiřuješ).

tom
Člen | 171
+
0
-

čím může být způsobené, že se mi vlastní obrázek ne a ne zobrazit, přitom v HTML kódu je?

pmg
Člen | 372
+
0
-

Sorry, Nette se rychle mění a nestíhám komponentu těmto změnám přizpůsobovat. Obrázek je možná v kódu, ale ještě se musí ve druhém požadavku vygenerovat.

Možná bude lepší komponentu vůbec nepoužívat a stránku zrušit.

tom
Člen | 171
+
0
-

pmg napsal(a):

Sorry, Nette se rychle mění a nestíhám komponentu těmto změnám přizpůsobovat.

jasan, chapu :)

Obrázek je možná v kódu, ale ještě se musí ve druhém požadavku vygenerovat.

kdyz si zobrazim vygenerovany zdrojovy kod tak dostanu neco takove

<img class="captcha-image" src="/web/captcha/show?key=1015" width="154" height="56" alt="" />

ale obrazek nikde :(

redhead
Člen | 1313
+
0
-

nejspíš to znamená, že obrázek se na té stránce nevygeneruje, a vrací se prazdný.. Když si otevřeš v browseru tu URL obrázku, tak uvidíš. Ovšem nevím kde může být chyba..

Tomik
Nette Evangelist | 485
+
0
-

Otevři adresu /web/captcha/show?key=1015, možná se zobrazí Laděnka, která ti řekne, kde je problém. Pokud ne, je třeba kód zřejmě odkrokovat.

pjoter
Člen | 118
+
0
-

Nedělal někdo script, který umožňuje vygenerovat nový kód ? nejlépe přes ajax ?

Ondřej Brejla
Člen | 746
+
0
-

Možná reCaptcha?