[addon captcha-3d] Textová Captcha 3D Captcha jako FormControl

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

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??

Cifro
Člen | 245
+
0
-

Demo hlási
Cannot send session cache limiter - headers already sent

pmg
Člen | 372
+
0
-

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 na Form. (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 metody get/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?
Inza
Člen | 330
+
0
-

Demo už je fixed;-)

Jinak určo ji do budoucna upgradneme, jen nevím, vzhledem k NDP, kdy se k tomu dostanu – ale může klidně i někdo jiný;-)..

pmg
Člen | 372
+
0
-

ale může klidně i někdo jiný

To už jsem zkoušel, ale moc to nefunguje…

Inza
Člen | 330
+
0
-

pmg napsal(a):

ale může klidně i někdo jiný

To už jsem zkoušel, ale moc to nefunguje…

Tak se k tomu časem možná dostane Inza no…možná…

kaja47
Člen | 16
+
0
-

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
+
0
-

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
+
0
-

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)