[addon captcha-3d] Textová Captcha 3D Captcha jako FormControl
- Inza
- Člen | 330
Diskuse ke stránce Textová Captcha 3D Captcha jako FormControl
Trošku jsem zmodifikoval Vítězslavovu Captcha control a na světě je 3D Captcha pro Nette Framework! Co na ní říkáte??
- pmg
- Člen | 372
Captcha používá sessions, které se musejí aktivovat před odesláním výstupu. Je potřeba vytvořit instanci před renderování šablony nebo session otevřít ručně. Možná by Captcha místo sessions měla používat keš.
$session = $this->getSession();
if (!$session->isStarted()) {
$session->start();
}
Je to pěkné, Inzo. Některé úpravy, které jsi tam provedl, by zasloužil i ten ne-3D archiv. Další úpravy už byly navržené, ale nikdo je zatím neimplementoval:
- Odstranit řádek
require_once NetteLoader::getInstance()->base . '/Forms/Controls/TextBase.php';
, protože přináší více škody než užitku. (V kompaktní verzi to s tím nebude fungovat.) - Extension method přidávat na
FormContainer
a ne naForm
. (Při použití zanořených kontejnerů to jinak nebude fungovat.)
Dále na zvážení:
- Místo funkce
t
pro překlady by asi bylo dobré přidat metodyget/setTranslator
. - Udělat oficiální
CaptchaBase
, ke kterému by šly přidávat různé backendy, generátory obrázků. Aby se to lépe spravovalo. - Textový backend by pak asi měl mít nastavitelnou skupinu použitých znaků.
- Přidat podporu pro audio?
- kaja47
- Člen | 16
Bugfix!
volání require_once v souborech Catcha3D.php a Catcha3DCore.php jsou natvrdo zadrátovaná a předpokládají, že CAptcha3D bude v adresáři libs/plugins/…
Proto by bylo lepší v Catcha3D.php
nahradit řádek
require_once LIBS_DIR.'/plugins/Captcha3D/Captcha3DCore.php';
za
require_once dirname(__FILE__) . '/Captcha3DCore.php';
a v Catcha3DCore.php
řádky
require_once LIBS_DIR.'/plugins/Captcha3D/func/imagelightnessat.func.php';
require_once LIBS_DIR.'/plugins/Captcha3D/class/linear_perspective.class.php';
za
require_once dirname(__FILE__) . '/func/imagelightnessat.func.php';
require_once dirname(__FILE__) . '/class/linear_perspective.class.php';
Pak to šlape jako hodinky ať si knihovnu šoupnu komkoli.
- kaja47
- Člen | 16
Další bugfix.
Captcha3D nefunguje s dev verzí Nette (viz. https://forum.nette.org/…ile-uploader).
Aby všechno fungovalo, stačí upravit metody attached
a
loadHttpData
podle následujícího kódu.
<?php
/**
* This method will be called when the component (or component's parent)
* becomes attached to a monitored object. Do not call this method yourself.
* @param IComponent
* @return void
*/
protected function attached($form)
{
parent::attached($form);
if ($form instanceof Form) {
$name = $this->getKeyName();
$form[$name] = new HiddenField($this->getKey());
}
}
/**
* Loads HTTP data.
* @return void
*/
public function loadHttpData()
{
$data = $this->getForm()->getHttpData();
$name = $this->getKeyName();
if (isset($data[$name])) {
$key = $data[$name];
if ($this->loadState($key)) {
$session = $this->getStateSession();
unset($session->$key);
parent::loadHttpData();
}
}
}
?>
- Flipajs
- Člen | 29
Můžete mě prosím nakopnout kde mám hledat chybu?
Compile Error
Cannot redeclare class Captcha3D
Line 720: /**
Line 721: * @return Session
Line 722: */
Line 723: protected function getSession()
Line 724: {
Line 725: return Environment::getSession();
Line 726: }
Line 727: }
}Line 728:
Line 729:
Line 730:
Line 731: /** add Nette\Form class method */
Line 732: Form::extensionMethod('Form::addCaptcha3D', array('Captcha3D', 'addCaptcha'));
Line 733:
Call stack ▼
1. <PHP inner-code> Debug:: _shutdownHandler ()
Díky;) Už se v tom celém nějako ztrácím…
EDIT: mohl by mi někdo prosím napsat zda v novějších verzích nette používá captchu (3D nebo i obyč.) a funguje mu? Nedaří se mi rozjet ani jedna. Případně kdyby mi někdo poskytl zdrojáky? Díky =)
Editoval Flipajs (1. 2. 2010 0:35)