/** @global \CMain $APPLICATION */
use Bitrix\Main,
Bitrix\Main\Loader,
Bitrix\Catalog,
Bitrix\Iblock;
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
$saleModulePermissions = $APPLICATION->GetGroupRight("sale");
if ($saleModulePermissions < "W")
$APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
Loader::includeModule('sale');
IncludeModuleLangFile(__FILE__);
//$APPLICATION->SetAdditionalCSS("/bitrix/js/intranet/intranet-common.css");
ClearVars();
$crmIntegrationData = COption::GetOptionString("sale", "~crm_integration", "");
$arCrmIntegration = unserialize($crmIntegrationData, ['allowed_classes' => false]);
if (!is_array($arCrmIntegration))
$arCrmIntegration = array();
//$arCrmIntegration = array();
if ($_SERVER["REQUEST_METHOD"] != "POST" || $do_create_link != "Y")
$_REQUEST["CRM_BUS_USER_SET_C"] = "Y";
$errorMessage = "";
$successMessage = "";
if ($_SERVER["REQUEST_METHOD"] == "POST" && $do_create_link == "Y" && $saleModulePermissions >= "W" && check_bitrix_sessid())
{
if (!isset($_POST["CRM_URL_SERVER"]) || empty($_POST["CRM_URL_SERVER"]))
{
$errorMessage .= GetMessage("SPTEN_SCRM_NO_SITE")."
";
}
else
{
$arCrmUrl = parse_url($_POST["CRM_URL_SERVER"]);
$crmUrlHost = $arCrmUrl["host"] ? $arCrmUrl["host"] : $arCrmUrl["path"];
$crmUrlScheme = $arCrmUrl["scheme"]? mb_strtolower($arCrmUrl["scheme"]) : mb_strtolower($_POST["CRM_URL_SCHEME"]);
$crmUrlPort = $arCrmUrl["port"] ? intval($arCrmUrl["port"]) : intval($_POST["CRM_URL_PORT"]);
switch ($crmUrlScheme)
{
case 'https':
if (!function_exists("openssl_verify"))
$errorMessage .= "OpenSSL PHP extention required"."
";
$crmUrlScheme = 'ssl://';
if ($crmUrlPort <= 0)
$crmUrlPort = 443;
break;
default:
$crmUrlScheme = '';
if ($crmUrlPort <= 0)
$crmUrlPort = 80;
break;
}
if (empty($crmUrlHost))
$errorMessage .= GetMessage("SPTEN_SCRM_WRONG_SITE")."
";
}
$crmLogin = $_POST["CRM_LOGIN"];
$crmPassword = $_POST["CRM_PASSWORD"];
if ($crmLogin == '')
$errorMessage .= GetMessage("SPTEN_SCRM_NO_LOGIN")."
";
if ($crmPassword == '')
$errorMessage .= GetMessage("SPTEN_SCRM_NO_PWD")."
";
$createNewSaleUser = ($_POST["CRM_BUS_USER_SET_C"] == "Y");
if (!$createNewSaleUser)
{
$saleLogin = $_POST["CRM_BUS_USER_LOGIN"];
$salePassword = $_POST["CRM_BUS_USER_PASSWORD"];
if ($saleLogin == '')
{
$errorMessage .= GetMessage("SPTEN_SCRM_NO_SALE_LOGIN")."
";
}
else
{
$dbSaleLoginUser = CUser::GetByLogin($saleLogin);
if (!$arSaleLoginUser = $dbSaleLoginUser->Fetch())
$errorMessage .= GetMessage("SPTEN_SCRM_WRONG_SALE_LOGIN")."
";
}
if ($salePassword == '')
$errorMessage .= GetMessage("SPTEN_SCRM_NO_SALE_PWD")."
";
}
if ($createNewSaleUser)
{
$userId = 0;
$groupId = 0;
if (empty($errorMessage))
{
$saleLogin = "BX_CRM_IMPORT_USER_".randString(5, "ABCDEFGHIJKLNMOPQRSTUVWXYZ");
$idx = 0;
$saleLoginTmp = $saleLogin;
$dbSaleLoginUser = CUser::GetByLogin($saleLogin);
while ($arSaleLoginUser = $dbSaleLoginUser->Fetch())
{
$idx++;
if ($idx > 10)
{
$saleLogin = $saleLogin.time();
break;
}
else
{
$saleLogin = $saleLoginTmp.$idx;
}
$dbSaleLoginUser = CUser::GetByLogin($saleLogin);
}
}
if (empty($errorMessage))
{
$defaultGroup = COption::GetOptionString("main", "new_user_registration_def_group", "");
if ($defaultGroup != "")
{
$arDefaultGroup = explode(",", $defaultGroup);
}
else
{
$arDefaultGroup = [];
}
$salePassword = \CUser::GeneratePasswordByPolicy($arDefaultGroup);
$saleEMail = $saleLogin.'@'.$_SERVER["SERVER_NAME"];
if (!check_email($saleEMail))
$saleEMail = $saleLogin.'@temporary.temp';
$arUserFields = array(
"LOGIN" => $saleLogin,
"NAME" => "CRM",
"LAST_NAME" => "IMPORT",
"PASSWORD" => $salePassword,
"PASSWORD_CONFIRM" => $salePassword,
"EMAIL" => $saleEMail,
"GROUP_ID" => $arDefaultGroup,
"ACTIVE" => "Y",
"LID" => SITE_ID,
);
$user = new CUser;
$userId = $user->Add($arUserFields);
$userId = intval($userId);
if ($userId <= 0)
$errorMessage .= GetMessage("SPTEN_SCRM_ERR_REG").(($user->LAST_ERROR <> '') ? ": ".$user->LAST_ERROR : "");
}
if (empty($errorMessage))
{
$group = new CGroup;
$arGroupFields = array(
"ACTIVE" => "Y",
"NAME" => "CRM SALE IMPORT",
"USER_ID" => array(
array(
"USER_ID" => $userId,
"DATE_ACTIVE_FROM" => false,
"DATE_ACTIVE_TO" => false,
)
)
);
$groupId = $group->Add($arGroupFields);
$groupId = intval($groupId);
if ($groupId <= 0)
$errorMessage .= GetMessage("SPTEN_SCRM_ERR_GRP").(($group->LAST_ERROR <> '') ? ": ".$group->LAST_ERROR : "");
}
}
function __CrmSaleQuery($crmUrlScheme, $crmUrlHost, $crmUrlPort, $crmLogin, $crmPassword, $head, $body, &$errorMessage)
{
// remove last slash from $crmUrlHost, eg. site.ru/
if (mb_strpos($crmUrlHost, '/') === (mb_strlen($crmUrlHost) - 1))
{
$crmUrlHost = mb_substr($crmUrlHost, 0, -1);
}
$hServer = @fsockopen($crmUrlScheme.$crmUrlHost, $crmUrlPort, $errno, $errstr, 20);
if (!$hServer)
$errorMessage .= sprintf("[%s] %s", $errno, $errstr)."
";
$arResponseHeaders = array();
$responseBody = "";
if (empty($errorMessage))
{
$buffer = "POST /bitrix/components/bitrix/crm.config.external_sale.edit/bus.php HTTP/1.0\r\n";
$buffer .= sprintf("Host: %s:%s\r\n", $crmUrlHost, $crmUrlPort);
$buffer .= "Content-type: application/x-www-form-urlencoded; charset=UTF-8\r\n";
$buffer .= sprintf("Authorization: Basic %s\r\n", base64_encode($crmLogin.":".$crmPassword));
$buffer .= sprintf("Content-length: %s\r\n", ((function_exists('mb_strlen')? mb_strlen($body, 'latin1') : mb_strlen($body))));
$buffer .= $head;
$buffer .= "\r\n";
$buffer .= $body;
fputs($hServer, $buffer);
while ($line = fgets($hServer, 4096))
{
if ($line == "\r\n")
break;
$arResponseHeaders[] = trim($line);
}
if (count($arResponseHeaders) <= 0)
$errorMessage .= GetMessage("SPTEN_SCRM_ERR_CONNECT")."
";
}
if (empty($errorMessage))
{
$contentLength = null;
foreach ($arResponseHeaders as $value)
{
if (preg_match('#Content-Length:\s*([0-9]*)#i', $value, $arMatches))
{
$contentLength = intval($arMatches[1]);
break;
}
if (preg_match('#HTTP/1\.1\s+204#i', $value))
{
$contentLength = 0;
break;
}
}
if ($contentLength === 0)
{
}
elseif ($contentLength > 0)
{
$lb = $contentLength;
while ($lb > 0)
{
$responseBody .= fread($hServer, $lb);
$lb = $contentLength - ((function_exists('mb_strlen')? mb_strlen($responseBody, 'latin1') : mb_strlen($responseBody)));
}
}
else
{
stream_set_timeout($hServer, 0);
while (!feof($hServer))
{
$responseBody .= fread($hServer, 4096);
if (mb_substr($responseBody, -9) == "\r\n\r\n0\r\n\r\n")
{
$responseBody = mb_substr($responseBody, 0, -9);
break;
}
}
stream_set_timeout($hServer, 20);
}
fclose($hServer);
}
return array($arResponseHeaders, $responseBody);
}
if (empty($errorMessage))
{
$body = array(
"SERVER" => ($GLOBALS["APPLICATION"]->IsHTTPS() ? "https" : "http")."://".$_SERVER["HTTP_HOST"],
"LOGIN" => $saleLogin,
"PASSWORD" => $salePassword,
"SITE_NAME" => COption::GetOptionString("main", "site_name", ""),
);
$body1 = http_build_query($body);
if (!defined("BX_UTF"))
$body1 = CharsetConverter::ConvertCharset($body1, SITE_CHARSET, "UTF-8");
list($arResponseHeaders, $responseBody) = __CrmSaleQuery($crmUrlScheme, $crmUrlHost, $crmUrlPort, $crmLogin, $crmPassword, "", $body1, $errorMessageTmp);
if (!empty($errorMessageTmp))
$errorMessage .= $errorMessageTmp;
}
if (empty($errorMessage))
{
$isUTF = CUtil::DetectUTF8($responseBody);
if (!$isUTF && SITE_CHARSET == "UTF-8")
{
$responseBody = CharsetConverter::ConvertCharset($responseBody, SITE_CHARSET, "CP1251");
}
if (mb_strpos($responseBody, "bsid=") !== false)
{
$p1 = mb_strpos($responseBody, "bsid=");
$p2 = mb_strpos($responseBody, ";", $p1);
$body["sessid"] = mb_substr($responseBody, $p1 + 5, $p2 - $p1 - 5);
$body1 = http_build_query($body);
if (!defined("BX_UTF"))
$body1 = CharsetConverter::ConvertCharset($body1, SITE_CHARSET, "UTF-8");
$cookies = [];
$cookieRe = '/^Set-Cookie:(.+?)=(.+?);/';
foreach ($arResponseHeaders as $h)
{
if (preg_match($cookieRe, $h, $m))
{
$cookies[] = trim($m[1]) . '=' . trim($m[2]);
}
}
$head1 = "Cookie: " . join("; ", $cookies) . "\r\n";
list($arResponseHeaders, $responseBody) = __CrmSaleQuery($crmUrlScheme, $crmUrlHost, $crmUrlPort, $crmLogin, $crmPassword, $head1, $body1, $errorMessageTmp);
if (!empty($errorMessageTmp))
$errorMessage .= $errorMessageTmp;
}
}
if (empty($errorMessage))
{
list($httpVersion, $statusCode, $reasonPhrase) = explode(' ', $arResponseHeaders[0], 3);
$responseBody = ltrim($responseBody);
if(!defined("BX_UTF"))
$responseBody = $APPLICATION->ConvertCharset($responseBody, "UTF-8", LANG_CHARSET);
if (($statusCode == 401) || (mb_strpos($responseBody, "form_auth") !== false) || (mb_strpos($responseBody, "Permission denied") !== false))
{
$errorMessage .= GetMessage("SPTEN_SCRM_ERR_AUTH")."
";
}
else
{
$rcode = ToUpper(mb_substr($responseBody, 0, 2));
if ($rcode == "ER")
$errorMessage .= mb_substr($responseBody, 2)."
";
elseif ($rcode != "OK")
$errorMessage .= GetMessage("SPTEN_SCRM_ERR_ANSWER")."
";
else
$crmUrl4Import = trim(mb_substr($responseBody, 2));
}
}
if (empty($errorMessage))
{
if ($createNewSaleUser)
{
$APPLICATION->SetGroupRight("sale", $groupId, "W", false);
CGroup::SetModulePermission($groupId, "catalog", CTask::GetIdByLetter("R", "catalog"));
CGroup::SetModulePermission($groupId, "main", CTask::GetIdByLetter("R", "main"));
if (Loader::includeModule('iblock') && Loader::includeModule('catalog'))
{
$catalogs = array();
$iterator = Catalog\CatalogIblockTable::getList(array(
'select' => array('IBLOCK_ID', 'PRODUCT_IBLOCK_ID')
));
while ($row = $iterator->fetch())
{
$row['IBLOCK_ID'] = (int)$row['IBLOCK_ID'];
$catalogs[$row['IBLOCK_ID']] = $row['IBLOCK_ID'];
$row['PRODUCT_IBLOCK_ID'] = (int)$row['PRODUCT_IBLOCK_ID'];
if ($row['PRODUCT_IBLOCK_ID'] > 0)
$catalogs[$row['PRODUCT_IBLOCK_ID']] = $row['PRODUCT_IBLOCK_ID'];
}
unset($row, $iterator);
if (!empty($catalogs))
{
$iblockObject = new \CIBlock();
$rightsId = null;
$row = Main\TaskTable::getList(array(
'select' => array('ID'),
'filter' => array('=LETTER' => 'S', '=MODULE_ID' => 'iblock', '=SYS' => 'Y')
))->fetch();
if (!empty($row))
$rightsId = $row['ID'];
unset($row);
$groupCode = 'G'.$groupId;
foreach ($catalogs as $id)
{
$rightsMode = \CIBlock::GetArrayByID($id, 'RIGHTS_MODE');
if ($rightsMode == Iblock\IblockTable::RIGHTS_SIMPLE)
{
$rights = \CIBlock::GetGroupPermissions($id);
$rights[$groupId] = 'S';
\CIBlock::SetPermission($id, $rights);
}
elseif ($rightsMode == Iblock\IblockTable::RIGHTS_EXTENDED && $rightsId !== null)
{
$rightsObject = new \CIBlockRights($id);
$rights = $rightsObject->GetRights();
$rights['n0'] = array(
'GROUP_CODE' => $groupCode,
'DO_INHERIT' => 'Y',
'IS_INHERITED' => 'N',
'OVERWRITED' => 0,
'TASK_ID' => $rightsId,
'XML_ID' => null,
'ENTITY_TYPE' => 'iblock',
'ENTITY_ID' => $id
);
$rightsObject->SetRights($rights);
}
}
unset($rights, $id);
unset($iblockObject);
}
unset($catalogs);
}
$opt = COption::GetOptionString("sale", "1C_SALE_GROUP_PERMISSIONS", "");
$opt .= (($opt != "") ? "," : "").$groupId;
COption::SetOptionString("sale", "1C_SALE_GROUP_PERMISSIONS", $opt);
function GetAccessArrTmp()
{
$PERM = array();
@include($_SERVER["DOCUMENT_ROOT"]."/bitrix/.access.php");
return $PERM;
}
$arFPermsTmp = GetAccessArrTmp();
$arFPerms = (array_key_exists("admin", $arFPermsTmp)) ? $arFPermsTmp["admin"] : array();
$arFPerms[$groupId.""] = "R";
$APPLICATION->SetFileAccessPermission(array(SITE_ID, "/bitrix/admin"), $arFPerms);
}
LocalRedirect($APPLICATION->GetCurPage()."?lang=".LANGUAGE_ID."&success=Y&crm_imp_url=".urlencode(($crmUrlScheme == 'ssl://' ? "https" : "http")."://".$crmUrlHost.":".$crmUrlPort.$crmUrl4Import)."&crm_url=".urlencode(($crmUrlScheme == 'ssl://' ? "https" : "http")."://".$crmUrlHost.":".$crmUrlPort));
}
else
{
if ($createNewSaleUser)
{
if ($groupId > 0)
{
$group = new CGroup();
$group->Delete($groupId);
}
if ($userId > 0)
{
CUser::Delete($userId);
}
}
}
}
if ($_SERVER["REQUEST_METHOD"] == "GET" && $_REQUEST["clear_crm_stat"] == "Y" && $saleModulePermissions >= "W" && check_bitrix_sessid())
{
if (!isset($_REQUEST["clear_crm_stat_url"]))
{
COption::SetOptionString("sale", "~crm_integration", "");
}
else
{
$ar = array();
foreach ($arCrmIntegration as $k => $v)
{
if ($k != $_REQUEST["clear_crm_stat_url"])
$ar[$k] = $v;
}
COption::SetOptionString("sale", "~crm_integration", serialize($ar));
}
LocalRedirect($APPLICATION->GetCurPage()."?lang=".LANGUAGE_ID);
}
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/prolog.php");
$APPLICATION->SetTitle(GetMessage("SPTEN_CRM_TITLE"));
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
CAdminMessage::ShowMessage($errorMessage);
if ($_REQUEST["success"] == "Y")
{
$crmIntegrationUrl = htmlspecialcharsbx($_REQUEST["crm_url"]);
$crmIntegrationImpUrl = htmlspecialcharsbx($_REQUEST["crm_imp_url"]);
$find = "/^(http:\/\/|https:\/\/|ssl:\/\/)/i";
if(!preg_match($find, $crmIntegrationUrl, $res) && !empty($_REQUEST["crm_url"]))
$crmIntegrationUrl = "http://".$crmIntegrationUrl;
if(!preg_match($find, $crmIntegrationImpUrl, $res) && !empty($_REQUEST["crm_imp_url"]))
$crmIntegrationImpUrl = "http://".$crmIntegrationImpUrl;
$successMessage = GetMessage(
"SPTEN_SCRM_SUCCESS_MESS",
array(
"#URL#" => $crmIntegrationUrl,
"#PATH#" => $crmIntegrationUrl."/crm/configs/external_sale/",
"#IMP#" => !empty($crmIntegrationImpUrl) ? $crmIntegrationImpUrl : $crmIntegrationUrl."/crm/configs/external_sale/",
)
);
$successMessage .= '
Fatal error: Uncaught Error: Call to undefined function GetMessage() in D:\ktt\ttepla.com\public_html\bitrix\modules\sale\admin\crm.php:516
Stack trace:
#0 {main}
thrown in D:\ktt\ttepla.com\public_html\bitrix\modules\sale\admin\crm.php on line 516