IncludeModuleLangFile(__FILE__); IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/options.php"); CJSCore::Init(array("jquery")); $APPLICATION->SetAdditionalCSS("/bitrix/js/pr.recrm/jquery-ui/jquery-ui.min.css"); $APPLICATION->AddHeadScript('/bitrix/js/pr.recrm/jquery-ui/jquery-ui.min.js'); $APPLICATION->AddHeadScript('/bitrix/js/pr.recrm/pr.recrm.js'); $RECRM = new prReCrmData; $LAST_UPD = $RECRM->getLastUpdate(); $SELECT_T = $RECRM->getSelectTypes(); $SELECT_IB = $RECRM->getIB(true); $CHECK_IB = $RECRM->checkIB(); $CHECK_KEY = $RECRM->checkKey(); $GET_KEY = $RECRM->getKey(); $TYPES = prReCrmProps::getTypes('name'); $CUR_MOD_PAGE = $APPLICATION->GetCurPage().'?lang='.LANGUAGE_ID.'&mid='.urlencode($module_id); $ACTION = htmlspecialcharsEx($_GET['action']); $STATUS = false; $wLocation = ''; $wTime = 3000; $error = array(); $arWRK = array('0' => GetMessage('PR_RECRM_N'), '1' => GetMessage('PR_RECRM_Y')); $arAllOptions [] = array("pr_recrm_key", GetMessage("PR_RECRM_F_KEY"), array("text"), GetMessage("PR_RECRM_F_KEY_NOTE")); $arAllOptions [] = array("pr_recrm_s_step", GetMessage("PR_RECRM_F_S_STEP"), array("text"), GetMessage("PR_RECRM_F_S_STEP_NOTE")); $arAllOptions [] = array("pr_recrm_img_w", GetMessage("PR_RECRM_F_IMG_W"), array("text"), GetMessage("PR_RECRM_F_IMG_W_NOTE")); $arAllOptions [] = array("pr_recrm_img_h", GetMessage("PR_RECRM_F_IMG_H"), array("text"), GetMessage("PR_RECRM_F_IMG_H_NOTE")); $arAllOptions [] = array("pr_recrm_img_wrk", GetMessage("PR_RECRM_F_IMG_WRK"), array("selectbox",$arWRK), GetMessage("PR_RECRM_F_IMG_WRK_NOTE")); $arAllOptions [] = array("pr_recrm_types", GetMessage("PR_RECRM_F_TYPES_SELECT"), array("multiple", $TYPES), GetMessage("PR_RECRM_F_TYPES_SELECT_NOTE"));
public function importIBEl($CRON = 0, $TYPES_ARR = array(), $START = 'N') { if($START == 'Y'): COption::SetOptionString(self::$module_id, 'pr_recrm_step', 0); COption::SetOptionString(self::$module_id, 'pr_recrm_start_upd', time()); endif; CModule::IncludeModule("iblock"); $STEP = $this->getStep(); COption::SetOptionString(self::$module_id, 'pr_recrm_step', $STEP); if(!is_array($TYPES_ARR) AND $CRON === 'Y') { $TYPES_ARR = array(); foreach($this->getSelectTypes() AS $T_V) { $TYPES_ARR [$T_V] = $T_V; } } $TYPES_G = is_array($TYPES_ARR) ? $TYPES_ARR : explode(',',$_GET['types']); $TYPES_G = array_filter($TYPES_G); $TYPES = $TYPES_G; //AddMessage2Log('Получены типы '.implode(', ',$TYPES_G)); if(count($TYPES) == 0) { //AddMessage2Log('Выгрузка завершена'); COption::SetOptionString(self::$module_id, 'pr_recrm_last_upd', time()); COption::SetOptionString(self::$module_id, 'pr_recrm_start_upd', 0); COption::SetOptionString(self::$module_id, 'pr_recrm_step', '0'); return true; } else { $TYPE = array_shift($TYPES); $arrIDs = $this->arrIDs($TYPE, $STEP); $el_import = $arrIDs['DEL'] + $arrIDs['NEW'] + $arrIDs['UPD']; $el_count = count($el_import); //AddMessage2Log('Начал выгружать '.$TYPE . ' количество ' . count($el_import)); if($el_count == 0) { //AddMessage2Log('В типе '.$TYPE . ' больше нет объектов, вызываем метод выгрузки'); COption::SetOptionString(self::$module_id, 'pr_recrm_step', '0'); if($CRON === 'Y') { $this->importIBEl('Y', $TYPES); } else { return $this->importIBEl(0, $TYPES); } } else { $IBLOCK_ID = $this->getIBId($TYPE); $el_db = $this->getEliB($TYPE); } $StepTime = $this->getStepTime(); // Сколько шаг foreach($el_import AS $el_k) { if(intval($el_k) == 0) continue; /* Выход из цикла по времени */ $LeftTime = time() - $this->getStartUpdate(); if($CRON !== 'Y' AND $StepTime > 0 AND $LeftTime >= $StepTime) break; /* ID в Btrx */ $elDbId = $el_db['id_btrx'][$el_k]; if(in_array($el_k, $arrIDs['DEL'])): $el = new CIBlockElement; $el->Delete($elDbId); unset($arrIDs['DEL'][$el_k]); continue; endif; $el_title = ''; $el_description = ''; $PROP = array(); /* Подробно о элемент из ReCrm */ $get_json = $this->getJson($TYPE, array('id' => $el_k)); $el_dA = $this->convertArrImport($TYPE, $get_json); $el_d = $el_dA[$el_k]; /* Заголовки */ if(is_array($el_d['title'])) { $el_title = $el_d['title']['value']; unset($el_d['title']); } elseif(is_array($el_d['name'])) { $el_title = $el_d['name']['value']; unset($el_d['name']); } /* Описание */ if(is_array($el_d['description'])): $el_description = nl2br(str_replace($this->getDescStr(), '', $el_d['description']['value'])); unset($el_d['description']); endif; foreach($el_d AS $el_prop_k => $el_prop_v) { $PROP[$el_prop_k] = $this->dataChange($el_prop_k, $el_prop_v['value']); } /* Изображения */ if($TYPE == 'agent') { $PROP['photo'] = $this->convertArrImport('agentphoto',$this->getJson('agentphoto', array('agent_id' => $el_k, 'width' => '500', 'height' => '500', 'crop' => '0'))); } elseif($TYPE == 'estate') { $getCoverSize = $this->getCoverSize(); $PROP['estatecoverphoto'] = $this->convertArrImport('estatecoverphoto',$this->getJson('estatecoverphoto', array('estate_id' => $el_k, 'width' => $getCoverSize['width'], 'height' => $getCoverSize['height'], 'crop' => '1', 'watermark' => $this->getWRK()))); $PROP['estatephoto'] = $this->convertArrImport('estatephoto',$this->getJson('estatephoto', array('estate_id' => $el_k, 'width' => '800', 'height' => '600', 'crop' => '0', 'watermark' => $this->getWRK()))); $PROP['estatephotolayout'] = $this->convertArrImport('estatephotolayout',$this->getJson('estatephotolayout', array('estate_id' => $el_k, 'width' => '800', 'height' => '600', 'crop' => '0', 'watermark' => $this->getWRK()))); if($PROP['edit_date'] == '') $PROP['edit_date'] = $PROP['creation_date']; if($PROP['edit_datetime'] == '') $PROP['edit_datetime'] = $PROP['creation_datetime']; } /* Добавляем свойства которых нет */ $this->checkIBProps($TYPE, $el_d); $el_code = CUtil::translit($el_title.'_'.$el_k, "ru" , array( "max_len" => "100", "change_case" => "L", "replace_space" => "_", "replace_other" => "_", "delete_repeat_replace" => "true", "use_google" => "false", )); $arEl = array( "MODIFIED_BY" => $GLOBALS['USER']->GetID(), "IBLOCK_ID" => $IBLOCK_ID, "NAME" => $el_title, "CODE" => $el_code, "DETAIL_TEXT" => $el_description, "DETAIL_TEXT_TYPE" => 'html', ); $el = new CIBlockElement; if(in_array($el_k, $arrIDs['UPD'])) { $cur_id = $el->Update($elDbId, $arEl); foreach($PROP AS $PROP_k => $PROP_v) { CIBlockElement::SetPropertyValues($elDbId, $IBLOCK_ID, $PROP_v, $PROP_k); } unset($arrIDs['UPD'][$el_k]); } if(in_array($el_k, $arrIDs['NEW'])) { $arEl["PROPERTY_VALUES"] = $PROP; $cur_id = $el->Add($arEl); unset($arrIDs['NEW'][$el_k]); } $el_count--; //if($el->LAST_ERROR) AddMessage2Log('Ошибка на типе ' . $TYPE . ': ' . $el->LAST_ERROR); } //AddMessage2Log('Прошло сек '. $LeftTime . ' при времени шага '.$StepTime); //AddMessage2Log('Сброс цикла на типе '. $TYPE .' при количестве элементов '.$el_count); COption::SetOptionString(self::$module_id, 'pr_recrm_start_upd', time()); $this->tmpDb($arrIDs); if($CRON === 'Y') $this->importIBEl('Y', $TYPES); // если крон - рекурсия return array( 'MESS' => GetMessage("PR_RECRM_STATUS_WHAT") . ': "'.prReCrmProps::getTypes('name', $TYPE).'", '.GetMessage("PR_RECRM_STATUS_COUNT").': '.$el_count.'.', 'STEP' => $STEP, 'IBT' => $TYPES_G, ); } }