arrToString($params); $catalog = "SELECT * FROM sent_catalog WHERE id = '$id'"; $catalogQuery = $this->db->query($catalog); if ($catalogRes = $this->db->fetch_assoc($catalogQuery)) { $agent_id = $catalogRes['agent_id']; $agent = "SELECT users.first_name, last_name, middle_name, id_manager, phone, photo, email, user_logo, phoneAgency, site, agency_name FROM users WHERE id = '$agent_id'"; $agentQuery = $this->db->query($agent); $agentArr = []; if ($agentRes = $this->db->fetch_assoc($agentQuery)) { $agentRes['agency_name'] = html_entity_decode($agentRes['agency_name'], ENT_QUOTES, 'UTF-8'); if ($agentRes['id_manager']) { $managerSql = "SELECT id_manager, photo, agency_name FROM users WHERE id = '$agentRes[id_manager]'"; $managerQuery = $this->db->query($managerSql); $manager = $this->db->fetch_assoc($managerQuery); if ($manager && $manager['id_manager']) { $agencySql = "SELECT photo, agency_name FROM users WHERE id = '$manager[id_manager]'"; $agencyQuery = $this->db->query($agencySql); $agency = $this->db->fetch_assoc($agencyQuery); if ($agency) { $agentRes['photo'] = $agency['photo']; $agentRes['agency_name'] = $agency['agency_name']; } } else { if ($manager) { $agentRes['photo'] = $manager['photo']; $agentRes['agency_name'] = $manager['agency_name']; } } } $agentArr = $agentRes; } } // Находим комплекс $complexes = "SELECT cl.*, rr.name as region_name, cd.title_desc as note_text, cd.text_desc as note, ca.address as complex_address, ca.latitude as latitude, ca.longitude as longitude, COUNT(caf.id) AS count_favorite_apartments FROM complex_list cl LEFT JOIN complex_address ca ON ca.complex_id = cl.id LEFT JOIN rf_regions rr ON rr.id = cl.rf_region_id JOIN complex_houses ch ON ch.complex_id = cl.id AND (ch.deleted_at IS NULL OR ch.deleted_at = '0000-00-00 00:00:00') JOIN complex_entrances ce ON ce.complex_house_id = ch.id JOIN complex_floors cf ON cf.complex_entrance_id = ce.id JOIN complex_rooms cr ON cr.floor_id = cf.id LEFT JOIN catalogs_apartments_favorite caf ON caf.apartment_id = cr.id AND caf.catalog_id = '$id' LEFT JOIN complex_dop cd ON cd.complex_id = cl.id WHERE cr.id IN (SELECT id_object FROM sended_pdf_complexes WHERE sent_catalog_id = '$id') GROUP BY cl.id"; $complexesQuery = $this->db->query($complexes); $complexesArr = []; while ($complexesRes = $this->db->fetch_assoc($complexesQuery)) { $complex_id = $complexesRes['id']; // Тут фото блока $complex_img = "SELECT image from complex_images WHERE complex_id = '$complex_id'"; $complex_imgQuery = $this->db->query($complex_img); $complex_imgArr = []; while ($complex_imgRes = $this->db->fetch_assoc($complex_imgQuery)) { $complex_imgArr[] = $complex_imgRes['image']; } // Находим метро $metro = "SELECT metro.id, metro.metro, m.metro_id, m.subway_time, m.subway_type FROM complex_metro as m JOIN metro on metro.id = m.metro_id WHERE m.complex_id='$complex_id'"; $metroArr = []; $metroQuery = $this->db->query($metro); while ($metro = $this->db->fetch_assoc($metroQuery)) { $metroArr[] = $metro; } // Находим квартиры(апартаменты) $complex_rooms = "SELECT IF(caf.id IS NOT NULL, 1, 0) AS is_favorite, IF(complex_rooms.layout_feature = 'studio', 'Студия', IF(complex_rooms.rooms_count >= 6, '6+ ккв', CONCAT(complex_rooms.rooms_count, ' ккв'))) AS room_type_name, dt.name AS decoration, complex_rooms.*, cf.position AS building_floors, ch.name AS corpus_name, chpi.url AS image, cf.position AS floor, spc.new_installment_price AS new_installment_price, spc.new_presentation_note AS new_presentation_note, spc.calculation_data AS calculation_data, DATE_FORMAT(STR_TO_DATE(CONCAT(ch.deadline_year, '-', CASE ch.deadline_quarter WHEN '1' THEN '03' WHEN '2' THEN '06' WHEN '3' THEN '09' WHEN '4' THEN '12' END, '-01'), '%Y-%m-%d'), '%Y-%m-01 00:00:00') AS building_deadline FROM complex_rooms JOIN complex_floors cf ON cf.id = complex_rooms.floor_id JOIN complex_entrances ce ON ce.id = cf.complex_entrance_id JOIN complex_houses ch ON ce.complex_house_id = ch.id AND (ch.deleted_at IS NULL OR ch.deleted_at = '0000-00-00 00:00:00') JOIN complex_list cl ON cl.id = ch.complex_id JOIN sended_pdf_complexes spc ON spc.sent_catalog_id = '$id' AND spc.id_object = complex_rooms.id LEFT JOIN decoration_types dt ON dt.id = complex_rooms.decoration_id LEFT JOIN catalogs_apartments_favorite caf ON caf.apartment_id = complex_rooms.id AND caf.catalog_id = '$id' LEFT JOIN complex_rooms_plans crp ON crp.room_id = complex_rooms.id LEFT JOIN complex_house_plans_images chpi ON crp.plan_id = chpi.plan_id AND chpi.position = 1 WHERE complex_rooms.id IN (SELECT id_object FROM sended_pdf_complexes WHERE sent_catalog_id = '$id') AND cl.id = '$complex_id' GROUP BY complex_rooms.id"; $complexRoomsQuery = $this->db->query($complex_rooms); $complexRoomsArr = []; while ($complexRoomsRes = $this->db->fetch_assoc($complexRoomsQuery)) { $complexRoomsRes['is_favorite'] = (bool)$complexRoomsRes['is_favorite']; if (!empty($complexRoomsRes['calculation_data'])) { $complexRoomsRes['calculation_data'] = json_decode($complexRoomsRes['calculation_data'], true); } else { $complexRoomsRes['calculation_data'] = []; } // Получаем attributes отдельным запросом $room_id = $complexRoomsRes['id']; $attributesSql = "SELECT * FROM complex_rooms_attribute WHERE complex_room_id = '$room_id'"; $attributesQuery = $this->db->query($attributesSql); // создаём массив с группировкой по типу $attributesGrouped = [ 'rooms' => [], 'bathrooms' => [], 'loggias' => [] ]; while ($attr = $this->db->fetch_assoc($attributesQuery)) { switch ($attr['attribute_type']) { case 'room': $attributesGrouped['rooms'][] = $attr; break; case 'bathroom': $attributesGrouped['bathrooms'][] = $attr; break; case 'loggia': $attributesGrouped['loggias'][] = $attr; break; case 'balcony': $attributesGrouped['balcony'][] = $attr; break; } } $complexRoomsRes['attributes'] = $attributesGrouped; $floor_id = $complexRoomsRes['floor_id']; $sql = " SELECT chfp.image AS image_floor FROM complex_floors_plans cfp LEFT JOIN complex_house_floor_plans chfp ON cfp.floor_plan_id = chfp.id WHERE cfp.floor_id = '$floor_id' "; $imageRes = $this->db->fetch_assoc($this->db->query($sql)); $image_floor = $imageRes['image_floor']; $complexRoomsRes['image_floor'] = $image_floor; $complexRoomsArr[] = $complexRoomsRes; } $complexesRes['apartments'] = $complexRoomsArr; $complexesRes['block_img'] = $complex_imgArr; $complexesRes['metros'] = $metroArr; $complexesRes['image'] = count($complex_imgArr) ? $complex_imgArr[0] : null; $complexesArr[] = $complexesRes; } return [ 'id' => $catalogRes['id'], 'agent_id' => $catalogRes['agent_id'], 'agent' => $agentArr, 'blocks' => $complexesArr, ]; } // apartment presentation page public function getApartment($id, $token) { if (!is_array($id)) { return false; } $user = []; $id = $this->arrToString($id); if ($token) { $userSql = "SELECT id, fio, phone, photo, email, site, first_name, last_name, middle_name, id_manager, user_logo FROM users WHERE MD5(id)='$token'"; $rez_user = $this->db->query($userSql); $user = $this->db->fetch_assoc($rez_user); if ($user['id_manager']) { $sql = "SELECT id_manager, photo, fio FROM users WHERE id='$user[id_manager]'"; $rez = $this->db->query($sql); $manager = $this->db->fetch_assoc($rez); if ($manager['id_manager']) { $agency = $this->db->fetch_assoc($this->db->query("SELECT id_manager, email, site, first_name, last_name, middle_name, photo, fio FROM users WHERE id='$manager[id_manager]'")); } else { $agency = $manager; } $user['photo'] = $agency['photo']; $user['agency_name'] = trim($agency['last_name'] . ' ' . $agency['first_name'] . ' ' . $agency['middle_name']); } else { $user['agency_name'] = $user['fio']; } } $complex_sql = "SELECT cl.*, rr.name as region_name, cd.title_desc as note_text, cd.text_desc as note, ca.address as complex_address, ca.latitude as latitude, ca.longitude as longitude FROM complex_list cl LEFT JOIN complex_address ca ON ca.complex_id = cl.id LEFT JOIN rf_regions rr ON rr.id = cl.rf_region_id JOIN complex_houses ch ON ch.complex_id = cl.id AND (ch.deleted_at IS NULL OR ch.deleted_at = '0000-00-00 00:00:00') JOIN complex_entrances ce ON ce.complex_house_id = ch.id JOIN complex_floors cf ON cf.complex_entrance_id = ce.id JOIN complex_rooms cr ON cr.floor_id = cf.id LEFT JOIN complex_dop cd ON cd.complex_id = cl.id WHERE cr.id = '$id' "; $complex_q = $this->db->query($complex_sql); $complex_res = $this->db->fetch_assoc($complex_q); $complex_id = $complex_res['id']; // // Тут фото блока $complex_img = "SELECT image from complex_images WHERE complex_id = '$complex_id'"; $complex_imgQuery = $this->db->query($complex_img); $complex_imgArr = []; while ($complex_imgRes = $this->db->fetch_assoc($complex_imgQuery)) { $complex_imgArr[] = $complex_imgRes['image']; } // Находим метро $metro = "SELECT metro.id, metro.metro, m.metro_id, m.subway_time, m.subway_type FROM complex_metro as m JOIN metro on metro.id = m.metro_id WHERE m.complex_id='$complex_id'"; $metroArr = []; $metroQuery = $this->db->query($metro); while ($metro = $this->db->fetch_assoc($metroQuery)) { $metroArr[] = $metro; } $complex_res['block_img'] = $complex_imgArr; $complex_res['metros'] = $metroArr; $complex_res['image'] = count($complex_imgArr) ? $complex_imgArr[0] : null; // Находим квартиры(апартаменты) $complex_room_sql = "SELECT IF(complex_rooms.layout_feature = 'studio', 'Студия', IF(complex_rooms.rooms_count >= 6, '6+ ккв', CONCAT(complex_rooms.rooms_count, ' ккв'))) AS room_type_name, dt.name AS decoration, complex_rooms.*, cf.position AS building_floors, ch.name AS corpus_name, chpi.url AS image, cf.position AS floor, DATE_FORMAT(STR_TO_DATE(CONCAT(ch.deadline_year, '-', CASE ch.deadline_quarter WHEN '1' THEN '03' WHEN '2' THEN '06' WHEN '3' THEN '09' WHEN '4' THEN '12' END, '-01'), '%Y-%m-%d'), '%Y-%m-01 00:00:00') AS building_deadline FROM complex_rooms JOIN complex_floors cf ON cf.id = complex_rooms.floor_id JOIN complex_entrances ce ON ce.id = cf.complex_entrance_id JOIN complex_houses ch ON ce.complex_house_id = ch.id AND (ch.deleted_at IS NULL OR ch.deleted_at = '0000-00-00 00:00:00') JOIN complex_list cl ON cl.id = ch.complex_id LEFT JOIN decoration_types dt ON dt.id = complex_rooms.decoration_id LEFT JOIN complex_rooms_plans crp ON crp.room_id = complex_rooms.id LEFT JOIN complex_house_plans_images chpi ON crp.plan_id = chpi.plan_id AND chpi.position = 1 WHERE complex_rooms.id = '$id'"; $complex_q = $this->db->query($complex_room_sql); $complex_room = $this->db->fetch_assoc($complex_q); return [ "user" => $user, "apartment" => $complex_room, "block" => $complex_res ]; } }