"ASC"), Array("IBLOCK_ID" => $iblock_id, "ID" => $id, ), false, Array("nPageSize" => 1000)); $ar_res = Array(); while ($obElement = $res->GetNextElement()) { $ar_res = $obElement->GetFields(); $ar_res['PROPERTIES'] = $obElement->GetProperties(); } return $ar_res; } function get_related_array($iblock_id, $ids) { $ar_res = Array(); foreach($ids AS $id) { $res = CIBlockElement::GetList(Array("NAME" => "ASC"), Array("IBLOCK_ID" => $iblock_id, "ID" => $id, ), false, Array("nPageSize" => 1000)); while ($obElement = $res->GetNextElement()) { $ar_res_element = $obElement->GetFields(); $ar_res_element['PROPERTIES'] = $obElement->GetProperties(); $ar_res[] = $ar_res_element; } } return $ar_res; } function get_related_array_with_filter($iblock_id, $ids, $filter = []) { $ar_res = Array(); $query_filter = Array("IBLOCK_ID" => $iblock_id, "ID" => $id, ); $query_filter = array_merge($query_filter, $filter); foreach($ids AS $id) { $res = CIBlockElement::GetList(Array("NAME" => "ASC"), $query_filter, false, Array("nPageSize" => 1000)); while ($obElement = $res->GetNextElement()) { $ar_res_element = $obElement->GetFields(); $ar_res_element['PROPERTIES'] = $obElement->GetProperties(); $ar_res[] = $ar_res_element; } } return $ar_res; } function get_ext_from_mime($mime) { $mime_map = [ 'application/x-compressed' => '7zip', 'image/bmp' => 'bmp', 'image/x-bmp' => 'bmp', 'image/x-bitmap' => 'bmp', 'image/x-xbitmap' => 'bmp', 'image/x-win-bitmap' => 'bmp', 'image/x-windows-bmp' => 'bmp', 'image/ms-bmp' => 'bmp', 'image/x-ms-bmp' => 'bmp', 'application/bmp' => 'bmp', 'application/x-bmp' => 'bmp', 'application/x-win-bitmap' => 'bmp', 'text/x-comma-separated-values' => 'csv', 'text/comma-separated-values' => 'csv', 'application/vnd.msexcel' => 'csv', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 'docx', 'application/x-msdownload' => 'exe', 'image/gif' => 'gif', 'application/x-gzip' => 'gzip', 'text/html' => 'html', 'image/jpeg' => 'jpeg', 'image/pjpeg' => 'jpeg', 'application/pdf' => 'pdf', 'application/octet-stream' => 'pdf', 'image/png' => 'png', 'image/x-png' => 'png', 'application/powerpoint' => 'ppt', 'application/vnd.ms-powerpoint' => 'ppt', 'application/vnd.ms-office' => 'ppt', 'application/msword' => 'doc', 'application/vnd.openxmlformats-officedocument.presentationml.presentation' => 'pptx', 'application/x-rar' => 'rar', 'application/rar' => 'rar', 'application/x-rar-compressed' => 'rar', 'text/rtf' => 'rtf', 'text/richtext' => 'rtx', 'application/x-tar' => 'tar', 'application/x-gzip-compressed' => 'tgz', 'image/tiff' => 'tiff', 'text/plain' => 'txt', 'application/excel' => 'xl', 'application/msexcel' => 'xls', 'application/x-msexcel' => 'xls', 'application/x-ms-excel' => 'xls', 'application/x-excel' => 'xls', 'application/x-dos_ms_excel' => 'xls', 'application/xls' => 'xls', 'application/x-xls' => 'xls', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'xlsx', 'application/vnd.ms-excel' => 'xlsx', 'application/xml' => 'xml', 'text/xml' => 'xml', 'text/xsl' => 'xsl', 'application/xspf+xml' => 'xspf', 'application/x-zip' => 'zip', 'application/zip' => 'zip', 'application/x-zip-compressed' => 'zip', 'application/s-compressed' => 'zip', 'multipart/x-zip' => 'zip', ]; return isset($mime_map[ $mime ]) ? $mime_map[ $mime ] : false; } function mb_ucfirst($string) { $string = mb_strtoupper(mb_substr($string, 0, 1)) . mb_substr($string, 1); return $string; } function seo_years() { if(intval(date("m")) >= 7) { return intval(date("Y"))."-".(intval(date("Y")) + 1); } else { return (intval(date("Y")) - 1)."-".intval(date("Y")); } } use Bitrix\Main\Diag\ExceptionHandlerFormatter; class HttpExceptionHandlerOutput extends \Bitrix\Main\Diag\HttpExceptionHandlerOutput { public function renderExceptionMessage($exception, $debug = false) { if ($debug) { echo ExceptionHandlerFormatter::format($exception, true); } else { global $APPLICATION; $APPLICATION->RestartBuffer(); $APPLICATION->__view = []; include($_SERVER["DOCUMENT_ROOT"] . "/local/templates/500/header.php"); include $_SERVER['DOCUMENT_ROOT'] . '/500.php'; include($_SERVER["DOCUMENT_ROOT"] . "/local/templates/500/footer.php"); CHTTP::SetStatus("500 Internal Server Error"); } } } AddEventHandler("main", "OnEpilog", "OnEpilogHandler", 1); function OnEpilogHandler() { if (defined('ERROR_404') && ERROR_404 == 'Y') { global $APPLICATION; $APPLICATION->RestartBuffer(); include $_SERVER['DOCUMENT_ROOT'].'/local/templates/404/header.php'; include $_SERVER['DOCUMENT_ROOT'].'/404.php'; include $_SERVER['DOCUMENT_ROOT'].'/local/templates/404/footer.php'; } } \Bitrix\Main\Application::getInstance()->getExceptionHandler()->setHandlerOutput(new HttpExceptionHandlerOutput()); function zerof_request($path, $query, $timeout = 900) { print "zerof_request | ".$path."\n"; print_r($query); print "\n"; $key_sha1 = strtoupper(sha1(ZEROF_PASSWORD, false)); $date = gmdate('D, d M Y H:i:s T'); $string_to_sign = ""; $string_to_sign .= "GET\n"; $string_to_sign .= "\n"; $string_to_sign .= $date."\n"; $string_to_sign .= $path; $data = mb_convert_encoding($string_to_sign, mb_detect_encoding($string_to_sign), "UTF-8"); $hash = hash_hmac("SHA1", $data, $key_sha1, false); $hash_base64 = base64_encode(hex2bin($hash)); $headers = [ "Authorization: ZWS ".ZEROF_USERNAME.":".$hash_base64, "Date: ".$date, "Accept: application/json", ]; $url = "https://api.zerof.ru".$path; if($query !== null) { $url = $url."?".http_build_query($query); } $request = curl_init(); curl_setopt($request, CURLOPT_TIMEOUT, $timeout); curl_setopt($request, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); curl_setopt($request, CURLOPT_URL, $url); curl_setopt($request, CURLOPT_CONNECTTIMEOUT, 300); curl_setopt($request, CURLOPT_RETURNTRANSFER, 1); curl_setopt($request, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($request); $http_code = curl_getinfo($request, CURLINFO_HTTP_CODE); print "ZEROF response code ".$http_code."\n"; if($http_code != 200) { print curl_error($request); print "\n"; print "\n"; print_r($response); print "\n"; $check = md5($path.var_export($query, true)); $check_file = file_get_contents($_SERVER['DOCUMENT_ROOT']."/zerof-500.txt"); if(strpos($check_file, $check) < 0) { if(DEBUG_ZEROF_CYCLE) { file_put_contents($_SERVER['DOCUMENT_ROOT']."/zerof-500.txt", $path."\n".var_export($query, true)."\n".$http_code." | ".$response."\n\n"); } print "response with error logged\n"; } print "\n"; //die(); } curl_close($request); sleep(1); return $http_code === 200 ? $response : false; } function zerof_get_images($task_uid) { print "zerof_get_images | ".$task_uid."\n"; $images = []; $tasks_car_in_new = zerof_request("/v2/tasks/find", [ "status" => "new", "value" => $task_uid, "profile" => 703 ]); $tasks_car_in_process = zerof_request("/v2/tasks/find", [ "status" => "process", "value" => $task_uid, "profile" => 703 ]); $tasks_car_in_pass = zerof_request("/v2/tasks/find", [ "status" => "pass", "value" => $task_uid, "profile" => 703 ]); $tasks_trucks_in_new = zerof_request("/v2/tasks/find", [ "status" => "new", "value" => $task_uid, "profile" => 704 ]); $tasks_trucks_in_process = zerof_request("/v2/tasks/find", [ "status" => "process", "value" => $task_uid, "profile" => 704 ]); $tasks_trucks_in_pass = zerof_request("/v2/tasks/find", [ "status" => "pass", "value" => $task_uid, "profile" => 704 ]); $tasks_car_in_process_data = json_decode(html_entity_decode($tasks_car_in_process), true); $tasks_car_in_pass_data = json_decode(html_entity_decode($tasks_car_in_pass), true); $tasks_car_in_new_data = json_decode(html_entity_decode($tasks_car_in_new), true); $tasks_trucks_in_process_data = json_decode(html_entity_decode($tasks_trucks_in_process), true); $tasks_trucks_in_pass_data = json_decode(html_entity_decode($tasks_trucks_in_pass), true); $tasks_trucks_in_new_data = json_decode(html_entity_decode($tasks_trucks_in_new), true); $tasks_car_in_process_data = is_array($tasks_car_in_process_data) ? $tasks_car_in_process_data : []; $tasks_car_in_pass_data = is_array($tasks_car_in_pass_data) ? $tasks_car_in_pass_data : []; $tasks_car_in_new_data = is_array($tasks_car_in_new_data) ? $tasks_car_in_new_data : []; $tasks_trucks_in_process_data = is_array($tasks_trucks_in_process_data) ? $tasks_trucks_in_process_data : []; $tasks_trucks_in_pass_data = is_array($tasks_trucks_in_pass_data) ? $tasks_trucks_in_pass_data : []; $tasks_trucks_in_new_data = is_array($tasks_trucks_in_new_data) ? $tasks_trucks_in_new_data : []; $tasks = array_merge( $tasks_car_in_process_data[array_keys($tasks_car_in_process_data)[0]], $tasks_car_in_pass_data[array_keys($tasks_car_in_pass_data)[0]], $tasks_car_in_new_data[array_keys($tasks_car_in_new_data)[0]], $tasks_trucks_in_process_data[array_keys($tasks_trucks_in_process_data)[0]], $tasks_trucks_in_pass_data[array_keys($tasks_trucks_in_pass_data)[0]], $tasks_trucks_in_new_data[array_keys($tasks_trucks_in_new_data)[0]], ); print "\n".$task_uid." TASKS:\n"; foreach($tasks AS $task_entry) { if(trim($task_entry['title']) === trim($task_uid)) { print_r($task_entry); $task_string = zerof_request("/v2/tasks/".$task_entry['id'], null); $task = json_decode(html_entity_decode($task_string), true); print "TASK:\n"; print_r($task); foreach($task['views'][0]['files'] AS $file) { $image = false; $retry = 0; while($image === false && $retry < 2) { $image = zerof_request("/v2/tasks/downloadfile", [ "id" => $task_entry['id'], "name" => $file['name'] ], 30); $retry++; } print_r("DOWNLOADED LEN OF IMAGE FILE: ".strlen($image)); print "\n"; if(strlen($image) < 100) { print "IMAGE ???? ".$image."\n\n"; } if($image) { array_push($images, $image); } } print "\n"; break; } } print "zerof_get_images | ".$task_uid." END\n"; print "\n"; return $images; } function advertiser_request($url, $payload) { //mbJmM6sDCeFHBb8zFEhc4pIeYLLE0Tch $headers = [ "Authorization: ZWS ".ADVERTISER_TOKEN."", 'accept: application/json', 'content-type: application/json', ]; $request = curl_init(); curl_setopt($request, CURLOPT_TIMEOUT, 900); curl_setopt($request, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); curl_setopt($request, CURLOPT_URL, $url); curl_setopt($request, CURLOPT_CONNECTTIMEOUT, 300); curl_setopt($request, CURLOPT_RETURNTRANSFER, 1); curl_setopt($request, CURLOPT_POSTFIELDS, json_encode($payload)); curl_setopt($request, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($request) or die(curl_error($request)); // $http_code = curl_getinfo($request, CURLINFO_HTTP_CODE); curl_close($request); return json_decode($response, true); //return $http_code === 200 ? $response : false; } function prepare_advertiser_text_content($string) { return trim(preg_replace(['/\s\s*/ium'], [' '], strip_tags(html_entity_decode(preg_replace(['/\R/im', '/<\/.>/'], [' ', ' '], $string))))); } function prepare_advertiser_request($arFields, $properties) { if(DEBUG_ADV_CYCLE) { file_put_contents($_SERVER['DOCUMENT_ROOT']."/adv_request.txt", var_export([ "arFields" => $arFields, "properties" => $properties ], true)."\n\n".str_repeat("-", 150)."\n\n", FILE_APPEND ); } $payload = [ "id" => $arFields['ID'], "name" => $arFields['NAME'], ]; switch($arFields['IBLOCK_ID']) { case IBLOCK_ID_SLIDER: { $k = array_keys($arFields['PROPERTY_VALUES'][$properties['URL']])[0]; $payload['url'] = "https://".ADVERTISER_DOMAIN."".$arFields['PROPERTY_VALUES'][$properties['URL']][$k]['VALUE']; $payload['text'] = $arFields['NAME'].". ".prepare_advertiser_text_content($arFields['DETAIL_TEXT']); } break; case IBLOCK_ID_SPECIALS: { $payload['code'] = $arFields['CODE']; $payload['url'] = "https://".ADVERTISER_DOMAIN."/special/".$arFields['CODE']; $property_id_header = array_keys($arFields[ 'PROPERTY_VALUES' ][ $properties['CONTENT_HEADER'] ])[ 0 ]; $property_id_rules = array_keys($arFields[ 'PROPERTY_VALUES' ][ $properties['RULES'] ])[ 0 ]; $content_header = $arFields[ 'PROPERTY_VALUES' ][ $properties['CONTENT_HEADER'] ][ $property_id_header ][ 'VALUE' ][ 'TEXT' ]; $content_rules = $arFields[ 'PROPERTY_VALUES' ][ $properties['RULES'] ][ $property_id_rules ][ 'VALUE' ][ 'TEXT' ]; $payload['text'] = $arFields['NAME'].". ".prepare_advertiser_text_content($content_header).". ".prepare_advertiser_text_content($content_rules).". ".prepare_advertiser_text_content($arFields['DETAIL_TEXT']); } break; case IBLOCK_ID_NEWS: { $payload['code'] = $arFields['CODE']; $payload['url'] = "https://".ADVERTISER_DOMAIN."/news/".$arFields['CODE']; $payload['text'] = $arFields['NAME'].". ".prepare_advertiser_text_content($arFields['DETAIL_TEXT']); } break; case IBLOCK_ID_SPECIAL_OFFERS_BANNERS: { $k = array_keys($arFields['PROPERTY_VALUES'][$properties['OFFER']])[0]; $offer = get_related(IBLOCK_ID_SPECIALS, $arFields['PROPERTY_VALUES'][$properties['OFFER']][$k]['VALUE']); $payload['url'] = "https://".ADVERTISER_DOMAIN.$offer['DETAIL_PAGE_URL']; $payload['text'] = $arFields['NAME'].". ".prepare_advertiser_text_content($arFields['PREVIEW_TEXT']); } break; case IBLOCK_ID_SPECIAL_OFFERS_CARS: { $payload['url'] = "https://".ADVERTISER_DOMAIN."/special/"; $property_id = array_keys($arFields[ 'PROPERTY_VALUES' ][ $properties['TAGLINE'] ])[ 0 ]; $payload['text'] = $arFields['NAME'].". ".$arFields[ 'PROPERTY_VALUES' ][ $properties['TAGLINE'] ][ $property_id ][ 'VALUE' ].". ".prepare_advertiser_text_content($arFields['PREVIEW_TEXT']); } break; case IBLOCK_ID_BANNERS_INNER: { $k = array_keys($arFields['PROPERTY_VALUES'][$properties['URL']])[0]; $payload['url'] = "https://".ADVERTISER_DOMAIN."".$arFields['PROPERTY_VALUES'][$properties['URL']][$k]['VALUE']; $payload['text'] = $arFields['NAME'].". ".prepare_advertiser_text_content($arFields['PREVIEW_TEXT']); } break; case IBLOCK_ID_CATALOG_CARS_USED: { $payload['id'] = $arFields['ID']; $payload['code'] = $arFields['CODE']; $payload['url'] = "https://".ADVERTISER_DOMAIN."/izt/".$arFields['CODE']; } break; default: break; } if(DEBUG_ADV_CYCLE) { file_put_contents($_SERVER['DOCUMENT_ROOT']."/adv_request_payload.txt", var_export([ "ADVERTISER_URL" => ADVERTISER_URL, "ADVERTISING_IBLOCK_ARRAY[arFields['IBLOCK_ID']]" => ADVERTISING_IBLOCK_ARRAY[$arFields['IBLOCK_ID']], "payload" => $payload ], true)."\n\n".str_repeat("-", 150)."\n\n", FILE_APPEND ); } $response = advertiser_request(ADVERTISER_URL."/".ADVERTISING_IBLOCK_ARRAY[$arFields['IBLOCK_ID']], $payload); return $response; } AddEventHandler("iblock", "OnBeforeIBlockElementAdd", "OnBeforeIBlockElementAddHandler"); AddEventHandler("iblock", "OnAfterIBlockElementAdd", "OnAfterIBlockElementAddHandler"); AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", "OnBeforeIBlockElementUpdateHandler"); function OnBeforeIBlockElementAddHandler(&$arFields) { if(array_key_exists($arFields['IBLOCK_ID'], is_array(ADVERTISING_IBLOCK_ARRAY) ? ADVERTISING_IBLOCK_ARRAY : [])) { if(DEBUG_IBLOCK_CYCLE) { file_put_contents($_SERVER['DOCUMENT_ROOT']."/element_add_before_".$arFields['IBLOCK_ID'].".txt", var_export($arFields, true)."\n\n".str_repeat("-", 150)."\n\n", FILE_APPEND); } $res = CIBlock::GetProperties($arFields['IBLOCK_ID'], [], []); $properties = []; while($res_arr = $res->GetNext()) { $properties[$res_arr['CODE']] = $res_arr['ID']; } if(isset($properties['ADVERTISING'])) { if(DEBUG_IBLOCK_CYCLE) { file_put_contents($_SERVER['DOCUMENT_ROOT']."/element_add_before_adv_".$arFields['IBLOCK_ID'].".txt", var_export([ "CODE" => $arFields['CODE'], ], true)."\n\n".str_repeat("-", 150)."\n\n", FILE_APPEND); } if(!is_null($arFields['PROPERTY_VALUES']['ADVERTISING'])) { if($arFields['IBLOCK_ID'] === IBLOCK_ID_CATALOG_CARS_USED) { return true; } //снимаем элемент с публикации по умолчанию $arFields['ACTIVE'] = "N"; } else { $arFields['PROPERTY_VALUES'][$properties['ADVERTISING_ERIR']] = [ 'n0' => [ 'VALUE' => '' ]]; } } } return true; } function OnAfterIBlockElementAddHandler(&$arFields) { if(array_key_exists($arFields['IBLOCK_ID'], is_array(ADVERTISING_IBLOCK_ARRAY) ? ADVERTISING_IBLOCK_ARRAY : [])) { if(DEBUG_IBLOCK_CYCLE) { file_put_contents($_SERVER['DOCUMENT_ROOT']."/element_add_after_".$arFields['IBLOCK_ID'].".txt", var_export($arFields, true)."\n\n".str_repeat("-", 150)."\n\n", FILE_APPEND); } $res = CIBlock::GetProperties($arFields['IBLOCK_ID'], [], []); $properties = []; while($res_arr = $res->GetNext()) { $properties[$res_arr['CODE']] = $res_arr['ID']; } if(isset($properties['ADVERTISING'])) { if(DEBUG_IBLOCK_CYCLE) { file_put_contents($_SERVER['DOCUMENT_ROOT']."/element_add_after_adv_".$arFields['IBLOCK_ID'].".txt", var_export($arFields, true)."\n\n".str_repeat("-", 150)."\n\n", FILE_APPEND); file_put_contents($_SERVER['DOCUMENT_ROOT']."/element_add_after_adv_".$arFields['IBLOCK_ID']."_check_flag.txt", var_export($arFields['PROPERTY_VALUES'][$properties['ADVERTISING']], true)."\n\n".str_repeat("-", 150)."\n\n", FILE_APPEND); } if(!is_null($arFields['PROPERTY_VALUES']['ADVERTISING']) || (isset($arFields['PROPERTY_VALUES'][$properties['ADVERTISING']][0]['VALUE']) && $arFields['PROPERTY_VALUES'][$properties['ADVERTISING']][0]['VALUE'] !== "")) { if(method_exists('\CIBlock', 'clearIblockTagCache')) { if(DEBUG_IBLOCK_CYCLE) { file_put_contents($_SERVER['DOCUMENT_ROOT']."/element_add_after_cc_1_".$arFields['IBLOCK_ID'].".txt", var_export($arFields['IBLOCK_ID'], true)."\n\n".str_repeat("-", 150)."\n\n", FILE_APPEND); } \CIBlock::enableClearTagCache(); \CIBlock::clearIblockTagCache($arFields['IBLOCK_ID']); \CIBlock::DisableClearTagCache(); } BXClearCache(true); (new \Bitrix\Main\Data\ManagedCache())->cleanAll(); (new \CStackCacheManager())->CleanAll(); if(method_exists('\CHTMLPagesCache', 'IsCompositeEnabled') && \CHTMLPagesCache::IsCompositeEnabled()) { \CHTMLPagesCache::CleanAll(); } BXClearCache(true); $GLOBALS["CACHE_MANAGER"]->CleanAll(); $GLOBALS["stackCacheManager"]->CleanAll(); $taggedCache = \Bitrix\Main\Application::getInstance()->getTaggedCache(); $taggedCache->deleteAllTags(); $page = \Bitrix\Main\Composite\Page::getInstance(); $page->deleteAll(); if($arFields['IBLOCK_ID'] === IBLOCK_ID_CATALOG_CARS_USED) { return true; } //запускаем получение ЕРИР $advertiser_response = prepare_advertiser_request($arFields, $properties); if($advertiser_response['status'] === "success") { if(DEBUG_ADV_CYCLE) { file_put_contents($_SERVER['DOCUMENT_ROOT']."/adv_response.txt", var_export(["ID" => $arFields['ID'], "response" => $advertiser_response], true)); } $arFields['PROPERTY_VALUES']['ADVERTISING_ERIR'] = $advertiser_response['erir']; $arFields['PROPERTY_VALUES']['ADVERTISING_SAMPLE_URL'] = $advertiser_response['sample']; $arFields['PROPERTY_VALUES']['ADVERTISING_SAMPLE_ID'] = $advertiser_response['sample_id']; $arFields['ACTIVE'] = 'Y'; } else { $arFields['PROPERTY_VALUES']['ADVERTISING'] = NULL; $arFields['PROPERTY_VALUES']['ADVERTISING_ERIR'] = ''; $arFields['PROPERTY_VALUES']['ADVERTISING_SAMPLE_URL'] = ''; $arFields['PROPERTY_VALUES']['ADVERTISING_SAMPLE_ID'] = ''; $arFields['ACTIVE'] = 'N'; } $element = new CIBlockElement; $result = $element->Update($arFields['ID'], [ "ACTIVE" => "Y", "PROPERTY_VALUES" => $arFields['PROPERTY_VALUES'], ]); } } } return true; } function OnBeforeIBlockElementUpdateHandler(&$arFields) { if(array_key_exists($arFields['IBLOCK_ID'], is_array(ADVERTISING_IBLOCK_ARRAY) ? ADVERTISING_IBLOCK_ARRAY : [])) { if(DEBUG_IBLOCK_CYCLE) { file_put_contents($_SERVER['DOCUMENT_ROOT']."/element_update_before_".$arFields['IBLOCK_ID'].".txt", var_export($arFields, true)."\n\n".str_repeat("-", 150)."\n\n", FILE_APPEND); } $res = CIBlock::GetProperties($arFields['IBLOCK_ID'], [], []); $properties = []; while($res_arr = $res->GetNext()) { $properties[$res_arr['CODE']] = $res_arr['ID']; } if(isset($properties['ADVERTISING'])) { if(DEBUG_ADV_CYCLE) { file_put_contents($_SERVER['DOCUMENT_ROOT']."/element_adv_1.txt", var_export([ "ID" => $arFields['ID'], ], true)."\n\n".str_repeat("-", 150)."\n\n", FILE_APPEND); } if(is_array($arFields['PROPERTY_VALUES'][$properties['ADVERTISING']])) { if(DEBUG_ADV_CYCLE) { file_put_contents($_SERVER['DOCUMENT_ROOT']."/element_adv_2.txt", var_export([ "ID" => $arFields['ID'], ], true)."\n\n".str_repeat("-", 150)."\n\n", FILE_APPEND); file_put_contents($_SERVER['DOCUMENT_ROOT']."/element_adv_values_on_update.txt", var_export($arFields, true)."\n\n".str_repeat("-", 150)."\n\n", FILE_APPEND); } if($arFields['PROPERTY_VALUES'][$properties['ADVERTISING_ERIR']][array_keys($arFields['PROPERTY_VALUES'][$properties['ADVERTISING_ERIR']])[0]]['VALUE'] === "") { if(isset($arFields['PROPERTY_VALUES']['ADVERTISING_ERIR']) && !empty($arFields['PROPERTY_VALUES']['ADVERTISING_ERIR'])) { //проверка для избежания двойного запроса из-за особенностей архитектуры передачи параметров Битрикса return true; } if(DEBUG_ADV_CYCLE) { file_put_contents($_SERVER['DOCUMENT_ROOT']."/element_adv_3.txt", var_export([ "ID" => $arFields['ID'], ], true)."\n\n".str_repeat("-", 150)."\n\n", FILE_APPEND); file_put_contents($_SERVER['DOCUMENT_ROOT']."/element_update_before_".$arFields['IBLOCK_ID'].".txt", var_export([ "ID" => $arFields['ID'], ], true)."\n\n".str_repeat("-", 150)."\n\n", FILE_APPEND); } //это реклама, ЕРИР нет и его надо получить if(method_exists('\CIBlock', 'clearIblockTagCache')) { if(DEBUG_IBLOCK_CYCLE) { file_put_contents($_SERVER['DOCUMENT_ROOT']."/element_add_after_cc_1_".$arFields['IBLOCK_ID'].".txt", var_export($arFields['IBLOCK_ID'], true)."\n\n".str_repeat("-", 150)."\n\n", FILE_APPEND); } \CIBlock::enableClearTagCache(); \CIBlock::clearIblockTagCache($arFields['IBLOCK_ID']); \CIBlock::DisableClearTagCache(); } BXClearCache(true); (new \Bitrix\Main\Data\ManagedCache())->cleanAll(); (new \CStackCacheManager())->CleanAll(); if(method_exists('\CHTMLPagesCache', 'IsCompositeEnabled') && \CHTMLPagesCache::IsCompositeEnabled()) { \CHTMLPagesCache::CleanAll(); } BXClearCache(true); $GLOBALS["CACHE_MANAGER"]->CleanAll(); $GLOBALS["stackCacheManager"]->CleanAll(); $taggedCache = \Bitrix\Main\Application::getInstance()->getTaggedCache(); $taggedCache->deleteAllTags(); $page = \Bitrix\Main\Composite\Page::getInstance(); $page->deleteAll(); $advertiser_response = prepare_advertiser_request($arFields, $properties); if($advertiser_response['status'] === "success") { if(DEBUG_ADV_CYCLE) { file_put_contents($_SERVER['DOCUMENT_ROOT']."/adv_response.txt", var_export(["ID" => $arFields['ID'], "response" => $advertiser_response], true)); } $arFields['PROPERTY_VALUES'][$properties['ADVERTISING_ERIR']] = [ "".array_keys($arFields['PROPERTY_VALUES'][$properties['ADVERTISING_ERIR']])[0]."" => [ 'VALUE' => $advertiser_response['erir'] ] ]; $arFields['PROPERTY_VALUES'][$properties['ADVERTISING_SAMPLE_URL']] = [ "".array_keys($arFields['PROPERTY_VALUES'][$properties['ADVERTISING_SAMPLE_URL']])[0]."" => [ 'VALUE' => $advertiser_response['sample'] ] ]; $arFields['PROPERTY_VALUES'][$properties['ADVERTISING_SAMPLE_ID']] = [ "".array_keys($arFields['PROPERTY_VALUES'][$properties['ADVERTISING_SAMPLE_ID']])[0]."" => [ 'VALUE' => $advertiser_response['sample_id'] ] ]; $arFields['ACTIVE'] = 'Y'; } else { $arFields['PROPERTY_VALUES'][$properties['ADVERTISING']] = ''; $arFields['PROPERTY_VALUES'][$properties['ADVERTISING_ERIR']] = ''; $arFields['PROPERTY_VALUES'][$properties['ADVERTISING_SAMPLE_URL']] = ''; $arFields['PROPERTY_VALUES'][$properties['ADVERTISING_SAMPLE_ID']] = ''; $arFields['ACTIVE'] = 'N'; } } } else { //очистка ЕРИР и образца if(is_array($arFields['PROPERTY_VALUES'][$properties['ADVERTISING_ERIR']])) { $arFields['PROPERTY_VALUES'][$properties['ADVERTISING_ERIR']] = [ "".array_keys($arFields['PROPERTY_VALUES'][$properties['ADVERTISING_ERIR']])[0]."" => [ 'VALUE' => '' ] ]; } if(is_array($arFields['PROPERTY_VALUES'][$properties['ADVERTISING_SAMPLE_URL']])) { $arFields['PROPERTY_VALUES'][$properties['ADVERTISING_SAMPLE_URL']] = [ "".array_keys($arFields['PROPERTY_VALUES'][$properties['ADVERTISING_SAMPLE_URL']])[0]."" => [ 'VALUE' => '' ] ]; } if(is_array($arFields['PROPERTY_VALUES'][$properties['ADVERTISING_SAMPLE_ID']])) { $arFields['PROPERTY_VALUES'][$properties['ADVERTISING_SAMPLE_ID']] = [ "".array_keys($arFields['PROPERTY_VALUES'][$properties['ADVERTISING_SAMPLE_ID']])[0]."" => [ 'VALUE' => '' ] ]; } } } } return true; } AddEventHandler("search", "BeforeIndex", "OnBeforeIBlockElement"); function OnBeforeIBlockElement($arFields) { if($arFields['MODULE_ID'] == "iblock" && $arFields['PARAM2'] == IBLOCK_ID_CATALOG_CARS_USED) { if(array_key_exists("BODY", $arFields)) { preg_match("/CODE\=(\d+_\d+)/", $arFields['URL'], $matches); $code = $matches[1]; if(!empty($code)) { preg_match("/\s".$code."/", $arFields["BODY"], $code_matches); if(count($code_matches) == 0) { $arFields["BODY"] .= " ".$code; } } } } return $arFields; } function sanitize_string($str, $punctuation = false, $space = false, $replace = false) { return preg_replace("/[^\d". ($space ? "\s" : "") ."\.\_\-@". ($punctuation ? "\"'=+,;«»()&!?%" : "") ."\p{Latin}\p{Cyrillic}]/ui", $replace ? " " : "", $str); } ?>