123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Captcha\Helper;
- use Magento\Framework\App\Filesystem\DirectoryList;
- use Magento\Framework\Filesystem;
- use Magento\Framework\Filesystem\DriverInterface;
- /**
- * Captcha image model
- *
- * @api
- * @since 100.0.2
- */
- class Data extends \Magento\Framework\App\Helper\AbstractHelper
- {
- /**
- * Used for "name" attribute of captcha's input field
- */
- const INPUT_NAME_FIELD_VALUE = 'captcha';
- /**
- * Always show captcha
- */
- const MODE_ALWAYS = 'always';
- /**
- * Show captcha only after certain number of unsuccessful attempts
- */
- const MODE_AFTER_FAIL = 'after_fail';
- /**
- * Captcha fonts path
- */
- const XML_PATH_CAPTCHA_FONTS = 'captcha/fonts';
- /**
- * Default captcha type
- */
- const DEFAULT_CAPTCHA_TYPE = 'Zend';
- /**
- * List uses Models of Captcha
- * @var array
- */
- protected $_captcha = [];
- /**
- * @var Filesystem
- */
- protected $_filesystem;
- /**
- * @var \Magento\Store\Model\StoreManagerInterface
- */
- protected $_storeManager;
- /**
- * @var \Magento\Captcha\Model\CaptchaFactory
- */
- protected $_factory;
- /**
- * @param \Magento\Framework\App\Helper\Context $context
- * @param \Magento\Store\Model\StoreManagerInterface $storeManager
- * @param Filesystem $filesystem
- * @param \Magento\Captcha\Model\CaptchaFactory $factory
- */
- public function __construct(
- \Magento\Framework\App\Helper\Context $context,
- \Magento\Store\Model\StoreManagerInterface $storeManager,
- Filesystem $filesystem,
- \Magento\Captcha\Model\CaptchaFactory $factory
- ) {
- $this->_storeManager = $storeManager;
- $this->_filesystem = $filesystem;
- $this->_factory = $factory;
- parent::__construct($context);
- }
- /**
- * Get Captcha
- *
- * @param string $formId
- * @return \Magento\Captcha\Model\CaptchaInterface
- */
- public function getCaptcha($formId)
- {
- if (!array_key_exists($formId, $this->_captcha)) {
- $captchaType = ucfirst($this->getConfig('type'));
- if (!$captchaType) {
- $captchaType = self::DEFAULT_CAPTCHA_TYPE;
- } elseif ($captchaType == 'Default') {
- $captchaType = $captchaType . 'Model';
- }
- $this->_captcha[$formId] = $this->_factory->create($captchaType, $formId);
- }
- return $this->_captcha[$formId];
- }
- /**
- * Returns config value
- *
- * @param string $key The last part of XML_PATH_$area_CAPTCHA_ constant (case insensitive)
- * @param \Magento\Store\Model\Store $store
- * @return \Magento\Framework\App\Config\Element
- */
- public function getConfig($key, $store = null)
- {
- return $this->scopeConfig->getValue(
- 'customer/captcha/' . $key,
- \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
- $store
- );
- }
- /**
- * Get list of available fonts.
- *
- * Return format:
- * [['arial'] => ['label' => 'Arial', 'path' => '/www/magento/fonts/arial.ttf']]
- *
- * @return array
- */
- public function getFonts()
- {
- $fontsConfig = $this->scopeConfig->getValue(\Magento\Captcha\Helper\Data::XML_PATH_CAPTCHA_FONTS, 'default');
- $fonts = [];
- if ($fontsConfig) {
- $libDir = $this->_filesystem->getDirectoryRead(DirectoryList::LIB_INTERNAL);
- foreach ($fontsConfig as $fontName => $fontConfig) {
- $fonts[$fontName] = [
- 'label' => $fontConfig['label'],
- 'path' => $libDir->getAbsolutePath($fontConfig['path']),
- ];
- }
- }
- return $fonts;
- }
- /**
- * Get captcha image directory
- *
- * @param mixed $website
- * @return string
- */
- public function getImgDir($website = null)
- {
- $mediaDir = $this->_filesystem->getDirectoryWrite(DirectoryList::MEDIA);
- $captchaDir = '/captcha/' . $this->_getWebsiteCode($website);
- $mediaDir->create($captchaDir);
- return $mediaDir->getAbsolutePath($captchaDir) . '/';
- }
- /**
- * Get website code
- *
- * @param mixed $website
- * @return string
- */
- protected function _getWebsiteCode($website = null)
- {
- return $this->_storeManager->getWebsite($website)->getCode();
- }
- /**
- * Get captcha image base URL
- *
- * @param mixed $website
- * @return string
- */
- public function getImgUrl($website = null)
- {
- return $this->_storeManager->getStore()->getBaseUrl(
- DirectoryList::MEDIA
- ) . 'captcha' . '/' . $this->_getWebsiteCode(
- $website
- ) . '/';
- }
- }
|