[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 
FormContainera ne naForm. (Při použití zanořených kontejnerů to jinak nebude fungovat.) 
Dále na zvážení:
- Místo funkce 
tpro 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)