Your IP : 18.117.98.198


Current Path : /home/bitrix/ext_www/dev.easy-comfort.com.ua/support/
Upload File :
Current File : /home/bitrix/ext_www/dev.easy-comfort.com.ua/support/update_coordinates.php

<?

use Bitrix\Main\Loader;
use Bitrix\Main\Web\HttpClient;

require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
define("NO_KEEP_STATISTIC", true);

$APPLICATION->SetTitle("Обновление координат для магазинов");
global $USER;
if($USER->IsAdmin()){
	Loader::includeModule('iblock');
	?>
    <div class="content-center">
        <div class="form-standart" style="padding-bottom: 20px;">
            <form action="" method="post">
                <div style="padding: 20px;border: 1px solid #ccc;">
                    <label>Выберите инфоблок для обновления</label>
					<?= GetIBlockDropDownList(false, 'IBLOCK_TYPE_ID',
						'IBLOCK_ID',
						false, 'class="select2"', 'class="select2"'); ?>
                </div>

                <div style="padding: 20px;border: 1px solid #ccc;">
                    Тип обновления:<br><br>
<!--                    <label>-->
<!--                        <input type="radio" name="mod" value="all">Обновить все координаты-->
<!--                    </label>-->
<!--                    <br>-->
<!--                    <br>-->
                    <label>
                        <input type="radio" name="mod" value="empty" checked>Только не заполненные
                    </label>
                    <br>
                    <br>
                    <div>Обновление может занять продолжительное время, для режима Только незаполненные - установлен
                        режим обновлять по 50 записей, После окончания работы скрипта - запустите его еще раз
                    </div>
                    <input type="submit" value="Начать">
                </div>
            </form>
        </div>
		<?

		if($_POST['IBLOCK_ID'] && intval($_POST['IBLOCK_ID']) > 0){
			$iblockId = intval($_POST['IBLOCK_ID']);
			$arFilter = [];
			$navParams = false;
			$arFilter['IBLOCK_ID'] = $iblockId;
			$arFilter['PROPERTY_MAP'] = ($_POST['mod'] == 'all') ? true : false; //только пустые
			if(!$arFilter['PROPERTY_MAP']){
				$navParams['nTopCount'] = 50;
			}

			$Elements = CIBlockElement::GetList([], $arFilter, false, $navParams, [
				'ID',
				'NAME',
				'PROPERTY_MAP',
				'PROPERTY_ADDRESS',
				'PROPERTY_CITY',
			]);


			while($item = $Elements->GetNext()){
				$address = $item['PROPERTY_CITY_VALUE'] . ', ' . $item['PROPERTY_ADDRESS_VALUE'];
				if(!$item['PROPERTY_CITY_VALUE'] || !$item['PROPERTY_ADDRESS_VALUE']){
					echo '<div style="color:red">ID ' . $item['ID'] . ' Город или адрес ' . $item['NAME'] . ' не заполнены</div>';
					continue;
				}
				$httpClient = new HttpClient();
				$httpClient->setHeader('Content-Type', 'application/json', true);
				$httpClient->setTimeout(2);
				$httpClient->waitResponse(true);
				$response = $httpClient->get('https://maps.googleapis.com/maps/api/geocode/json?' . http_build_query(array('address' => $address)));
				if($response){
					$result = json_decode($response, true);
					$firstResult = array_shift($result['results']);
					$coordinatesArray = $firstResult['geometry']['location'];
					if($coordinatesArray){
						$coordinatesStr = $coordinatesArray['lat'] . ',' . $coordinatesArray['lng'];
						CIBlockElement::SetPropertyValuesEx($item['ID'], $iblockId, array('MAP' => $coordinatesStr));
						echo '<div style="color:green">ID ' . $item['ID'] . ' Обновляем координаты для ' . $item['NAME'] . '</div>';
					} else{
						echo '<div style="color:red">ID ' . $item['ID'] . ' Не смогли получить координаты для ' . $item['NAME'] . ', проверьте адрес и город</div>';
					}
				} else{
					echo '<div style="color:red">ID ' . $item['ID'] . ' Не смогли получить координаты для ' . $item['NAME'] . ', проверьте адрес и город</div>';
				}
			}
		}
		?>
    </div>
	<?
}
else{
	echo '<div style="color:red">Доступно только для администратора</div>';
}
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php"); ?>