Browse Source

Fixes #8284: Added `\yii\captcha\CaptchaAction::$imageLibrary` property allowing to set image rendering library

tags/3.0.0-alpha1
AnatolyRugalev 9 years ago committed by Alexander Makarov
parent
commit
742f106ec0
  1. 1
      framework/CHANGELOG.md
  2. 17
      framework/captcha/CaptchaAction.php

1
framework/CHANGELOG.md

@ -44,6 +44,7 @@ Yii Framework 2 Change Log
- Enh #4104: Added `yii\filters\auth\AuthMetod::optional` for optional authentification in all child classes (SilverFire)
- Enh #7566: Improved `\yii\validators\CompareValidator` default messages (slinstj)
- Enh #7581: Added ability to specify range using anonymous function in `RangeValidator` (RomeroMsk)
- Enh #8284: Added `\yii\captcha\CaptchaAction::$imageLibrary` property allowing to set image rendering library (AnatolyRugalev)
- Enh #8613: `yii\widgets\FragmentCache` will not store empty content anymore which fixes some problems related to `yii\filters\PageCache` (kidol)
- Enh #8649: Added total applied migrations to final report (vernik91)
- Enh #9282: Improved JSON error handling to support PHP 5.5 error codes (freezy-sk)

17
framework/captcha/CaptchaAction.php

@ -98,6 +98,11 @@ class CaptchaAction extends Action
* If not set, it means the verification code will be randomly generated.
*/
public $fixedVerifyCode;
/**
* @var string the rendering library to use. Currently supported only 'gd' and 'imagick'.
* If not set, library will be determined automatically.
*/
public $imageLibrary;
/**
@ -236,13 +241,21 @@ class CaptchaAction extends Action
* Renders the CAPTCHA image.
* @param string $code the verification code
* @return string image contents
* @throws InvalidConfigException if imageLibrary is not supported
*/
protected function renderImage($code)
{
if (Captcha::checkRequirements() === 'gd') {
return $this->renderImageByGD($code);
if (isset($this->imageLibrary)) {
$imageLibrary = $this->imageLibrary;
} else {
$imageLibrary = Captcha::checkRequirements();
}
if ($imageLibrary === 'gd') {
return $this->renderImageByGD($code);
} elseif ($imageLibrary === 'imagick') {
return $this->renderImageByImagick($code);
} else {
throw new InvalidConfigException("Defined library '{$imageLibrary}' is not supported");
}
}

Loading…
Cancel
Save