| Current Path : /var/www/element/data/www/revenuestory.ru/bitrix/modules/main/admin/ |
| Current File : /var/www/element/data/www/revenuestory.ru/bitrix/modules/main/admin/smtp_edit.php |
<?
/**
* @global CUser $USER
* @global CMain $APPLICATION
*/
require_once(__DIR__ . "/../include/prolog_admin_before.php");
require_once($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/prolog.php");
define("HELP_FILE", "settings/smtp_edit.php");
if (!$USER->CanDoOperation('edit_other_settings') && !$USER->CanDoOperation('view_other_settings'))
{
$APPLICATION->AuthForm(Loc::getMessage("ACCESS_DENIED"));
}
$isAdmin = $USER->CanDoOperation('edit_other_settings');
use Bitrix\Main;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Text\HtmlFilter;
function checkSmtp(array &$fields, Main\ErrorCollection &$errors)
{
$smtpConfig = $fields['OPTIONS']['smtp'] ?? [];
if (!$smtpConfig)
{
return false;
}
$smtpConfig = new Bitrix\Main\Mail\Smtp\Config([
'from' => $fields['EMAIL'],
'host' => $smtpConfig['server'],
'port' => $smtpConfig['port'],
'protocol' => $smtpConfig['protocol'],
'login' => $smtpConfig['login'],
'password' => $smtpConfig['password'],
]);
$context = new Main\Mail\Context();
$context->setSmtp($smtpConfig);
if (Main\Mail\Smtp\Mailer::checkConnect($context, $errors))
{
$fields['IS_CONFIRMED'] = true;
}
}
function fillSmtpConfigurationFromPost(Main\Mail\Internal\Sender $configuration, Main\ErrorCollection &$errors)
{
static $formFields = [
'EMAIL',
'NAME',
'IS_PUBLIC',
];
static $smtpOptionFields = [
'login',
'server',
'port',
'password',
];
$request = Main\Context::getCurrent()->getRequest();
$fields = $configuration->entity->getFields();
$preparedFields = [];
//set values from the form
foreach ($formFields as $fieldName)
{
$value = trim($request->getPost($fieldName));
if ($fields[$fieldName] instanceof Main\ORM\Fields\BooleanField)
{
$value = ($value == 1);
}
if ($fieldName === 'EMAIL' && !Bitrix\Main\Mail\Address::isValid($value))
{
$errors->add([new \Bitrix\Main\Error(Loc::getMessage("smtp_configuration_wrong_field_value", [
'%FIELD_NAME%' => $fields[$fieldName]->getTitle(),
]))]);
}
$preparedFields[$fieldName] = $value;
}
$options = $configuration->getOptions();
//set values from the form
foreach ($smtpOptionFields as $optionField)
{
$value = trim($request->getPost($optionField));
if ($optionField === 'protocol')
{
$value = $value == 1 ? 'smtps' : 'smtp';
}
if ($optionField === 'port' && !empty($value) && ($value < 0 || $value > 65535))
{
$errors->add([new \Bitrix\Main\Error(Loc::getMessage("smtp_configuration_wrong_field_value", [
'%FIELD_NAME%' => Loc::getMessage('smtp_configuration_edit_' . $optionField),
]))]);
}
$options['smtp'][$optionField] = $value;
}
$preparedFields['OPTIONS'] = $options;
checkSmtp($preparedFields, $errors);
foreach ($preparedFields as $field => $value)
{
$configuration->set($field, $value);
}
}
$aTabs = [
[
"DIV" => "edit1",
"TAB" => Loc::getMessage("smtp_configuration_edit_tab"),
"ICON" => "message_edit",
"TITLE" => Loc::getMessage("smtp_configuration_edit_tab_title"),
],
];
$tabControl = new CAdminTabControl("tabControl", $aTabs);
$request = Main\Context::getCurrent()->getRequest();
$errors = new Main\ErrorCollection();
$ID = intval($request["ID"]);
$COPY_ID = intval($request["COPY_ID"]);
$entity = Main\Mail\Internal\SenderTable::getEntity();
$fields = $entity->getFields();
if ($request->isPost() && ($request["save"] <> '' || $request["apply"] <> '') && $isAdmin && check_bitrix_sessid())
{
if ($ID > 0)
{
$configuration = Main\Mail\Internal\SenderTable::getById($ID)->fetchObject();
}
else
{
$configuration = $entity->createObject();
}
//set values from the form
fillSmtpConfigurationFromPost($configuration, $errors);
if (empty($errors->getValues()))
{
$result = $configuration->save();
if ($result instanceof Main\ORM\Data\AddResult)
{
$ID = $result->getId();
}
if ($result->isSuccess())
{
if ($request["save"] <> '')
{
LocalRedirect(BX_ROOT . "/admin/smtp_admin.php?lang=" . LANGUAGE_ID);
}
else
{
LocalRedirect(BX_ROOT . "/admin/smtp_edit.php?lang=" . LANGUAGE_ID . "&ID=" . $ID . "&" . $tabControl->ActiveTabParam());
}
}
else
{
$errors = $result->getErrorCollection();
}
}
}
if ($ID > 0 || $COPY_ID > 0)
{
//existing
$conigurationId = ($COPY_ID > 0 ? $COPY_ID : $ID);
$configuration = Main\Mail\Internal\SenderTable::getById($conigurationId)->fetchObject();
}
elseif (!$configuration)
{
//new
$configuration = $entity->createObject();
}
$APPLICATION->SetTitle(($ID > 0 ? Loc::getMessage("smtp_configuration_edit_title") : Loc::getMessage("smtp_configuration_edit_add")));
require($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/include/prolog_admin_after.php");
$aMenu = [
[
"TEXT" => Loc::getMessage("smtp_configuration_edit_list"),
"LINK" => "smtp_admin.php?lang=" . LANGUAGE_ID,
"TITLE" => Loc::getMessage("smtp_configuration_edit_list_title"),
"ICON" => "btn_list",
]
];
if ($ID > 0 && $isAdmin)
{
$aMenu[] = array("SEPARATOR" => "Y");
$aMenu[] = [
"TEXT" => Loc::getMessage("smtp_configuration_edit_add_btn"),
"LINK" => "smtp_edit.php?lang=" . LANGUAGE_ID,
"TITLE" => Loc::getMessage("smtp_configuration_edit_add_btn_title"),
"ICON" => "btn_new",
];
$aMenu[] = [
"TEXT" => Loc::getMessage("smtp_configuration_edit_copy"),
"LINK" => "smtp_edit.php?lang=" . LANGUAGE_ID . "&COPY_ID=" . $ID,
"TITLE" => Loc::getMessage("smtp_configuration_edit_copy_title"),
"ICON" => "btn_copy",
];
$aMenu[] = [
"TEXT" => Loc::getMessage("smtp_configuration_edit_del"),
"LINK" => "javascript:if(confirm('" . CUtil::JSEscape(Loc::getMessage("smtp_configuration_edit_del_conf")) . "')) window.location='smtp_admin.php?ID=" . $ID . "&lang=" . LANGUAGE_ID . "&" . bitrix_sessid_get() . "&action_button=delete';",
"TITLE" => Loc::getMessage("smtp_configuration_edit_del_title"),
"ICON" => "btn_delete",
];
}
$context = new CAdminContextMenu($aMenu);
$context->Show();
if (!empty($errors))
{
CAdminMessage::ShowMessage(join("\n", $errors->toArray()));
}
?>
<script type="text/javascript">
window.bxCurrentControl = null;
function PutString(str) {
if (window.bxCurrentControl) {
window.bxCurrentControl.value += str;
}
}
</script>
<form method="POST" action="<?= HtmlFilter::encode($request->getRequestedPage()) ?>" name="form1">
<?= bitrix_sessid_post() ?>
<input type="hidden" name="lang" value="<?= LANGUAGE_ID ?>">
<input type="hidden" name="ID" value="<?= $ID ?>">
<?php if ($COPY_ID > 0): ?><input type="hidden" name="COPY_ID" value="<?= $COPY_ID ?>"><?php endif ?>
<?php
$tabControl->Begin();
$tabControl->BeginNextTab();
$options = $configuration->getOptions();
$options = $options['smtp'] ?? [];
?>
<?php if ($ID > 0): ?>
<tr>
<td><?= $fields["ID"]->getTitle() ?>:</td>
<td><?= $ID ?></td>
</tr>
<?php endif ?>
<tr class="adm-detail-required-field">
<td><?= $fields["EMAIL"]->getTitle() ?>:</td>
<td><input type="text" name="EMAIL" size="30" maxlength="511"
value="<?= HtmlFilter::encode($configuration->getEmail()) ?>"
onfocus="window.bxCurrentControl=this"/></td>
</tr>
<tr class="adm-detail-field">
<td><?= $fields["NAME"]->getTitle() ?>:</td>
<td><input type="text" name="NAME" size="30" maxlength="511"
value="<?= HtmlFilter::encode($configuration->getName()) ?>"
onfocus="window.bxCurrentControl=this" autocomplete="off"/></td>
</tr>
<tr class="heading">
<td colspan="2"><?php echo Loc::getMessage("smtp_configuration_edit_mess") ?></td>
</tr>
<tr class="adm-detail-field">
<td><?= $fields["IS_PUBLIC"]->getTitle() ?>:</td>
<td><input type="checkbox" name="IS_PUBLIC" id="active"
value="1"<?php if ($configuration->getIsPublic()) echo " checked" ?>></td>
</tr>
<tr class="adm-detail-field">
<td><?= Loc::getMessage('smtp_configuration_edit_login') ?>:</td>
<td><input type="text" name="login" size="30" maxlength="511"
value="<?= HtmlFilter::encode($options['login'] ?? "") ?>"
onfocus="window.bxCurrentControl=this"/></td>
</tr>
<tr class="adm-detail-field">
<td><?= Loc::getMessage('smtp_configuration_edit_host') ?>:</td>
<td><input type="text" name="server" size="30" maxlength="511"
value="<?= HtmlFilter::encode($options['server'] ?? "") ?>"
onfocus="window.bxCurrentControl=this"/></td>
</tr>
<tr class="adm-detail-field">
<td><?= Loc::getMessage('smtp_configuration_edit_port') ?>:</td>
<td><input type="number" name="port" size="30" maxlength="10"
value="<?= HtmlFilter::encode($options['port'] ?? "") ?>"
onfocus="window.bxCurrentControl=this"/></td>
</tr>
<tr class="adm-detail-field">
<td><?= Loc::getMessage('smtp_configuration_edit_password') ?>:</td>
<td><input type="password" name="password" size="30" maxlength="511"
value="<?= HtmlFilter::encode($options['password'] ?? "") ?>"
onfocus="window.bxCurrentControl=this"/></td>
</tr>
<?php
$tabControl->Buttons(array("disabled" => !$isAdmin, "back_url" => "smtp_admin.php?lang=" . LANGUAGE_ID));
$tabControl->End();
?>
</form>
<?php
require($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/include/epilog_admin.php");