How to use component in cakephp

Controller/Component/CaptchComponent.php

========================

 

<?php
namespace App\Controller\Component;
use Cake\Controller\Component;

class CaptchaComponent extends Component {
public $helpers = [‘Session’];
public $components = [‘Cookie’];
public function phptext($text, $textColor, $backgroundColor = ”, $fontSize, $imgWidth, $imgHeight, $dir, $fileName) {
/* settings */
$font = ‘\fonts\calibri.ttf’; /* define font */
$textColor = $this->hexToRGB($textColor);

$im = imagecreatetruecolor($imgWidth, $imgHeight);
$textColor = imagecolorallocate($im, $textColor[‘r’], $textColor[‘g’], $textColor[‘b’]);

if ($backgroundColor == ”) {/* select random color */
$colorCode = array(‘#56aad8’, ‘#61c4a8’, ‘#d3ab92’);
$backgroundColor = $this->hexToRGB($colorCode[rand(0, count($colorCode) – 1)]);
$backgroundColor = imagecolorallocate($im, $backgroundColor[‘r’], $backgroundColor[‘g’], $backgroundColor[‘b’]);
} else {/* select background color as provided */
$backgroundColor = $this->hexToRGB($backgroundColor);
$backgroundColor = imagecolorallocate($im, $backgroundColor[‘r’], $backgroundColor[‘g’], $backgroundColor[‘b’]);
}

imagefill($im, 0, 0, $backgroundColor);
list($x, $y) = $this->ImageTTFCenter($im, $text, $font, $fontSize);
imagettftext($im, $fontSize, 0, $x, $y, $textColor, $font, $text);
if (imagejpeg($im, $dir . $fileName, 90)) {/* save image as JPG */
return json_encode(array(‘status’ => TRUE, ‘image’ => $dir . $fileName));
imagedestroy($im);
}
}

public function phpcaptcha($textColor, $backgroundColor, $imgWidth, $imgHeight, $noiceLines = 0, $noiceDots = 0, $noiceColor = ‘#162453′) {

/* Settings */
$text = $this->random();
$font = getcwd().’/fonts/monofont.ttf’; /* font */
$textColor = $this->hexToRGB($textColor);
$fontSize = $imgHeight * 0.75;

$im = imagecreatetruecolor($imgWidth, $imgHeight);
$textColor = imagecolorallocate($im, $textColor[‘r’], $textColor[‘g’], $textColor[‘b’]);

$backgroundColor = $this->hexToRGB($backgroundColor);
$backgroundColor = imagecolorallocate($im, $backgroundColor[‘r’], $backgroundColor[‘g’], $backgroundColor[‘b’]);

/* generating lines randomly in background of image */
if ($noiceLines > 0) {
$noiceColor = $this->hexToRGB($noiceColor);
$noiceColor = imagecolorallocate($im, $noiceColor[‘r’], $noiceColor[‘g’], $noiceColor[‘b’]);
for ($i = 0; $i < $noiceLines; $i++) {
imageline($im, mt_rand(0, $imgWidth), mt_rand(0, $imgHeight), mt_rand(0, $imgWidth), mt_rand(0, $imgHeight), $noiceColor);
}
}

if ($noiceDots > 0) {/* generating the dots randomly in background */
for ($i = 0; $i < $noiceDots; $i++) {
imagefilledellipse($im, mt_rand(0, $imgWidth), mt_rand(0, $imgHeight), 3, 3, $textColor);
}
}

imagefill($im, 0, 0, $backgroundColor);
list($x, $y) = $this->ImageTTFCenter($im, $text, $font, $fontSize);
imagettftext($im, $fontSize, 0, $x, $y, $textColor, $font, $text);

imagejpeg($im, NULL, 90); /* Showing image */
header(‘Content-Type: image/jpeg’); /* defining the image type to be shown in browser widow */
imagedestroy($im); /* Destroying image instance */
// $_SESSION[‘captcha_code’] = $text; /* set random text in session for captcha validation */
$session=$this->request->session();
$session->write(‘captcha_code’,$text);

}

/* for random string */

protected function random($characters = 6, $letters = ‘23456789bcdfghjkmnpqrstvwxyz’) {
$str = ”;
for ($i = 0; $i < $characters; $i++) {
$str .= substr($letters, mt_rand(0, strlen($letters) – 1), 1);
}
return $str;
}

/* function to convert hex value to rgb array */

protected function hexToRGB($colour) {
if ($colour[0] == ‘#’) {
$colour = substr($colour, 1);
}
if (strlen($colour) == 6) {
list( $r, $g, $b ) = array($colour[0] . $colour[1], $colour[2] . $colour[3], $colour[4] . $colour[5]);
} elseif (strlen($colour) == 3) {
list( $r, $g, $b ) = array($colour[0] . $colour[0], $colour[1] . $colour[1], $colour[2] . $colour[2]);
} else {
return false;
}
$r = hexdec($r);
$g = hexdec($g);
$b = hexdec($b);
return array(‘r’ => $r, ‘g’ => $g, ‘b’ => $b);
}

/* function to get center position on image */

protected function ImageTTFCenter($image, $text, $font, $size, $angle = 8) {
$xi = imagesx($image);
$yi = imagesy($image);
$box = imagettfbbox($size, $angle, $font, $text);
$xr = abs(max($box[2], $box[4]));
$yr = abs(max($box[5], $box[7]));
$x = intval(($xi – $xr) / 2);
$y = intval(($yi + $yr) / 2);
return array($x, $y);
}

}

 

============================================================

 

HomeController.php

public function captcharand() {
$this->layout = false;
$session = $this->request->session();
$this->loadComponent(‘Captcha’);
echo $this->Captcha->phpcaptcha(‘#162453’, ‘#fff’, 120, 40, 10, 25, $this->request->webroot);
die;
}

 

 

Home.ctp

 


request->webroot?>Pages/captcharand?rand=” id=’captchaimg’>

Enter the code above here :*

Can’t read the image? click <a href=’javascript: refreshCaptcha();’>here</a> to refresh.</td>
</div>

 

Validation

 

 

function validate() {

var ch=0;

var captcha_code=document.getElementById(‘captcha_code’).value.trim();
if(captcha_code==””)
{
document.getElementById(“error_captcha”).style.display=”block”;
document.getElementById(‘error_captcha’).innerHTML=”<font color=’red’ size=’2′>Please enter captcha code.</font>”;
ch++;
}
else{
document.getElementById(“error_captcha”).style.display=”none”;
}

if(ch>0)
{
return false;
}
else
{

}
}

Advertisements