diff --git a/Block/Adminhtml/EmailTest.php b/Block/Adminhtml/EmailTest.php
index 84c1d79..c12f5e3 100644
--- a/Block/Adminhtml/EmailTest.php
+++ b/Block/Adminhtml/EmailTest.php
@@ -39,6 +39,26 @@ class EmailTest extends \Magento\Backend\Block\Template
*/
protected $hash;
+ /**
+ * Remove values from global post and store values locally
+ * @var array()
+ */
+ protected $configFields = [
+ 'active' => '',
+ 'name' => '',
+ 'auth' => '',
+ 'ssl' => '',
+ 'smtphost' => '',
+ 'smtpport' => '',
+ 'username' => '',
+ 'password' => '',
+ 'set_reply_to' => '',
+ 'set_from' => '',
+ 'set_return_path' => '',
+ 'email' => '',
+ 'from_email' => ''
+ ];
+
/**
* EmailTest constructor.
* @param \Magento\Backend\Block\Template\Context $context
@@ -61,23 +81,91 @@ public function __construct(
}
/**
- * @throws \Zend_Validate_Exception
+ * @param $id
+ * @return $this
*/
- protected function init()
+ public function setStoreId($id)
+ {
+ $this->storeId = $id;
+ return $this;
+ }
+
+ /**
+ * @return int \ null
+ */
+ public function getStoreId()
+ {
+ return $this->storeId;
+ }
+
+ /**
+ * @param null $key
+ * @return array|mixed|string
+ */
+ public function getConfig($key = null)
+ {
+ if ($key === null) {
+ return $this->configFields;
+ } elseif (!array_key_exists($key, $this->configFields)) {
+ return '';
+ } else {
+ return $this->configFields[$key];
+ }
+ }
+
+ /**
+ * @param null $key
+ * @param string $value
+ * @return array|mixed|string
+ */
+ public function setConfig($key, $value = null)
+ {
+ if (array_key_exists($key, $this->configFields)) {
+ $this->configFields[$key] = $value;
+ }
+
+ return $this;
+ }
+
+ /**
+ * Load default config if config is lock using "bin/magento config:set"
+ */
+ public function loadDefaultConfig()
{
$request = $this->getRequest();
+ $formPostArray = (array) $request->getPost();
- $this->storeId = $request->getParam('store', null);
+ $fields = array_keys($this->configFields);
+ foreach ($fields as $field) {
+ if (!array_key_exists($field, $formPostArray)) {
+ $this->setConfig($field, $this->_dataHelper->getConfigValue($field), $this->getStoreId());
+ } else {
+ $this->setConfig($field, $request->getPost($field));
+ }
+ }
//if password mask (6 stars)
- if ($request->getPost('password') === '******') {
- $password = $this->_dataHelper->getConfigPassword($this->storeId);
- $request->setPostValue('password', $password);
+ if ($this->getConfig('password') === '******') {
+ $password = $this->_dataHelper->getConfigPassword($this->getStoreId());
+ $this->setConfig('password', $password);
}
- $this->toAddress = $request->getPost('email') ? $request->getPost('email') : $request->getPost('username');
+ return $this;
+ }
+
+ /**
+ * @throws \Zend_Validate_Exception
+ */
+ protected function init()
+ {
+ $request = $this->getRequest();
+ $this->setStoreId($request->getParam('store', null));
- $this->fromAddress = trim($request->getPost('from_email'));
+ $this->loadDefaultConfig();
+
+ $this->toAddress = $this->getConfig('email') ? $this->getConfig('email') : $this->getConfig('username');
+
+ $this->fromAddress = trim($this->getConfig('from_email'));
if (!\Zend_Validate::is($this->fromAddress, 'EmailAddress')) {
$this->fromAddress = $this->toAddress;
@@ -86,6 +174,9 @@ protected function init()
$this->hash = time() . '.' . rand(300000, 900000);
}
+ /**
+ * @return array
+ */
public function verify()
{
$settings = [
@@ -98,7 +189,7 @@ public function verify()
$result = $this->error();
$hasError = false;
- foreach ($settings as $key => $functionName) {
+ foreach ($settings as $functionName) {
$result = call_user_func([$this, $functionName]);
if (array_key_exists('has_error', $result)) {
@@ -130,10 +221,10 @@ protected function validateServerEmailSetting()
{
$request = $this->getRequest();
- $username = $request->getPost('username');
- $password = $request->getPost('password');
+ $username = $this->getConfig('username');
+ $password = $this->getConfig('password');
- $auth = strtolower($request->getPost('auth'));
+ $auth = strtolower($this->getConfig('auth'));
//if default view
//see https://github.com/magento/magento2/issues/3019
@@ -147,11 +238,11 @@ protected function validateServerEmailSetting()
}
//SMTP server configuration
- $smtpHost = $request->getPost('smtphost');
+ $smtpHost = $this->getConfig('smtphost');
$smtpConf = [
- 'name' => $request->getPost('name'),
- 'port' => $request->getPost('smtpport')
+ 'name' => $this->getConfig('name'),
+ 'port' => $this->getConfig('smtpport')
];
if ($auth != 'none') {
@@ -160,14 +251,14 @@ protected function validateServerEmailSetting()
$smtpConf['password'] = $password;
}
- $ssl = $request->getPost('ssl');
+ $ssl = $this->getConfig('ssl');
if ($ssl != 'none') {
$smtpConf['ssl'] = $ssl;
}
$transport = new \Zend_Mail_Transport_Smtp($smtpHost, $smtpConf);
- $from = trim($request->getPost('from_email'));
+ $from = trim($this->getConfig('from_email'));
$from = \Zend_Validate::is($from, 'EmailAddress') ? $from : $username;
$this->fromAddress = $from;
@@ -203,7 +294,8 @@ protected function validateMagentoEmailSetting()
$result = $this->error();
$this->_dataHelper->setTestMode(true);
- $this->_dataHelper->setStoreId($this->storeId);
+ $this->_dataHelper->setStoreId($this->getStoreId());
+ $this->_dataHelper->setTestConfig($this->getConfig());
try {
$this->_email
diff --git a/Helper/Data.php b/Helper/Data.php
index 1ed6ce2..21bee9a 100644
--- a/Helper/Data.php
+++ b/Helper/Data.php
@@ -10,12 +10,41 @@
class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
/**
- * @var null $_storeId
+ * @var null $storeId
*/
- protected $_storeId = null;
+ protected $storeId = null;
- /** @var bool $_testMode */
- protected $_testMode = false;
+ /** @var bool $testMode */
+ protected $testMode = false;
+
+ /** @var array $testConfig */
+ protected $testConfig = [];
+
+
+ /**
+ * @param null $key
+ * @return array|mixed|string
+ */
+ public function getTestConfig($key = null)
+ {
+ if ($key === null) {
+ return $this->testConfig;
+ } elseif (!array_key_exists($key, $this->testConfig)) {
+ return '';
+ } else {
+ return $this->testConfig[$key];
+ }
+ }
+
+ /**
+ * @param null $fields
+ * @return $this
+ */
+ public function setTestConfig($fields)
+ {
+ $this->testConfig = (array) $fields;
+ return $this;
+ }
/**
* @param null $store_id
@@ -166,8 +195,7 @@ public function getConfigValue($path, $store_id = null)
{
//send test mail
if ($this->isTestMode()) {
- $request = $this->_getRequest();
- return $request->getPost($path);
+ return $this->getTestConfig($path);
}
//return value from core config
@@ -202,7 +230,7 @@ public function getScopeConfigValue($path, $store_id = null)
*/
public function getStoreId()
{
- return $this->_storeId;
+ return $this->storeId;
}
/**
@@ -210,7 +238,7 @@ public function getStoreId()
*/
public function setStoreId($storeId = null)
{
- $this->_storeId = $storeId;
+ $this->storeId = $storeId;
}
/**
@@ -218,14 +246,16 @@ public function setStoreId($storeId = null)
*/
public function isTestMode()
{
- return (bool) $this->_testMode;
+ return (bool) $this->testMode;
}
/**
* @param bool $testMode
+ * @return Data
*/
public function setTestMode(bool $testMode)
{
- $this->_testMode = $testMode;
+ $this->testMode = $testMode;
+ return $this;
}
}
diff --git a/composer.json b/composer.json
index ccfbb5f..9271e23 100644
--- a/composer.json
+++ b/composer.json
@@ -18,7 +18,7 @@
"magento/framework": "100.0.*|100.1.*|101.0.*"
},
"type": "magento2-module",
- "version": "2.5.3",
+ "version": "2.5.4",
"license": [
"proprietary"
],