From a0e250da57304adaa4bd8e0c74c9f1614a246ef7 Mon Sep 17 00:00:00 2001 From: merelendor Date: Mon, 5 Aug 2024 21:52:47 +0300 Subject: [PATCH] complex update import file --- local/ilsa_update.php | 918 ++++++++----- local/ilsa_update_dev.php | 2602 ------------------------------------- 2 files changed, 599 insertions(+), 2921 deletions(-) delete mode 100644 local/ilsa_update_dev.php diff --git a/local/ilsa_update.php b/local/ilsa_update.php index 8d2663a..4c8524f 100644 --- a/local/ilsa_update.php +++ b/local/ilsa_update.php @@ -34,26 +34,33 @@ $arrContextOptions = [ ob_get_clean(); error_reporting(E_ERROR); +$current_representation = []; + $bitrix_existed_brands = []; $bitrix_enabled_brands = []; +$bitrix_hidden_brands = []; $bitrix_existed_models = []; $bitrix_enabled_models = []; - -$api_brands = []; -$api_models = []; -$api_bodies = []; -$api_engine_fuels = []; +$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_brands = []; -$bitrix_hidden_models = []; -$bitrix_hidden_modifications = []; $bitrix_hidden_cars = []; $bitrix_existed_bodies = []; @@ -62,27 +69,59 @@ $bitrix_enabled_bodies = []; $bitrix_existed_engine_fuels = []; $bitrix_enabled_engine_fuels = []; -$flags = []; +$new_brands = []; +$new_models = []; +$new_modifications = []; +$new_cars = []; -$properties = CIBlockPropertyEnum::GetList([ "sort" => "asc", "name" => "asc" ], [ "IBLOCK_ID" => IBLOCK_ID_BRANDS, "CODE" => "TAXI" ]); -while ($prop_fields = $properties->GetNext()) +$hide_brands = []; +$hide_models = []; +$hide_modifications = []; +$hide_cars = []; + +$repost_brands = []; +$repost_models = []; +$repost_modifications = []; +$repost_cars = []; + +function elasticIndex($index, $payload) { - $flags[ 'BRANDS_TAXI' ][ $prop_fields['XML_ID'] ] = $prop_fields["ID"]; + define("ELASTIC_USERNAME", "elastic"); + define("ELASTIC_PASSWORD", "DFbC769Ln0weJL33mtMXGbpJOK4RCJfx"); + + $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, "https://els.quickcode.ru/".$index."/_doc/".$id."/"); + curl_setopt($ch, CURLOPT_USERPWD, ELASTIC_USERNAME . ":" . ELASTIC_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"; } -$properties = CIBlockPropertyEnum::GetList([ "sort" => "asc", "name" => "asc" ], [ "IBLOCK_ID" => IBLOCK_ID_MODELS, "CODE" => "TAXI" ]); -while ($prop_fields = $properties->GetNext()) -{ - $flags[ 'MODELS_TAXI' ][ $prop_fields['XML_ID'] ] = $prop_fields["ID"]; -} - -$all_brands_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_BRANDS, "ACTIVE" => "Y" ], false, false, [] ); +$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'] ); @@ -93,12 +132,18 @@ while($all_brands_search_ob = $all_brands_search_res->GetNextElement()) } } -$all_models_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_MODELS, "ACTIVE" => "Y" ], false, false, [] ); +$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") { @@ -110,15 +155,65 @@ while($all_models_search_ob = $all_models_search_res->GetNextElement()) } } -$all_modifications_search_res = CIBlockElement::GetList( [], [ "IBLOCK_ID" => IBLOCK_ID_MODIFICATIONS, "ACTIVE" => "Y" ], false, false, [] ); +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_existed_modifications, $modification_search['CODE'] ); + array_push( $bitrix_enabled_modifications, $modification_search['CODE'] ); } else { @@ -181,6 +276,8 @@ 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 = []; @@ -190,29 +287,7 @@ $brands_and_models = []; $c = 0; -$api_data_titles = []; - -$api_data = []; -$api_brands = []; -$api_models = []; -$api_modifications = []; -$api_cars = []; - -$new_brands = []; -$new_models = []; -$new_modifications = []; -$new_cars = []; - -$hide_brands = []; -$hide_models = []; -$hide_modifications = []; -$hide_cars = []; - -$repost_brands = []; -$repost_models = []; -$repost_modifications = []; -$repost_cars = []; - +print "processing JSON\n"; //prepare brands list from API foreach($json AS $entry) { @@ -409,14 +484,19 @@ foreach($brands_and_models AS $brand_uid => $brand) "NAME" => $brand['name'], ]; - $update_element = new CIBlockElement; - $update_result = $update_element->Update($brand_existed['ID'], $brand_update_payload); + 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 { @@ -435,20 +515,28 @@ foreach($brands_and_models AS $brand_uid => $brand) array_push($new_brands, $brand['name']); - if($new_brand_id = $brand_element->Add($brand_payload)) + if(!in_array("simulate", $GLOBALS['argv'])) { - $bitrix_brands[$brand_uid] = $new_brand_id; - } - else - { - echo "brand error: ".$brand_element->LAST_ERROR; + 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"; @@ -459,7 +547,10 @@ foreach($brands_and_models AS $brand_uid => $brand) 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, [] ); @@ -472,15 +563,37 @@ function set_brand_activity($brand_uid, $active = "N") if($brand_id !== null) { - $update_element = new CIBlockElement; - $update_result = $update_element->Update($brand_id, [ "ACTIVE" => $active, ]); - array_push($hide_brands, $brand_search['NAME']); + 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, [] ); @@ -493,15 +606,37 @@ function set_model_activity($model_uid, $active = "N") if($model_id !== null) { - $update_element = new CIBlockElement; - $update_result = $update_element->Update($model_id, [ "ACTIVE" => $active, ]); - array_push($hide_models, $model_search['NAME']); + 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, [] ); @@ -514,9 +649,42 @@ function set_modification_activity($modification_code, $active = "N") if($modification_id !== null) { - $update_element = new CIBlockElement; - $update_result = $update_element->Update($modification_id, [ "ACTIVE" => $active, ]); - array_push($hide_modifications, $modification_search['NAME']); + 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']); + } } } @@ -536,12 +704,15 @@ function set_car_activity($car_uid, $active = "N") if($car_id !== null) { - $update_element = new CIBlockElement; - $update_result = $update_element->Update($car_id, [ "ACTIVE" => $active, ]); - - if($active == "N") + if(!in_array("simulate", $GLOBALS['argv'])) { - array_push($hide_cars, $car_search['NAME']); + $update_element = new CIBlockElement; + $update_result = $update_element->Update($car_id, [ "ACTIVE" => $active, ]); + + if($active == "N") + { + array_push($hide_cars, $car_search['NAME']); + } } } } @@ -559,8 +730,11 @@ function set_body_activity($body_name, $active = "N") if($body_id !== null) { - $update_element = new CIBlockElement; - $update_result = $update_element->Update($body_id, [ "ACTIVE" => $active, ]); + if(!in_array("simulate", $GLOBALS['argv'])) + { + $update_element = new CIBlockElement; + $update_result = $update_element->Update($body_id, [ "ACTIVE" => $active, ]); + } } } @@ -577,8 +751,11 @@ function set_engine_fuel_activity($engine_fuel_name, $active = "N") if($engine_fuel_id !== null) { - $update_element = new CIBlockElement; - $update_result = $update_element->Update($engine_fuel_id, [ "ACTIVE" => $active, ]); + if(!in_array("simulate", $GLOBALS['argv'])) + { + $update_element = new CIBlockElement; + $update_result = $update_element->Update($engine_fuel_id, [ "ACTIVE" => $active, ]); + } } } @@ -590,6 +767,8 @@ function models_check($bitrix_models, $bitrix_modifications, $bitrix_modificatio 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) { @@ -622,8 +801,13 @@ function models_check($bitrix_models, $bitrix_modifications, $bitrix_modificatio "CODE" => $code, ]; - $update_element = new CIBlockElement; - $update_result = $update_element->Update($model_existed['ID'], $model_update_payload); + 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 { @@ -642,15 +826,20 @@ function models_check($bitrix_models, $bitrix_modifications, $bitrix_modificatio array_push($new_models, $model['name']); - if($new_model_id = $model_element->Add($model_payload)) + if(!in_array("simulate", $GLOBALS['argv'])) { - $bitrix_models[$model_uid] = $new_model_id; - //echo "new_model_id: ".$new_model_id; - } - else - { - echo "model error: ".$model_element->LAST_ERROR; + 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) @@ -676,6 +865,8 @@ function models_check($bitrix_models, $bitrix_modifications, $bitrix_modificatio $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 ); } } @@ -684,16 +875,20 @@ function models_check($bitrix_models, $bitrix_modifications, $bitrix_modificatio $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); - 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); - } - else - { - echo "modification error: ".$modification_element->LAST_ERROR; + array_push( $bitrix_enabled_modifications, $CODE ); + } + else + { + echo "modification error: ".$modification_element->LAST_ERROR; + } } } } @@ -724,9 +919,6 @@ foreach($json AS $car) $car_codes = []; -$taxi_brands = []; -$taxi_models = []; - $c = 0; foreach($json AS $car) { @@ -749,23 +941,13 @@ foreach($json AS $car) $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"; - if(is_array($car['programms']) && !in_array("taxi", $car['programms'])) - { - $taxi_bodies_list = ["лифтбек", "кроссовер", "седан", "хэтчбек", "внедорожник", "универсал", "минивэн"]; - - if(in_array($car['body'], $taxi_bodies_list)) - { - array_push($car['programms'], "taxi"); - array_push($taxi_brands, $bitrix_brands[ $car['brand']['id'] ]); - array_push($taxi_models, $bitrix_models[ $car['model']['id'] ]); - } - } - $PROPERTY_VALUES = [ "UID" => $car['uid'], "BRAND" => $bitrix_brands[ $car['brand']['id'] ], @@ -814,8 +996,11 @@ foreach($json AS $car) $car_update_payload = [ "IBLOCK_SECTION" => false, "NAME" => $name, "CODE" => $code, "ACTIVE" => "Y", ]; if($car_existed !== null) { - $car_update_element = new CIBlockElement; - $car_update_result = $car_update_element->Update($car_existed['ID'], $car_update_payload); + 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, []); } @@ -826,32 +1011,35 @@ foreach($json AS $car) $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($new_car_id = $car_element->Add($car_payload)) + if(!in_array("simulate", $GLOBALS['argv'])) { - //$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 == "Элемент с таким символьным кодом уже существует.
") + if($new_car_id = $car_element->Add($car_payload)) { - $car_with_problem = null; - $car_with_problem_res = CIBlockElement::GetList( [ "ID" => "ASC" ], [ "IBLOCK_ID" => IBLOCK_ID_CATALOG_CARS_NEW, "CODE" => $code ], false, ["nPageSize" => 1], [] ); + //$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"; - while($car_with_problem_ob = $car_with_problem_res->GetNextElement()) + if($car_element->LAST_ERROR == "Элемент с таким символьным кодом уже существует.
") { - $car_with_problem = $car_with_problem_ob->GetFields(); - $car_with_problem['PROPERTIES'] = $car_with_problem_ob->GetProperties(); - } + $car_with_problem = null; + $car_with_problem_res = CIBlockElement::GetList( [ "ID" => "ASC" ], [ "IBLOCK_ID" => IBLOCK_ID_CATALOG_CARS_NEW, "CODE" => $code ], false, ["nPageSize" => 1], [] ); - 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, []); + 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, []); + } } } } @@ -859,26 +1047,6 @@ foreach($json AS $car) } } -$taxi_brands = array_unique($taxi_brands); -$taxi_models = array_unique($taxi_models); - -foreach($taxi_brands AS $taxi_brand_id) -{ - CIBlockElement::SetPropertyValuesEx($taxi_brand_id, IBLOCK_ID_BRANDS, [ "TAXI" => $flags['BRANDS_TAXI']['YES'] ], []); -} - -foreach($taxi_models AS $taxi_model_id) -{ - CIBlockElement::SetPropertyValuesEx($taxi_model_id, IBLOCK_ID_MODELS, [ "TAXI" => $flags['MODELS_TAXI']['YES'] ], []); -} - -print "\n------------------------------\n"; -print "\ntaxi_brands\n"; -print_r($taxi_brands); -print "\ntaxi_models\n"; -print_r($taxi_models); -print "\n------------------------------\n"; - //print "car_codes?\n"; /* foreach($car_codes AS $cc => $count) @@ -934,16 +1102,22 @@ $traceback_message .= $trace; $b = 0; foreach($bitrix_enabled_brands AS $enabled_brand_uid) { - if($bitrix_brands[$enabled_brand_uid] !== null) - {} - else - { + //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"; @@ -970,19 +1144,29 @@ foreach($repost_models AS $v) } $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) { - if($bitrix_models[$enabled_model_uid] !== null) - {} - else - { + //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"; @@ -1010,6 +1194,8 @@ foreach($repost_modifications AS $v) $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)) @@ -1017,6 +1203,10 @@ foreach($bitrix_enabled_modifications AS $enabled_modifications_code) set_modification_activity($enabled_modifications_code, "N"); $md++; } + else + { + set_modification_activity($enabled_modifications_code, "Y"); + } } $trace = "Снято с публикации модификаций: ".count($hide_modifications); @@ -1091,8 +1281,11 @@ foreach($api_bodies AS $api_body) "ACTIVE" => "Y", ]; - $body_element->Add($body_payload); - array_push($bitrix_existed_bodies, $api_body); + if(!in_array("simulate", $GLOBALS['argv'])) + { + $body_element->Add($body_payload); + array_push($bitrix_existed_bodies, $api_body); + } } else { @@ -1135,8 +1328,11 @@ foreach($api_engine_fuels AS $api_engine_fuel) "ACTIVE" => "Y", ]; - $engine_fuel_element->Add($engine_fuel_payload); - array_push($bitrix_existed_engine_fuels, $api_engine_fuel); + if(!in_array("simulate", $GLOBALS['argv'])) + { + $engine_fuel_element->Add($engine_fuel_payload); + array_push($bitrix_existed_engine_fuels, $api_engine_fuel); + } } else { @@ -1155,13 +1351,18 @@ foreach($bitrix_existed_engine_fuels AS $bitrix_engine_fuel) } } + + /* search reindex start -------------------------------------------------------------*/ -$reindex_handler = false; -$reindex_handler = CSearch::ReIndexAll(false, 60, $reindex_handler); -while(is_array($reindex_handler)) +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 -------------------------------------------------------------*/ @@ -2127,10 +2328,13 @@ function generate($v) return $v; } -$v = 0; -while($v < 100) +if(!in_array("simulate", $GLOBALS['argv'])) { - $v = generate($v); + $v = 0; + while($v < 100) + { + $v = generate($v); + } } /* sitemap regen end -------------------------------------------------------------*/ @@ -2139,183 +2343,259 @@ while($v < 100) /* sitemap catalog file start -------------------------------------------------------------*/ -$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()) +if(!in_array("simulate", $GLOBALS['argv'])) { - $brand = $sitemap_all_brands_search_ob->GetFields(); - $brand['MODELS'] = []; + $sitemap_catalog = []; - $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(!is_array($sitemap_catalog[$model['PROPERTY_BRAND_UID_VALUE']]['MODELS'])) + $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()) { - $sitemap_catalog[$model['PROPERTY_BRAND_UID_VALUE']]['MODELS'] = []; + $brand = $sitemap_all_brands_search_ob->GetFields(); + $brand['MODELS'] = []; + + $sitemap_catalog[$brand['PROPERTY_UID_VALUE']] = $brand; } - 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_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()) { - $sitemap_catalog_string .= "".$url."/".$brand['CODE']."/".$model['CODE']."/"."".$lastmod.""."\n"; + $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); } -} -//страницы ЛКТ -$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"; -} + $url = "https://".SITE_SERVER_NAME."/catalog"; + $lastmod = date(DATE_W3C); -$BODIES = []; -$ENGINE_FUELS = []; + $sitemap_catalog_string = "\n\n"; -//страницы кузов -$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") + foreach($sitemap_catalog AS $brand) { - 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"; + $sitemap_catalog_string .= "".$url."/".$brand['CODE']."/"."".$lastmod.""."\n"; foreach($brand['MODELS'] AS $model) { - $sitemap_regions_string .= "".$url."/".$city."/".$brand['CODE']."/".$model['CODE']."/"."".$lastmod.""."\n"; + $sitemap_catalog_string .= "".$url."/".$brand['CODE']."/".$model['CODE']."/"."".$lastmod.""."\n"; } } - foreach($BODIES AS $body_slug) + //страницы ЛКТ + $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()) { - $sitemap_regions_string .= "".$url."/".$city."/".$body_slug."".$lastmod.""."\n"; + $car_existed = $sitemap_car_search_ob->GetFields(); + $sitemap_catalog_string .= "https://".SITE_SERVER_NAME.$car_existed['DETAIL_PAGE_URL']."".$lastmod.""."\n"; } - foreach($ENGINE_FUELS AS $engine_slug) + $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()) { - $sitemap_regions_string .= "".$url."/".$city."/".$engine_slug."".$lastmod.""."\n"; + $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_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 -------------------------------------------------------------*/ -\Bitrix\Main\Mail\Event::send([ - "EVENT_NAME" => "ILSA_UPDATE", - "LID" => "s1", - "C_FIELDS" => Array( - "MESSAGE" => $traceback_message, - ) -]); +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(); diff --git a/local/ilsa_update_dev.php b/local/ilsa_update_dev.php deleted file mode 100644 index e18ce52..0000000 --- a/local/ilsa_update_dev.php +++ /dev/null @@ -1,2602 +0,0 @@ - [ - "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) -{ - define("ELASTIC_USERNAME", "elastic"); - define("ELASTIC_PASSWORD", "DFbC769Ln0weJL33mtMXGbpJOK4RCJfx"); - - $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, "https://els.quickcode.ru/".$index."/_doc/".$id."/"); - curl_setopt($ch, CURLOPT_USERPWD, ELASTIC_USERNAME . ":" . ELASTIC_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("events_cars_test", [ - "brand" => $brand['NAME'], - "model" => $model['NAME'], - "modification" => $modification['NAME'], - "status" => $modification['STATUS'], - ]); - } - } - - if($model_update) - { - $brand_update = true; - - elasticIndex("events_cars_test", [ - "brand" => $brand['NAME'], - "model" => $model['NAME'], - "status" => $model['STATUS'], - ]); - } - } - - if($brand_update) - { - elasticIndex("events_cars_test", [ - "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(); - -?> \ No newline at end of file