[ "verify_peer"=>false, "verify_peer_name"=>false, ], ]; ob_get_clean(); error_reporting(E_ERROR); $current_representation = []; $bitrix_existed_brands = []; $bitrix_enabled_brands = []; $bitrix_hidden_brands = []; $bitrix_existed_models = []; $bitrix_enabled_models = []; $bitrix_hidden_models = []; $bitrix_existed_modifications = []; $bitrix_enabled_modifications = []; $bitrix_hidden_modifications = []; $api_data_titles = []; $api_data = []; $api_brands = []; $api_models = []; $api_modifications = []; $api_cars = []; $api_bodies = []; $api_engine_fuels = []; $bitrix_existed_cars = []; $bitrix_enabled_cars = []; $bitrix_hidden_cars = []; $bitrix_existed_bodies = []; $bitrix_enabled_bodies = []; $bitrix_existed_engine_fuels = []; $bitrix_enabled_engine_fuels = []; $new_brands = []; $new_models = []; $new_modifications = []; $new_cars = []; $hide_brands = []; $hide_models = []; $hide_modifications = []; $hide_cars = []; $repost_brands = []; $repost_models = []; $repost_modifications = []; $repost_cars = []; function elasticIndex($index, $payload) { $uid = implode("_", array_merge([ "date" => date("Ymd") ], array_intersect_key($payload, array_flip(['brand', 'model', 'modification'])))); print "uid = ".$uid." | ".$payload['status']."\n"; $id = md5($uid); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, ELASTICSEARCH_HOST.$index."/_doc/".$id."/"); curl_setopt($ch, CURLOPT_USERPWD, ELASTICSEARCH_USERNAME . ":" . ELASTICSEARCH_PASSWORD); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json' ]); curl_setopt($ch, CURLOPT_TIMEOUT, 2000); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //curl_setopt($ch, CURLOPT_FORBID_REUSE, 0); //curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload)); $response = curl_exec($ch); curl_close($ch); print $response."\n\n"; } $all_brands_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_BRANDS, ], false, false, [] ); while($all_brands_search_ob = $all_brands_search_res->GetNextElement()) { $brand_search = $all_brands_search_ob->GetFields(); $brand_search['PROPERTIES'] = $all_brands_search_ob->GetProperties(); array_push( $bitrix_existed_brands, $brand_search['PROPERTIES']['UID']['VALUE'] ); $current_representation[ $brand_search['PROPERTIES']['UID']['VALUE'] ] = [ "NAME" => $brand_search['NAME'], "STATUS" => "exists", "MODELS" => [], ]; if($brand_search['ACTIVE'] == "Y") { array_push( $bitrix_enabled_brands, $brand_search['PROPERTIES']['UID']['VALUE'] ); } else { array_push( $bitrix_hidden_brands, $brand_search['PROPERTIES']['UID']['VALUE'] ); } } $all_models_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_MODELS, ], false, false, [] ); while($all_models_search_ob = $all_models_search_res->GetNextElement()) { $model_search = $all_models_search_ob->GetFields(); $model_search['PROPERTIES'] = $all_models_search_ob->GetProperties(); $current_representation[ $model_search['PROPERTIES']['BRAND_UID']['VALUE'] ][ 'MODELS' ][ $model_search['PROPERTIES']['UID']['VALUE'] ] = [ "NAME" => $model_search['NAME'], "STATUS" => "exists", "MODIFICATIONS" => [], ]; array_push( $bitrix_existed_models, $model_search['PROPERTIES']['UID']['VALUE'] ); if($model_search['ACTIVE'] == "Y") { array_push( $bitrix_enabled_models, $model_search['PROPERTIES']['UID']['VALUE'] ); } else { array_push( $bitrix_hidden_models, $model_search['PROPERTIES']['UID']['VALUE'] ); } } function get_brand_by_model_uid($model_uid) { global $current_representation; foreach($current_representation AS $brand_entry_uid => $brand_entry) { foreach($brand_entry['MODELS'] AS $model_entry_uid => $model_entry) { if($model_uid === $model_entry_uid) { return $brand_entry_uid; } } } // print "NULL - ".$model_uid."\n"; return null; } function get_brand_model_by_modification_uid($modification_code) { global $current_representation; print "get_brand_model_by_modification_uid [ ".$modification_code." ]\n"; foreach($current_representation AS $brand_entry_uid => $brand_entry) { foreach($brand_entry['MODELS'] AS $model_entry_uid => $model_entry) { foreach($model_entry['MODIFICATIONS'] AS $modification_entry_code => $modification_entry) { if($modification_code === $modification_entry_code) { return [ "BRAND_UID" => $brand_entry_uid, "MODEL_UID" => $model_entry_uid, ]; } } } } return null; } $all_modifications_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_MODIFICATIONS, ], false, false, [] ); while($all_modifications_search_ob = $all_modifications_search_res->GetNextElement()) { $modification_search = $all_modifications_search_ob->GetFields(); $modification_search['PROPERTIES'] = $all_modifications_search_ob->GetProperties(); $brand_uid = get_brand_by_model_uid($modification_search['PROPERTIES']['MODEL_UID']['VALUE']); $current_representation[ $brand_uid ][ 'MODELS' ][ $modification_search['PROPERTIES']['MODEL_UID']['VALUE'] ][ 'MODIFICATIONS' ][ $modification_search['CODE'] ] = [ "NAME" => $modification_search['NAME'], "STATUS" => "exists", ]; array_push( $bitrix_existed_modifications, $modification_search['CODE'] ); if($modification_search['ACTIVE'] == "Y") { array_push( $bitrix_enabled_modifications, $modification_search['CODE'] ); } else { array_push( $bitrix_hidden_modifications, $modification_search['CODE'] ); } } $all_cars_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_CATALOG_CARS_NEW, ], false, false, [] ); while($all_cars_search_ob = $all_cars_search_res->GetNextElement()) { $car_search = $all_cars_search_ob->GetFields(); $car_search['PROPERTIES'] = $all_cars_search_ob->GetProperties(); array_push( $bitrix_existed_cars, $car_search['PROPERTIES']['UID']['VALUE'] ); if($car_search['ACTIVE'] == "Y") { array_push( $bitrix_enabled_cars, $car_search['PROPERTIES']['UID']['VALUE'] ); } else { array_push( $bitrix_hidden_cars, $car_search['PROPERTIES']['UID']['VALUE'] ); } } //наполняем массивы имеющихся и активных типов кузова $all_bodies_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_BODIES, ], false, false, [] ); while($all_bodies_search_ob = $all_bodies_search_res->GetNextElement()) { $body_search = $all_bodies_search_ob->GetFields(); array_push( $bitrix_existed_bodies, $body_search['NAME'] ); if($body_search['ACTIVE'] == "Y") { array_push( $bitrix_enabled_bodies, $body_search['NAME'] ); } } //наполняем массивы имеющихся и активных типов двигателя $all_engine_fuels_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_ENGINE_FUELS, ], false, false, [] ); while($all_engine_fuels_search_ob = $all_engine_fuels_search_res->GetNextElement()) { $engine_fuel_search = $all_engine_fuels_search_ob->GetFields(); array_push( $bitrix_existed_engine_fuels, $engine_fuel_search['NAME'] ); if($engine_fuel_search['ACTIVE'] == "Y") { array_push( $bitrix_enabled_engine_fuels, $engine_fuel_search['NAME'] ); } } print "bitrix_existed_brands = ".count($bitrix_existed_brands)."\n"; print "bitrix_existed_models = ".count($bitrix_existed_models)."\n"; print "bitrix_existed_modifications = ".count($bitrix_existed_modifications)."\n"; print "bitrix_existed_cars = ".count($bitrix_existed_cars)."\n"; $api_modifications_url = API_HOST."/site/Vehicle/GetModifications"; $content = file_get_contents($api_modifications_url, false, stream_context_create($arrContextOptions)); print $api_modifications_url."\n\n"; file_put_contents("./api_modifications.json", $content); print "downloaded JSON in api_modifications.json\n"; $json = json_decode($content, true); $brands_and_models = []; //print "---------------\n\n"; //print_r(); //print "---------------\n\n"; $c = 0; print "processing JSON\n"; //prepare brands list from API foreach($json AS $entry) { if(!isset($api_data[ $entry['brand']['id'] ])) { $api_data[ $entry['brand']['id'] ] = [ "models" => [] ]; } if(!isset($api_data_titles[ $entry['brand']['name'] ])) { $api_data_titles[ $entry['brand']['name'] ] = [ "models" => [] ]; } if(!in_array($entry['brand']['id'], $api_brands)) { array_push($api_brands, $entry['brand']['id']); } } //prepare models list from API foreach($json AS $entry) { if(!isset($api_data[ $entry['brand']['id'] ]['models'][ $entry['model']['id'] ])) { $api_data[ $entry['brand']['id'] ]['models'][ $entry['model']['id'] ] = [ "modifications" => [] ]; } if(!isset($api_data_titles[ $entry['brand']['name'] ]['models'][ $entry['model']['name'] ])) { $api_data_titles[ $entry['brand']['name'] ]['models'][ $entry['model']['name'] ] = [ "modifications" => [] ]; } if(!in_array($entry['model']['id'], $api_models)) { array_push($api_models, $entry['model']['id']); } } //prepare modifications list from API foreach($json AS $entry) { if(!isset($api_data[ $entry['brand']['id'] ]['models'][ $entry['model']['id'] ]['modifications'][ $entry['modification'] ])) { $api_data[ $entry['brand']['id'] ]['models'][ $entry['model']['id'] ]['modifications'][ $entry['modification'] ] = [ "cars" => [] ]; } if(!isset($api_data_titles[ $entry['brand']['name'] ]['models'][ $entry['model']['name'] ]['modifications'][ $entry['modification'] ])) { $api_data_titles[ $entry['brand']['name'] ]['models'][ $entry['model']['name'] ]['modifications'][ $entry['modification'] ] = [ "cars" => [] ]; } if(!in_array($entry['modification'], $api_modifications)) { array_push($api_modifications, $entry['modification']); } } //prepare cars list from API foreach($json AS $entry) { if(!isset($api_data[ $entry['brand']['id'] ]['models'][ $entry['model']['id'] ]['modifications'][ $entry['modification'] ]['cars'][ $entry['uid'] ])) { array_push($api_data[ $entry['brand']['id'] ]['models'][ $entry['model']['id'] ]['modifications'][ $entry['modification'] ]['cars'], $entry['uid']); } if(!isset($api_data_titles[ $entry['brand']['name'] ]['models'][ $entry['model']['name'] ]['modifications'][ $entry['modification'] ]['cars'][ $entry['uid'] ])) { array_push($api_data_titles[ $entry['brand']['name'] ]['models'][ $entry['model']['name'] ]['modifications'][ $entry['modification'] ]['cars'], $entry['uid']); } if(!in_array($entry['uid'], $api_cars)) { array_push($api_cars, $entry['uid']); } } ksort($api_data_titles); foreach($api_data_titles AS $k => $v) { $models = $v['models']; ksort($models); foreach($models AS $kk => $vv) { $modifications = $vv['modifications']; ksort($modifications); $models[$kk]['modifications'] = $modifications; } $api_data_titles[$k]['models'] = $models; } file_put_contents("./api_data_titles.json", json_encode($api_data_titles)); //print_r($bitrix_existed_models); foreach($bitrix_existed_models AS $existed_model) { //print $existed_model." ?\n"; if(!in_array($existed_model, $api_models)) { print "HIDE MODEL ".$existed_model."\n"; } } ////print_r($api_data); ////die(); foreach($json AS $entry) { if(!isset($brands_and_models[ $entry['brand']['id'] ])) { $brands_and_models[ $entry['brand']['id'] ] = [ "name" => $entry['brand']['name'], "models" => [ $entry['model']['id'] => [ "name" => $entry['model']['name'], "modifications" => [ $entry['modification'] ], ] ], ]; } else { if(!isset($brands_and_models[ $entry['brand']['id'] ][ 'models' ][ $entry['model']['id'] ])) { $brands_and_models[ $entry['brand']['id'] ][ 'models' ][ $entry['model']['id'] ] = [ "name" => $entry['model']['name'], "modifications" => [ $entry['modification'] ], ]; } if(!in_array($entry['modification'], $brands_and_models[ $entry['brand']['id'] ][ 'models' ][ $entry['model']['id'] ][ 'modifications' ])) { array_push($brands_and_models[ $entry['brand']['id'] ][ 'models' ][ $entry['model']['id'] ][ 'modifications' ], $entry['modification']); } } if($c === 0) { print_r($entry); } $c++; } //print_r($brands_and_models); //die(); $c = 0; $bitrix_brands = []; $bitrix_models = []; $bitrix_modifications = []; $bitrix_modifications_codes = []; foreach($brands_and_models AS $brand_uid => $brand) { //print $uid." - ".$brand['name']."\n"; if(in_array($brand_uid, $bitrix_hidden_brands)) { array_push($repost_brands, $brand['name']); } //if($c < 2) //{ //добавляем новую марку $brand_existed = null; $brand_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_BRANDS, "PROPERTY_UID" => $brand_uid ], false, ["nPageSize" => 1], [] ); while($brand_search_ob = $brand_search_res->GetNextElement()) { $brand_existed = $brand_search_ob->GetFields(); $brand_existed['PROPERTIES'] = $brand_search_ob->GetProperties(); $bitrix_brands[ $brand_uid ] = $brand_existed['ID']; } $code = CUtil::translit( $brand['name'], "ru", [ "max_len" => 255, "change_case" => "L", "replace_space" => "-", "replace_other" => "-", ] ); if($brand_existed !== null) { $brand_update_payload = [ "ACTIVE" => "Y", "CODE" => $code, "NAME" => $brand['name'], ]; if(!in_array("simulate", $GLOBALS['argv'])) { $update_element = new CIBlockElement; $update_result = $update_element->Update($brand_existed['ID'], $brand_update_payload); } $result = models_check($bitrix_models, $bitrix_modifications, $bitrix_modifications_codes, $brand_uid, $brand); $bitrix_models = $result['bitrix_models']; $bitrix_modifications = $result['bitrix_modifications']; $bitrix_modifications_codes = $result['bitrix_modifications_codes']; array_push( $bitrix_enabled_brands, $brand_uid ); } else { $brand_element = new CIBlockElement; $brand_payload = [ "IBLOCK_SECTION_ID" => false, "IBLOCK_ID" => IBLOCK_ID_BRANDS, "PROPERTY_VALUES" => [ "UID" => $brand_uid, "TRANSCRIPTION" => $brand['name'], ], "NAME" => $brand['name'], "CODE" => $code, "ACTIVE" => "Y", ]; array_push($new_brands, $brand['name']); if(!in_array("simulate", $GLOBALS['argv'])) { if($new_brand_id = $brand_element->Add($brand_payload)) { $bitrix_brands[$brand_uid] = $new_brand_id; } else { echo "brand error: ".$brand_element->LAST_ERROR; } } // elasticIndex("events_cars", [ // "type" => "add" // ]); $result = models_check($bitrix_models, $bitrix_modifications, $bitrix_modifications_codes, $brand_uid, $brand); $bitrix_models = $result['bitrix_models']; $bitrix_modifications = $result['bitrix_modifications']; $bitrix_modifications_codes = $result['bitrix_modifications_codes']; array_push( $bitrix_enabled_brands, $brand_uid ); } //print "\n------------------------------\n"; //} $c++; } function set_brand_activity($brand_uid, $active = "N") { print "set_brand_activity [ ".$brand_uid.", ".$active." ]\n"; global $hide_brands; global $current_representation; $brand_id = null; $brand_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_BRANDS, "PROPERTY_UID" => $brand_uid ], false, false, [] ); while($brand_search_ob = $brand_search_res->GetNextElement()) { $brand_search = $brand_search_ob->GetFields(); $brand_id = $brand_search['ID']; } if($brand_id !== null) { if(!in_array("simulate", $GLOBALS['argv'])) { $update_element = new CIBlockElement; $update_result = $update_element->Update($brand_id, [ "ACTIVE" => $active, ]); } if($brand_search['ACTIVE'] == "Y" && $active == "N") { $current_representation[ $brand_uid ]['STATUS'] = "disabled"; } if($brand_search['ACTIVE'] == "N" && $active == "Y") { $current_representation[ $brand_uid ]['STATUS'] = "enabled"; } if($active == "N") { array_push($hide_brands, $brand_search['NAME']); } } } function set_model_activity($model_uid, $active = "N") { print "set_model_activity [ ".$model_uid.", ".$active." ]\n"; global $hide_models; global $current_representation; //print "set_model_activity - [ ".$model_uid." ]\n"; $model_id = null; $model_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_MODELS, "PROPERTY_UID" => $model_uid ], false, false, [] ); while($model_search_ob = $model_search_res->GetNextElement()) { $model_search = $model_search_ob->GetFields(); $model_id = $model_search['ID']; } if($model_id !== null) { if(!in_array("simulate", $GLOBALS['argv'])) { $update_element = new CIBlockElement; $update_result = $update_element->Update($model_id, [ "ACTIVE" => $active, ]); } $brand_uid = get_brand_by_model_uid($model_uid); if($model_search['ACTIVE'] == "Y" && $active == "N") { $current_representation[ $brand_uid ][ 'MODELS' ][ $model_uid ][ 'STATUS' ] = "disabled"; } if($model_search['ACTIVE'] == "N" && $active == "Y") { $current_representation[ $brand_uid ][ 'MODELS' ][ $model_uid ][ 'STATUS' ] = "enabled"; } if($active == "N") { array_push($hide_models, $model_search['NAME']); } } } function set_modification_activity($modification_code, $active = "N") { print "set_modification_activity [ ".$modification_code.", ".$active." ]\n"; global $hide_modifications; global $current_representation; $modification_id = null; $modification_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_MODIFICATIONS, "CODE" => $modification_code ], false, false, [] ); while($modification_search_ob = $modification_search_res->GetNextElement()) { $modification_search = $modification_search_ob->GetFields(); $modification_id = $modification_search['ID']; } if($modification_id !== null) { if(!in_array("simulate", $GLOBALS['argv'])) { $update_element = new CIBlockElement; $update_result = $update_element->Update($modification_id, [ "ACTIVE" => $active, ]); } $brand_model_uids = get_brand_model_by_modification_uid($modification_code); //print "----------get_brand_model_by_modification_uid [ ".$modification_code." ]\n"; //print_r($brand_model_uids); //print "\n"; if($brand_model_uids !== null) { //print "set_modification_activity [ ".$modification_code.", ".$active." ][ brand_model_uids ] [ ".$brand_model_uids['BRAND_UID']." ] [ ".$brand_model_uids['MODEL_UID']." ] [ ".$modification_search['ACTIVE']." ][ ".$active." ] NOT NULL \n"; if($modification_search['ACTIVE'] == "Y" && $active == "N") { //print "set_modification_activity [ ".$modification_code.", ".$active." ][ brand_model_uids ] [ ".$brand_model_uids['BRAND_UID']." ] [ ".$brand_model_uids['MODEL_UID']." ] [ ".$modification_search['ACTIVE']." ][ ".$active." ] NOT NULL DISABLE \n"; $current_representation[ $brand_model_uids['BRAND_UID'] ][ 'MODELS' ][ $brand_model_uids['MODEL_UID'] ][ 'MODIFICATIONS' ][ $modification_code ][ 'STATUS' ] = "disabled"; } if($modification_search['ACTIVE'] == "N" && $active == "Y") { //print "set_modification_activity [ ".$modification_code.", ".$active." ][ brand_model_uids ] [ ".$brand_model_uids['BRAND_UID']." ] [ ".$brand_model_uids['MODEL_UID']." ] [ ".$modification_search['ACTIVE']." ][ ".$active." ] NOT NULL ENABLE \n"; $current_representation[ $brand_model_uids['BRAND_UID'] ][ 'MODELS' ][ $brand_model_uids['MODEL_UID'] ][ 'MODIFICATIONS' ][ $modification_code ][ 'STATUS' ] = "enabled"; } } //print "\n\n"; if($active == "N") { array_push($hide_modifications, $modification_search['NAME']); } } } function set_car_activity($car_uid, $active = "N") { global $hide_cars; //print "SET ACTIVE ".$car_uid." | ".$active."\n"; $car_id = null; $car_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_CATALOG_CARS_NEW, "PROPERTY_UID" => $car_uid ], false, false, [] ); while($car_search_ob = $car_search_res->GetNextElement()) { $car_search = $car_search_ob->GetFields(); $car_id = $car_search['ID']; } if($car_id !== null) { if(!in_array("simulate", $GLOBALS['argv'])) { $update_element = new CIBlockElement; $update_result = $update_element->Update($car_id, [ "ACTIVE" => $active, ]); if($active == "N") { array_push($hide_cars, $car_search['NAME']); } } } } function set_body_activity($body_name, $active = "N") { $body_id = null; $body_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_BODIES, "NAME" => $body_name ], false, false, [] ); while($body_search_ob = $body_search_res->GetNextElement()) { $body_search = $body_search_ob->GetFields(); $body_id = $body_search['ID']; } if($body_id !== null) { if(!in_array("simulate", $GLOBALS['argv'])) { $update_element = new CIBlockElement; $update_result = $update_element->Update($body_id, [ "ACTIVE" => $active, ]); } } } function set_engine_fuel_activity($engine_fuel_name, $active = "N") { $engine_fuel_id = null; $engine_fuel_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_ENGINE_FUELS, "NAME" => $engine_fuel_name ], false, false, [] ); while($engine_fuel_search_ob = $engine_fuel_search_res->GetNextElement()) { $engine_fuel_search = $engine_fuel_search_ob->GetFields(); $engine_fuel_id = $engine_fuel_search['ID']; } if($engine_fuel_id !== null) { if(!in_array("simulate", $GLOBALS['argv'])) { $update_element = new CIBlockElement; $update_result = $update_element->Update($engine_fuel_id, [ "ACTIVE" => $active, ]); } } } function models_check($bitrix_models, $bitrix_modifications, $bitrix_modifications_codes, $brand_uid, $brand) { global $new_models; global $new_modifications; global $bitrix_hidden_models; global $bitrix_hidden_modifications; global $repost_models; global $repost_modifications; global $bitrix_enabled_models; global $bitrix_enabled_modifications; foreach($brand['models'] AS $model_uid => $model) { $model_name = $model['name']; if(in_array($model_uid, $bitrix_hidden_models)) { array_push($repost_models, $model_name); } $model_existed = null; $model_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_MODELS, "PROPERTY_UID" => $model_uid ], false, ["nPageSize" => 1], [] ); while($model_search_ob = $model_search_res->GetNextElement()) { $model_existed = $model_search_ob->GetFields(); $model_existed['PROPERTIES'] = $model_search_ob->GetProperties(); $bitrix_models[$model_uid] = $model_existed['ID']; } $code = CUtil::translit( $model_name, "ru", [ "max_len" => 255, "change_case" => "L", "replace_space" => "-", "replace_other" => "-", ] ); if($model_existed !== null) { //print "MODEL ".$model_uid." EXISTED"; $model_update_payload = [ "ACTIVE" => "Y", "NAME" => $model_name, "CODE" => $code, ]; if(!in_array("simulate", $GLOBALS['argv'])) { $update_element = new CIBlockElement; $update_result = $update_element->Update($model_existed['ID'], $model_update_payload); } array_push( $bitrix_enabled_models, $model_uid ); } else { $model_element = new CIBlockElement; $model_payload = [ "IBLOCK_SECTION_ID" => false, "IBLOCK_ID" => IBLOCK_ID_MODELS, "PROPERTY_VALUES" => [ "BRAND_UID" => $brand_uid, "UID" => $model_uid, ], "NAME" => $model_name, "CODE" => $code, "ACTIVE" => "Y", ]; array_push($new_models, $model['name']); if(!in_array("simulate", $GLOBALS['argv'])) { if($new_model_id = $model_element->Add($model_payload)) { $bitrix_models[$model_uid] = $new_model_id; //echo "new_model_id: ".$new_model_id; } else { echo "model error: ".$model_element->LAST_ERROR; } } array_push( $bitrix_enabled_models, $model_uid ); } foreach($model['modifications'] AS $modification) { print "MOD ".$modification."\n"; $modification_existed = null; if(in_array($modification, $bitrix_hidden_modifications)) { array_push($repost_modifications, $modification); } $NAME = $brand['name']." ".$model_name." ".$modification; $CODE = CUtil::translit( $NAME, "ru", [ "max_len" => 255, "change_case" => "L", "replace_space" => "-", "replace_other" => "-", ] ); //"ID" $modification_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_MODIFICATIONS, "CODE" => $CODE ], false, ["nPageSize" => 1], [] ); while($modification_search_ob = $modification_search_res->GetNextElement()) { $m_res = $modification_search_ob->GetFields(); if(isset($m_res['ID'])) { $modification_existed = $m_res['ID']; $bitrix_modifications[md5($brand_uid.$model_uid.$modification)] = $m_res['ID']; array_push($bitrix_modifications_codes, $CODE); array_push( $bitrix_enabled_modifications, $CODE ); } } if($modification_existed === null) { $modification_element = new CIBlockElement; $modification_payload = [ "IBLOCK_SECTION_ID" => false, "IBLOCK_ID" => IBLOCK_ID_MODIFICATIONS, "PROPERTY_VALUES" => [ "MODEL_UID" => $model_uid, "TITLE" => $modification ], "NAME" => $NAME, "CODE" => $CODE, "ACTIVE" => "Y", ]; if(!in_array("simulate", $GLOBALS['argv'])) { if($new_modification_id = $modification_element->Add($modification_payload)) { $bitrix_modifications[md5($brand_uid.$model_uid.$modification)] = $new_modification_id; array_push($bitrix_modifications_codes, $CODE); array_push($new_modifications, $NAME); array_push( $bitrix_enabled_modifications, $CODE ); } else { echo "modification error: ".$modification_element->LAST_ERROR; } } } } } return [ "bitrix_models" => $bitrix_models, "bitrix_modifications" => $bitrix_modifications, "bitrix_modifications_codes" => $bitrix_modifications_codes ]; } print "bitrix brands count: ".count($bitrix_brands)."\n"; //print_r($bitrix_brands); print "bitrix models count: ".count($bitrix_models)."\n"; //print_r($bitrix_models); print "bitrix modifications count: ".count($bitrix_modifications)."\n"; //print_r($bitrix_modifications); //кешируем новые UID ТС $json_new_cars = []; foreach($json AS $car) { array_push($json_new_cars, $car['uid']); } $car_codes = []; $c = 0; foreach($json AS $car) { $name = "".$car['brand']['name']." ".$car['model']['name']." ".$car['modification'].""; if(in_array($car['uid'], $bitrix_hidden_cars)) { array_push($repost_cars, $name); } else { if(!in_array($car['uid'], $bitrix_existed_cars)) { $c++; array_push($new_cars, $name); } } //обновляем список ТС в битриксе $modification_content = file_get_contents(API_HOST."/site/Vehicle/GetCatalog?id=". $car['uid'] ."", false, stream_context_create($arrContextOptions)); $modification_json = json_decode($modification_content, true); // print "downloaded modification_content [ modification_json ][ ".$car['uid']." ]\n"; $title = $name." ".$car['modificationYear'].""; $code = CUtil::translit( str_replace([""", " ", "+"], ['"', "-", "-plus-"], $title), "ru", [ "max_len" => 255, "change_case" => "L", "replace_space" => "-", "replace_other" => "-", "safe_chars" => "-" ] ); //print "new car --- uid ".$car['uid']." | code ".$code."\n"; $PROPERTY_VALUES = [ "UID" => $car['uid'], "BRAND" => $bitrix_brands[ $car['brand']['id'] ], "MODEL" => $bitrix_models[ $car['model']['id'] ], "MODIFICATION" => $bitrix_modifications[ md5($car['brand']['id'].$car['model']['id'].$car['modification']) ], "MODIFICATION_YEAR" => $car['modificationYear'], "GEAR" => $car['gear'], "DRIVE" => $car['drive'], "BODY" => $car['body'], "ENGINE_POWER" => $car['engine']['power'], "ENGINE_VOLUME" => $car['engine']['volume'], "ENGINE_FUEL" => $car['engine']['fuel'], "PRICE" => $car['price'], "IMAGE_URL" => $car['url'], "COMPLECTATION_BODY" => json_encode($modification_json['body']), "COMPLECTATION_INTERIOR" => json_encode($modification_json['interior']), "COMPLECTATION_SECURITY" => json_encode($modification_json['security']), "COMPLECTATION_GUARANTEE" => json_encode($modification_json['guarantee']), "COMPLECTATION_TECHNICAL_DESCRIPTION" => json_encode($modification_json['technicalDescription']), "COMPLECTATION_FUNCTIONAL_EQUIPMENT" => json_encode($modification_json['functionalEquipment']), "COMPLECTATION_TOTAL_INFORMATION" => json_encode($modification_json['totalInformation']), "LEASING_PROGRAMS" => $car['programms'], ]; if(!in_array($car['body'], $api_bodies)) { array_push($api_bodies, $car['body']); } if(!in_array($car['engine']['fuel'], $api_engine_fuels)) { array_push($api_engine_fuels, $car['engine']['fuel']); } //"ID" $car_existed = null; $car_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_CATALOG_CARS_NEW, "PROPERTY_UID" => $car['uid'] ], false, ["nPageSize" => 1], [] ); while($car_search_ob = $car_search_res->GetNextElement()) { $car_existed = $car_search_ob->GetFields(); //print "CAR FOUND\n\n"; //print_r($car_existed); } $car_update_payload = [ "IBLOCK_SECTION" => false, "NAME" => $name, "CODE" => $code, "ACTIVE" => "Y", ]; if($car_existed !== null) { if(!in_array("simulate", $GLOBALS['argv'])) { $car_update_element = new CIBlockElement; $car_update_result = $car_update_element->Update($car_existed['ID'], $car_update_payload); } CIBlockElement::SetPropertyValuesEx($car_existed['ID'], IBLOCK_ID_CATALOG_CARS_NEW, $PROPERTY_VALUES, []); } else { //if($c === 0) //{ $car_element = new CIBlockElement; $car_payload = [ "IBLOCK_SECTION_ID" => false, "IBLOCK_ID" => IBLOCK_ID_CATALOG_CARS_NEW, "NAME" => $name, "CODE" => $code, "PROPERTY_VALUES" => $PROPERTY_VALUES, "ACTIVE" => "Y", ]; if(!in_array("simulate", $GLOBALS['argv'])) { if($new_car_id = $car_element->Add($car_payload)) { //$bitrix_brands[$brand_uid] = $new_brand_id; //echo "new car id: ".$new_car_id; } else { print "CAR ERROR: ".$car_element->LAST_ERROR." | ".$car['uid']." | ".$code."\n"; if($car_element->LAST_ERROR == "Элемент с таким символьным кодом уже существует.
") { $car_with_problem = null; $car_with_problem_res = CIBlockElement::GetList( [ "ID" => "ASC" ], [ "IBLOCK_ID" => IBLOCK_ID_CATALOG_CARS_NEW, "CODE" => $code ], false, ["nPageSize" => 1], [] ); while($car_with_problem_ob = $car_with_problem_res->GetNextElement()) { $car_with_problem = $car_with_problem_ob->GetFields(); $car_with_problem['PROPERTIES'] = $car_with_problem_ob->GetProperties(); } if($car_with_problem !== null) { print "REPLACE FOR ".$car_with_problem['ID']." uid => ".$car['uid']."\n\n"; print_r([ "ID" => $car_with_problem['ID'], "NAME" => $car_with_problem['NAME'], "CODE" => $car_with_problem['CODE'], "UID" => $car_with_problem['CODE'], ]); print "\n\n\n"; CIBlockElement::SetPropertyValuesEx($car_with_problem['ID'], IBLOCK_ID_CATALOG_CARS_NEW, $PROPERTY_VALUES, []); } } } } //} } } //print "car_codes?\n"; /* foreach($car_codes AS $cc => $count) { if($count > 1) { print "cc ".$cc." - ".$count."\n"; } } */ $traceback_message = "Отчет:\n\n"; //print "bitrix_existed_brands\n"; $c = 0; foreach($bitrix_existed_brands AS $k => $b) { if($c < 10) { //print $k." => ".$b."\n"; $c++; } } //print "bitrix_brands\n"; $c = 0; foreach($bitrix_brands AS $k => $b) { if($c < 10) { //print $k." => ".$b."\n"; $c++; } } //BRANDS $trace = "Новых марок: ".count($new_brands)."\n"; foreach($new_brands AS $v) { $trace .= $v."\n"; } $traceback_message .= $trace."\n"; $trace = "Переопубликовано марок: ".count($repost_brands)."\n"; foreach($repost_brands AS $v) { $trace .= $v."\n"; } $traceback_message .= $trace; $b = 0; foreach($bitrix_enabled_brands AS $enabled_brand_uid) { //print "bitrix_enabled_brands - enabled_brand_uid [ ".$enabled_brand_uid." ]\n"; //if($bitrix_brands[$enabled_brand_uid] !== null) //{} //else //{ if(!in_array($enabled_brand_uid, $api_brands)) { set_brand_activity($enabled_brand_uid, "N"); $b++; } else { set_brand_activity($enabled_brand_uid, "Y"); } //} } $trace = "Снято с публикации марок: ".count($hide_brands)."\n"; foreach($hide_brands AS $v) { $trace .= $v."\n"; } $traceback_message .= $trace."\n\n"; //MODELS $trace = "Новых моделей: ".count($new_models)."\n"; foreach($new_models AS $v) { $trace .= $v."\n"; } $traceback_message .= $trace."\n"; $trace = "Переопубликовано моделей: ".count($repost_models)."\n"; foreach($repost_models AS $v) { $trace .= $v."\n"; } $traceback_message .= $trace."\n"; //print "----------bitrix_enabled_models----------\n"; //print_r($bitrix_enabled_models); //print "--------------------\n"; $m = 0; foreach($bitrix_enabled_models AS $enabled_model_uid) { //print "bitrix_enabled_models - enabled_model_uid [ ".$enabled_model_uid." ]\n"; // if($bitrix_models[$enabled_model_uid] !== null) // {} // else // { if(!in_array($enabled_model_uid, $api_models)) { set_model_activity($enabled_model_uid, "N"); $m++; } else { set_model_activity($enabled_model_uid, "Y"); } // } } $trace = "Снято с публикации моделей: ".count($hide_models)."\n"; foreach($hide_models AS $v) { $trace .= $v."\n"; } $traceback_message .= $trace."\n\n"; //MODIFICATIONS $trace = "Новых модификаций: ".count($new_modifications)."\n"; foreach($new_modifications AS $v) { $trace .= $v."\n"; } $traceback_message .= $trace; $trace = "Переопубликовано модификаций: ".count($repost_modifications)."\n"; foreach($repost_modifications AS $v) { $trace .= $v."\n"; } $traceback_message .= $trace; $md = 0; $bitrix_enabled_modifications = array_unique($bitrix_enabled_modifications); foreach($bitrix_enabled_modifications AS $enabled_modifications_code) { if(!in_array($enabled_modifications_code, $bitrix_modifications_codes)) { set_modification_activity($enabled_modifications_code, "N"); $md++; } else { set_modification_activity($enabled_modifications_code, "Y"); } } $trace = "Снято с публикации модификаций: ".count($hide_modifications); foreach($hide_modifications AS $v) { $trace .= $v."\n"; } $traceback_message .= $trace."\n\n"; //CARS $trace = "Новых ТС: ".count($new_cars)."\n"; foreach($new_cars AS $v) { $trace .= $v."\n"; } $traceback_message .= $trace."\n"; $trace = "Переопубликовано ТС: ".count($repost_cars)."\n"; foreach($repost_cars AS $v) { $trace .= $v."\n"; } $traceback_message .= $trace."\n"; //print "bitrix_existed_cars = ".count($bitrix_existed_cars)."\n"; //print "json_new_cars = ".count($json_new_cars)."\n"; $h = 0; foreach($bitrix_enabled_cars AS $enabled_car_uid) { if(!in_array($enabled_car_uid, $json_new_cars)) { $h++; set_car_activity($enabled_car_uid, "N"); } } $trace = "Снято с публикации ТС: ".count($hide_cars)."\n"; foreach($hide_cars AS $v) { $trace .= $v."\n"; } $traceback_message .= $trace."\n"; //print "\n\n".$trace."\n\n"; print $traceback_message; //кузов foreach($api_bodies AS $api_body) { if(!in_array($api_body, $bitrix_enabled_bodies)) { //выключено if(!in_array($api_body, $bitrix_existed_bodies)) { //не существует, создаем $code = CUtil::translit( $api_body, "ru", [ "max_len" => 255, "change_case" => "L", "replace_space" => "-", "replace_other" => "-", ] ); $body_element = new CIBlockElement; $body_payload = [ "IBLOCK_ID" => IBLOCK_ID_BODIES, "PROPERTY_VALUES" => [ "SINGULAR_NAME" => $api_body, "PLURAL_NAME" => $api_body, "GENITIVE_NAME" => $api_body, ], "NAME" => $api_body, "CODE" => $code, "ACTIVE" => "Y", ]; if(!in_array("simulate", $GLOBALS['argv'])) { $body_element->Add($body_payload); array_push($bitrix_existed_bodies, $api_body); } } else { //существует, включаем set_body_activity($api_body, "Y"); } } } foreach($bitrix_existed_bodies AS $bitrix_body) { if(!in_array($bitrix_body, $api_bodies)) { //выключаем set_body_activity($bitrix_body, "N"); } } //топливо foreach($api_engine_fuels AS $api_engine_fuel) { if(!in_array($api_engine_fuel, $bitrix_enabled_engine_fuels)) { //выключено if(!in_array($api_engine_fuel, $bitrix_existed_engine_fuels)) { //не существует, создаем $code = CUtil::translit( $api_engine_fuel, "ru", [ "max_len" => 255, "change_case" => "L", "replace_space" => "-", "replace_other" => "-", ] ); $engine_fuel_element = new CIBlockElement; $engine_fuel_payload = [ "IBLOCK_ID" => IBLOCK_ID_ENGINE_FUELS, "PROPERTY_VALUES" => [ "SINGULAR_NAME" => "автомобиль с двигателем ".$api_engine_fuel, "PLURAL_NAME" => "автомобили с двигателем ".$api_engine_fuel, "GENITIVE_NAME" => "автомобилей с двигателем ".$api_engine_fuel, ], "NAME" => $api_engine_fuel, "CODE" => $code, "ACTIVE" => "Y", ]; if(!in_array("simulate", $GLOBALS['argv'])) { $engine_fuel_element->Add($engine_fuel_payload); array_push($bitrix_existed_engine_fuels, $api_engine_fuel); } } else { //существует, включаем set_engine_fuel_activity($api_engine_fuel, "Y"); } } } foreach($bitrix_existed_engine_fuels AS $bitrix_engine_fuel) { if(!in_array($bitrix_engine_fuel, $api_engine_fuels)) { //выключаем set_engine_fuel_activity($bitrix_engine_fuel, "N"); } } /* search reindex start -------------------------------------------------------------*/ if(!in_array("simulate", $GLOBALS['argv'])) { $reindex_handler = false; $reindex_handler = CSearch::ReIndexAll(false, 60, $reindex_handler); while(is_array($reindex_handler)) { $reindex_handler = CSearch::ReIndexAll(false, 60, $reindex_handler); } } /* search reindex end -------------------------------------------------------------*/ /* sitemap regen start -------------------------------------------------------------*/ $ID = 1; $NS = []; $SESSION = []; $arSitemap = null; if($ID > 0) { $dbSitemap = SitemapTable::getById($ID); $arSitemap = $dbSitemap->fetch(); $dbSite = SiteTable::getByPrimary($arSitemap['SITE_ID']); $arSitemap['SITE'] = $dbSite->fetch(); } $arSitemap['SETTINGS'] = unserialize($arSitemap['SETTINGS'], ['allowed_classes' => false]); $arSitemapSettings = array( 'SITE_ID' => $arSitemap['SITE_ID'], 'PROTOCOL' => $arSitemap['SETTINGS']['PROTO'] == 1 ? 'https' : 'http', 'DOMAIN' => $arSitemap['SETTINGS']['DOMAIN'], ); function seoSitemapGetFilesData($PID, $arSitemap, $arCurrentDir, $sitemapFile) { global $ID; global $NS; global $SESSION; global $arSitemap; global $arSitemapSettings; //global $NS; $arDirList = array(); if($arCurrentDir['ACTIVE'] == SitemapRuntimeTable::ACTIVE) { $list = \CSeoUtils::getDirStructure( $arSitemap['SETTINGS']['logical'] == 'Y', $arSitemap['SITE_ID'], $arCurrentDir['ITEM_PATH'] ); foreach($list as $dir) { $dirKey = "/".ltrim($dir['DATA']['ABS_PATH'], "/"); if($dir['TYPE'] == 'F') { if(!isset($arSitemap['SETTINGS']['FILE'][$dirKey]) || $arSitemap['SETTINGS']['FILE'][$dirKey] == 'Y') { if(preg_match($arSitemap['SETTINGS']['FILE_MASK_REGEXP'], $dir['FILE'])) { $f = new IO\File($dir['DATA']['PATH'], $arSitemap['SITE_ID']); $sitemapFile->addFileEntry($f); $NS['files_count']++; } } } else { if(!isset($arSitemap['SETTINGS']['DIR'][$dirKey]) || $arSitemap['SETTINGS']['DIR'][$dirKey] == 'Y') { $arDirList[] = $dirKey; } } } } else { $len = mb_strlen($arCurrentDir['ITEM_PATH']); if(!empty($arSitemap['SETTINGS']['DIR'])) { foreach($arSitemap['SETTINGS']['DIR'] as $dirKey => $checked) { if($checked == 'Y') { if(strncmp($arCurrentDir['ITEM_PATH'], $dirKey, $len) === 0) { $arDirList[] = $dirKey; } } } } if(!empty($arSitemap['SETTINGS']['FILE'])) { foreach($arSitemap['SETTINGS']['FILE'] as $dirKey => $checked) { if($checked == 'Y') { if(strncmp($arCurrentDir['ITEM_PATH'], $dirKey, $len) === 0) { $fileName = IO\Path::combine( SiteTable::getDocumentRoot($arSitemap['SITE_ID']), $dirKey ); if(!is_dir($fileName)) { $f = new IO\File($fileName, $arSitemap['SITE_ID']); if($f->isExists() && !$f->isSystem() && preg_match($arSitemap['SETTINGS']['FILE_MASK_REGEXP'], $f->getName()) ) { $sitemapFile->addFileEntry($f); $NS['files_count']++; } } } } } } } if(count($arDirList) > 0) { foreach($arDirList as $dirKey) { $arRuntimeData = array( 'PID' => $PID, 'ITEM_PATH' => $dirKey, 'PROCESSED' => SitemapRuntimeTable::UNPROCESSED, 'ACTIVE' => SitemapRuntimeTable::ACTIVE, 'ITEM_TYPE' => SitemapRuntimeTable::ITEM_TYPE_DIR, ); SitemapRuntimeTable::add($arRuntimeData); } } SitemapRuntimeTable::update($arCurrentDir['ID'], array( 'PROCESSED' => SitemapRuntimeTable::PROCESSED )); } function generate($v) { global $ID; global $NS; global $SESSION; global $arSitemap; global $arSitemapSettings; $arValueSteps = array( 'init' => 0, 'files' => 40, 'iblock_index' => 50, 'iblock' => 60, 'forum_index' => 70, 'forum' => 80, 'index' => 100, ); $PID = $ID; if($v == $arValueSteps['init']) { SitemapRuntimeTable::clearByPid($PID); $NS['time_start'] = microtime(true); $NS['files_count'] = 0; $NS['steps_count'] = 0; $bRootChecked = isset($arSitemap['SETTINGS']['DIR']['/']) && $arSitemap['SETTINGS']['DIR']['/'] == 'Y'; $arRuntimeData = array( 'PID' => $PID, 'ITEM_TYPE' => SitemapRuntimeTable::ITEM_TYPE_DIR, 'ITEM_PATH' => '/', 'PROCESSED' => SitemapRuntimeTable::UNPROCESSED, 'ACTIVE' => $bRootChecked ? SitemapRuntimeTable::ACTIVE : SitemapRuntimeTable::INACTIVE, ); SitemapRuntimeTable::add($arRuntimeData); $msg = 'SITEMAP_RUN_FILES' . ' ' . '/'."\n"; $sitemapFile = new SitemapRuntime($PID, $arSitemap['SETTINGS']['FILENAME_FILES'], $arSitemapSettings); $v++; } elseif($v < $arValueSteps['files']) { $NS['steps_count']++; $sitemapFile = new SitemapRuntime($PID, $arSitemap['SETTINGS']['FILENAME_FILES'], $arSitemapSettings); $stepDuration = 15; $ts_finish = microtime(true) + $stepDuration * 0.95; $bFinished = false; $bCheckFinished = false; $dbRes = null; while(!$bFinished && microtime(true) <= $ts_finish) { if(!$dbRes) { $dbRes = SitemapRuntimeTable::getList(array( 'order' => array('ITEM_PATH' => 'ASC'), 'filter' => array( 'PID' => $PID, 'ITEM_TYPE' => SitemapRuntimeTable::ITEM_TYPE_DIR, 'PROCESSED' => SitemapRuntimeTable::UNPROCESSED, ), 'limit' => 1000 )); } if($arRes = $dbRes->Fetch()) { seoSitemapGetFilesData($PID, $arSitemap, $arRes, $sitemapFile); $bCheckFinished = false; } elseif(!$bCheckFinished) { $dbRes = null; $bCheckFinished = true; } else { $bFinished = true; } } if(!$bFinished) { if($v < $arValueSteps['files']-1) $v++; $msg = 'SITEMAP_RUN_FILES'.' '.'ITEM_PATH'."\n"; } else { if(!is_array($NS['XML_FILES'])) $NS['XML_FILES'] = array(); if($sitemapFile->isNotEmpty()) { if($sitemapFile->isCurrentPartNotEmpty()) { $sitemapFile->finish(); } else { $sitemapFile->delete(); } $xmlFiles = $sitemapFile->getNameList(); $directory = $sitemapFile->getPathDirectory(); foreach($xmlFiles as &$xmlFile) $xmlFile = $directory.$xmlFile; $NS['XML_FILES'] = array_unique(array_merge($NS['XML_FILES'], $xmlFiles)); } else { $sitemapFile->delete(); } $v = $arValueSteps['files']; $msg = 'SITEMAP_RUN_FILE_COMPLETE'.' '.$arSitemap['SETTINGS']['FILENAME_FILES']."\n"; } } elseif($v < $arValueSteps['iblock_index']) { $NS['time_start'] = microtime(true); $arIBlockList = array(); if(Main\Loader::includeModule('iblock')) { $arIBlockList = $arSitemap['SETTINGS']['IBLOCK_ACTIVE']; if(count($arIBlockList) > 0) { $arIBlocks = array(); $dbIBlock = CIBlock::GetList(array(), array('ID' => array_keys($arIBlockList))); while ($arIBlock = $dbIBlock->Fetch()) { $arIBlocks[$arIBlock['ID']] = $arIBlock; } foreach($arIBlockList as $iblockId => $iblockActive) { if($iblockActive !== 'Y' || !array_key_exists($iblockId, $arIBlocks)) { unset($arIBlockList[$iblockId]); } else { SitemapRuntimeTable::add(array( 'PID' => $PID, 'PROCESSED' => SitemapRuntimeTable::UNPROCESSED, 'ITEM_ID' => $iblockId, 'ITEM_TYPE' => SitemapRuntimeTable::ITEM_TYPE_IBLOCK, )); $fileName = str_replace( array('#IBLOCK_ID#', '#IBLOCK_CODE#', '#IBLOCK_XML_ID#'), array($iblockId, $arIBlocks[$iblockId]['CODE'], $arIBlocks[$iblockId]['XML_ID']), $arSitemap['SETTINGS']['FILENAME_IBLOCK'] ); $sitemapFile = new SitemapRuntime($PID, $fileName, $arSitemapSettings); if($sitemapFile->isExists()) { //$sitemapFile->delete(); } } } } } $NS['LEFT_MARGIN'] = 0; $NS['IBLOCK_LASTMOD'] = 0; $NS['IBLOCK'] = array(); $NS['IBLOCK_MAP'] = array(); if(count($arIBlockList) <= 0) { $v = $arValueSteps['iblock']; $msg = 'SITEMAP_RUN_IBLOCK_EMPTY'."\n"; } else { $v = $arValueSteps['iblock_index']; $msg = 'SITEMAP_RUN_IBLOCK'."\n"; } } else if($v < $arValueSteps['iblock']) { $stepDuration = 10; $ts_finish = microtime(true) + $stepDuration * 0.95; $bFinished = false; $bCheckFinished = false; $currentIblock = false; $iblockId = 0; $dbOldIblockResult = null; $dbIblockResult = null; if(isset($SESSION["SEO_SITEMAP_".$PID])) { $NS['IBLOCK_MAP'] = $SESSION["SEO_SITEMAP_".$PID]; unset($SESSION["SEO_SITEMAP_".$PID]); } while(!$bFinished && microtime(true) <= $ts_finish) { if(!$currentIblock) { $arCurrentIBlock = false; $dbRes = SitemapRuntimeTable::getList(array( 'order' => array('ID' => 'ASC'), 'filter' => array( 'PID' => $PID, 'ITEM_TYPE' => SitemapRuntimeTable::ITEM_TYPE_IBLOCK, 'PROCESSED' => SitemapRuntimeTable::UNPROCESSED, ), 'limit' => 1 )); $currentIblock = $dbRes->fetch(); if($currentIblock) { $iblockId = intval($currentIblock['ITEM_ID']); $dbIBlock = CIBlock::GetByID($iblockId); $arCurrentIBlock = $dbIBlock->Fetch(); if(!$arCurrentIBlock) { SitemapRuntimeTable::update($currentIblock['ID'], array( 'PROCESSED' => SitemapRuntimeTable::PROCESSED )); $NS['LEFT_MARGIN'] = 0; $NS['IBLOCK_LASTMOD'] = 0; $NS['LAST_ELEMENT_ID'] = 0; unset($NS['CURRENT_SECTION']); } else { if($arCurrentIBlock['LIST_PAGE_URL'] == '') $arSitemap['SETTINGS']['IBLOCK_LIST'][$iblockId] = 'N'; if($arCurrentIBlock['SECTION_PAGE_URL'] == '') $arSitemap['SETTINGS']['IBLOCK_SECTION'][$iblockId] = 'N'; if($arCurrentIBlock['DETAIL_PAGE_URL'] == '') $arSitemap['SETTINGS']['IBLOCK_ELEMENT'][$iblockId] = 'N'; $NS['IBLOCK_LASTMOD'] = max($NS['IBLOCK_LASTMOD'], MakeTimeStamp($arCurrentIBlock['TIMESTAMP_X'])); if($NS['LEFT_MARGIN'] <= 0 && $arSitemap['SETTINGS']['IBLOCK_ELEMENT'][$iblockId] != 'N') { $NS['CURRENT_SECTION'] = 0; } $fileName = str_replace( array('#IBLOCK_ID#', '#IBLOCK_CODE#', '#IBLOCK_XML_ID#'), array($iblockId, $arCurrentIBlock['CODE'], $arCurrentIBlock['XML_ID']), $arSitemap['SETTINGS']['FILENAME_IBLOCK'] ); $sitemapFile = new SitemapRuntime($PID, $fileName, $arSitemapSettings); } } } if(!$currentIblock) { $bFinished = true; } elseif(is_array($arCurrentIBlock)) { if($dbIblockResult == null) { if(isset($NS['CURRENT_SECTION'])) { $dbIblockResult = CIBlockElement::GetList( array('ID' => 'ASC'), array( 'IBLOCK_ID' => $iblockId, 'ACTIVE' => 'Y', 'SECTION_ID' => intval($NS['CURRENT_SECTION']), '>ID' => intval($NS['LAST_ELEMENT_ID']), 'SITE_ID' => $arSitemap['SITE_ID'], "ACTIVE_DATE" => "Y" ), false, array('nTopCount' => 1000), array('ID','TIMESTAMP_X','DETAIL_PAGE_URL') ); } else { $NS['LAST_ELEMENT_ID'] = 0; $dbIblockResult = CIBlockSection::GetList( array('LEFT_MARGIN' => 'ASC'), array( 'IBLOCK_ID' => $iblockId, 'GLOBAL_ACTIVE' => 'Y', '>LEFT_BORDER' => intval($NS['LEFT_MARGIN']), ), false, array( 'ID', 'TIMESTAMP_X', 'SECTION_PAGE_URL', 'LEFT_MARGIN', 'IBLOCK_SECTION_ID' ), array('nTopCount' => 100) ); } } if(isset($NS['CURRENT_SECTION'])) { $arElement = $dbIblockResult->fetch(); if($arElement) { if(!is_array($NS['IBLOCK_MAP'][$iblockId])) { $NS['IBLOCK_MAP'][$iblockId] = array(); } if(!array_key_exists($arElement['ID'], $NS['IBLOCK_MAP'][$iblockId])) { $arElement['LANG_DIR'] = $arSitemap['SITE']['DIR']; $bCheckFinished = false; $elementLastmod = MakeTimeStamp($arElement['TIMESTAMP_X']); $NS['IBLOCK_LASTMOD'] = max($NS['IBLOCK_LASTMOD'], $elementLastmod); $NS['LAST_ELEMENT_ID'] = $arElement['ID']; $NS['IBLOCK'][$iblockId]['E']++; $NS['IBLOCK_MAP'][$iblockId][$arElement["ID"]] = 1; $url = SitemapIblock::prepareUrlToReplace($arElement['DETAIL_PAGE_URL'], $arSitemap['SITE_ID']); $url = \CIBlock::ReplaceDetailUrl($url, $arElement, false, "E"); $sitemapFile->addIBlockEntry($url, $elementLastmod); } } elseif(!$bCheckFinished) { $bCheckFinished = true; $dbIblockResult = null; } else { $bCheckFinished = false; unset($NS['CURRENT_SECTION']); $NS['LAST_ELEMENT_ID'] = 0; $dbIblockResult = null; if($dbOldIblockResult) { $dbIblockResult = $dbOldIblockResult; $dbOldIblockResult = null; } } } else { $arSection = $dbIblockResult->fetch(); if($arSection) { $bCheckFinished = false; $sectionLastmod = MakeTimeStamp($arSection['TIMESTAMP_X']); $NS['LEFT_MARGIN'] = $arSection['LEFT_MARGIN']; $NS['IBLOCK_LASTMOD'] = max($NS['IBLOCK_LASTMOD'], $sectionLastmod); $bActive = false; $bActiveElement = false; if(isset($arSitemap['SETTINGS']['IBLOCK_SECTION_SECTION'][$iblockId][$arSection['ID']])) { $bActive = $arSitemap['SETTINGS']['IBLOCK_SECTION_SECTION'][$iblockId][$arSection['ID']] == 'Y'; $bActiveElement = $arSitemap['SETTINGS']['IBLOCK_SECTION_ELEMENT'][$iblockId][$arSection['ID']] == 'Y'; } elseif ($arSection['IBLOCK_SECTION_ID'] > 0) { $dbRes = SitemapRuntimeTable::getList(array( 'filter' => array( 'PID' => $PID, 'ITEM_TYPE' => SitemapRuntimeTable::ITEM_TYPE_SECTION, 'ITEM_ID' => $arSection['IBLOCK_SECTION_ID'], 'PROCESSED' => SitemapRuntimeTable::PROCESSED, ), 'select' => array('ACTIVE', 'ACTIVE_ELEMENT'), 'limit' => 1 )); $parentSection = $dbRes->fetch(); if($parentSection) { $bActive = $parentSection['ACTIVE'] == SitemapRuntimeTable::ACTIVE; $bActiveElement = $parentSection['ACTIVE_ELEMENT'] == SitemapRuntimeTable::ACTIVE; } } else { $bActive = $arSitemap['SETTINGS']['IBLOCK_SECTION'][$iblockId] == 'Y'; $bActiveElement = $arSitemap['SETTINGS']['IBLOCK_ELEMENT'][$iblockId] == 'Y'; } $arRuntimeData = array( 'PID' => $PID, 'ITEM_ID' => $arSection['ID'], 'ITEM_TYPE' => SitemapRuntimeTable::ITEM_TYPE_SECTION, 'ACTIVE' => $bActive ? SitemapRuntimeTable::ACTIVE : SitemapRuntimeTable::INACTIVE, 'ACTIVE_ELEMENT' => $bActiveElement ? SitemapRuntimeTable::ACTIVE : SitemapRuntimeTable::INACTIVE, 'PROCESSED' => SitemapRuntimeTable::PROCESSED, ); if($bActive) { $NS['IBLOCK'][$iblockId]['S']++; $arSection['LANG_DIR'] = $arSitemap['SITE']['DIR']; $url = SitemapIblock::prepareUrlToReplace($arSection['SECTION_PAGE_URL'], $arSitemap['SITE_ID']); $url = \CIBlock::ReplaceDetailUrl($url, $arSection, false, "S"); $sitemapFile->addIBlockEntry($url, $sectionLastmod); } SitemapRuntimeTable::add($arRuntimeData); if($bActiveElement) { $NS['CURRENT_SECTION'] = $arSection['ID']; $NS['LAST_ELEMENT_ID'] = 0; $dbOldIblockResult = $dbIblockResult; $dbIblockResult = null; } } elseif(!$bCheckFinished) { unset($NS['CURRENT_SECTION']); $bCheckFinished = true; $dbIblockResult = null; } else { $bCheckFinished = false; SitemapRuntimeTable::update($currentIblock['ID'], array( 'PROCESSED' => SitemapRuntimeTable::PROCESSED, )); if($arSitemap['SETTINGS']['IBLOCK_LIST'][$iblockId] == 'Y' && $arCurrentIBlock['LIST_PAGE_URL'] <> '') { $NS['IBLOCK'][$iblockId]['I']++; $arCurrentIBlock['IBLOCK_ID'] = $arCurrentIBlock['ID']; $arCurrentIBlock['LANG_DIR'] = $arSitemap['SITE']['DIR']; $url = SitemapIblock::prepareUrlToReplace($arCurrentIBlock['LIST_PAGE_URL'], $arSitemap['SITE_ID']); $url = \CIBlock::ReplaceDetailUrl($url, $arCurrentIBlock, false, ""); $sitemapFile->addIBlockEntry($url, $NS['IBLOCK_LASTMOD']); } if($sitemapFile->isNotEmpty()) { if($sitemapFile->isCurrentPartNotEmpty()) { $sitemapFile->finish(); } else { $sitemapFile->delete(); } if(!is_array($NS['XML_FILES'])) $NS['XML_FILES'] = array(); $xmlFiles = $sitemapFile->getNameList(); $directory = $sitemapFile->getPathDirectory(); foreach($xmlFiles as &$xmlFile) $xmlFile = $directory.$xmlFile; $NS['XML_FILES'] = array_unique(array_merge($NS['XML_FILES'], $xmlFiles)); } else { $sitemapFile->delete(); } $currentIblock = false; $NS['LEFT_MARGIN'] = 0; $NS['IBLOCK_LASTMOD'] = 0; unset($NS['CURRENT_SECTION']); $NS['LAST_ELEMENT_ID'] = 0; } } } } if($v < $arValueSteps['iblock']-1) { $msg = 'SITEMAP_RUN_IBLOCK_NAME'.' '.$arCurrentIBlock['NAME']."\n"; $v++; } if($bFinished) { $v = $arValueSteps['iblock']; $msg = 'SITEMAP_RUN_FINALIZE'."\n"; } } elseif($v < $arValueSteps['forum_index']) { $NS['time_start'] = microtime(true); $arForumList = array(); if(!empty($arSitemap['SETTINGS']['FORUM_ACTIVE'])) { foreach ($arSitemap['SETTINGS']['FORUM_ACTIVE'] as $forumId => $active) { if ($active == "Y") { $arForumList[$forumId] = "Y"; } } } if(count($arForumList) > 0 && Main\Loader::includeModule('forum')) { $arForums = array(); $db_res = CForumNew::GetListEx( array(), array( '@ID' => array_keys($arForumList), "ACTIVE" => "Y", "SITE_ID" => $arSitemap['SITE_ID'], "!TOPICS" => 0 ) ); while ($res = $db_res->Fetch()) { $arForums[$res['ID']] = $res; } $arForumList = array_intersect_key($arForums, $arForumList); foreach($arForumList as $id => $forum) { SitemapRuntimeTable::add(array( 'PID' => $PID, 'PROCESSED' => SitemapRuntimeTable::UNPROCESSED, 'ITEM_ID' => $id, 'ITEM_TYPE' => SitemapRuntimeTable::ITEM_TYPE_FORUM) ); $fileName = str_replace('#FORUM_ID#', $forumId, $arSitemap['SETTINGS']['FILENAME_FORUM']); $sitemapFile = new SitemapRuntime($PID, $fileName, $arSitemapSettings); } } $NS['FORUM_CURRENT_TOPIC'] = 0; if(count($arForumList) <= 0) { $v = $arValueSteps['forum']; $msg = 'SITEMAP_RUN_FORUM_EMPTY'."\n"; } else { $v = $arValueSteps['forum_index']; $msg = 'SITEMAP_RUN_FORUM'."\n"; } } else if($v < $arValueSteps['forum']) { $stepDuration = 10; $ts_finish = microtime(true) + $stepDuration * 0.95; $bFinished = false; $bCheckFinished = false; $currentForum = false; $forumId = 0; $dbTopicResult = null; $arTopic = null; while(!$bFinished && microtime(true) <= $ts_finish && CModule::IncludeModule("forum")) { if(!$currentForum) { $arCurrentForum = false; $dbRes = SitemapRuntimeTable::getList(array( 'order' => array('ID' => 'ASC'), 'filter' => array( 'PID' => $PID, 'ITEM_TYPE' => SitemapRuntimeTable::ITEM_TYPE_FORUM, 'PROCESSED' => SitemapRuntimeTable::UNPROCESSED, ), 'limit' => 1 )); $currentForum = $dbRes->fetch(); if($currentForum) { $forumId = intval($currentForum['ITEM_ID']); $db_res = CForumNew::GetListEx( array(), array( 'ID' => $forumId, "ACTIVE" => "Y", "SITE_ID" => $arSitemap['SITE_ID'], "!TOPICS" => 0 ) ); $arCurrentForum = $db_res->Fetch(); if(!$arCurrentForum) { SitemapRuntimeTable::update($currentForum['ID'], array( 'PROCESSED' => SitemapRuntimeTable::PROCESSED )); } else { $fileName = str_replace('#FORUM_ID#', $forumId, $arSitemap['SETTINGS']['FILENAME_FORUM']); $sitemapFile = new SitemapRuntime($PID, $fileName, $arSitemapSettings); } } } if(!$currentForum) { $bFinished = true; } elseif(is_array($arCurrentForum)) { $bActive = (array_key_exists($forumId, $arSitemap['SETTINGS']['FORUM_TOPIC']) && $arSitemap['SETTINGS']['FORUM_TOPIC'][$forumId] == "Y"); if($bActive) { if($dbTopicResult == null) { $dbTopicResult = CForumTopic::GetList( array("LAST_POST_DATE" => "DESC"), array_merge( array( "FORUM_ID" => $forumId, "APPROVED" => "Y"), ($NS['FORUM_CURRENT_TOPIC'] > 0 ? array( ">ID" => $NS["FORUM_CURRENT_TOPIC"] ) : array() ) ), false, 0, array('nTopCount' => 100) ); } if(($arTopic = $dbTopicResult->fetch()) && $arTopic) { $NS["FORUM_CURRENT_TOPIC"] = $arTopic["ID"]; $url = CForumNew::PreparePath2Message( $arCurrentForum["PATH2FORUM_MESSAGE"], array( "FORUM_ID" => $arCurrentForum["ID"], "TOPIC_ID" => $arTopic["ID"], "TITLE_SEO" => $arTopic["TITLE_SEO"], "MESSAGE_ID" => "s", "SOCNET_GROUP_ID" => $arTopic["SOCNET_GROUP_ID"], "OWNER_ID" => $arTopic["OWNER_ID"], "PARAM1" => $arTopic["PARAM1"], "PARAM2" => $arTopic["PARAM2"] ) ); $sitemapFile->addIBlockEntry($url, MakeTimeStamp($arTopic['LAST_POST_DATE'])); } } else { $url = CForumNew::PreparePath2Message( $arCurrentForum["PATH2FORUM_MESSAGE"], array( "FORUM_ID" => $arCurrentForum["ID"], "TOPIC_ID" => $arCurrentForum["TID"], "TITLE_SEO" => $arCurrentForum["TITLE_SEO"], "MESSAGE_ID" => "s", "SOCNET_GROUP_ID" => $arCurrentForum["SOCNET_GROUP_ID"], "OWNER_ID" => $arCurrentForum["OWNER_ID"], "PARAM1" => $arCurrentForum["PARAM1"], "PARAM2" => $arCurrentForum["PARAM2"] ) ); $sitemapFile->addIBlockEntry($url, MakeTimeStamp($arCurrentForum['LAST_POST_DATE'])); } if (empty($arTopic)) { $bCheckFinished = false; SitemapRuntimeTable::update($currentForum['ID'], array( 'PROCESSED' => SitemapRuntimeTable::PROCESSED, )); if($sitemapFile->isNotEmpty()) { if($sitemapFile->isCurrentPartNotEmpty()) { $sitemapFile->finish(); } else { $sitemapFile->delete(); } if(!is_array($NS['XML_FILES'])) $NS['XML_FILES'] = array(); $xmlFiles = $sitemapFile->getNameList(); $directory = $sitemapFile->getPathDirectory(); foreach($xmlFiles as &$xmlFile) $xmlFile = $directory.$xmlFile; $NS['XML_FILES'] = array_unique(array_merge($NS['XML_FILES'], $xmlFiles)); } else { $sitemapFile->delete(); } $currentForum = false; $dbTopicResult = null; $NS['FORUM_CURRENT_TOPIC'] = 0; } } } if($v < $arValueSteps['forum']-1) { $msg = 'SITEMAP_RUN_FORUM_NAME'.' '.$arCurrentForum['NAME']."\n"; $v++; } if($bFinished) { $v = $arValueSteps['forum']; $msg = 'SITEMAP_RUN_FINALIZE'."\n"; } } else { SitemapRuntimeTable::clearByPid($PID); $arFiles = array(); $sitemapFile = new SitemapIndex($arSitemap['SETTINGS']['FILENAME_INDEX'], $arSitemapSettings); if(count($NS['XML_FILES']) > 0) { foreach ($NS['XML_FILES'] as $xmlFile) { $arFiles[] = new IO\File(IO\Path::combine( $sitemapFile->getSiteRoot(), $xmlFile ), $arSitemap['SITE_ID']); } } $sitemapFile->createIndex($arFiles); $arExistedSitemaps = array(); if($arSitemap['SETTINGS']['ROBOTS'] == 'Y') { $sitemapUrl = $sitemapFile->getUrl(); $robotsFile = new RobotsFile($arSitemap['SITE_ID']); $robotsFile->addRule( array(RobotsFile::SITEMAP_RULE, $sitemapUrl) ); $arSitemapLinks = $robotsFile->getRules(RobotsFile::SITEMAP_RULE); if(count($arSitemapLinks) > 1) // 1 - just added rule { foreach($arSitemapLinks as $rule) { if($rule[1] != $sitemapUrl) { $arExistedSitemaps[] = $rule[1]; } } } } $v = $arValueSteps['index']; } if($v == $arValueSteps['index']) { SitemapTable::update($ID, array('DATE_RUN' => new Bitrix\Main\Type\DateTime())); } print $msg.' '.'SEO_SITEMAP_RUN_TITLE'.' '.$v."\n"; if($v < $arValueSteps['index']) { if(isset($NS['IBLOCK_MAP'])) { $SESSION["SEO_SITEMAP_".$PID] = $NS['IBLOCK_MAP']; unset($NS['IBLOCK_MAP']); } } return $v; } if(!in_array("simulate", $GLOBALS['argv'])) { $v = 0; while($v < 100) { $v = generate($v); } } /* sitemap regen end -------------------------------------------------------------*/ /* sitemap catalog file start -------------------------------------------------------------*/ if(!in_array("simulate", $GLOBALS['argv'])) { $sitemap_catalog = []; $sitemap_all_brands_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_BRANDS, ], false, false, [ "CODE", "PROPERTY_UID" ] ); while($sitemap_all_brands_search_ob = $sitemap_all_brands_search_res->GetNextElement()) { $brand = $sitemap_all_brands_search_ob->GetFields(); $brand['MODELS'] = []; $sitemap_catalog[$brand['PROPERTY_UID_VALUE']] = $brand; } $sitemap_all_models_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_MODELS, ], false, false, [ "CODE", "PROPERTY_BRAND_UID"] ); while($sitemap_all_models_search_ob = $sitemap_all_models_search_res->GetNextElement()) { $model = $sitemap_all_models_search_ob->GetFields(); $model['PROPERTIES'] = $sitemap_all_models_search_ob->GetProperties(); if($sitemap_catalog[$model['PROPERTY_BRAND_UID_VALUE']]['MODELS'] === null) { $sitemap_catalog[$model['PROPERTY_BRAND_UID_VALUE']] = [ 'MODELS' => [], ]; } array_push($sitemap_catalog[$model['PROPERTY_BRAND_UID_VALUE']]['MODELS'], $model); } $url = "https://".SITE_SERVER_NAME."/catalog"; $lastmod = date(DATE_W3C); $sitemap_catalog_string = "\n\n"; foreach($sitemap_catalog AS $brand) { $sitemap_catalog_string .= "".$url."/".$brand['CODE']."/"."".$lastmod.""."\n"; foreach($brand['MODELS'] AS $model) { $sitemap_catalog_string .= "".$url."/".$brand['CODE']."/".$model['CODE']."/"."".$lastmod.""."\n"; } } //страницы ЛКТ $sitemap_car_search_res = CIBlockElement::GetList( [ "NAME" => "ASC" ], [ "IBLOCK_ID" => IBLOCK_ID_CATALOG_CARS_NEW, ], false, [], [] ); while($sitemap_car_search_ob = $sitemap_car_search_res->GetNextElement()) { $car_existed = $sitemap_car_search_ob->GetFields(); $sitemap_catalog_string .= "https://".SITE_SERVER_NAME.$car_existed['DETAIL_PAGE_URL']."".$lastmod.""."\n"; } $BODIES = []; $ENGINE_FUELS = []; //страницы кузов $sitemap_bodies_search_res = CIBlockElement::GetList( [ "NAME" => "ASC" ], [ "IBLOCK_ID" => IBLOCK_ID_BODIES, ], false, [], [] ); while($sitemap_bodies_search_ob = $sitemap_bodies_search_res->GetNextElement()) { $body = $sitemap_bodies_search_ob->GetFields(); $body['PROPERTIES'] = $sitemap_bodies_search_ob->GetProperties(); $sitemap_catalog_string .= "https://".SITE_SERVER_NAME."/catalog/".$body['DETAIL_PAGE_URL']."".$lastmod.""."\n"; if($body['PROPERTIES']['META_SEO_INDEXED_REGIONS']['VALUE_XML_ID'] === "YES") { array_push($BODIES, $body['DETAIL_PAGE_URL']); } } //страницы двигатель $sitemap_engine_fuels_search_res = CIBlockElement::GetList( [ "NAME" => "ASC" ], [ "IBLOCK_ID" => IBLOCK_ID_ENGINE_FUELS, ], false, [], [] ); while($sitemap_engine_fuels_search_ob = $sitemap_engine_fuels_search_res->GetNextElement()) { $engine = $sitemap_engine_fuels_search_ob->GetFields(); $engine['PROPERTIES'] = $sitemap_engine_fuels_search_ob->GetProperties(); $sitemap_catalog_string .= "https://".SITE_SERVER_NAME."/catalog/".$engine['DETAIL_PAGE_URL']."".$lastmod.""."\n"; if($engine['PROPERTIES']['META_SEO_INDEXED_REGIONS']['VALUE_XML_ID'] === "YES") { array_push($ENGINE_FUELS, $engine['DETAIL_PAGE_URL']); } } $sitemap_catalog_string .= ""."\n"; file_put_contents("/home/bitrix/www/sitemap-catalog.xml", $sitemap_catalog_string); $chunk = "https://www.evoleasing.ru/sitemap-catalog.xml".date(DATE_W3C).""; $sitemap_index = file_get_contents("/home/bitrix/www/sitemap.xml"); $sitemap_index = str_replace(">", ">\n", $sitemap_index); $sitemap_index = str_replace("", $chunk, $sitemap_index); $sitemap_index = str_replace("\n", "", $sitemap_index); file_put_contents("/home/bitrix/www/sitemap.xml", $sitemap_index); /* sitemap catalog file end -------------------------------------------------------------*/ /* sitemap regions file start -------------------------------------------------------------*/ $sitemap_regions = []; $sitemap_brands = []; //IBLOCK_ID_CITIES $sitemap_all_cities_search_res = CIBlockElement::GetList( [ "NAME" => "ASC" ], [ "IBLOCK_ID" => IBLOCK_ID_CITIES, ], false, false, [ "CODE", ] ); while($sitemap_all_cities_search_ob = $sitemap_all_cities_search_res->GetNextElement()) { $city = $sitemap_all_cities_search_ob->GetFields(); $sitemap_regions[] = $city['CODE']; } $sitemap_all_brands_search_res = CIBlockElement::GetList( [ "NAME" => "ASC" ], [ "IBLOCK_ID" => IBLOCK_ID_BRANDS, ], false, false, [ "CODE", "PROPERTY_UID" ] ); while($sitemap_all_brands_search_ob = $sitemap_all_brands_search_res->GetNextElement()) { $brand = $sitemap_all_brands_search_ob->GetFields(); $brand['MODELS'] = []; $sitemap_brands[$brand['PROPERTY_UID_VALUE']] = $brand; } $sitemap_all_models_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_MODELS, "PROPERTY_PROMO_VALUE" => "Да" ], false, false, [ "CODE", "PROPERTY_BRAND_UID"] ); while($sitemap_all_models_search_ob = $sitemap_all_models_search_res->GetNextElement()) { $model = $sitemap_all_models_search_ob->GetFields(); $model['PROPERTIES'] = $sitemap_all_models_search_ob->GetProperties(); array_push($sitemap_brands[$model['PROPERTY_BRAND_UID_VALUE']]['MODELS'], $model); } $url = "https://".SITE_SERVER_NAME."/regions"; $lastmod = date(DATE_W3C); $sitemap_regions_string = "\n\n"; $sitemap_regions_string .= "".$url."/"."".$lastmod.""."\n"; foreach($sitemap_regions AS $city) { $sitemap_regions_string .= "".$url."/".$city."/"."".$lastmod.""."\n"; foreach($sitemap_brands AS $brand) { $sitemap_regions_string .= "".$url."/".$city."/".$brand['CODE']."/"."".$lastmod.""."\n"; foreach($brand['MODELS'] AS $model) { $sitemap_regions_string .= "".$url."/".$city."/".$brand['CODE']."/".$model['CODE']."/"."".$lastmod.""."\n"; } } foreach($BODIES AS $body_slug) { $sitemap_regions_string .= "".$url."/".$city."/".$body_slug."".$lastmod.""."\n"; } foreach($ENGINE_FUELS AS $engine_slug) { $sitemap_regions_string .= "".$url."/".$city."/".$engine_slug."".$lastmod.""."\n"; } } $sitemap_regions_string .= ""."\n"; file_put_contents("/home/bitrix/www/sitemap-regions.xml", $sitemap_regions_string); $chunk = "https://www.evoleasing.ru/sitemap-regions.xml".date(DATE_W3C).""; $sitemap_index = file_get_contents("/home/bitrix/www/sitemap.xml"); $sitemap_index = str_replace(">", ">\n", $sitemap_index); $sitemap_index = str_replace("", $chunk, $sitemap_index); $sitemap_index = str_replace("\n", "", $sitemap_index); file_put_contents("/home/bitrix/www/sitemap.xml", $sitemap_index); } /* sitemap regions file end -------------------------------------------------------------*/ if(!in_array("simulate", $GLOBALS['argv'])) { \Bitrix\Main\Mail\Event::send([ "EVENT_NAME" => "ILSA_UPDATE", "LID" => "s1", "C_FIELDS" => Array( "MESSAGE" => $traceback_message, ) ]); } //print "----------bitrix_enabled_modifications----------\n"; //print_r($bitrix_enabled_modifications); //print "--------------------\n"; print "-----current_representation-----\n\n"; print_r($current_representation); foreach($current_representation AS $brand_uid => $brand) { $brand_update = false; foreach($brand['MODELS'] AS $model_uid => $model) { $model_update = false; foreach($model['MODIFICATIONS'] AS $modification_code => $modification) { if($modification['STATUS'] !== "exists") { $model_update = true; elasticIndex(ELASTICSEARCH_CARS_EVENTS_INDEX, [ "brand" => $brand['NAME'], "model" => $model['NAME'], "modification" => $modification['NAME'], "status" => $modification['STATUS'], ]); } } if($model_update) { $brand_update = true; elasticIndex(ELASTICSEARCH_CARS_EVENTS_INDEX, [ "brand" => $brand['NAME'], "model" => $model['NAME'], "status" => $model['STATUS'], ]); } } if($brand_update) { elasticIndex(ELASTICSEARCH_CARS_EVENTS_INDEX, [ "brand" => $brand['NAME'], "status" => $brand['STATUS'], ]); } } //print "-----current_representation-----\n\n"; //foreach($current_representation AS $k => $v) //{ // print "[ ".$k." ]\n"; //} /* print "-----bitrix_existed_brands\n\n"; print_r($bitrix_existed_brands); print "-----bitrix_enabled_brands\n\n"; print_r($bitrix_enabled_brands); print "-----bitrix_hidden_brands\n\n"; print_r($bitrix_hidden_brands); */ die(); ?>