CakePHP Plugin to show Google Recpatcha, Image and Math Challenge, CakePHP 1, 2 & 3
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
app updating few typos Dec 5, 2016
README.md

README.md

Cakephp Captcha 1 & 2

CakePHP 3 Version is here

Demo

A CakePHP Captchas support with automatic Model Validation. Tested upto CakePHP 2.9.3.

Features

  • Multiple Captcha Support.
    • It simply supports multiple captchas on a page. In different forms or in a single form.
  • Model Validation attahced as Behavior
  • Image and/or Simple Math Captchas
  • Configurable Model Name, Field Name, Captcha Height, Width, Number of Characters and Font Face, Size, Angle of rotation
  • Works without GD Truetype font support
  • Random or Fixed Captcha Themes for Image Captchaa
  • Random Font face

Installation

Place all files bundled in this package in corresponding folders. Then follow instructions given below.

Configuration (optional)

Open app/Plugin/Captcha/Controller/Component/CaptchaComponent.php file and make necessary changes in the $settings variable defined near line 125.

Implementation

Follow instructions given below to place code in Controller, Model and View files.

###In Controller

Add in the top definitions, in $uses, $components and $helpers in your controller, as per the CakePHP convensions.

var $components = array('Captcha.Captcha'=>array('Model'=>'Signup', 
'field'=>'captcha'));//'Captcha.Captcha'

var $uses = array('CurrentModel'); //replace "CurrentModel" with your current. The default model in this example is "Signup"

public $helpers = array('Captcha.Captcha'); // and the default helpers like Form, Session, HTML etc

//(Thanks to "Vasile Martiniuc" for pointing out the error due to different model than Signup in $uses :))

Note: "captcha" is the field name for which we are binding this captcha here in examples. Replace with appropriate name.

Add this function in your controller.

function captcha()	{
    $this->autoRender = false;
    $this->layout='ajax';
    $this->Captcha->create();
}

Add the similar logic to the function which is the "action" of your form, in your controller. The highlighted line (line 3 here) is the one which is related to the captcha component.

function add()	{
    if(!empty($this->request->data))	{
        $this->Signup->setCaptcha('captcha', 
    $this->Captcha->getCode('Signup.captcha'));
        $this->Signup->set($this->request->data);
        if($this->Signup->validates())	{ //as usual data save call
            // validation passed, do save or something
        }	else	{ //or
            $this->Session->setFlash('Data Validation Failure', 'default', 
	array('class' => 
	'cake-error'));
            //validation not passed, do something else
        }
    }
}

###In Model

Add CaptchaBehaviour in the Model definitions, as following:

public $actsAs = array(
    'Captcha.Captcha' => array(
        'field' => array('captcha'),
        'error' => 'Incorrect captcha code value'
    )
);

###In View

Add form code in the view file, in the form where you want the captcha image to appear:

echo $this->Form->create("Signups");
$this->Captcha->render();
echo $this->Form->submit(__(' Submit ',true));
echo $this->Form->end();

And importanly place the following javascript script code in somewhere in your page so it is called properly and execute.

<script 
src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></scr
ipt>
<script>
jQuery('.creload').on('click', function() {
    var mySrc = $(this).prev().attr('src');
    var glue = '?';
    if(mySrc.indexOf('?')!=-1)  {
        glue = '&';
    }
    $(this).prev().attr('src', mySrc + glue + new Date().getTime());
    return false;
});
</script>

That should be it!

##More examples

###Custom settings:

echo $this->Form->create("Signups");
$custom1['width']=150;
$custom1['height']=50;
$custom1['theme']='default';
$this->Captcha->render($custom1);

###Multiple captchas:

//form 1
echo $this->Form->create("Signups");
$custom1['width']=150;
$custom1['height']=50;
$this->Captcha->render($custom1);

//form 2, A math captcha, anywhere on the page
echo $this->Form->create("Users");
$custom2['type']='math';
$this->Captcha->render($custom2);

Settings that can be set in your view file:

  • model: model name.
  • field: field name.
  • type: image or math. If set to 'math' all following settings will be obsolete
  • width: width of image captcha
  • height: height of image captcha
  • theme: theme/difficulty image captcha
  • length: number of characters in image captcha
  • angle: angle of rotation for characters in image captcha

Additional settings that can be set in Component file.

  • fontAdjustment: Responsible for the font size relational to Captcha Image Size
  • reload_txt: The phrase which appears as a Captcha Reload link
  • clabel: Label for Image Captcha Value input field
  • mlabel: Label for Math Captcha Value input field

What's New

  • Tested upto CakePHP 2.9.3
  • Multiple Image and Simple Math captcha
  • Default and Random themes for Image Captcha
  • Multiple font files placed in Lib
  • Fully controlled from View file through Helper

~~

License

Licensed under The MIT License Redistributions of files must retain the given copyright notice. http://opensource.org/licenses/MIT

Copyright

Copyright (C) Arvind Kumar, arvind@inimist.com


Looking for a CakePHP Developer?