From 742f106ec06a1a31d568a0912416e255e6d7dff6 Mon Sep 17 00:00:00 2001 From: AnatolyRugalev Date: Mon, 23 Nov 2015 12:03:00 +0500 Subject: [PATCH] Fixes #8284: Added `\yii\captcha\CaptchaAction::$imageLibrary` property allowing to set image rendering library --- framework/CHANGELOG.md | 1 + framework/captcha/CaptchaAction.php | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index d1a160e401..e567c4deae 100644 --- a/framework/CHANGELOG.md +++ b/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) diff --git a/framework/captcha/CaptchaAction.php b/framework/captcha/CaptchaAction.php index ed36d73e69..75c4dd69ce 100644 --- a/framework/captcha/CaptchaAction.php +++ b/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"); } }