From 535e665fc7fc2e1695d73301f093a320774d1a74 Mon Sep 17 00:00:00 2001 From: Ilyas Salikhov Date: Mon, 26 Aug 2013 10:33:51 +0400 Subject: [PATCH 1/2] v0.3.9 --- .../classes/general/ICMLLoader.php | 307 ++++++ intaro.intarocrm/description.ru | 2 + intaro.intarocrm/export/export_run.php | 19 + intaro.intarocrm/export/export_setup.php | 294 ++++++ .../install/export/intarocrm_run.php | 3 + .../install/export/intarocrm_setup.php | 3 + intaro.intarocrm/install/index.php | 940 ++++++++++++++++++ intaro.intarocrm/install/step4.php | 263 +++++ intaro.intarocrm/install/step5.php | 11 + intaro.intarocrm/install/version.php | 5 + .../lang/ru/icml_export_setup.php | 17 + intaro.intarocrm/lang/ru/install/index.php | 14 + intaro.intarocrm/lang/ru/install/step4.php | 24 + intaro.intarocrm/lang/ru/install/step5.php | 18 + intaro.intarocrm/updater.php | 10 + 15 files changed, 1930 insertions(+) create mode 100644 intaro.intarocrm/classes/general/ICMLLoader.php create mode 100644 intaro.intarocrm/description.ru create mode 100644 intaro.intarocrm/export/export_run.php create mode 100644 intaro.intarocrm/export/export_setup.php create mode 100644 intaro.intarocrm/install/export/intarocrm_run.php create mode 100644 intaro.intarocrm/install/export/intarocrm_setup.php create mode 100755 intaro.intarocrm/install/index.php create mode 100644 intaro.intarocrm/install/step4.php create mode 100644 intaro.intarocrm/install/step5.php create mode 100644 intaro.intarocrm/install/version.php create mode 100644 intaro.intarocrm/lang/ru/icml_export_setup.php create mode 100755 intaro.intarocrm/lang/ru/install/index.php create mode 100755 intaro.intarocrm/lang/ru/install/step4.php create mode 100755 intaro.intarocrm/lang/ru/install/step5.php create mode 100644 intaro.intarocrm/updater.php diff --git a/intaro.intarocrm/classes/general/ICMLLoader.php b/intaro.intarocrm/classes/general/ICMLLoader.php new file mode 100644 index 00000000..fa9a725a --- /dev/null +++ b/intaro.intarocrm/classes/general/ICMLLoader.php @@ -0,0 +1,307 @@ +iblocks) < count($this->articleProperties)) + return false; + + $categories = $this->GetCategories(); + + $offers = $this->GetOffers(); + + $this->PrepareFile(); + + $this->PreWriteCatalog(); + + $this->WriteCategories($categories); + $this->WriteOffers($offers); + + $this->PostWriteCatalog(); + + $this->CloseFile(); + return true; + + } + + protected function PrepareValue($text) + { + $newText = $this->application->ConvertCharset($text, LANG_CHARSET, $this->encoding); + $newText = strip_tags($newText); + $newText = str_replace("&", "&", $newText); + return $newText; + } + + protected function PrepareFile() + { + $fullFilename = $_SERVER["DOCUMENT_ROOT"] . $this->filename; + CheckDirPath($fullFilename); + + if (!$this->fp = @fopen($fullFilename, "w")) + return false; + else + return true; + } + + protected function PreWriteCatalog() + { + @fwrite($this->fp, "PrepareValue(Date("Y-m-d H:i:s")) . "\">\n"); + @fwrite($this->fp, "\n"); + + @fwrite($this->fp, "". $this->PrepareValue(COption::GetOptionString("main", "site_name", ""))."\n"); + + @fwrite($this->fp, "".$this->PrepareValue(COption::GetOptionString("main", "site_name", ""))."\n"); + + } + + protected function WriteCategories($categories) + { + @fwrite($this->fp, "\n"); + foreach ($categories as $category) { + @fwrite($this->fp, $category . "\n"); + } + @fwrite($this->fp, "\n"); + } + protected function WriteOffers($offers) + { + @fwrite($this->fp, "\n"); + foreach ($offers as $offer) { + @fwrite($this->fp, $offer . "\n"); + } + @fwrite($this->fp, "\n"); + } + + protected function PostWriteCatalog() + { + @fwrite($this->fp, "\n"); + @fwrite($this->fp, "\n"); + } + + protected function CloseFile() + { + @fclose($this->fp); + } + + + protected function GetCategories() + { + $categories = array(); + foreach ($this->iblocks as $id) + { + $filter = Array( + "IBLOCK_ID" => $id, + "ACTIVE" => "Y", + "IBLOCK_ACTIVE" => "Y", + "GLOBAL_ACTIVE" => "Y" + ); + + + $dbRes = CIBlockSection::GetList(array("left_margin" => "asc"), $filter); + while ($arRes = $dbRes->Fetch()) + { + $categories[] = $this->BuildCategory($arRes); + } + if (count($categories) == 0) + { + $arRes = Array(); + $arRes['ID'] = $this->mainSection + $id; + $arRes['IBLOCK_SECTION_ID'] = 0; + $arRes['NAME'] = "Основной раздел каталога"; + $categories[] = $this->BuildCategory($arRes); + } + } + return $categories; + + } + + protected function BuildCategory($arCategory) + { + return " + PrepareValue($arCategory["ID"]) . "\"" + . ( intval($arCategory["IBLOCK_SECTION_ID"] ) > 0 ? + " parentId=\"" . $this->PrepareValue($arCategory["IBLOCK_SECTION_ID"]) . "\"" + :"") + . ">" + . $this->PrepareValue($arCategory["NAME"]) + . ""; + + } + + protected function GetOffers() + { + $offers = Array(); + foreach ($this->iblocks as $key => $id) + { + + $iblock['IBLOCK_DB'] = CIBlock::GetByID($id)->Fetch(); + $iblockOffer = CCatalogSKU::GetInfoByProductIBlock($id); + + + $arSelect = Array ( + "ID", + "LID", + "IBLOCK_ID", + "IBLOCK_SECTION_ID", + "ACTIVE", + "ACTIVE_FROM", + "ACTIVE_TO", + "NAME", + "DETAIL_PICTURE", + "DETAIL_TEXT", + "DETAIL_PICTURE", + "LANG_DIR", + "DETAIL_PAGE_URL" + ); + + if (isset($this->articleProperties[$id])) + $arSelect[] = "PROPERTY_" . $this->articleProperties[$id]; + + + $filter = Array ( + "IBLOCK_ID" => $id, + "ACTIVE_DATE" => "Y", + "ACTIVE" => "Y", + "INCLUDE_SUBSECTIONS" => "Y" + ); + + $dbResProducts = CIBlockElement::GetList(array(), $filter, false, false, $arSelect); + while ($product = $dbResProducts->GetNextElement()) { + + $product = $product->GetFields(); + + $categoriesString = ""; + + + $existOffer = false; + if (!empty($iblockOffer['IBLOCK_ID'])) { + $arFilterOffer = Array ( + 'IBLOCK_ID' => $iblockOffer['IBLOCK_ID'], + 'PROPERTY_'.$iblockOffer['SKU_PROPERTY_ID'] => $product["ID"] + ); + $arSelectOffer = Array ( + 'ID', + "NAME", + "DETAIL_TEXT", + "DETAIL_PAGE_URL", + "DETAIL_PICTURE" + ); + if (isset($this->articleProperties[$id])) + $arSelectOffer[] = "PROPERTY_" . $this->articleProperties[$id]; + + $rsOffers = CIBlockElement::GetList(array(), $arFilterOffer, false, false, $arSelectOffer); + while ($arOffer = $rsOffers->GetNext()) { + + $dbResCategories = CIBlockElement::GetElementGroups($arOffer['ID'], true); + while ($arResCategory = $dbResCategories->Fetch()) { + $categoriesString .= "" . $arResCategory["ID"] . "\n"; + } + if ($categoriesString == '') + $categoriesString .= "" . ($this->mainSection + $id) . "\n"; + $offer = CCatalogProduct::GetByID($arOffer['ID']); + $arOffer['QUANTITY'] = $offer["QUANTITY"]; + + $arOffer['PRODUCT_ID'] = $product["ID"]; + $arOffer['DETAIL_PAGE_URL'] = $product["DETAIL_PAGE_URL"]; + $arOffer['DETAIL_PICTURE'] = $product["DETAIL_PICTURE"]; + $arOffer['PREVIEW_PICTURE'] = $product["PREVIEW_PICTURE"]; + $arOffer['PRODUCT_NAME'] = $product["NAME"]; + if (isset($this->articleProperties[$id])) + $arOffer['ARTICLE'] = $arOffer["PROPERTY_" . $this->articleProperties[$id] . "_VALUE"]; + + $dbPrice = GetCatalogProductPrice($arOffer["ID"],1); + $arOffer['PRICE'] = $dbPrice['PRICE']; + + + + $offers[] = $this->BuildOffer($arOffer, $categoriesString, $iblock); + $existOffer = true; + } + } + if (!$existOffer) { + $dbResCategories = CIBlockElement::GetElementGroups($product["ID"], true); + while ($arResCategory = $dbResCategories->Fetch()) { + $categoriesString .= "" . $arResCategory["ID"] . "\n"; + } + if ($categoriesString == '') + $categoriesString .= "" . ($this->mainSection + $id) . "\n"; + + $offer = CCatalogProduct::GetByID($product['ID']); + $product['QUANTITY'] = $offer["QUANTITY"]; + + $product['PRODUCT_ID'] = $product["ID"]; + $product['PRODUCT_NAME'] = $product["NAME"]; + if (isset($this->articleProperties[$id])) + $product['ARTICLE'] = $product["PROPERTY_" . $this->articleProperties[$id] . "_VALUE"]; + + $dbPrice = GetCatalogProductPrice($product["ID"],1); + $product['PRICE'] = $dbPrice['PRICE']; + + $offers[] = $this->BuildOffer($product, $categoriesString, $iblock); + } + } + } + return $offers; + } + + + protected function BuildOffer($arOffer, $categoriesString, $iblock) + { + $offer = ""; + $offer .= "PrepareValue($arOffer["ID"]) . "\" ". + "productId=\"" . $this->PrepareValue($arOffer["PRODUCT_ID"]) . "\" ". + "quantity=\"" . $this->PrepareValue(DoubleVal($arOffer['QUANTITY'])) . "\">\n"; + $offer .= "http://" . $this->PrepareValue($iblock['IBLOCK_DB']['SERVER_NAME']) . $this->PrepareValue($arOffer['DETAIL_PAGE_URL']) . "\n"; + + $offer .= "" . $this->PrepareValue($arOffer['PRICE']) . "\n"; + $offer .= $categoriesString; + + $detailPicture = intval($arOffer["DETAIL_PICTURE"]); + $previewPicture = intval($arOffer["PREVIEW_PICTURE"]); + + if ($detailPicture > 0 || $previewPicture > 0) + { + $picture = $detailPicture; + if ($picture <= 0) { + $picture = $previewPicture; + } + + if ($arFile = CFile::GetFileArray($picture)) + { + if(substr($arFile["SRC"], 0, 1) == "/") + $strFile = "http://" . $this->PrepareValue($iblock['IBLOCK_DB']['SERVER_NAME']) . implode("/", array_map("rawurlencode", explode("/", $arFile["SRC"]))); + elseif(preg_match("/^(http|https):\\/\\/(.*?)\\/(.*)\$/", $arFile["SRC"], $match)) + $strFile = "http://" . $this->PrepareValue($match[2]) . '/' . implode("/", array_map("rawurlencode", explode("/", $this->PrepareValue($match[3])))); + else + $strFile = $arFile["SRC"]; + $offer .= "" . $this->PrepareValue($strFile) . "\n"; + } + } + + $offer .= "" . $this->PrepareValue($arOffer["NAME"]) . "\n"; + + $offer .= "" . $this->PrepareValue($arOffer["EXTERNAL_ID"]) . "\n"; + $offer .= "" . $this->PrepareValue($arOffer["PRODUCT_NAME"]) . "\n"; + if (isset($arOffer["ARTICLE"])) + $offer .= "
" . $this->PrepareValue($arOffer["ARTICLE"]) . "
\n"; + + $offer.= "
\n"; + return $offer; + } + + + +} \ No newline at end of file diff --git a/intaro.intarocrm/description.ru b/intaro.intarocrm/description.ru new file mode 100644 index 00000000..de30c791 --- /dev/null +++ b/intaro.intarocrm/description.ru @@ -0,0 +1,2 @@ +* +* ICML- \ No newline at end of file diff --git a/intaro.intarocrm/export/export_run.php b/intaro.intarocrm/export/export_run.php new file mode 100644 index 00000000..ea2d7464 --- /dev/null +++ b/intaro.intarocrm/export/export_run.php @@ -0,0 +1,19 @@ +iblocks = $IBLOCK_EXPORT; +$loader->articleProperties = $IBLOCK_PROPERTY_ARTICLE; +$loader->filename = $SETUP_FILE_NAME; +$loader->application = $APPLICATION; +$loader->Load(); \ No newline at end of file diff --git a/intaro.intarocrm/export/export_setup.php b/intaro.intarocrm/export/export_setup.php new file mode 100644 index 00000000..dc544256 --- /dev/null +++ b/intaro.intarocrm/export/export_setup.php @@ -0,0 +1,294 @@ +1) +{ + + + if (count($IBLOCK_EXPORT) < count($IBLOCK_PROPERTY_ARTICLE)) + $arSetupErrors[] = GetMessage("ERROR_ARTICLE_NOT_SET"); + + if (strlen($SETUP_FILE_NAME)<=0) + { + $arSetupErrors[] = GetMessage("CET_ERROR_NO_FILENAME"); + } + elseif ($APPLICATION->GetFileAccessPermission($SETUP_FILE_NAME) < "W") + { + $arSetupErrors[] = str_replace("#FILE#", $SETUP_FILE_NAME, GetMessage('CET_YAND_RUN_ERR_SETUP_FILE_ACCESS_DENIED')); + } + + if (($ACTION=="EXPORT_SETUP" || $ACTION == 'EXPORT_EDIT' || $ACTION == 'EXPORT_COPY') && strlen($SETUP_PROFILE_NAME)<=0) + { + $arSetupErrors[] = GetMessage("CET_ERROR_NO_PROFILE_NAME"); + } + + if (!empty($arSetupErrors)) + { + $STEP = 1; + } +} + +if (!empty($arSetupErrors)) + echo ShowError(implode('
', $arSetupErrors)); + + +if ($STEP==1) +{ + + +?> +
+ +

+ "ASC", "NAME"=>"ASC"),array('CHECK_PERMISSIONS' => 'Y','MIN_PERMISSION' => 'W')); + while ($res = $db_res->Fetch()) + { + if ($arCatalog = CCatalog::GetByIDExt($res["ID"])) + { + if($arCatalog['CATALOG_TYPE'] == "D" || $arCatalog['CATALOG_TYPE'] == "X" || $arCatalog['CATALOG_TYPE'] == "P") + { + $arSiteList = array(); + $rsSites = CIBlock::GetSite($res["ID"]); + while ($arSite = $rsSites->Fetch()) + { + $arSiteList[] = $arSite["SITE_ID"]; + } + $db_properties = CIBlock::GetProperties($res['ID'], Array()); + + $properties = Array(); + while($prop = $db_properties->Fetch()) + $properties[] = $prop; + + if (count($IBLOCK_EXPORT) != 0) + $boolExport = (in_array($res['ID'], $IBLOCK_EXPORT)); + else + $boolExport = true; + + $arIBlockList[] = array( + 'ID' => $res['ID'], + 'NAME' => $res['NAME'], + 'IBLOCK_TYPE_ID' => $res['IBLOCK_TYPE_ID'], + 'IBLOCK_EXPORT' => $boolExport, + 'PROPERTIES' => $properties, + 'OLD_PROPERTY_SELECT' => $IBLOCK_PROPERTY_ARTICLE[$res['ID']] != "" ? $IBLOCK_PROPERTY_ARTICLE[$res['ID']] : null, + 'SITE_LIST' => '('.implode(' ',$arSiteList).')', + ); + + if ($boolExport) + $intCountChecked++; + $intCountAvailIBlock++; + } + } + } + if (count($IBLOCK_EXPORT) != 0) { + if ($intCountChecked == $intCountAvailIBlock) + $boolAll = true; + } else { + $intCountChecked = $intCountAvailIBlock; + $boolAll = true; + } + + ?> + + + + + + + + + + + + + + + + + + $arIBlock) + { + ?> + + + + + + + +
+
+
+
+   +
+
+
+
+ + + > + + +   +
+ + + + ]" + id="IBLOCK_EXPORT" + value="" + + onclick="checkOne(this,);" + > + + + +
+ +
+
+
+ +

+ + +
+
+
+ + + +

+ +
+
+
+ + + + + + + + + + + + "> + + + + "> + + +
+ + \ No newline at end of file diff --git a/intaro.intarocrm/install/export/intarocrm_run.php b/intaro.intarocrm/install/export/intarocrm_run.php new file mode 100644 index 00000000..35313159 --- /dev/null +++ b/intaro.intarocrm/install/export/intarocrm_run.php @@ -0,0 +1,3 @@ +IntaroCRM +require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/intaro.intarocrm/export/export_run.php"); \ No newline at end of file diff --git a/intaro.intarocrm/install/export/intarocrm_setup.php b/intaro.intarocrm/install/export/intarocrm_setup.php new file mode 100644 index 00000000..b2297fb0 --- /dev/null +++ b/intaro.intarocrm/install/export/intarocrm_setup.php @@ -0,0 +1,3 @@ +IntaroCRM +require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/intaro.intarocrm/export/export_setup.php"); \ No newline at end of file diff --git a/intaro.intarocrm/install/index.php b/intaro.intarocrm/install/index.php new file mode 100755 index 00000000..a36d588c --- /dev/null +++ b/intaro.intarocrm/install/index.php @@ -0,0 +1,940 @@ +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 (count($iblocks) < count($articleProperties)) + $arResult['errCode'] = 'ERR_ARTICLE_IBLOCK'; + + + 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($filename == "") + $arResult['errCode'] = 'ERR_FIELDS_FILE'; + + if(isset($arResult['errCode']) && $arResult['errCode']) { + + + $arOldValues = Array( + 'IBLOCK_EXPORT' => $iblocks, + 'IBLOCK_PROPERTY_ARTICLE' => $articleProperties, + 'SETUP_FILE_NAME' => $filename, + 'SETUP_PROFILE_NAME' => $profileName + ); + global $oldValues; + $oldValues = $arOldValues; + $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"); + $this->CopyFiles(); + 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/include/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"); + CCatalogExport::Delete($arProfile['ID']); + } + } + } + $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_AGENT" => "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" => "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 + ); + + $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); + $this->INTARO_CRM_API->statisticUpdate(); + + $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"); + if(CModule::IncludeModule("catalog")) { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/include/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"); + CCatalogExport::Delete($arProfile['ID']); + } + } + } + } + + $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; + } +} \ No newline at end of file diff --git a/intaro.intarocrm/install/step4.php b/intaro.intarocrm/install/step4.php new file mode 100644 index 00000000..246c11dd --- /dev/null +++ b/intaro.intarocrm/install/step4.php @@ -0,0 +1,263 @@ + +

+ +
+

+ "ASC", "NAME"=>"ASC"),array('CHECK_PERMISSIONS' => 'Y','MIN_PERMISSION' => 'W')); + while ($res = $db_res->Fetch()) + { + if ($arCatalog = CCatalog::GetByIDExt($res["ID"])) + { + if($arCatalog['CATALOG_TYPE'] == "D" || $arCatalog['CATALOG_TYPE'] == "X" || $arCatalog['CATALOG_TYPE'] == "P") + { + $arSiteList = array(); + $rsSites = CIBlock::GetSite($res["ID"]); + while ($arSite = $rsSites->Fetch()) + { + $arSiteList[] = $arSite["SITE_ID"]; + } + $db_properties = CIBlock::GetProperties($res['ID'], Array()); + + $properties = Array(); + while($prop = $db_properties->Fetch()) + $properties[] = $prop; + + if (count($IBLOCK_EXPORT) != 0) + $boolExport = (in_array($res['ID'], $IBLOCK_EXPORT)); + else + $boolExport = true; + + $arIBlockList[] = array( + 'ID' => $res['ID'], + 'NAME' => $res['NAME'], + 'IBLOCK_TYPE_ID' => $res['IBLOCK_TYPE_ID'], + 'IBLOCK_EXPORT' => $boolExport, + 'PROPERTIES' => $properties, + 'OLD_PROPERTY_SELECT' => $IBLOCK_PROPERTY_ARTICLE[$res['ID']] != "" ? $IBLOCK_PROPERTY_ARTICLE[$res['ID']] : null, + 'SITE_LIST' => '('.implode(' ',$arSiteList).')', + ); + + if ($boolExport) + $intCountChecked++; + $intCountAvailIBlock++; + } + } + } + if (count($IBLOCK_EXPORT) != 0) { + if ($intCountChecked == $intCountAvailIBlock) + $boolAll = true; + } else { + $intCountChecked = $intCountAvailIBlock; + $boolAll = true; + } + + ?> + + + + + + + + + + + + + + + + + + $arIBlock) + { + ?> + + + + + + + +
+
+
+
+   +
+
+
+
+ + + > + + +   +
+ + + + ]" + id="IBLOCK_EXPORT" + value="" + + onclick="checkOne(this,);" + > + + + +
+ +
+
+
+ +

+ + +
+
+
+ +

+
+
+
+
+
+   + +
+
+
+ +
+   + " + size="30"> +
+
+
+
+ + + + + + + + + + + + + +
+
+ " class="adm-btn-save"> +
+
+ " class="adm-btn-save"> +
+
+
+ + diff --git a/intaro.intarocrm/install/step5.php b/intaro.intarocrm/install/step5.php new file mode 100644 index 00000000..0f8fd95c --- /dev/null +++ b/intaro.intarocrm/install/step5.php @@ -0,0 +1,11 @@ + + +
+ + + + "> + diff --git a/intaro.intarocrm/install/version.php b/intaro.intarocrm/install/version.php new file mode 100644 index 00000000..7f630053 --- /dev/null +++ b/intaro.intarocrm/install/version.php @@ -0,0 +1,5 @@ + "0.3.9", + "VERSION_DATE" => "2013-08-21 18:32:00", +); \ No newline at end of file diff --git a/intaro.intarocrm/lang/ru/icml_export_setup.php b/intaro.intarocrm/lang/ru/icml_export_setup.php new file mode 100644 index 00000000..05054950 --- /dev/null +++ b/intaro.intarocrm/lang/ru/icml_export_setup.php @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/intaro.intarocrm/lang/ru/install/index.php b/intaro.intarocrm/lang/ru/install/index.php new file mode 100755 index 00000000..8a2a6bab --- /dev/null +++ b/intaro.intarocrm/lang/ru/install/index.php @@ -0,0 +1,14 @@ +

+

+ 3, CRM + KPI. +

+

+ ICrmOrderActions::uploadOrdersAgent(); + IntaroCRM 10 ( ). +

+

+ 4, IntaroCRM. + , , 10 . , + IntaroCRM > > . + IntaroCRM 3 . +

+'; diff --git a/intaro.intarocrm/updater.php b/intaro.intarocrm/updater.php new file mode 100644 index 00000000..e80c9e65 --- /dev/null +++ b/intaro.intarocrm/updater.php @@ -0,0 +1,10 @@ +CopyFiles("install/export/intarocrm_run.php", "php_interface/include/catalog_export/intarocrm_run.php"); + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/include/catalog_export/intarocrm_setup.php')) { + unlink($_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/include/catalog_export/intarocrm_setup.php'); +} +$updater->CopyFiles("install/export/intarocrm_setup.php", "php_interface/include/catalog_export/intarocrm_setup.php"); From a592053447b5d1a966b2a739a743bc7101f43bb0 Mon Sep 17 00:00:00 2001 From: Ilyas Salikhov Date: Mon, 26 Aug 2013 10:38:52 +0400 Subject: [PATCH 2/2] fix encoding --- .../lang/ru/icml_export_setup.php | 30 ++++++------ intaro.intarocrm/lang/ru/install/index.php | 22 ++++----- intaro.intarocrm/lang/ru/install/step4.php | 46 +++++++++---------- intaro.intarocrm/lang/ru/install/step5.php | 18 ++++---- 4 files changed, 58 insertions(+), 58 deletions(-) diff --git a/intaro.intarocrm/lang/ru/icml_export_setup.php b/intaro.intarocrm/lang/ru/icml_export_setup.php index 05054950..8b39a170 100644 --- a/intaro.intarocrm/lang/ru/icml_export_setup.php +++ b/intaro.intarocrm/lang/ru/icml_export_setup.php @@ -1,17 +1,17 @@ \ No newline at end of file diff --git a/intaro.intarocrm/lang/ru/install/index.php b/intaro.intarocrm/lang/ru/install/index.php index 8a2a6bab..4637485b 100755 --- a/intaro.intarocrm/lang/ru/install/index.php +++ b/intaro.intarocrm/lang/ru/install/index.php @@ -1,14 +1,14 @@

+

Дальнейшие действия

- 3, CRM - KPI. + Если вы произвели выгрузку заказов на шаге 3, то эти заказы уже доступны в вашей CRM и + через некоторое время по этим заказам будет подготовлены аналитические отчеты в Панели KPI.

- ICrmOrderActions::uploadOrdersAgent(); - IntaroCRM 10 ( ). + Новые заказы будут отправляться агентом ICrmOrderActions::uploadOrdersAgent(); + в IntaroCRM каждые 10 минут (интервал можно изменить в разделе Агенты).

- 4, IntaroCRM. - , , 10 . , - IntaroCRM > > . - IntaroCRM 3 . + Если вы выбрали опцию «Выгрузить каталог сейчас» на шаге 4, то ваш каталог уже загружается в IntaroCRM. + Загрузка длится, как правило, не более 10 минут. Если вы не выбирали эту опцию, то генерацию файла с каталогом + можно произвести экспортом «IntaroCRM» в разделе Магазин > Настройки > Экспорт данных. + IntaroCRM проверяет и загружает данный файл с каталогом каждые 3 часа.

';