From 9a3ec002d6cf75d7b551a5894f06fdee87c57d1b Mon Sep 17 00:00:00 2001 From: Grisha Pomadchin Date: Thu, 15 Aug 2013 19:40:21 +0400 Subject: [PATCH] added method --- intaro.intarocrm/install/index.php | 1795 ++++++++++++++-------------- 1 file changed, 907 insertions(+), 888 deletions(-) diff --git a/intaro.intarocrm/install/index.php b/intaro.intarocrm/install/index.php index b18be419..86ae6487 100755 --- a/intaro.intarocrm/install/index.php +++ b/intaro.intarocrm/install/index.php @@ -1,888 +1,907 @@ -INSTALL_PATH = $path; - include($path."/version.php"); - $this->MODULE_VERSION = $arModuleVersion["VERSION"]; - $this->MODULE_VERSION_DATE = $arModuleVersion["VERSION_DATE"]; - $this->MODULE_NAME = GetMessage('MODULE_NAME'); - $this->MODULE_DESCRIPTION = GetMessage('MODULE_DESCRIPTION'); - $this->PARTNER_NAME = GetMessage('MODULE_PARTNER_NAME'); - $this->PARTNER_URI = GetMessage('MODULE_PARTNER_URI'); - } - - /** - * Functions DoInstall and DoUninstall are - * All other functions are optional - */ - - function DoInstall() - { - global $APPLICATION, $step, $arResult; - - if (!in_array('curl', get_loaded_extensions())) { - $APPLICATION->ThrowException( GetMessage("INTAROCRM_CURL_ERR") ); - return false; - } - - include($this->INSTALL_PATH . '/../classes/general/RestApi.php'); - include($this->INSTALL_PATH . '/../classes/general/ICrmOrderActions.php'); - include($this->INSTALL_PATH . '/../classes/general/ICMLLoader.php'); - - $step = intval($_REQUEST['step']); - - if ($step <= 1) { - if(!CModule::IncludeModule("sale")) { - $arResult['errCode'] = 'ERR_SALE'; - } - - if(!CModule::IncludeModule("iblock")) { - $arResult['errCode'] = 'ERR_IBLOCK'; - } - - if(!CModule::IncludeModule("catalog")) { - $arResult['errCode'] = 'ERR_CATALOG'; - } - - $APPLICATION->IncludeAdminFile( - GetMessage('MODULE_INSTALL_TITLE'), - $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step1.php' - ); - } else if ($step == 2) { - if(!CModule::IncludeModule("sale")) { - $arResult['errCode'] = 'ERR_SALE'; - } - - if(!CModule::IncludeModule("iblock")) { - $arResult['errCode'] = 'ERR_IBLOCK'; - } - - if(!CModule::IncludeModule("catalog")) { - $arResult['errCode'] = 'ERR_CATALOG'; - } - - if(isset($arResult['errCode']) && $arResult['errCode']) { - $APPLICATION->IncludeAdminFile( - GetMessage('MODULE_INSTALL_TITLE'), - $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step1.php' - ); - return; - } - - if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') - && isset($_POST['ajax']) && ($_POST['ajax'] == 1)) { - - $api_host = COption::GetOptionString($this->MODULE_ID, $this->CRM_API_HOST_OPTION, 0); - $api_key = COption::GetOptionString($this->MODULE_ID, $this->CRM_API_KEY_OPTION, 0); - $this->INTARO_CRM_API = new \IntaroCrm\RestApi($api_host, $api_key); - - //prepare crm lists - $arResult['orderTypesList'] = $this->INTARO_CRM_API->orderTypesList(); - - if ((int) $this->INTARO_CRM_API->getStatusCode() != 200) { - $APPLICATION->RestartBuffer(); - header('Content-Type: application/x-javascript; charset=' . LANG_CHARSET); - die(json_encode(array("success" => false))); - } - - $arResult['deliveryTypesList'] = $this->INTARO_CRM_API->deliveryTypesList(); - $arResult['paymentTypesList'] = $this->INTARO_CRM_API->paymentTypesList(); - $arResult['paymentStatusesList'] = $this->INTARO_CRM_API->paymentStatusesList(); // --statuses - $arResult['paymentList'] = $this->INTARO_CRM_API->orderStatusesList(); - $arResult['paymentGroupList'] = $this->INTARO_CRM_API->orderStatusGroupsList(); // -- statuses groups - - //bitrix orderTypesList -- personTypes - $dbOrderTypesList = CSalePersonType::GetList( - array( - "SORT" => "ASC", - "NAME" => "ASC" - ), - array( - "ACTIVE" => "Y", - ), - false, - false, - array() - ); - - - //form order types ids arr - $orderTypesArr = array(); - if ($arOrderTypesList = $dbOrderTypesList->Fetch()) { - do { - $arResult['bitrixOrderTypesList'][] = $arOrderTypesList; - $orderTypesArr[$arOrderTypesList['ID']] = htmlspecialchars(trim($_POST['order-type-' . $arOrderTypesList['ID']])); - } while ($arOrderTypesList = $dbOrderTypesList->Fetch()); - } - - //bitrix deliveryTypesList - $dbDeliveryTypesList = CSaleDelivery::GetList( - array( - "SORT" => "ASC", - "NAME" => "ASC" - ), - array( - "ACTIVE" => "Y", - ), - false, - false, - array() - ); - - //form delivery types ids arr - $deliveryTypesArr = array(); - if ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()) { - do { - $arResult['bitrixDeliveryTypesList'][] = $arDeliveryTypesList; - $deliveryTypesArr[$arDeliveryTypesList['ID']] = htmlspecialchars(trim($_POST['delivery-type-' . $arDeliveryTypesList['ID']])); - } while ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()); - } - - //bitrix paymentTypesList - $dbPaymentTypesList = CSalePaySystem::GetList( - array( - "SORT" => "ASC", - "NAME" => "ASC" - ), - array( - "ACTIVE" => "Y" - ) - ); - - //form payment types ids arr - $paymentTypesArr = array(); - if ($arPaymentTypesList = $dbPaymentTypesList->Fetch()) { - do { - $arResult['bitrixPaymentTypesList'][] = $arPaymentTypesList; - $paymentTypesArr[$arPaymentTypesList['ID']] = htmlspecialchars(trim($_POST['payment-type-' . $arPaymentTypesList['ID']])); - } while ($arPaymentTypesList = $dbPaymentTypesList->Fetch()); - } - - //bitrix paymentStatusesList - $dbPaymentStatusesList = CSaleStatus::GetList( - array( - "SORT" => "ASC", - "NAME" => "ASC" - ), - array( - "LID" => "ru", //ru - "ACTIVE" => "Y" - ) - ); - - //form payment statuses ids arr - $paymentStatusesArr['Y'] = htmlspecialchars(trim($_POST['payment-status-Y'])); - if ($arPaymentStatusesList = $dbPaymentStatusesList->Fetch()) { - do { - $arResult['bitrixPaymentStatusesList'][] = $arPaymentStatusesList; - $paymentStatusesArr[$arPaymentStatusesList['ID']] = htmlspecialchars(trim($_POST['payment-status-' . $arPaymentStatusesList['ID']])); - } while ($arPaymentStatusesList = $dbPaymentStatusesList->Fetch()); - } - - $arResult['bitrixPaymentStatusesList'][] = array( - 'ID' => 'Y', - 'NAME' => GetMessage('CANCELED') - ); - - //form payment ids arr - $paymentArr = array(); - $paymentArr['Y'] = htmlspecialchars(trim($_POST['payment-Y'])); - $paymentArr['N'] = htmlspecialchars(trim($_POST['payment-N'])); - - COption::SetOptionString($this->MODULE_ID, $this->CRM_ORDER_TYPES_ARR, serialize($orderTypesArr)); - COption::SetOptionString($this->MODULE_ID, $this->CRM_DELIVERY_TYPES_ARR, serialize($deliveryTypesArr)); - COption::SetOptionString($this->MODULE_ID, $this->CRM_PAYMENT_TYPES, serialize($paymentTypesArr)); - COption::SetOptionString($this->MODULE_ID, $this->CRM_PAYMENT_STATUSES, serialize($paymentStatusesArr)); - COption::SetOptionString($this->MODULE_ID, $this->CRM_PAYMENT, serialize($paymentArr)); - - // generate updated select inputs - $input = array(); - - foreach($arResult['bitrixDeliveryTypesList'] as $bitrixDeliveryType) { - $input['delivery-type-' . $bitrixDeliveryType['ID']] = - ''; - } - - foreach($arResult['bitrixPaymentTypesList'] as $bitrixPaymentType) { - $input['payment-type-' . $bitrixPaymentType['ID']] = - ''; - } - - foreach($arResult['bitrixPaymentStatusesList'] as $bitrixPaymentStatus) { - $input['payment-status-' . $bitrixPaymentStatus['ID']] = - ''; - } - - foreach($arResult['bitrixPaymentList'] as $bitrixPayment) { - $input['payment-' . $bitrixPayment['ID']] = - ''; - } - - foreach($arResult['bitrixOrderTypesList'] as $bitrixOrderType) { - $input['order-type-' . $bitrixOrderType['ID']] = - ''; - } - - $APPLICATION->RestartBuffer(); - header('Content-Type: application/x-javascript; charset='.LANG_CHARSET); - die(json_encode(array("success" => true, "result" => $input))); - } - - $api_host = htmlspecialchars(trim($_POST[$this->CRM_API_HOST_OPTION])); - $api_key = htmlspecialchars(trim($_POST[$this->CRM_API_KEY_OPTION])); - - // form correct url - $api_host = parse_url($api_host); - $api_host = $api_host['scheme'] . '://' . $api_host['host']; - - if(!$api_host || !$api_key) { - $arResult['errCode'] = 'ERR_FIELDS_API_HOST'; - $APPLICATION->IncludeAdminFile( - GetMessage('MODULE_INSTALL_TITLE'), - $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step1.php' - ); - return; - } - - $this->INTARO_CRM_API = new \IntaroCrm\RestApi($api_host, $api_key); - - $this->INTARO_CRM_API->paymentStatusesList(); - - //check connection & apiKey valid - if((int) $this->INTARO_CRM_API->getStatusCode() != 200) { - $arResult['errCode'] = 'ERR_' . $this->INTARO_CRM_API->getStatusCode(); - - $APPLICATION->IncludeAdminFile( - GetMessage('MODULE_INSTALL_TITLE'), - $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step1.php' - ); - - return; - } - - COption::SetOptionString($this->MODULE_ID, $this->CRM_API_HOST_OPTION, $api_host); - COption::SetOptionString($this->MODULE_ID, $this->CRM_API_KEY_OPTION, $api_key); - - //prepare crm lists - $arResult['orderTypesList'] = $this->INTARO_CRM_API->orderTypesList(); - $arResult['deliveryTypesList'] = $this->INTARO_CRM_API->deliveryTypesList(); - $arResult['paymentTypesList'] = $this->INTARO_CRM_API->paymentTypesList(); - $arResult['paymentStatusesList'] = $this->INTARO_CRM_API->paymentStatusesList(); // --statuses - $arResult['paymentList'] = $this->INTARO_CRM_API->orderStatusesList(); - $arResult['paymentGroupList'] = $this->INTARO_CRM_API->orderStatusGroupsList(); // -- statuses groups - - //bitrix orderTypesList -- personTypes - $dbOrderTypesList = CSalePersonType::GetList( - array( - "SORT" => "ASC", - "NAME" => "ASC" - ), - array( - "ACTIVE" => "Y", - ), - false, - false, - array() - ); - - if ($arOrderTypesList = $dbOrderTypesList->Fetch()) { - do { - $arResult['bitrixOrderTypesList'][] = $arOrderTypesList; - } while ($arOrderTypesList = $dbOrderTypesList->Fetch()); - } - - //bitrix deliveryTypesList - $dbDeliveryTypesList = CSaleDelivery::GetList( - array( - "SORT" => "ASC", - "NAME" => "ASC" - ), - array( - "ACTIVE" => "Y", - ), - false, - false, - array() - ); - - if ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()) { - do { - $arResult['bitrixDeliveryTypesList'][] = $arDeliveryTypesList; - } while ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()); - } - - //bitrix paymentTypesList - $dbPaymentTypesList = CSalePaySystem::GetList( - array( - "SORT" => "ASC", - "NAME" => "ASC" - ), - array( - "ACTIVE" => "Y" - ) - ); - - if ($arPaymentTypesList = $dbPaymentTypesList->Fetch()) { - do { - $arResult['bitrixPaymentTypesList'][] = $arPaymentTypesList; - } while ($arPaymentTypesList = $dbPaymentTypesList->Fetch()); - } - - //bitrix paymentStatusesList --statuses - $dbPaymentStatusesList = CSaleStatus::GetList( - array( - "SORT" => "ASC", - "NAME" => "ASC" - ), - array( - "LID" => "ru", //ru - "ACTIVE" => "Y" - ) - ); - - if ($arPaymentStatusesList = $dbPaymentStatusesList->Fetch()) { - do { - $arResult['bitrixPaymentStatusesList'][] = $arPaymentStatusesList; - } while ($arPaymentStatusesList = $dbPaymentStatusesList->Fetch()); - } - - $arResult['bitrixPaymentStatusesList'][] = array( - 'ID' => 'Y', - 'NAME' => GetMessage('CANCELED') - ); - - $APPLICATION->IncludeAdminFile( - GetMessage('MODULE_INSTALL_TITLE'), - $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step2.php' - ); - - } else if ($step == 3) { - if(!CModule::IncludeModule("sale")) { - //handler - } - - if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') - && isset($_POST['ajax']) && ($_POST['ajax'] == 1)) { - ICrmOrderActions::uploadOrders(); // each 50 - - $lastUpOrderId = COption::GetOptionString($this->MODULE_ID, $this->CRM_ORDER_LAST_ID, 0); - $countLeft = (int) CSaleOrder::GetList(array("ID" => "ASC"), array('>ID' => $lastUpOrderId), array()); - $countAll = (int) CSaleOrder::GetList(array("ID" => "ASC"), array(), array()); - - if(!isset($_POST['finish'])) - $finish = 0; - else - $finish = (int) $_POST['finish']; - - $percent = 100 - round(($countLeft * 100 / $countAll), 1); - - if(!$countLeft) - $finish = 1; - - $APPLICATION->RestartBuffer(); - header('Content-Type: application/x-javascript; charset='.LANG_CHARSET); - die(json_encode(array("finish" => $finish, "percent" => $percent))); - } - - if (isset($_POST['back']) && $_POST['back']) { - $APPLICATION->IncludeAdminFile( - GetMessage('MODULE_INSTALL_TITLE'), - $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step1.php' - ); - } - - //bitrix orderTypesList -- personTypes - $dbOrderTypesList = CSalePersonType::GetList( - array( - "SORT" => "ASC", - "NAME" => "ASC" - ), - array( - "ACTIVE" => "Y", - ), - false, - false, - array() - ); - - //form order types ids arr - $orderTypesArr = array(); - if ($arOrderTypesList = $dbOrderTypesList->Fetch()) { - do { - $orderTypesArr[$arOrderTypesList['ID']] = htmlspecialchars(trim($_POST['order-type-' . $arOrderTypesList['ID']])); - } while ($arOrderTypesList = $dbOrderTypesList->Fetch()); - } - - //bitrix deliveryTypesList - $dbDeliveryTypesList = CSaleDelivery::GetList( - array( - "SORT" => "ASC", - "NAME" => "ASC" - ), - array( - "ACTIVE" => "Y", - ), - false, - false, - array() - ); - - //form delivery types ids arr - $deliveryTypesArr = array(); - if ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()) { - do { - $deliveryTypesArr[$arDeliveryTypesList['ID']] = htmlspecialchars(trim($_POST['delivery-type-' . $arDeliveryTypesList['ID']])); - } while ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()); - } - - //bitrix paymentTypesList - $dbPaymentTypesList = CSalePaySystem::GetList( - array( - "SORT" => "ASC", - "NAME" => "ASC" - ), - array( - "ACTIVE" => "Y" - ) - ); - - //form payment types ids arr - $paymentTypesArr = array(); - if ($arPaymentTypesList = $dbPaymentTypesList->Fetch()) { - do { - $paymentTypesArr[$arPaymentTypesList['ID']] = htmlspecialchars(trim($_POST['payment-type-' . $arPaymentTypesList['ID']])); - } while ($arPaymentTypesList = $dbPaymentTypesList->Fetch()); - } - - //bitrix paymentStatusesList - $dbPaymentStatusesList = CSaleStatus::GetList( - array( - "SORT" => "ASC", - "NAME" => "ASC" - ), - array( - "LID" => "ru", //ru - "ACTIVE" => "Y" - ) - ); - - //form payment statuses ids arr - $paymentStatusesArr['Y'] = htmlspecialchars(trim($_POST['payment-status-Y'])); - - if ($arPaymentStatusesList = $dbPaymentStatusesList->Fetch()) { - do { - $paymentStatusesArr[$arPaymentStatusesList['ID']] = htmlspecialchars(trim($_POST['payment-status-' . $arPaymentStatusesList['ID']])); - } while ($arPaymentStatusesList = $dbPaymentStatusesList->Fetch()); - } - - //form payment ids arr - $paymentArr = array(); - $paymentArr['Y'] = htmlspecialchars(trim($_POST['payment-Y'])); - $paymentArr['N'] = htmlspecialchars(trim($_POST['payment-N'])); - - COption::SetOptionString($this->MODULE_ID, $this->CRM_ORDER_TYPES_ARR, serialize($orderTypesArr)); - COption::SetOptionString($this->MODULE_ID, $this->CRM_DELIVERY_TYPES_ARR, serialize($deliveryTypesArr)); - COption::SetOptionString($this->MODULE_ID, $this->CRM_PAYMENT_TYPES, serialize($paymentTypesArr)); - COption::SetOptionString($this->MODULE_ID, $this->CRM_PAYMENT_STATUSES, serialize($paymentStatusesArr)); - COption::SetOptionString($this->MODULE_ID, $this->CRM_PAYMENT, serialize($paymentArr)); - COption::SetOptionString($this->MODULE_ID, $this->CRM_ORDER_LAST_ID, 0); - - $APPLICATION->IncludeAdminFile( - GetMessage('MODULE_INSTALL_TITLE'), - $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step3.php' - ); - } else if ($step == 4) { - if(!CModule::IncludeModule("iblock")) { - $arResult['errCode'] = 'ERR_IBLOCK'; - } - - if(!CModule::IncludeModule("catalog")) { - $arResult['errCode'] = 'ERR_CATALOG'; - } - $APPLICATION->IncludeAdminFile( - GetMessage('MODULE_INSTALL_TITLE'), - $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step4.php' - ); - - } else if ($step == 5) { - - if(!CModule::IncludeModule("iblock")) { - $arResult['errCode'] = 'ERR_IBLOCK'; - } - - if(!CModule::IncludeModule("catalog")) { - $arResult['errCode'] = 'ERR_CATALOG'; - } - - if(isset($arResult['errCode']) && $arResult['errCode']) { - $APPLICATION->IncludeAdminFile( - GetMessage('MODULE_INSTALL_TITLE'), - $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step4.php' - ); - return; - } - - if (isset($_POST['back']) && $_POST['back']) { - $APPLICATION->IncludeAdminFile( - GetMessage('MODULE_INSTALL_TITLE'), - $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step3.php' - ); - } - - if(!isset($_POST['IBLOCK_EXPORT'])) - $arResult['errCode'] = 'ERR_FIELDS_IBLOCK'; - else - $iblocks = $_POST['IBLOCK_EXPORT']; - - if(!isset($_POST['IBLOCK_PROPERTY_ARTICLE'])) - $arResult['errCode'] = 'ERR_FIELDS_ARTICLE'; - else - $articleProperties = $_POST['IBLOCK_PROPERTY_ARTICLE']; - - if(!isset($_POST['SETUP_FILE_NAME'])) - $arResult['errCode'] = 'ERR_FIELDS_FILE'; - else - $filename = $_POST['SETUP_FILE_NAME']; - - - if(!isset($_POST['TYPE_LOADING'])) - $typeLoading = 0; - else - $typeLoading = $_POST['TYPE_LOADING']; - - if(!isset($_POST['SETUP_PROFILE_NAME']) ) - $profileName = ""; - else - $profileName = $_POST['SETUP_PROFILE_NAME']; - - if ($typeLoading != 'none' && $profileName == "") - $arResult['errCode'] = 'ERR_FIELDS_PROFILE'; - - if(isset($arResult['errCode']) && $arResult['errCode']) { - $APPLICATION->IncludeAdminFile( - GetMessage('MODULE_INSTALL_TITLE'), - $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step4.php' - ); - return; - } - - RegisterModule($this->MODULE_ID); - RegisterModuleDependences("sale", "OnSaleCancelOrder", $this->MODULE_ID, "ICrmOrderEvent", "onSaleCancelOrder"); - - if (isset($_POST['LOAD_NOW'])) { - - $loader = new ICMLLoader(); - $loader->iblocks = $iblocks; - $loader->articleProperties = $articleProperties; - $loader->filename = $filename; - $loader->application = $APPLICATION; - $loader->Load(); - - } - - if ($typeLoading == 'agent' || $typeLoading == 'cron') { - if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/catalog_export/' . $this->INTARO_CRM_EXPORT . '_run.php')) { - $dbProfile = CCatalogExport::GetList(array(), array("FILE_NAME" => $this->INTARO_CRM_EXPORT)); - - while ($arProfile = $dbProfile->Fetch()) { - if ($arProfile["DEFAULT_PROFILE"]!="Y") - CAgent::RemoveAgent("CCatalogExport::PreGenerateExport(".$arProfile['ID'].");", "catalog"); - } - } - $ar = $this->GetProfileSetupVars($iblocks, $articleProperties, $filename); - $PROFILE_ID = CCatalogExport::Add(array( - "LAST_USE" => false, - "FILE_NAME" => $this->INTARO_CRM_EXPORT, - "NAME" => $profileName, - "DEFAULT_PROFILE" => "N", - "IN_MENU" => "N", - "IN_AGENT" => "N", - "IN_CRON" => "N", - "NEED_EDIT" => "N", - "SETUP_VARS" => $ar - )); - if (intval($PROFILE_ID) <= 0) { - $arResult['errCode'] = 'ERR_IBLOCK'; - return; - } - if ($typeLoading == 'agent') { - - $dateAgent = new DateTime(); - $intAgent = new DateInterval('PT60S'); // PT60S - 60 sec; - $dateAgent->add($intAgent); - CAgent::AddAgent( - "CCatalogExport::PreGenerateExport(" . $PROFILE_ID . ");", - "catalog", - "N", - 86400, - $dateAgent->format('d.m.Y H:i:s'), // date of first check - "Y", // агент активен - $dateAgent->format('d.m.Y H:i:s'), // date of first start - 30 - ); - - CCatalogExport::Update($PROFILE_ID, array( - "IN_CRON" => ($arProfile["IN_AGENT"]=="Y" ? "N" : "Y") - )); - } else { - $agent_period = 24; - $agent_php_path = "/usr/local/php/bin/php"; - - if (!file_exists($_SERVER["DOCUMENT_ROOT"].CATALOG_PATH2EXPORTS."cron_frame.php")) - { - CheckDirPath($_SERVER["DOCUMENT_ROOT"].CATALOG_PATH2EXPORTS); - $tmp_file_size = filesize($_SERVER["DOCUMENT_ROOT"].CATALOG_PATH2EXPORTS_DEF."cron_frame.php"); - $fp = fopen($_SERVER["DOCUMENT_ROOT"].CATALOG_PATH2EXPORTS_DEF."cron_frame.php", "rb"); - $tmp_data = fread($fp, $tmp_file_size); - fclose($fp); - - $tmp_data = str_replace("#DOCUMENT_ROOT#", $_SERVER["DOCUMENT_ROOT"], $tmp_data); - $tmp_data = str_replace("#PHP_PATH#", $agent_php_path, $tmp_data); - - $fp = fopen($_SERVER["DOCUMENT_ROOT"].CATALOG_PATH2EXPORTS."cron_frame.php", "ab"); - fwrite($fp, $tmp_data); - fclose($fp); - } - - $cfg_data = ""; - if (file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/crontab/crontab.cfg")) - { - $cfg_file_size = filesize($_SERVER["DOCUMENT_ROOT"]."/bitrix/crontab/crontab.cfg"); - $fp = fopen($_SERVER["DOCUMENT_ROOT"]."/bitrix/crontab/crontab.cfg", "rb"); - $cfg_data = fread($fp, $cfg_file_size); - fclose($fp); - } - - CheckDirPath($_SERVER["DOCUMENT_ROOT"].CATALOG_PATH2EXPORTS."logs/"); - - if ($arProfile["IN_CRON"]=="Y") - { - // remove - $cfg_data = preg_replace("#^.*?".preg_quote(CATALOG_PATH2EXPORTS)."cron_frame.php +".$PROFILE_ID." *>.*?$#im", "", $cfg_data); - } - else - { - $strTime = "0 */".$agent_period." * * * "; - if (strlen($cfg_data)>0) - $cfg_data .= "\n"; - - $cfg_data .= $strTime.$agent_php_path." -f ".$_SERVER["DOCUMENT_ROOT"].CATALOG_PATH2EXPORTS."cron_frame.php ".$PROFILE_ID." >".$_SERVER["DOCUMENT_ROOT"].CATALOG_PATH2EXPORTS."logs/".$PROFILE_ID.".txt\n"; - } - - CCatalogExport::Update($PROFILE_ID, array( - "IN_CRON" => ($arProfile["IN_CRON"]=="Y" ? "N" : "Y") - )); - - CheckDirPath($_SERVER["DOCUMENT_ROOT"]."/bitrix/crontab/"); - $cfg_data = preg_replace("#[\r\n]{2,}#im", "\n", $cfg_data); - $fp = fopen($_SERVER["DOCUMENT_ROOT"]."/bitrix/crontab/crontab.cfg", "wb"); - fwrite($fp, $cfg_data); - fclose($fp); - - $arRetval = array(); - @exec("crontab ".$_SERVER["DOCUMENT_ROOT"]."/bitrix/crontab/crontab.cfg", $arRetval, $return_var); - - } - } - - // - - //agent - - $dateAgent = new DateTime(); - $intAgent = new DateInterval('PT60S'); // PT60S - 60 sec; - $dateAgent->add($intAgent); - - CAgent::AddAgent( - "ICrmOrderActions::uploadOrdersAgent();", - $this->MODULE_ID, - "N", - 600, // interval - 10 mins - $dateAgent->format('d.m.Y H:i:s'), // date of first check - "Y", // агент активен - $dateAgent->format('d.m.Y H:i:s'), // date of first start - 30 - ); - - $this->CopyFiles(); - - $APPLICATION->IncludeAdminFile( - GetMessage('MODULE_INSTALL_TITLE'), - $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step5.php' - ); - } - } - - function DoUninstall() { - global $APPLICATION; - - CAgent::RemoveAgent("ICrmOrderActions::uploadOrdersAgent();", $this->MODULE_ID); - - COption::RemoveOption($this->MODULE_ID, $this->CRM_API_HOST_OPTION); - COption::RemoveOption($this->MODULE_ID, $this->CRM_API_KEY_OPTION); - COption::RemoveOption($this->MODULE_ID, $this->CRM_DELIVERY_TYPES_ARR); - COption::RemoveOption($this->MODULE_ID, $this->CRM_PAYMENT_TYPES); - COption::RemoveOption($this->MODULE_ID, $this->CRM_PAYMENT_STATUSES); - COption::RemoveOption($this->MODULE_ID, $this->CRM_PAYMENT); - COption::RemoveOption($this->MODULE_ID, $this->CRM_ORDER_LAST_ID); - - UnRegisterModuleDependences("sale", "OnSalePayOrder", $this->MODULE_ID, "ICrmOrderEvent", "onSalePayOrder"); - UnRegisterModuleDependences("sale", "OnSaleCancelOrder", $this->MODULE_ID, "ICrmOrderEvent", "onSaleCancelOrder"); - - $this->DeleteFiles(); - - UnRegisterModule($this->MODULE_ID); - - $APPLICATION->IncludeAdminFile( - GetMessage('MODULE_UNINSTALL_TITLE'), - $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/unstep1.php' - ); - - } - - function CopyFiles() { - CopyDirFiles( - $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/export/', - $_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/include/catalog_export/', - true, true - ); - } - - function DeleteFiles() { - unlink($_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/include/catalog_export/intarocrm_run.php'); - unlink($_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/include/catalog_export/intarocrm_setup.php'); - } -} +INSTALL_PATH = $path; + include($path."/version.php"); + $this->MODULE_VERSION = $arModuleVersion["VERSION"]; + $this->MODULE_VERSION_DATE = $arModuleVersion["VERSION_DATE"]; + $this->MODULE_NAME = GetMessage('MODULE_NAME'); + $this->MODULE_DESCRIPTION = GetMessage('MODULE_DESCRIPTION'); + $this->PARTNER_NAME = GetMessage('MODULE_PARTNER_NAME'); + $this->PARTNER_URI = GetMessage('MODULE_PARTNER_URI'); + } + + /** + * Functions DoInstall and DoUninstall are + * All other functions are optional + */ + + function DoInstall() + { + global $APPLICATION, $step, $arResult; + + if (!in_array('curl', get_loaded_extensions())) { + $APPLICATION->ThrowException( GetMessage("INTAROCRM_CURL_ERR") ); + return false; + } + + include($this->INSTALL_PATH . '/../classes/general/RestApi.php'); + include($this->INSTALL_PATH . '/../classes/general/ICrmOrderActions.php'); + include($this->INSTALL_PATH . '/../classes/general/ICMLLoader.php'); + + $step = intval($_REQUEST['step']); + + if ($step <= 1) { + if(!CModule::IncludeModule("sale")) { + $arResult['errCode'] = 'ERR_SALE'; + } + + if(!CModule::IncludeModule("iblock")) { + $arResult['errCode'] = 'ERR_IBLOCK'; + } + + if(!CModule::IncludeModule("catalog")) { + $arResult['errCode'] = 'ERR_CATALOG'; + } + + $APPLICATION->IncludeAdminFile( + GetMessage('MODULE_INSTALL_TITLE'), + $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step1.php' + ); + } else if ($step == 2) { + if(!CModule::IncludeModule("sale")) { + $arResult['errCode'] = 'ERR_SALE'; + } + + if(!CModule::IncludeModule("iblock")) { + $arResult['errCode'] = 'ERR_IBLOCK'; + } + + if(!CModule::IncludeModule("catalog")) { + $arResult['errCode'] = 'ERR_CATALOG'; + } + + if(isset($arResult['errCode']) && $arResult['errCode']) { + $APPLICATION->IncludeAdminFile( + GetMessage('MODULE_INSTALL_TITLE'), + $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step1.php' + ); + return; + } + + if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') + && isset($_POST['ajax']) && ($_POST['ajax'] == 1)) { + + $api_host = COption::GetOptionString($this->MODULE_ID, $this->CRM_API_HOST_OPTION, 0); + $api_key = COption::GetOptionString($this->MODULE_ID, $this->CRM_API_KEY_OPTION, 0); + $this->INTARO_CRM_API = new \IntaroCrm\RestApi($api_host, $api_key); + + //prepare crm lists + $arResult['orderTypesList'] = $this->INTARO_CRM_API->orderTypesList(); + + if ((int) $this->INTARO_CRM_API->getStatusCode() != 200) { + $APPLICATION->RestartBuffer(); + header('Content-Type: application/x-javascript; charset=' . LANG_CHARSET); + die(json_encode(array("success" => false))); + } + + $arResult['deliveryTypesList'] = $this->INTARO_CRM_API->deliveryTypesList(); + $arResult['paymentTypesList'] = $this->INTARO_CRM_API->paymentTypesList(); + $arResult['paymentStatusesList'] = $this->INTARO_CRM_API->paymentStatusesList(); // --statuses + $arResult['paymentList'] = $this->INTARO_CRM_API->orderStatusesList(); + $arResult['paymentGroupList'] = $this->INTARO_CRM_API->orderStatusGroupsList(); // -- statuses groups + + //bitrix orderTypesList -- personTypes + $dbOrderTypesList = CSalePersonType::GetList( + array( + "SORT" => "ASC", + "NAME" => "ASC" + ), + array( + "ACTIVE" => "Y", + ), + false, + false, + array() + ); + + + //form order types ids arr + $orderTypesArr = array(); + if ($arOrderTypesList = $dbOrderTypesList->Fetch()) { + do { + $arResult['bitrixOrderTypesList'][] = $arOrderTypesList; + $orderTypesArr[$arOrderTypesList['ID']] = htmlspecialchars(trim($_POST['order-type-' . $arOrderTypesList['ID']])); + } while ($arOrderTypesList = $dbOrderTypesList->Fetch()); + } + + //bitrix deliveryTypesList + $dbDeliveryTypesList = CSaleDelivery::GetList( + array( + "SORT" => "ASC", + "NAME" => "ASC" + ), + array( + "ACTIVE" => "Y", + ), + false, + false, + array() + ); + + //form delivery types ids arr + $deliveryTypesArr = array(); + if ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()) { + do { + $arResult['bitrixDeliveryTypesList'][] = $arDeliveryTypesList; + $deliveryTypesArr[$arDeliveryTypesList['ID']] = htmlspecialchars(trim($_POST['delivery-type-' . $arDeliveryTypesList['ID']])); + } while ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()); + } + + //bitrix paymentTypesList + $dbPaymentTypesList = CSalePaySystem::GetList( + array( + "SORT" => "ASC", + "NAME" => "ASC" + ), + array( + "ACTIVE" => "Y" + ) + ); + + //form payment types ids arr + $paymentTypesArr = array(); + if ($arPaymentTypesList = $dbPaymentTypesList->Fetch()) { + do { + $arResult['bitrixPaymentTypesList'][] = $arPaymentTypesList; + $paymentTypesArr[$arPaymentTypesList['ID']] = htmlspecialchars(trim($_POST['payment-type-' . $arPaymentTypesList['ID']])); + } while ($arPaymentTypesList = $dbPaymentTypesList->Fetch()); + } + + //bitrix paymentStatusesList + $dbPaymentStatusesList = CSaleStatus::GetList( + array( + "SORT" => "ASC", + "NAME" => "ASC" + ), + array( + "LID" => "ru", //ru + "ACTIVE" => "Y" + ) + ); + + //form payment statuses ids arr + $paymentStatusesArr['Y'] = htmlspecialchars(trim($_POST['payment-status-Y'])); + if ($arPaymentStatusesList = $dbPaymentStatusesList->Fetch()) { + do { + $arResult['bitrixPaymentStatusesList'][] = $arPaymentStatusesList; + $paymentStatusesArr[$arPaymentStatusesList['ID']] = htmlspecialchars(trim($_POST['payment-status-' . $arPaymentStatusesList['ID']])); + } while ($arPaymentStatusesList = $dbPaymentStatusesList->Fetch()); + } + + $arResult['bitrixPaymentStatusesList'][] = array( + 'ID' => 'Y', + 'NAME' => GetMessage('CANCELED') + ); + + //form payment ids arr + $paymentArr = array(); + $paymentArr['Y'] = htmlspecialchars(trim($_POST['payment-Y'])); + $paymentArr['N'] = htmlspecialchars(trim($_POST['payment-N'])); + + COption::SetOptionString($this->MODULE_ID, $this->CRM_ORDER_TYPES_ARR, serialize($orderTypesArr)); + COption::SetOptionString($this->MODULE_ID, $this->CRM_DELIVERY_TYPES_ARR, serialize($deliveryTypesArr)); + COption::SetOptionString($this->MODULE_ID, $this->CRM_PAYMENT_TYPES, serialize($paymentTypesArr)); + COption::SetOptionString($this->MODULE_ID, $this->CRM_PAYMENT_STATUSES, serialize($paymentStatusesArr)); + COption::SetOptionString($this->MODULE_ID, $this->CRM_PAYMENT, serialize($paymentArr)); + + // generate updated select inputs + $input = array(); + + foreach($arResult['bitrixDeliveryTypesList'] as $bitrixDeliveryType) { + $input['delivery-type-' . $bitrixDeliveryType['ID']] = + ''; + } + + foreach($arResult['bitrixPaymentTypesList'] as $bitrixPaymentType) { + $input['payment-type-' . $bitrixPaymentType['ID']] = + ''; + } + + foreach($arResult['bitrixPaymentStatusesList'] as $bitrixPaymentStatus) { + $input['payment-status-' . $bitrixPaymentStatus['ID']] = + ''; + } + + foreach($arResult['bitrixPaymentList'] as $bitrixPayment) { + $input['payment-' . $bitrixPayment['ID']] = + ''; + } + + foreach($arResult['bitrixOrderTypesList'] as $bitrixOrderType) { + $input['order-type-' . $bitrixOrderType['ID']] = + ''; + } + + $APPLICATION->RestartBuffer(); + header('Content-Type: application/x-javascript; charset='.LANG_CHARSET); + die(json_encode(array("success" => true, "result" => $input))); + } + + $api_host = htmlspecialchars(trim($_POST[$this->CRM_API_HOST_OPTION])); + $api_key = htmlspecialchars(trim($_POST[$this->CRM_API_KEY_OPTION])); + + // form correct url + $api_host = parse_url($api_host); + $api_host = $api_host['scheme'] . '://' . $api_host['host']; + + if(!$api_host || !$api_key) { + $arResult['errCode'] = 'ERR_FIELDS_API_HOST'; + $APPLICATION->IncludeAdminFile( + GetMessage('MODULE_INSTALL_TITLE'), + $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step1.php' + ); + return; + } + + $this->INTARO_CRM_API = new \IntaroCrm\RestApi($api_host, $api_key); + + $this->INTARO_CRM_API->paymentStatusesList(); + + //check connection & apiKey valid + if((int) $this->INTARO_CRM_API->getStatusCode() != 200) { + $arResult['errCode'] = 'ERR_' . $this->INTARO_CRM_API->getStatusCode(); + + $APPLICATION->IncludeAdminFile( + GetMessage('MODULE_INSTALL_TITLE'), + $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step1.php' + ); + + return; + } + + COption::SetOptionString($this->MODULE_ID, $this->CRM_API_HOST_OPTION, $api_host); + COption::SetOptionString($this->MODULE_ID, $this->CRM_API_KEY_OPTION, $api_key); + + //prepare crm lists + $arResult['orderTypesList'] = $this->INTARO_CRM_API->orderTypesList(); + $arResult['deliveryTypesList'] = $this->INTARO_CRM_API->deliveryTypesList(); + $arResult['paymentTypesList'] = $this->INTARO_CRM_API->paymentTypesList(); + $arResult['paymentStatusesList'] = $this->INTARO_CRM_API->paymentStatusesList(); // --statuses + $arResult['paymentList'] = $this->INTARO_CRM_API->orderStatusesList(); + $arResult['paymentGroupList'] = $this->INTARO_CRM_API->orderStatusGroupsList(); // -- statuses groups + + //bitrix orderTypesList -- personTypes + $dbOrderTypesList = CSalePersonType::GetList( + array( + "SORT" => "ASC", + "NAME" => "ASC" + ), + array( + "ACTIVE" => "Y", + ), + false, + false, + array() + ); + + if ($arOrderTypesList = $dbOrderTypesList->Fetch()) { + do { + $arResult['bitrixOrderTypesList'][] = $arOrderTypesList; + } while ($arOrderTypesList = $dbOrderTypesList->Fetch()); + } + + //bitrix deliveryTypesList + $dbDeliveryTypesList = CSaleDelivery::GetList( + array( + "SORT" => "ASC", + "NAME" => "ASC" + ), + array( + "ACTIVE" => "Y", + ), + false, + false, + array() + ); + + if ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()) { + do { + $arResult['bitrixDeliveryTypesList'][] = $arDeliveryTypesList; + } while ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()); + } + + //bitrix paymentTypesList + $dbPaymentTypesList = CSalePaySystem::GetList( + array( + "SORT" => "ASC", + "NAME" => "ASC" + ), + array( + "ACTIVE" => "Y" + ) + ); + + if ($arPaymentTypesList = $dbPaymentTypesList->Fetch()) { + do { + $arResult['bitrixPaymentTypesList'][] = $arPaymentTypesList; + } while ($arPaymentTypesList = $dbPaymentTypesList->Fetch()); + } + + //bitrix paymentStatusesList --statuses + $dbPaymentStatusesList = CSaleStatus::GetList( + array( + "SORT" => "ASC", + "NAME" => "ASC" + ), + array( + "LID" => "ru", //ru + "ACTIVE" => "Y" + ) + ); + + if ($arPaymentStatusesList = $dbPaymentStatusesList->Fetch()) { + do { + $arResult['bitrixPaymentStatusesList'][] = $arPaymentStatusesList; + } while ($arPaymentStatusesList = $dbPaymentStatusesList->Fetch()); + } + + $arResult['bitrixPaymentStatusesList'][] = array( + 'ID' => 'Y', + 'NAME' => GetMessage('CANCELED') + ); + + $APPLICATION->IncludeAdminFile( + GetMessage('MODULE_INSTALL_TITLE'), + $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step2.php' + ); + + } else if ($step == 3) { + if(!CModule::IncludeModule("sale")) { + //handler + } + + if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') + && isset($_POST['ajax']) && ($_POST['ajax'] == 1)) { + ICrmOrderActions::uploadOrders(); // each 50 + + $lastUpOrderId = COption::GetOptionString($this->MODULE_ID, $this->CRM_ORDER_LAST_ID, 0); + $countLeft = (int) CSaleOrder::GetList(array("ID" => "ASC"), array('>ID' => $lastUpOrderId), array()); + $countAll = (int) CSaleOrder::GetList(array("ID" => "ASC"), array(), array()); + + if(!isset($_POST['finish'])) + $finish = 0; + else + $finish = (int) $_POST['finish']; + + $percent = 100 - round(($countLeft * 100 / $countAll), 1); + + if(!$countLeft) + $finish = 1; + + $APPLICATION->RestartBuffer(); + header('Content-Type: application/x-javascript; charset='.LANG_CHARSET); + die(json_encode(array("finish" => $finish, "percent" => $percent))); + } + + if (isset($_POST['back']) && $_POST['back']) { + $APPLICATION->IncludeAdminFile( + GetMessage('MODULE_INSTALL_TITLE'), + $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step1.php' + ); + } + + //bitrix orderTypesList -- personTypes + $dbOrderTypesList = CSalePersonType::GetList( + array( + "SORT" => "ASC", + "NAME" => "ASC" + ), + array( + "ACTIVE" => "Y", + ), + false, + false, + array() + ); + + //form order types ids arr + $orderTypesArr = array(); + if ($arOrderTypesList = $dbOrderTypesList->Fetch()) { + do { + $orderTypesArr[$arOrderTypesList['ID']] = htmlspecialchars(trim($_POST['order-type-' . $arOrderTypesList['ID']])); + } while ($arOrderTypesList = $dbOrderTypesList->Fetch()); + } + + //bitrix deliveryTypesList + $dbDeliveryTypesList = CSaleDelivery::GetList( + array( + "SORT" => "ASC", + "NAME" => "ASC" + ), + array( + "ACTIVE" => "Y", + ), + false, + false, + array() + ); + + //form delivery types ids arr + $deliveryTypesArr = array(); + if ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()) { + do { + $deliveryTypesArr[$arDeliveryTypesList['ID']] = htmlspecialchars(trim($_POST['delivery-type-' . $arDeliveryTypesList['ID']])); + } while ($arDeliveryTypesList = $dbDeliveryTypesList->Fetch()); + } + + //bitrix paymentTypesList + $dbPaymentTypesList = CSalePaySystem::GetList( + array( + "SORT" => "ASC", + "NAME" => "ASC" + ), + array( + "ACTIVE" => "Y" + ) + ); + + //form payment types ids arr + $paymentTypesArr = array(); + if ($arPaymentTypesList = $dbPaymentTypesList->Fetch()) { + do { + $paymentTypesArr[$arPaymentTypesList['ID']] = htmlspecialchars(trim($_POST['payment-type-' . $arPaymentTypesList['ID']])); + } while ($arPaymentTypesList = $dbPaymentTypesList->Fetch()); + } + + //bitrix paymentStatusesList + $dbPaymentStatusesList = CSaleStatus::GetList( + array( + "SORT" => "ASC", + "NAME" => "ASC" + ), + array( + "LID" => "ru", //ru + "ACTIVE" => "Y" + ) + ); + + //form payment statuses ids arr + $paymentStatusesArr['Y'] = htmlspecialchars(trim($_POST['payment-status-Y'])); + + if ($arPaymentStatusesList = $dbPaymentStatusesList->Fetch()) { + do { + $paymentStatusesArr[$arPaymentStatusesList['ID']] = htmlspecialchars(trim($_POST['payment-status-' . $arPaymentStatusesList['ID']])); + } while ($arPaymentStatusesList = $dbPaymentStatusesList->Fetch()); + } + + //form payment ids arr + $paymentArr = array(); + $paymentArr['Y'] = htmlspecialchars(trim($_POST['payment-Y'])); + $paymentArr['N'] = htmlspecialchars(trim($_POST['payment-N'])); + + COption::SetOptionString($this->MODULE_ID, $this->CRM_ORDER_TYPES_ARR, serialize($orderTypesArr)); + COption::SetOptionString($this->MODULE_ID, $this->CRM_DELIVERY_TYPES_ARR, serialize($deliveryTypesArr)); + COption::SetOptionString($this->MODULE_ID, $this->CRM_PAYMENT_TYPES, serialize($paymentTypesArr)); + COption::SetOptionString($this->MODULE_ID, $this->CRM_PAYMENT_STATUSES, serialize($paymentStatusesArr)); + COption::SetOptionString($this->MODULE_ID, $this->CRM_PAYMENT, serialize($paymentArr)); + COption::SetOptionString($this->MODULE_ID, $this->CRM_ORDER_LAST_ID, 0); + + $APPLICATION->IncludeAdminFile( + GetMessage('MODULE_INSTALL_TITLE'), + $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step3.php' + ); + } else if ($step == 4) { + if(!CModule::IncludeModule("iblock")) { + $arResult['errCode'] = 'ERR_IBLOCK'; + } + + if(!CModule::IncludeModule("catalog")) { + $arResult['errCode'] = 'ERR_CATALOG'; + } + $APPLICATION->IncludeAdminFile( + GetMessage('MODULE_INSTALL_TITLE'), + $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step4.php' + ); + + } else if ($step == 5) { + + if(!CModule::IncludeModule("iblock")) { + $arResult['errCode'] = 'ERR_IBLOCK'; + } + + if(!CModule::IncludeModule("catalog")) { + $arResult['errCode'] = 'ERR_CATALOG'; + } + + if(isset($arResult['errCode']) && $arResult['errCode']) { + $APPLICATION->IncludeAdminFile( + GetMessage('MODULE_INSTALL_TITLE'), + $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step4.php' + ); + return; + } + + if (isset($_POST['back']) && $_POST['back']) { + $APPLICATION->IncludeAdminFile( + GetMessage('MODULE_INSTALL_TITLE'), + $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step3.php' + ); + } + + if(!isset($_POST['IBLOCK_EXPORT'])) + $arResult['errCode'] = 'ERR_FIELDS_IBLOCK'; + else + $iblocks = $_POST['IBLOCK_EXPORT']; + + if(!isset($_POST['IBLOCK_PROPERTY_ARTICLE'])) + $arResult['errCode'] = 'ERR_FIELDS_ARTICLE'; + else + $articleProperties = $_POST['IBLOCK_PROPERTY_ARTICLE']; + + if(!isset($_POST['SETUP_FILE_NAME'])) + $arResult['errCode'] = 'ERR_FIELDS_FILE'; + else + $filename = $_POST['SETUP_FILE_NAME']; + + + if(!isset($_POST['TYPE_LOADING'])) + $typeLoading = 0; + else + $typeLoading = $_POST['TYPE_LOADING']; + + if(!isset($_POST['SETUP_PROFILE_NAME']) ) + $profileName = ""; + else + $profileName = $_POST['SETUP_PROFILE_NAME']; + + if ($typeLoading != 'none' && $profileName == "") + $arResult['errCode'] = 'ERR_FIELDS_PROFILE'; + + if(isset($arResult['errCode']) && $arResult['errCode']) { + $APPLICATION->IncludeAdminFile( + GetMessage('MODULE_INSTALL_TITLE'), + $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step4.php' + ); + return; + } + + RegisterModule($this->MODULE_ID); + RegisterModuleDependences("sale", "OnSaleCancelOrder", $this->MODULE_ID, "ICrmOrderEvent", "onSaleCancelOrder"); + + if (isset($_POST['LOAD_NOW'])) { + + $loader = new ICMLLoader(); + $loader->iblocks = $iblocks; + $loader->articleProperties = $articleProperties; + $loader->filename = $filename; + $loader->application = $APPLICATION; + $loader->Load(); + + } + + if ($typeLoading == 'agent' || $typeLoading == 'cron') { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/catalog_export/' . $this->INTARO_CRM_EXPORT . '_run.php')) { + $dbProfile = CCatalogExport::GetList(array(), array("FILE_NAME" => $this->INTARO_CRM_EXPORT)); + + while ($arProfile = $dbProfile->Fetch()) { + if ($arProfile["DEFAULT_PROFILE"]!="Y") + CAgent::RemoveAgent("CCatalogExport::PreGenerateExport(".$arProfile['ID'].");", "catalog"); + } + } + $ar = $this->GetProfileSetupVars($iblocks, $articleProperties, $filename); + $PROFILE_ID = CCatalogExport::Add(array( + "LAST_USE" => false, + "FILE_NAME" => $this->INTARO_CRM_EXPORT, + "NAME" => $profileName, + "DEFAULT_PROFILE" => "N", + "IN_MENU" => "N", + "IN_AGENT" => "N", + "IN_CRON" => "N", + "NEED_EDIT" => "N", + "SETUP_VARS" => $ar + )); + if (intval($PROFILE_ID) <= 0) { + $arResult['errCode'] = 'ERR_IBLOCK'; + return; + } + if ($typeLoading == 'agent') { + + $dateAgent = new DateTime(); + $intAgent = new DateInterval('PT60S'); // PT60S - 60 sec; + $dateAgent->add($intAgent); + CAgent::AddAgent( + "CCatalogExport::PreGenerateExport(" . $PROFILE_ID . ");", + "catalog", + "N", + 86400, + $dateAgent->format('d.m.Y H:i:s'), // date of first check + "Y", // агент активен + $dateAgent->format('d.m.Y H:i:s'), // date of first start + 30 + ); + + CCatalogExport::Update($PROFILE_ID, array( + "IN_CRON" => ($arProfile["IN_AGENT"]=="Y" ? "N" : "Y") + )); + } else { + $agent_period = 24; + $agent_php_path = "/usr/local/php/bin/php"; + + if (!file_exists($_SERVER["DOCUMENT_ROOT"].CATALOG_PATH2EXPORTS."cron_frame.php")) + { + CheckDirPath($_SERVER["DOCUMENT_ROOT"].CATALOG_PATH2EXPORTS); + $tmp_file_size = filesize($_SERVER["DOCUMENT_ROOT"].CATALOG_PATH2EXPORTS_DEF."cron_frame.php"); + $fp = fopen($_SERVER["DOCUMENT_ROOT"].CATALOG_PATH2EXPORTS_DEF."cron_frame.php", "rb"); + $tmp_data = fread($fp, $tmp_file_size); + fclose($fp); + + $tmp_data = str_replace("#DOCUMENT_ROOT#", $_SERVER["DOCUMENT_ROOT"], $tmp_data); + $tmp_data = str_replace("#PHP_PATH#", $agent_php_path, $tmp_data); + + $fp = fopen($_SERVER["DOCUMENT_ROOT"].CATALOG_PATH2EXPORTS."cron_frame.php", "ab"); + fwrite($fp, $tmp_data); + fclose($fp); + } + + $cfg_data = ""; + if (file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/crontab/crontab.cfg")) + { + $cfg_file_size = filesize($_SERVER["DOCUMENT_ROOT"]."/bitrix/crontab/crontab.cfg"); + $fp = fopen($_SERVER["DOCUMENT_ROOT"]."/bitrix/crontab/crontab.cfg", "rb"); + $cfg_data = fread($fp, $cfg_file_size); + fclose($fp); + } + + CheckDirPath($_SERVER["DOCUMENT_ROOT"].CATALOG_PATH2EXPORTS."logs/"); + + if ($arProfile["IN_CRON"]=="Y") + { + // remove + $cfg_data = preg_replace("#^.*?".preg_quote(CATALOG_PATH2EXPORTS)."cron_frame.php +".$PROFILE_ID." *>.*?$#im", "", $cfg_data); + } + else + { + $strTime = "0 */".$agent_period." * * * "; + if (strlen($cfg_data)>0) + $cfg_data .= "\n"; + + $cfg_data .= $strTime.$agent_php_path." -f ".$_SERVER["DOCUMENT_ROOT"].CATALOG_PATH2EXPORTS."cron_frame.php ".$PROFILE_ID." >".$_SERVER["DOCUMENT_ROOT"].CATALOG_PATH2EXPORTS."logs/".$PROFILE_ID.".txt\n"; + } + + CCatalogExport::Update($PROFILE_ID, array( + "IN_CRON" => ($arProfile["IN_CRON"]=="Y" ? "N" : "Y") + )); + + CheckDirPath($_SERVER["DOCUMENT_ROOT"]."/bitrix/crontab/"); + $cfg_data = preg_replace("#[\r\n]{2,}#im", "\n", $cfg_data); + $fp = fopen($_SERVER["DOCUMENT_ROOT"]."/bitrix/crontab/crontab.cfg", "wb"); + fwrite($fp, $cfg_data); + fclose($fp); + + $arRetval = array(); + @exec("crontab ".$_SERVER["DOCUMENT_ROOT"]."/bitrix/crontab/crontab.cfg", $arRetval, $return_var); + + } + } + + // + + //agent + + $dateAgent = new DateTime(); + $intAgent = new DateInterval('PT60S'); // PT60S - 60 sec; + $dateAgent->add($intAgent); + + CAgent::AddAgent( + "ICrmOrderActions::uploadOrdersAgent();", + $this->MODULE_ID, + "N", + 600, // interval - 10 mins + $dateAgent->format('d.m.Y H:i:s'), // date of first check + "Y", // агент активен + $dateAgent->format('d.m.Y H:i:s'), // date of first start + 30 + ); + + $this->CopyFiles(); + + $APPLICATION->IncludeAdminFile( + GetMessage('MODULE_INSTALL_TITLE'), + $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/step5.php' + ); + } + } + + function DoUninstall() { + global $APPLICATION; + + CAgent::RemoveAgent("ICrmOrderActions::uploadOrdersAgent();", $this->MODULE_ID); + + COption::RemoveOption($this->MODULE_ID, $this->CRM_API_HOST_OPTION); + COption::RemoveOption($this->MODULE_ID, $this->CRM_API_KEY_OPTION); + COption::RemoveOption($this->MODULE_ID, $this->CRM_DELIVERY_TYPES_ARR); + COption::RemoveOption($this->MODULE_ID, $this->CRM_PAYMENT_TYPES); + COption::RemoveOption($this->MODULE_ID, $this->CRM_PAYMENT_STATUSES); + COption::RemoveOption($this->MODULE_ID, $this->CRM_PAYMENT); + COption::RemoveOption($this->MODULE_ID, $this->CRM_ORDER_LAST_ID); + + UnRegisterModuleDependences("sale", "OnSalePayOrder", $this->MODULE_ID, "ICrmOrderEvent", "onSalePayOrder"); + UnRegisterModuleDependences("sale", "OnSaleCancelOrder", $this->MODULE_ID, "ICrmOrderEvent", "onSaleCancelOrder"); + + $this->DeleteFiles(); + + UnRegisterModule($this->MODULE_ID); + + $APPLICATION->IncludeAdminFile( + GetMessage('MODULE_UNINSTALL_TITLE'), + $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/unstep1.php' + ); + + } + + function CopyFiles() { + CopyDirFiles( + $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/' . $this->MODULE_ID . '/install/export/', + $_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/include/catalog_export/', + true, true + ); + } + + function DeleteFiles() { + unlink($_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/include/catalog_export/intarocrm_run.php'); + unlink($_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/include/catalog_export/intarocrm_setup.php'); + } + + function GetProfileSetupVars($iblocks, $articleProperties, $filename) { + // Get string like IBLOCK_EXPORT[0]=3& + // IBLOCK_EXPORT[1]=6& + // IBLOCK_PROPERTY_ARTICLE[0]=ARTICLE& + // IBLOCK_PROPERTY_ARTICLE[1]=ARTNUMBER& + // SETUP_FILE_NAME=%2Fbitrix%2Fcatalog_export%2Ftestintarocrm.xml + + //$arProfileFields = explode(",", $SETUP_FIELDS_LIST); + $strVars = ""; + foreach ($iblocks as $key => $val) + $strVars .= 'IBLOCK_EXPORT[' . $key . ']=' . $val . '&'; + foreach ($articleProperties as $key => $val) + $strVars .= 'IBLOCK_PROPERTY_ARTICLE[' . $key . ']=' . $val . '&'; + + $strVars .= 'SETUP_FILE_NAME=' . urlencode($filename); + + return $strVars; + } +}