Captcha

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

Captcha

Diskusní stránka ke třídě Captcha.

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

Editoval pmg (18. 6. 2009 0:48)

Ola
Člen | 385
+
0
-

Super že se do toho někdo pustil! Dneska to otestuju a poreferuju :)

rokerkony
Člen | 122
+
0
-

ahoj zkouším tuto Captchu, ale bohužel mi to skončí při volání metody addCaptcha…
Call to undefined method AppForm::addCaptcha().

nevíte, kde by mohla být chyba? třídu mám v /libs/Nette/Extras/Forms/Captcha.php

a můj presenter vypadá takto:

<?php

class Front_BookPresenter extends BasePresenter
{

	public function actionDefault($catlink, $link) {
		class_exists('Captcha');

		$form = new AppForm($this, 'guestBookForm');
		$form->addCaptcha('captcha', 'Antispam')
			->setTextColor(Image::rgb(255, 0, 0))
			->addRule(Form::VALID, 'Opište správně písmena z obrázku.');
.......
...

dělám něco špatně?

jasir
Člen | 746
+
0
-

rokerkony napsal(a):

ahoj zkouším tuto Captchu, ale bohužel mi to skončí při volání metody addCaptcha…
Call to undefined method AppForm::addCaptcha().

Ahoj, AppForm (resp. předek FormContainer) nemá addCaptcha. Buď si jí tam přidej pomocí extension method nebo přidej captchu takto:

<?php
$captcha = new Captcha(...);
$captcha->doConfigStuff();
...
$mujform['mojecaptcha']=$captcha;
?>

Editoval jasir (15. 5. 2009 9:53)

rokerkony
Člen | 122
+
0
-

jj .. pardon :) tajne jsem doufal nebo si naivne myslel ze se o to postara ta trida :-) vyresil jsem to pres extension method …

pmg
Člen | 372
+
0
-

Děkuji, že jsi třídu vyzkoušel. Ta metoda Form::addCaptcha se přidá v metodě Captcha::init; možná jsi nezkopíroval konec kódu, kde se statický konstruktor volá.

/** call static constructor */
Captcha::init();

Jinak bych chtěl ještě upozornit:

  • Konstanta NETTE_DIR v novějších revizích myslím není, takže to asi bude chtít upravit.
  • Došlo k přejmenování indexů barev z r, g, b na red, green, blue.
  • Upravil bych to v kódu, ale třída pak nebude zpětně kompatibilní; takže zatím čekám. Nette::Image v tomto ohledu také není zpětně kompatibilní.

Myslím, že třída poslouží jako dobrý základ, bohužel ale nestíhám sledovat změny v Nette, takže ji nemohu udržovat aktuální. Měl jsem připravený archiv se soubory, že ho dám na stažení, ale momentálně už zase není aktuální. Když tak pošlu mailem – napište si.

rokerkony
Člen | 122
+
0
-

Captcha::init(); v souboru mam a i presto mi to addCaptcha nepridalo :-( takze jsem to resil pres extension method, jak mi poradil jasir :-)

jj NETTE_DIR i r,g,b bylo zmeneno, ale par upravami se to da zprovoznit.
To mi zas tak problem nedelalo, ale mrzi me ta nutnost vypnout javascriptovou validaci :-( da se to uz nejak obejit?

jasir
Člen | 746
+
0
-

Poznámka k Captcha::init() – to vypadá na copy/paste error – (2× se opakuje stejný kód).

<?php
public static function init()
{
	if (!function_exists('Form_prototype_addCaptcha')) {
		function Form_prototype_addCaptcha() {
				  $args = func_get_args();
				  return call_user_func_array(array(__CLASS__, 'addCaptcha'), $args);
		}
	}
	if (!function_exists('Form_prototype_addCaptcha')) {
		function Form_prototype_addCaptcha() {
				  $args = func_get_args();
				  return call_user_func_array(array(__CLASS__, 'addCaptcha'), $args);
		}
	}


}
?>

Asi to má být nějak takto:

<?php
public static function init()
{
                if (!function_exists('Form_prototype_addCaptcha')) {
                        function Form_prototype_addCaptcha() {
                                $args = func_get_args();
                                return call_user_func_array(array(__CLASS__, 'addCaptcha'), $args);
                        }
                }

		AppForm::extensionMethod('addCaptcha', 'Form_prototype_addCaptcha');
}
?>

(tedy doufám, už je docela pozdě v noci… nebo ráno?…)

rokerkony
Člen | 122
+
0
-

nn jedna je pro Form a druhá pro AppForm ale nikde se to neprirazuje pres extension method (nebo to aspon nevidim)

pmg
Člen | 372
+
0
-

Jo, teď jste na to kápli. To byla další věc, která se v Nette změnila. Takhle dřív extension method fungovala: přes prototypy. Ale koukám, že v API se prototypy pořád ještě dohledávají, jen je asi potřeba zavolat ručně ObjectMixin::extensionMethod();.

A vypadá to, že nový způsob podporuje dědičnost. Takže by mělo fungovat toto (asi dát na konec souboru Captcha.php):

Form::extensionMethod('addCaptcha', array('Captcha', 'addCaptcha'));

Editoval pmg (16. 5. 2009 10:27)

Inza
Člen | 330
+
0
-

Hodíte pls někdo captchu do Extras?

pmg
Člen | 372
+
0
-

Mám to v plánu, dneska to tam bude.

pmg
Člen | 372
+
0
-

Done!

(Prosím moderátora o zmoderování vlákna, ať je tady místo pro dotazy. První příspěvek prosím ponechat. Díky.)

romansklenar
Člen | 655
+
0
-

Nebude lepší smazat celé vlákno a vytvořit diskusi provázanou přímo se stránkou v dokumentaci ať se nevytváří duplicitní vlákna?

pmg
Člen | 372
+
0
-

Nemám nic proti, připomínky z tohoto vlákna jsou už ve třídě zakomponované. Jen bych tomu ještě dal den, aby to někdo nehledal. Dík za předvyplnění příspěvku. :-)

https://forum.nette.org/…form-control

Editoval pmg (18. 6. 2009 7:38)

Podvečerníček
Člen | 15
+
0
-

Zdravím!
Kdysi jsem udělal jednoduché rozšíření CAPTCHA do audio podoby.

„How-to“ je úplně primitivní – využívá se toho, že soubor ‚slepený‘ z více MP3 se chová opět jako MP3. Ukázka má k dispozici a využívá mp3ky pro každé písmenko základní (anglické) abecedy a každou číslici (na tyto znaky je captcha omezeno, ale doufám, že to zas tak moc nevadí), ty pak operativně spojí a odešle na výstup (předtím samozřejmě pošle hlavičky, že se jedná o MP3ku).
Stručně řečeno – kód je na pár řádků (hlavní cyklus na jeden řádek).

Samotný captcha kód se pak pamatuje v session proměnné, jejíž název se skládá z řetězce „captcha“ a za ním následuje nějaké číslo. S tímto číslem (jako URL parametr ‚id‘) se pak zavolá soubor, který má na starosti generování mp3ky.

Příklad:

<?php
$_SESSION['captcha1']='kxd021';
$_SESSION['captcha2']='xy7720';
?>

v HTML pak:

  • <a href=„audiocaptcha.php?id=1“>odkaz na 1. captcha kód</a>
  • <a href=„audiocaptcha.php?id=2“>odkaz na 2. captcha kód</a>

Rád bych to dal „do pléna“ – budu jen rád, když se Nettí captcha rozroste o audio podobu.

Daný příklad je ale (pro jednoduchost) řešený dost „na tvrdo“ – bude tedy akorát třeba přepsat jej do objektového stylu, s danými konvencemi, plus některé věci, které daný příklad předpokládá (jako například s MP3kami), udělat nastavitelné uživatelem.

Když se k tomu (někdy později) přidá i nějaký flashový přehravač, bude z toho nakonec komplexní a sexy captcha-komponenta, podporující webovou přístupnost!

all: co na to říkáte?

Editoval Podvečerníček (3. 8. 2009 23:30)

hrach
Člen | 1838
+
0
-

bohužel, dnešní roboti umí ze zvuku vyčíst celý text.. a to i z takových zvuků, které jsou rušeny nějakým šumem, atp…

Podvečerníček
Člen | 15
+
0
-

hrach napsal(a):

bohužel, dnešní roboti umí ze zvuku vyčíst celý text.. a to i z takových zvuků, které jsou rušeny nějakým šumem, atp…

Ano, přibližně stejně to platí i pro obrázky. Ale neznamená to, že by se CAPTCHA měly přestat používat, že?

Chápu, že na některých stránkách můžou mít s spambotama problémy a pak to řeší jiným kalibrem, ale na těch nových projektech, které v Nette vznikly bych tipoval, že se žádné spamovací nájezdy nekonají.

Taky jde o to, nenechat naše nevidomé spoluobčany ve štychu, když čas od času narazí na captchu.

Editoval Podvečerníček (9. 7. 2009 21:59)

hrach
Člen | 1838
+
0
-

To je samozrejme pravda, kdyz uz captcha, tak at je i pro ty nevidome. Kazdopadne dnes se vetsina captch silně deformuje. :) A nebo aspon trochu.

kravčo
Člen | 721
+
0
-

hrach napsal(a):

… dnes se vetsina captch silně deformuje…

To ale nič nemení na tom, že väčšina z nich sa dá ľahko zlomiť.

Podvečerníček
Člen | 15
+
0
-

Já asi mluvím tatarsky nebo co :-)

Myšlenka dne je zdokonalit současnou captcha komponentu o audio podobu! Popsal jsem, jak, dal jsem odkaz na demo, dal jsem odkaz na zdrojáky.

Chopí se toho někdo? Já jsem zatím v Nette začátečník, jinak by to už dávno bylo.

Editoval Podvečerníček (3. 8. 2009 23:38)

pmg
Člen | 372
+
0
-

Aha, já jsem zatím v tatarštině začátečník, tak jsem nepochopil, že jde o feature request. :-)

Klidně se toho chop, třeba se rovnou přiučíš, jak věci pracují. Sám s audiem neumím a flash nemám.

A přesuňme prosím tuto diskusi do nového threadu.

Podvečerníček
Člen | 15
+
0
-

Škoda slov.
No nic, no – beru všechno zpět a demo a link na zdroják mažu.
Děkuji všem za nezměrný entusiasmus.