0) { $sqlPh = "SELECT phone FROM clients WHERE id_agent = $agencyIdForPhones OR who_work IN ( SELECT id FROM users WHERE id_manager = $agencyIdForPhones OR id = $agencyIdForPhones )"; $resPh = mysql_query($sqlPh); if ($resPh) { while ($rowPh = mysql_fetch_assoc($resPh)) { $d = preg_replace('/[^0-9]/', '', $rowPh['phone']); if ($d !== '') { $clientPhonesSet[$d] = true; } } } } } $domain = 'https://'.$_SERVER['HTTP_HOST'] . '/photos' . '/'; $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $arrColExcel = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF']; $fields = [ [ 'name' => "step", 'title' => '№', 'width' => 5 ], [ 'name' => "id", 'title' => 'ID объекта', 'width' => 10 ], [ 'name' => "plan", 'title' => 'Фото планировки', 'width' => 20 ], [ 'name' => "preview", 'title' => 'Фото превью ссылка', 'width' => 20 ], [ 'name' => "type", 'title' => 'Тип рынка', 'width' => 10 ], [ 'name' => "objType", 'title' => 'Тип квартиры – помещения', 'width' => 20 ], [ 'name' => "metro", 'title' => 'Район/метро', 'width' => 25 ], [ 'name' => "address", 'title' => 'Адрес', 'width' => 35 ], [ 'name' => "allArea", 'title' => 'Метраж общий', 'width' => 10 ], [ 'name' => "liveArea", 'title' => 'Метраж жилой', 'width' => 10 ], [ 'name' => "kitchenArea", 'title' => 'Метраж кухни', 'width' => 10 ], [ 'name' => "floor", 'title' => 'Этаж/Этажность', 'width' => 15 ], [ 'name' => "price", 'title' => 'Цена', 'width' => 20 ], [ 'name' => "phone", 'title' => 'Телефон', 'width' => 20 ], [ 'name' => "linkResource", 'title' => 'Ссылка на первоисточник', 'width' => 20 ], [ 'name' => "createDate", 'title' => 'Дата создания', 'width' => 20 ], [ 'name' => "contract_type", 'title' => 'Тип договора', 'width' => 20 ], [ 'name' => "contract_number", 'title' => 'Номер договора', 'width' => 20 ], [ 'name' => "contract_date", 'title' => 'Дата договора', 'width' => 20 ], ]; $fieldsAll = [ [ //done 'name' => "id", 'title' => 'SKU', 'width' => 10 ], [ // 'name' => "objType", 'title' => 'Category', 'width' => 20 ], [ // done 'name' => "type", 'title' => 'Characteristic:Тип объекта', 'width' => 35 ], [ // done 'name' => "opis", 'title' => 'Text', 'width' => 35 ], [ // done 'name' => "nazv", 'title' => 'Title', 'width' => 35 ], [ // done 'name' => "photo", 'title' => 'Photo', 'width' => 20, 'action' => 'all', ], [ // done 'name' => "plan", 'title' => 'Plan photo', 'width' => 20, 'action' => 'all', ], [ // done 'name' => "price", 'title' => 'Price', 'width' => 15 ], [ // done 'name' => "address", 'title' => 'Characteristic:Адрес', 'width' => 35 ], [ // done 'name' => "metro", 'title' => 'Characteristics:Район/Метро', 'width' => 20 ], [ // done 'name' => "allArea", 'title' => 'Characteristic:Общая площадь', 'width' => 10 ], [ // done 'name' => "liveArea", 'title' => 'Characteristic:Площадь комнат', 'width' => 10 ], [ // done 'name' => "kitchenArea", 'title' => 'Characteristic:Площадь кухни', 'width' => 10 ], [ // done 'name' => "landArea", // Площадь участка 'title' => 'Characteristic:Площадь участка (NO)', 'width' => 35 ], [ // done 'name' => "numberFlat", // колво комнат 'title' => 'Characteristic:Количество комнат', 'width' => 10 ], [ // done 'name' => "floor", 'title' => 'Characteristic:Этажность', 'width' => 15 ], [ // done 'name' => "id2", 'title' => 'External ID', 'width' => 10 ], [ // done 'name' => "id1", 'title' => 'Parent UID', 'width' => 10 ], [ // done 'name' => "manager", 'title' => 'Characteristic:ФИО', 'width' => 10 ], [ // done 'name' => "phone", 'title' => 'Characteristic:Телефон', 'width' => 10 ], [ 'name' => "contract_type", 'title' => 'Тип договора', 'width' => 20 ], [ 'name' => "contract_number", 'title' => 'Номер договора', 'width' => 20 ], [ 'name' => "contract_date", 'title' => 'Дата договора', 'width' => 20 ], ]; $objects = []; $objectIds = ''; $post = clearInputData($_POST); if ($_SESSION['checked'] && isset($post['objectIds']) && $post['objectIds'] != 'all') { $objectIds = implode(", ", array_map('intval', $_SESSION['checked'])); } else { $objectIds = $post['objectIds']; if ($objectIds == 'all') { if(isset($_SESSION['agency_objects_export_all_all'])) { $objectIds = implode(", ", array_map('intval', $_SESSION['agency_objects_export_all_all'])); $fields = $fieldsAll; } else { $objectIds = null; } } } $arrayHeader = []; for ($i = 0, $l = sizeof($fields); $i < $l; $i++) { $arrayHeader[$arrColExcel[$i]] = $fields[$i]; } if ($_SESSION['id']) { if ($objectIds) { $sql = "SELECT objects.id, objects.komnat, objects.type, objects.land_area, objects.ploshad, objects.ploshad_komn, objects.ploshad_k, objects.land_usage_type_id, objects.etazh, objects.dom, objects.korpus, objects.litera, objects.etazh_iz, objects.etaz_first_type, objects.stoim, objects.studio_flag, objects.operation_type, objects.phone, objects.adres, rayon.rayon, ads_objects.ads_url, DATE_FORMAT(objects.date_add,'%d.%m.%Y %H:%i') as date_add FROM objects LEFT JOIN rayon on objects.rayon = rayon.id LEFT JOIN ads_objects ON ads_objects.obj_id = objects.id WHERE objects.id IN ({$objectIds}) ORDER BY objects.date_add DESC "; //начитка фото списком $rezPhotoArray = []; $sqlPhotoInfo = "SELECT oop.sort_order, oop.object_id, p.photo FROM objects_object_photo oop, object_photo p WHERE p.id = oop.object_photo_id AND oop.object_id IN ({$objectIds})"; $rezPhotoInfo = mysql_query($sqlPhotoInfo); if (mysql_num_rows($rezPhotoInfo) > 0) { while ($objPhoto = mysql_fetch_assoc($rezPhotoInfo)) { if (!isset($rezPhotoArray[$objPhoto["object_id"]])) { $rezPhotoArray[$objPhoto["object_id"]] = []; } $rezPhotoArray[$objPhoto["object_id"]]['photo' . $objPhoto['sort_order']] = $objPhoto["photo"]; } } // метро $objMetroArray = []; $sqlMetro = "SELECT GROUP_CONCAT(metro.metro SEPARATOR ', ') as metro_list, sp_metro.id_obj as id_obj FROM metro, sp_metro WHERE sp_metro.id_metro = metro.id AND sp_metro.id_obj IN ({$objectIds}) GROUP BY sp_metro.id_obj"; $resultMetro = mysql_query($sqlMetro); while ($mtr = mysql_fetch_assoc($resultMetro)) { $objMetroArray[$mtr['id_obj']] = $mtr; } //начитываем координаты списком $objCoordinatesArray = []; $sqlCoordinates = "SELECT address, object_id, latitude, longitude FROM object_location WHERE object_id IN ({$objectIds})"; $rezCoordinatesAll = mysql_query($sqlCoordinates); if (mysql_num_rows($rezCoordinatesAll) > 0) { while ($objCoords = mysql_fetch_assoc($rezCoordinatesAll)) { $objCoordinatesArray[] = $objCoords; } } } $res = mysql_query($sql); $z = 1; while ($obj = mysql_fetch_assoc($res)) { // Превью фото (ссылка) $photo = []; if (isset($rezPhotoArray[$obj["id"]])) { foreach ($rezPhotoArray[$obj["id"]] as $key => $phot) { if(!empty($phot)){ $photo[] = $phot; //break; } } } // Тип квартиры – помещения $type = 'Объект'; switch ($obj['type']) { case 1: if ($obj['komnat'] == 1 && $obj['studio_flag']) { $type = "Квартира-студия"; } else { $type = "$obj[komnat]-комнатная квартира"; } break; case 2: $type = "Комната в $obj[komnat]-комнатной квартире"; break; case 3: $type = "$obj[komnat]-комнатный дом"; break; case 4: switch ($obj['type_category']){ case 1: $type = "Офис"; break; case 2: $type = "Склад"; break; case 3: $type = "Торговая площадь"; break; case 4: $type = "Производство"; break; case 5: $type = "Помещение свободного назначения"; break; case 6: $type = "Здание"; break; case 7: $type = "Гараж"; break; case 8: $type = "Готовый бизнес"; break; case 9: $type = "Коммерческая земля"; break; default: $type = "Помещение"; } break; case 5: $type = "Часть дома"; break; case 6: $type = "Комплекс"; break; case 7: $type = "Участок"; break; default: $type = "$obj[komnat]-комнатная квартира"; } // Район/метро $metroRayon = ''; if ($obj['rayon']) { $metroRayon .= $obj['rayon'] . ' район'; } if (isset($objMetroArray[$obj['id']])) { $metroRayon .= ' / ' . $objMetroArray[$obj['id']]['metro_list']; } // Адрес if (isset($objCoordinatesArray)) { foreach ($objCoordinatesArray as $objCoords) { if ($objCoords['object_id'] == $obj['id']) { $objCoordinates = $objCoords; $obj['latitude'] = $objCoordinates['latitude']; $obj['longitude'] = $objCoordinates['longitude']; break; } } } else { $sql_coordinates = "SELECT address, latitude, longitude FROM object_location WHERE object_id=".$obj['id']; $rezCoordinates = mysql_query($sql_coordinates); if (mysql_num_rows($rezCoordinates) > 0) { $objCoordinates = mysql_fetch_assoc($rezCoordinates); $obj['latitude'] = $objCoordinates['latitude']; $obj['longitude'] = $objCoordinates['longitude']; } } if ($objCoordinates && isset($objCoordinates['address'])) { $address = $objCoordinates['address']; } else { $address = $obj['adres']; if ($obj['dom']) { $address = $address . ", " . $obj['dom']; } if ($obj['korpus']) { $address = $address . ", корпус " . $obj['korpus']; } if ($obj['litera']) { $address = $address . ", литера " . $obj['litera']; } } // Этаж/Этажность $etazh = ''; if ($obj['type'] == 3) { if ($obj['etazh_iz'] * 1 != 0) { $etazh = 'из ' . $obj['etazh_iz'] . " этажей"; } } if ($obj['etazh'] * 1 != 0) { $etazh = $obj['etazh'] . ' этаж'; if ((int)$obj['etazh'] == 1 && !empty($obj['etaz_first_type'])) { $etazh = $etaz_first_types[$obj['etaz_first_type']]; } if ($obj['etazh_iz'] * 1 != 0) { $etazh .= " из " . $obj['etazh_iz']; } } // Дата создания list($dateAdd, $timeAdd) = explode(" ", $obj['date_add']); list($d, $m, $y) = explode(".", $dateAdd); $date_add = $d . " " . getRusMonth($m) . " " . $y; $createDate = $date_add . " " . $timeAdd; $objects[] = [ $z, 'id' => $obj['id'], 'preview' => $photo, 'type' => $obj['operation_type'] == 1 ? "Продажа" : "Аренда", 'objType' => $type, 'metro' => $metroRayon, 'address' => $address, 'allArea' => $obj['type'] == 7 ? $obj['land_area'] * 1 : $obj['ploshad'] * 1, 'liveArea' => $obj['ploshad_komn'], 'landArea' => $obj['land_area'], 'kitchenArea' => $obj['ploshad_k'] * 1, 'floor' => $etazh, 'price' => number_format($obj['stoim'], 0, ',', ' '), 'phone' => $obj['phone'], 'linkResource' => $obj['ads_url'], 'createDate' => $createDate, ]; $z++; } } if (count($objects) > 0) { $rowStart = 1; foreach($arrayHeader as $h => $w) { $sheet->setCellValue($h.$rowStart, $w['title']); $sheet->getColumnDimension($h)->setWidth($w['width']); $sheet->getStyle($h.$rowStart)->getFont()->applyFromArray( [ 'name' => 'Arial', 'bold' => TRUE, 'italic' => FALSE, 'strikethrough' => FALSE, 'color' => [ 'rgb' => '808080' ], ] ); $sheet->getStyle($h)->getAlignment()->setWrapText(true); $sheet->getStyle($h.$rowStart)->getAlignment()->setWrapText(true); $sheet->getStyle($h.$rowStart)->getAlignment() ->setHorizontal(Alignment::HORIZONTAL_CENTER) ->setVertical(Alignment::VERTICAL_CENTER); } $i = $rowStart + 1; $k = 1; foreach ($objects as $object) { $j = 0; foreach ($fields as $q => $colSets) { switch($colSets['name']) { case 'preview': if (isset($colSets['action'])) { if (is_array($object['preview']) && count($object['preview']) > 0) { $previewUrls = array_map('html_entity_decode', $object['preview']); $imageIndex = $i; // отдельный индекс для картинок foreach ($previewUrls as $index => $url) { $sheet->setCellValue($arrColExcel[$q].$imageIndex, 'Посмотреть фото ' . ($index + 1)); $sheet->getCell($arrColExcel[$q] . $imageIndex)->getHyperlink()->setUrl($url); $sheet->getStyle($arrColExcel[$q] . $imageIndex)->getFont()->getColor()->setARGB(Color::COLOR_BLUE); $sheet->getStyle($arrColExcel[$q].$imageIndex)->getAlignment() ->setHorizontal(Alignment::HORIZONTAL_CENTER); $imageIndex++; // увеличить индекс картинки } } else { $sheet->setCellValue($arrColExcel[$q].$i, 'Нет фото'); $sheet->getStyle($arrColExcel[$q].$i)->getAlignment() ->setHorizontal(Alignment::HORIZONTAL_CENTER); } } else { if (is_array($object['preview']) && count($object['preview']) > 0) { $previewUrls = array_map('html_entity_decode', $object['preview']); $imageIndex = $i; // отдельный индекс для картинок foreach ($previewUrls as $index => $url) { $sheet->setCellValue($arrColExcel[$q].$imageIndex, 'Посмотреть фото ' . ($index + 1)); $sheet->getCell($arrColExcel[$q] . $imageIndex)->getHyperlink()->setUrl($url); $sheet->getStyle($arrColExcel[$q] . $imageIndex)->getFont()->getColor()->setARGB(Color::COLOR_BLUE); $sheet->getStyle($arrColExcel[$q].$imageIndex)->getAlignment() ->setHorizontal(Alignment::HORIZONTAL_CENTER); $imageIndex++; // увеличить индекс картинки } } else { $sheet->setCellValue($arrColExcel[$q].$i, 'Нет фото'); $sheet->getStyle($arrColExcel[$q].$i)->getAlignment() ->setHorizontal(Alignment::HORIZONTAL_CENTER); } } break; default: $sheet->setCellValue($arrColExcel[$q].$i, html_entity_decode($object[$colSets['name']])); } } $i = $i + count($object['preview']); //$i++; $k++; continue; $sheet->setCellValue($arrColExcel[$j].$i, $k); $j++; $sheet->setCellValue($arrColExcel[$j].$i, html_entity_decode($object['id'])); $j++; if ($preview = html_entity_decode($object['preview'])) { $sheet->setCellValue($arrColExcel[$j].$i, 'Посмотреть фото'); $sheet->getCell($arrColExcel[$j] . $i)->getHyperlink()->setUrl(html_entity_decode($object['preview'])); $sheet->getStyle($arrColExcel[$j] . $i)->getFont()->getColor()->setARGB(Color::COLOR_BLUE); $sheet->getStyle($arrColExcel[$j].$i)->getAlignment() ->setHorizontal(Alignment::HORIZONTAL_CENTER); } else { $sheet->setCellValue($arrColExcel[$j].$i, 'Нет фото'); $sheet->getStyle($arrColExcel[$j].$i)->getAlignment() ->setHorizontal(Alignment::HORIZONTAL_CENTER); } $j++; $sheet->setCellValue($arrColExcel[$j].$i, html_entity_decode($object['type'])); $j++; $sheet->setCellValue($arrColExcel[$j].$i, html_entity_decode($object['objType'])); $j++; $sheet->setCellValue($arrColExcel[$j].$i, html_entity_decode($object['metro'])); $j++; $sheet->setCellValue($arrColExcel[$j].$i, html_entity_decode($object['address'])); $j++; $sheet->setCellValue($arrColExcel[$j].$i, html_entity_decode($object['allArea'])); $j++; $sheet->setCellValue($arrColExcel[$j].$i, html_entity_decode($object['liveArea'])); $j++; $sheet->setCellValue($arrColExcel[$j].$i, html_entity_decode($object['kitchenArea'])); $j++; $sheet->setCellValue($arrColExcel[$j].$i, html_entity_decode($object['floor'])); $sheet->getStyle($arrColExcel[$j].$i)->getAlignment() ->setHorizontal(Alignment::HORIZONTAL_CENTER); $j++; $sheet->setCellValue($arrColExcel[$j].$i, html_entity_decode($object['price'])); $sheet->getStyle($arrColExcel[$j].$i)->getAlignment() ->setHorizontal(Alignment::HORIZONTAL_RIGHT); $j++; $phoneOwnCell = html_entity_decode($object['phone']); if ($hideContactsExcelOwn && !empty($phoneOwnCell)) { $digitsCheck = preg_replace('/[^0-9]/', '', $phoneOwnCell); if ($digitsCheck !== '' && isset($clientPhonesSet[$digitsCheck])) { // Собственник этого объекта — клиент агентства, маскируем. $phoneOwnCell = mask_client_phone($phoneOwnCell); } } $sheet->setCellValue($arrColExcel[$j] . $i, $phoneOwnCell); $sheet->getStyle($arrColExcel[$j].$i)->getAlignment() ->setHorizontal(Alignment::HORIZONTAL_RIGHT); $j++; $sheet->setCellValue($arrColExcel[$j].$i, html_entity_decode($object['linkResource'])); $j++; $sheet->setCellValue($arrColExcel[$j].$i, html_entity_decode($object['createDate'])); $j++; } } $writer = new Xlsx($spreadsheet); if ( !file_exists($_SERVER['DOCUMENT_ROOT'] . '/server/excel2/') && !mkdir($concurrentDirectory = $_SERVER['DOCUMENT_ROOT'] . '/server/excel2/', 0777) && !is_dir($concurrentDirectory) ) { throw new \RuntimeException(sprintf('Directory "%s" was not created', $concurrentDirectory)); } $fileName = "my_objects_" . date('d.m.Y_H-i-s') . ".xlsx"; $filePath = '/server/excel2/' . $fileName; if ($filePath && $fileName) { $writer = IOFactory::createWriter($spreadsheet, 'Xlsx'); $writer->save($_SERVER['DOCUMENT_ROOT'] . $filePath); echo json_encode([ 'file' => $filePath, 'result' => 'ok', 'name' => $fileName, ]); }