db = $db; } else { $pdo = new MysqlPdo(hst, ndb, user, pass); $sql = "SET NAMES 'utf8'"; $pdo->query($sql); $this->db = $pdo; } if($agency_id > 0){ $this->set_agency_id($agency_id); } } public function set_users($users){ $this->users = $users; } public function set_agency_id($agency_id){ $this->agency_id = $agency_id; } public function set_user_id($user_id){ $this->user_id = $user_id; } public function set_page($page){ $this->page = $page; } public function check_is_req($who_work, $source_id, $client_id){ $id_req = null; $sql = "SELECT * FROM requisitions WHERE client_id={$client_id} AND who_work = {$who_work} AND source = {$source_id} AND deleted=0 AND cancel = 0"; $q = $this->db->query($sql, true); if($this->db->num_rows($q) > 0){ $r = $this->db->fetch_assoc($q); $id_req = (int)$r['id']; } return $id_req; } public function getAllUserAgency($agency_id){ $usersIds = array(); $sql_u = "SELECT * FROM users WHERE id in (select id from users where id=$agency_id or id_manager=$agency_id or id_manager in (select id from users where id_manager=$agency_id or id_manager in (select id from users where id_manager=$agency_id)))"; $q_u = $this->db->query($sql_u); while($r_u = $this->db->fetch_assoc($q_u)){ $usersIds[] = (int)$r_u['id']; } $sql_u = "SELECT * FROM users_delete WHERE user_id in (select user_id from users_delete where user_id=$agency_id or id_manager=$agency_id or id_manager in (select user_id from users_delete where id_manager=$agency_id or id_manager in (select user_id from users_delete where id_manager=$agency_id)))"; $q_u = $this->db->query($sql_u); while($r_u = $this->db->fetch_assoc($q_u)){ $usersIds[] = (int)$r_u['user_id']; } return $usersIds; } public function set_enable_webhook($enable_webhook){ if($this->agency_id > 0){ $sql = "UPDATE users SET enable_webhooks = {$enable_webhook} WHERE id = {$this->agency_id}"; $q = $this->db->query($sql); } return 1; } public function get_enable_webhook(){ $result = 0; if($this->agency_id > 0){ $sql = "SELECT * FROM users WHERE id = {$this->agency_id}"; $q = $this->db->query($sql); $r = $this->db->fetch_assoc($q); if($r['enable_webhooks']){ $result = (int)$r['enable_webhooks']; } } return $result; } /** * Получение списка настроек вебхуков */ public function get_webhooks_list(){ $result = array(); $result['total'] = 0; if($this->agency_id > 0){ $limitSql = ""; $where = ''; $sql_total = "SELECT COUNT(*) as total FROM webhook_configs WHERE agency_id = {$this->agency_id} {$where}"; $q_total = $this->db->query($sql_total); $r_total = $this->db->fetch_row($q_total); if($r_total[0] > 0) $result['total'] = (int)$r_total[0]; if($this->page > 0){ $limitSql = ' limit '.($this->page-1)*$this->limit.', '.$this->limit; } $sql = "SELECT * FROM webhook_configs WHERE agency_id = {$this->agency_id} {$where} {$limitSql}"; $q = $this->db->query($sql); $arrAction = array('close_step'=>'Закрытие этапа', 'transition_step'=>'Переход на этапа', 'object_create'=>'Добавление нового объекта', 'object_update'=>'Редактирование объекта', 'object_advertise'=>'Выставление объекта в рекламу', 'object_unadvertise'=>'Снятие с рекламы', 'object_archive'=>'Отправка в архив', 'object_restore'=>'Возврат из архива', 'employee_create'=>'Добавление нового сотрудника', 'employee_update' => 'Изменение сотрудника', 'employee_block'=>'Блокировка сотрудника', 'employee_unblock'=>'Снятие блокировки с сотрудника', 'employee_delete'=>'Удаление сотрудника' ); $arrSection = array('req'=>'Заявки', 'client'=>'Клиенты', 'object'=>'Объекты', 'employee'=>'Сотрудники'); while($r = $this->db->fetch_assoc($q)){ $r['action_name'] = $arrAction[$r['action']]; $r['section_name'] = $arrSection[$r['section']]; $list[] = $r; } } $result['allPages'] = ceil($result['total']/$this->limit); $result['list'] = isset($list) ? $list : []; return $result; } /** * Сохранение настроек вебхука */ public function save_webhook($item){ $errors = array(); $result = array(); $event = "add"; if($this->agency_id > 0 && $this->user_id > 0){ //Проверка url if(!empty($item->url)){ $sql = "SELECT * FROM webhook_configs WHERE url = '{$item->url}' AND agency_id != {$this->agency_id}"; $q = $this->db->query($sql); if($this->db->num_rows($q) > 0){ $errors['url'] = "Этот url использует другой пользователь"; } } if(empty($errors)){ $steps = null; if(!empty($item->steps)){ $steps = json_encode($item->steps); } if($item->id > 0){ $sql_up = "UPDATE webhook_configs SET url='{$item->url}', user_id={$this->user_id}, name='{$item->name}', section='{$item->section}', action='{$item->action}', funnel_id='{$item->funnel_id}', is_active='{$item->is_active}'"; if(!empty($steps)){ $sql_up .= ", steps='{$steps}'"; } $sql_up .= "WHERE id = {$item->id}"; $this->db->query($sql_up); } else { $sql_in = "INSERT INTO webhook_configs (`agency_id`, `user_id`, `url`, `name`, `section`, `action`, `funnel_id`, `is_active`"; if(!empty($steps)){ $sql_in .= ", `steps`"; } $sql_in .= ")"; $sql_in .= " VALUES ({$this->agency_id}, {$this->user_id}, '{$item->url}', '{$item->name}', '{$item->section}', '{$item->action}', '{$item->funnel_id}', '{$item->is_active}'"; if(!empty($steps)){ $sql_in .= ", '{$steps}'"; } $sql_in .= ")"; $this->db->query($sql_in); } } } if(!empty($errors)){ return array('result'=>'error', 'errors'=>$errors); } return array('result'=>'success'); } /** * Удаление вебхука */ public function delete_webhook($delete_id){ $errors = array(); if($this->agency_id > 0){ $sql_del = "DELETE FROM webhook_configs WHERE id = {$delete_id}"; if(!$this->db->query($sql_del)){ $errors[] = $this->db->error(); } } if(!empty($errors)){ return array('result'=>'error', 'errors'=>$errors); } return array('result'=>'success'); } /** * Проверка отправки */ public function check_send($data){ /*echo json_encode($data, JSON_UNESCAPED_UNICODE); var_dump($this->agency_id);*/ //file_put_contents(__DIR__.'/log_hook_test.txt', date('d.m.Y H:i:s')." ".json_encode($data, JSON_UNESCAPED_UNICODE). "\n", FILE_APPEND); if($this->agency_id > 0){ $sql = "SELECT enable_webhooks FROM users WHERE id = {$this->agency_id}"; $q = $this->db->query($sql); $r = $this->db->fetch_assoc($q); if($r['enable_webhooks'] > 0){ if($data['action'] == 'close_step'){ $sql = "SELECT * FROM webhook_configs WHERE agency_id = {$this->agency_id} AND is_active = 1 AND funnel_id='{$data['funnel_id']}' AND action in ('close_step', 'transition_step') AND section='{$data['section']}'"; // file_put_contents(__DIR__.'/log_hook_test.txt', date('d.m.Y H:i:s')." ".$sql. "\n", FILE_APPEND); $q = $this->db->query($sql); while($r = $this->db->fetch_assoc($q)){ if($r['action'] == 'close_step'){ $steps = json_decode($r['steps'], true); if(!empty($steps) && in_array($data['step_id'], $steps)){ // file_put_contents(__DIR__.'/log_hook_test.txt', date('d.m.Y H:i:s')." ".$data['req_id']. "\n", FILE_APPEND); $w = new WebHookSend($this->agency_id, 4, $data['req_id'], $r['section'], null, 'step_changed', $r['url'], $data); } } if($r['action'] == 'transition_step'){ $steps = json_decode($r['steps'], true); if(!empty($steps) && in_array($data['new_step_id'], $steps)){ // file_put_contents(__DIR__.'/log_hook_test.txt', date('d.m.Y H:i:s')." ".$data['req_id']. "\n", FILE_APPEND); $w = new WebHookSend($this->agency_id, 4, $data['req_id'], $r['section'], null, 'step_changed', $r['url'], $data); } } } } else if (in_array($data['action'], ['object_create', 'object_update', 'object_archive', 'object_restore', 'object_advertise', 'object_unadvertise'])){ $sql = "SELECT * FROM webhook_configs WHERE agency_id = {$this->agency_id} AND is_active = 1 AND action='{$data['action']}' AND section='{$data['section']}'"; $q = $this->db->query($sql); while($r = $this->db->fetch_assoc($q)){ $w = new WebHookSend($this->agency_id, 4, $data['object_id'], $r['section'], null, $data['action'], $r['url'], $data); } } else if (in_array($data['action'], ['employee_create', 'employee_update', 'employee_block', 'employee_unblock', 'employee_delete'])){ $sql = "SELECT * FROM webhook_configs WHERE agency_id = {$this->agency_id} AND is_active = 1 AND action='{$data['action']}' AND section='{$data['section']}'"; //echo $sql; $q = $this->db->query($sql); while($r = $this->db->fetch_assoc($q)){ $w = new WebHookSend($this->agency_id, 4, $data['employee_id'], $r['section'], null, $data['action'], $r['url'], $data); } } } } } /** * Проверка отправляется ли хук агентством при определенном дейсвии */ public function check_hook($action, $section){ $result = false; $sql = "SELECT enable_webhooks FROM users WHERE id = {$this->agency_id}"; $q = $this->db->query($sql); $r = $this->db->fetch_assoc($q); if($r['enable_webhooks'] > 0){ $sql = "SELECT * FROM webhook_configs WHERE agency_id = {$this->agency_id} AND is_active = 1 AND action = '{$action}' AND section='{$section}'"; $q = $this->db->query($sql); if($this->db->num_rows($q) > 0){ $result = true; } } return $result; } /** * Получение объекта */ public function get_object($object_id){ $object = array(); if($object_id > 0){ $sql = "SELECT * FROM objects WHERE id = {$object_id}"; $q = $this->db->query($sql); $object = $this->db->fetch_assoc($q); $sqlAddInfo = "SELECT apartments, video_url, balcony, loggias, separate_wcs, combined_wcs, passenger_lifts, cargo_lifts, house_category, flat_number, garage_type_id, boks_vid_id, commerc_site, building_area, ceiling_height, window_view, free_plan, renovation, commer_condition, commerc_building_class_id, commerc_building_type_id, highway_id FROM objects_additional_information WHERE object_id=$object[id]"; $rezAddInfo = $this->db->query($sqlAddInfo); if ($this->db->num_rows($rezAddInfo) > 0) { $objAddInfo =$this->db->fetch_assoc($rezAddInfo); //дополнительные поля $object['apartments'] = $objAddInfo['apartments']; $object['video_url'] = $objAddInfo['video_url']; $object['balcony'] = $objAddInfo['balcony']; $object['loggias'] = $objAddInfo['loggias']; $object['separate_wcs'] = $objAddInfo['separate_wcs']; $object['combined_wcs'] = $objAddInfo['combined_wcs']; $object['passenger_lifts'] = $objAddInfo['passenger_lifts']; $object['cargo_lifts'] = $objAddInfo['cargo_lifts']; $object['house_category'] = $objAddInfo['house_category']; $object['flat_number'] = $objAddInfo['flat_number']; $object['commerc_site'] = $objAddInfo['commerc_site']; $object['building_area'] = $objAddInfo['building_area']; $object['garage_type_id'] = $objAddInfo['garage_type_id']; $object['boks_vid_id'] = $objAddInfo['boks_vid_id']; $object['free_plan'] = $objAddInfo['free_plan']; $object['renovation'] = $objAddInfo['renovation']; $object['commer_condition'] = $objAddInfo['commer_condition']; $object['commerc_building_class_id'] = $objAddInfo['commerc_building_class_id']; $object['commerc_building_type_id'] = $objAddInfo['commerc_building_type_id']; $object['highway_id'] = $objAddInfo['highway_id']; $object['ceiling_height'] = $objAddInfo['ceiling_height']; $object['window_view'] = $objAddInfo['window_view']; } else { $object['apartments'] = 0; $object['video_url'] = null; $object['balcony'] = null; $object['loggias'] = null; $object['separate_wcs'] = null; $object['combined_wcs'] = null; $object['passenger_lifts'] = null; $object['cargo_lifts'] = null; $object['house_category'] = null; $object['flat_number'] = null; $object['commerc_site'] = null; $object['building_area'] = null; $object['garage_type_id'] = null; $object['boks_vid_id'] = null; $object['free_plan'] = null; $object['renovation'] = null; $object['commer_condition'] = null; $object['commerc_building_class_id'] = null; $object['commerc_building_type_id'] = null; $object['highway_id'] = 0; $object['ceiling_height'] = 0; $object['window_view'] = null; } $sqlPhotoInfo = "SELECT oop.sort_order, p.photo FROM objects_object_photo oop, object_photo p WHERE p.id = oop.object_photo_id AND oop.object_id = $object[id] ORDER BY oop.sort_order"; $rezPhotoInfo = $this->db->query($sqlPhotoInfo); if ($this->db->num_rows($rezPhotoInfo) > 0) { while ($photoInfo = $this->db->fetch_assoc($rezPhotoInfo)) { $object['photo' . $photoInfo['sort_order']] = $photoInfo['photo']; } } $plan = ''; $sqlP = "SELECT * FROM objects_plan WHERE object_id = $object[id]"; $rez_plan = $this->db->query($sqlP); if($this->db->num_rows($rez_plan) > 0){ $obj_plan =$this->db->fetch_assoc($rez_plan); if($obj_plan['img_plan'] != ''){ if (stripos($obj_plan['img_plan'], "http://") === false && stripos($obj_plan['img_plan'], "https://") === false) { $obj_plan['img_plan'] = "https://joywork.ru/photos/" . $obj_plan['img_plan']; } $obj_plan['img_plan'] = str_replace("http://c01.joywork.ru", "https://c01.joywork.ru", $obj_plan['img_plan']); $plan = $obj_plan['img_plan']; } } $forPlan = true; $images = array(); for ($k = 1; $k <= 40; $k++) { if (isset($object['photo' . $k]) && $object['photo' . $k]) { $srcFile = null; if (stripos($object['photo' . $k], "http://") === false && stripos($object['photo'.$k],"https://") === false) { $srcFile = $ph_url = "https://joywork.ru/photos/" . $object['photo' . $k]; } else { $srcFile = str_replace("http://c01.joywork.ru", "https://c01.joywork.ru", $object['photo' . $k]); } if ($srcFile != null) { $images[] = $srcFile; if ($forPlan && $plan != '') { $forPlan = false; $images[] = $plan; } } } } if ($forPlan && $plan != '') { $images[] = $plan; } $sqlSaleInfo = "SELECT * FROM sale_objects WHERE object_id=$object[id]"; $rezSaleInfo = $this->db->query($sqlSaleInfo); if ($this->db->num_rows($rezSaleInfo) > 0) { $objSaleInfo = $this->db->fetch_assoc($rezSaleInfo); $object['house_type'] = $objSaleInfo['house_type']; $object['house_material'] = $objSaleInfo['house_material']; $object['deal_type'] = $objSaleInfo['deal_type']; $object['build_year'] = $objSaleInfo['build_year']; $object['is_nb'] = $objSaleInfo['is_nb']; $sqlHmInfo = "SELECT name FROM house_material WHERE id=$object[house_material]"; $rezHmInfo = $this->db->query($sqlHmInfo); if ($this->db->num_rows($rezHmInfo) > 0) { $objHmInfo = $this->db->fetch_assoc($rezHmInfo); $object['house_material_name'] = $objHmInfo['name']; } else { $object['house_material_name'] = null; } $sqlHtInfo = "SELECT name FROM house_type WHERE id=$object[house_type]"; $rezHtInfo = $this->db->query($sqlHtInfo); if ($this->db->num_rows($rezHtInfo) > 0) { $objHtInfo = $this->db->fetch_assoc($rezHtInfo); $object['house_type_name'] = $objHtInfo['name']; } else { $object['house_type_name'] = null; } $sqlDtInfo = "SELECT name FROM deal_type WHERE id=$object[deal_type]"; $rezDtInfo = $this->db->query($sqlDtInfo); if ($this->db->num_rows($rezDtInfo) > 0) { $objDtInfo = $this->db->fetch_assoc($rezDtInfo); $object['deal_type_name'] = $objDtInfo['name']; } else { $object['deal_type_name'] = null; } } else { $object['house_material'] = null; $object['house_type'] = null; $object['deal_type'] = null; $object['build_year'] = null; $object['deal_type_name'] = null; $object['house_type_name'] = null; $object['house_material_name'] = null; $object['is_nb'] = null; } // Данные новостройки $sqlNbInfo = "SELECT newbuilding_id, zipal_new_flat_type_id, nb_end_date FROM object_nb_info WHERE object_id=$object[id]"; $rezNbInfo = $this->db->query($sqlNbInfo); if ($this->db->num_rows($rezNbInfo) > 0) { $objNbInfo = $this->db->fetch_assoc($rezNbInfo); $object['newbuilding_id'] = $objNbInfo['newbuilding_id']; $object['zipal_new_flat_type_id'] = $objNbInfo['zipal_new_flat_type_id']; $object['nb_end_date'] = $objNbInfo['nb_end_date']; } $operationType = 'аренда'; $mortgage = ''; $buildingType = ''; if ($object['operation_type'] == 1) { $operationType = 'продажа'; $buildingType = $object['house_material_name']; $mortgage = (strpos($object['stoim_prim'], "ипотека") === false) ? 'нет' : 'да'; } $propertyType = 'жилая'; if ($object['type'] == 6 || $object['type'] == 4) { $propertyType = ''; } $category = 'квартира'; switch ($object['type']) { case 1: $category = 'квартира'; break; case 2: $category = 'комната'; break; case 3: $category = 'дом с участком'; break; case 4: $category = 'коммерческая'; if ($object['type_category'] && $object['type_category'] == 7) { $category = 'гараж'; $garage_type = 'гараж'; $commercial_type = ''; if ($object['garage_type_id'] && $object['garage_type_id'] == 1) { $garage_type = 'машиноместо'; } if ($object['garage_type_id'] && $object['garage_type_id'] == 3) { $garage_type = 'машиноместо'; } if($object['parking_type_id'] > 0 && $object['parking_type_id'] == 2){ $parking_type = 'подземная'; } else if($object['parking_type_id'] > 0 && $object['parking_type_id'] == 3){ $parking_type = 'многоуровневая'; } else if($object['parking_type_id'] > 0 && $object['parking_type_id'] >= 5){ $parking_type = 'наземная'; } if($object['boks_vid_id'] > 0 && $object['boks_vid_id'] == 1){ $building_type = 'кирпичный'; } else if($object['boks_vid_id'] > 0 && $object['boks_vid_id'] == 2){ $building_type = 'металлический'; } else if($object['boks_vid_id'] > 0 && $object['boks_vid_id'] == 3){ $building_type = 'железобетонный'; } } break; case 5: $category = 'часть дома'; break; case 6: $category = 'коммерческая'; break; case 7: $category = 'участок'; $propertyType = 'жилая'; break; } if($object['type'] == 3){ if($object['house_category']){ if($object['house_category'] == 1){ $category = 'дача'; } if($object['house_category'] == 2){ $category = 'коттедж'; } if($object['house_category'] == 3){ $category = 'таунхаус'; } if($object['house_category'] == 4){ $category = 'дом с участком'; } } } $sql = "SELECT metro.metro FROM metro, sp_metro WHERE sp_metro.id_metro = metro.id AND sp_metro.id_obj = $object[id]"; $result = $this->db->query($sql); $m = $this->db->fetch_row($result); $mtr = $m[0]; $location = []; $sql = "SELECT * FROM object_location WHERE object_id = $object[id]"; $result = $this->db->query($sql); if ($result) { $location = $this->db->fetch_assoc($result); } $city = null; if (!empty($location['city'])) { $city = $location['city']; } $regionRayon = null; $rayon = null; if (!empty($location['rf_region_rayon'])) { $regionRayon = $location['rf_region_rayon']; } if (!empty($object['rayon'])) { $rayon = $object['rayon']; } $address = ''; if (!empty($location['street'])) { $address = $location['street']; if ($object['dom']) { $address = $address . ", " . $object['dom']; } if ($object['korpus']) { $address = $address . ", корпус " . $object['korpus']; } if ($object['litera']) { $address = $address . ", литера" . $object['litera']; } } if (isset($objRayonInfo) && $objRayonInfo['is_lo'] == 1) { $location = array( 'country' => 'Россия', 'region' => 'Ленинградская область', 'sub-locality-name' => $object['rayon'] ); if (!empty($address)) $location['address'] = $address; if (!empty($object['flat_number'])) $location['apartment'] = $object['flat_number']; } else if($object['id_rf_region']){ $sql_rf = "SELECT `id`, `name` FROM `rf_regions` where id=$object[id_rf_region]"; $q_rf = $this->db->query($sql_rf); $r_rf = $this->db->fetch_assoc($q_rf); if ($object['id_rf_region'] == 1) { $r_rf['name'] = 'Москва'; } if (isset($location) && $location['address'] && strpos($location['address'], "Московская") !== false && strpos($location['address'], "ул Московская") === false) { $r_rf['name'] = 'Московская область'; } if ($object['id_rf_region'] == 2) { $r_rf['name'] = 'Санкт-Петербург'; } if (isset($location) && $location['address'] && strpos($location['address'], "Ленинградская") !== false) { $r_rf['name'] = 'Ленинградская область'; } if ($object['id_rf_region'] == 3) { if (isset($location) && $location['address'] && strpos($location['address'], "Севастополь") !== false) { $r_rf['name'] = 'Севастополь'; } else { $r_rf['name'] = 'Крым'; } } $location = array( 'country' => 'Россия', 'region' => $r_rf['name'], 'district' => $regionRayon, ); if ($city) $location['locality-name'] = $city; if (!empty($address)) $location['address'] = $address; if (!empty($object['flat_number'])) $location['apartment'] = $object['flat_number']; } else { $location = array( 'country' => 'Россия', 'locality-name' => 'Санкт-Петербург', ); if (!empty($address)) $location['address'] = $address; if (!empty($object['flat_number'])) $location['apartment'] = $object['flat_number']; } $sql = "SELECT * FROM object_location WHERE object_id = $object[id]"; if ($result = $this->db->query($sql)) { $locationInfo = $this->db->fetch_assoc($result); if ($locationInfo['latitude'] && $locationInfo['longitude']) { $location['latitude'] = $locationInfo['latitude']; $location['longitude'] = $locationInfo['longitude']; } } $location['metro'] = array(); if ($mtr) { $location['metro'] = array( 'name' => $mtr, 'time-on-foot' => $object['peshkom'], 'time-on-transport' => $object['transport'] ); } $object['currency'] = 'RUB'; $sqlObjPricese = "SELECT * FROM object_prices WHERE object_id = {$object['id']}"; $rezObjectPrise = $this->db->query($sqlObjPricese); if ($this->db->num_rows($rezObjectPrise) > 0) { $objPricese = $this->db->fetch_assoc($rezObjectPrise); if($objPricese['currency'] == 1){ $object['currency'] = 'USD'; } else if ($objPricese['currency'] == 2){ $object['currency'] = 'EUR'; } } if ($object['operation_type'] == 0) { $period = 'месяц'; if ($object['srok'] == 1) { $period = 'день'; } $price = array( 'value' => $object['stoim'], 'currency' => $object['currency'], 'period' => $period ); } else { $price = array( 'value' => $object['stoim'], 'currency' => $object['currency'] ); } $userOwner = new User; $userOwner->get($object['id_add_user']); $sales = array( 'agent_id' => $object['id_add_user'], 'name' => htmlspecialchars_decode(trim($userOwner->last_name . ' ' . $userOwner->first_name . ' ' . $userOwner->middle_name)), 'email' => $userOwner->email ); if (stripos($object['phone'], ",") === false) { $sales['phone'] = $object['phone']; } else { $res = explode(",", $object['phone']); $sales['phone'] = $res[0]; $secondPhone = $res[1]; } $balcony = null; $bathroomUnit = null; $newFlat = false; $renovation = null; $advert = 0; $commercialBuildingType = null; $area = array(); $dealStatus = null; $roomSpace = array(); $livingSpace = array(); $kitchenSpace = array(); $lotArea = array(); if ($object['type'] == 1 || $object['type'] == 2) { if ($object['balcony'] && $object['balcony'] > 0) { if ($object['balcony'] == 1) { $balcony = 'балкон'; } if ($object['balcony'] > 1 && $object['balcony'] < 5) { $balcony = $object['balcony'] . ' балкона'; } if ($object['balcony'] >= 5) { $balcony = $object['balcony'] . ' балконов'; } } else { if ($object['loggias'] && $object['loggias'] > 0) { if ($object['loggias'] == 1) { $balcony = 'лоджия'; } if ($object['loggias'] > 1 && $object['loggias'] < 5) { $balcony = $object['loggias']; } if ($object['loggias'] >= 5) { $balcony = $object['loggias']; } } } if ($object['separate_wcs'] && $object['separate_wcs'] > 0) { $bathroomUnit='раздельный'; } else { if ($object['combined_wcs'] && $object['combined_wcs'] > 0) { $bathroomUnit='совмещенный'; } } if (isset($object['deal_type']) && ($object['deal_type'] == 5 || $object['deal_type'] == 6)) { $newFlat = true; } } if (($object['type'] == 1 || $object['type'] == 2 || ($object['type'] == 3 || $object['type'] == 5)) && $object['renovation']) { if ($object['renovation'] == 1) { $renovation = 'евроремонт'; } if ($object['renovation'] == 2) { $renovation ='косметический'; } if ($object['renovation'] == 3) { $renovation = 'дизайнерский'; } if ($object['renovation'] == 4) { $renovation = 'требует ремонта'; } if ($object['renovation'] == 5) { $renovation = 'дизайнерский'; } if ($object['renovation'] == 6) { $renovation = 'требует ремонта'; } } if($object['add_to_yandex_feed']){ $advert = 1; } if($object['type'] == 4){ if ($object['type_category'] != 7) { if ($object['commer_condition'] == 1 || $object['commer_condition'] == 6) { $renovation = 'с отделкой'; } else if ($object['commer_condition'] == 2 || $object['commer_condition'] == 3 || $object['commer_condition'] == 3) { $renovation = 'требует ремонта'; } else if ($object['commer_condition'] == 5) { $renovation = 'дизайнерский'; } } if ($object['commerc_building_type_id']) { if ($object['commerc_building_type_id'] == 1 || $object['commerc_building_type_id'] == 8 || $object['commerc_building_type_id'] == 9 || $object['commerc_building_type_id'] == 10 || $object['commerc_building_type_id'] == 11 || $object['commerc_building_type_id'] == 12 || $object['commerc_building_type_id'] == 16 || $object['commerc_building_type_id'] == 17 || $object['commerc_building_type_id'] == 18 || $object['commerc_building_type_id'] == 19 || $object['commerc_building_type_id'] == 20 || $object['commerc_building_type_id'] == 21 || $object['commerc_building_type_id'] == 22 || $object['commerc_building_type_id'] == 30 || $object['commerc_building_type_id'] == 31 || $object['commerc_building_type_id'] == 32 || $object['commerc_building_type_id'] == 33 || $object['commerc_building_type_id'] == 43) { $commercialBuildingType = 'detached building'; } if ($object['commerc_building_type_id'] == 2 || $object['commerc_building_type_id'] == 3 || $object['commerc_building_type_id'] == 4 || $object['commerc_building_type_id'] == 5 || $object['commerc_building_type_id'] == 6 || $object['commerc_building_type_id'] == 7 || $object['commerc_building_type_id'] == 25 || $object['commerc_building_type_id'] == 26 || $object['commerc_building_type_id'] == 27 || $object['commerc_building_type_id'] == 28 || $object['commerc_building_type_id'] == 29 || $object['commerc_building_type_id'] == 44) { $commercialBuildingType = 'business center'; } if ($object['commerc_building_type_id'] == 13 || $object['commerc_building_type_id'] == 14 || $object['commerc_building_type_id'] == 15 || $object['commerc_building_type_id'] == 23 || $object['commerc_building_type_id'] == 24 || $object['commerc_building_type_id'] == 48 || $object['commerc_building_type_id'] == 49) { $commercialBuildingType = 'warehouse'; } if ($object['commerc_building_type_id'] == 34 || $object['commerc_building_type_id'] == 35) { $commercialBuildingType = 'residential building'; } if ($object['commerc_building_type_id'] == 36 || $object['commerc_building_type_id'] == 37 || $object['commerc_building_type_id'] == 38 || $object['commerc_building_type_id'] == 39 || $object['commerc_building_type_id'] == 40 || $object['commerc_building_type_id'] == 41 || $object['commerc_building_type_id'] == 42 || $object['commerc_building_type_id'] == 45 || $object['commerc_building_type_id'] == 46 || $object['commerc_building_type_id'] == 47) { $commercialBuildingType = 'shopping center'; } } } if ($object['type'] != 7) { if (!empty($object['ploshad']) && $object['ploshad'] > 0) { $area = array('value'=>$object['ploshad'], 'unit'=>'кв.м'); } else { if (!empty($object['commerc_site']) && $object['commerc_site'] > 0) { $area = array('value'=>$object['commerc_site'], 'unit'=>'гектар'); } } if ($object['type_category'] && $object['type_category'] == 6) { if (!empty($object['building_area']) && $object['building_area'] > 0) { $area = array('value'=>$object['building_area'], 'unit'=>'кв.м'); } } if (!empty($object['ploshad_komn']) && $object['ploshad_komn'] > 0) { $sq = $object['ploshad_komn']; if (strpos($object['ploshad_komn'], "+")) { $sqTemp = 0; $res = explode("+", $object['ploshad_komn']); foreach ($res as $str) { $sqTemp = $sqTemp + doubleval(trim(str_replace(",", ".", $str))); //для комнат передаем для каждой отдельно, если указана сумма if ($object['type'] == 2 || $object['type'] == 1) { $roomSpace[] = array('value' => $str, 'unit' => 'кв.м'); } $sq = $sqTemp; } } $livingSpace = array('value'=>$sq, 'unit'=>'кв.м'); if (!empty($object['ploshad_k']) && $object['ploshad_k'] > 0) { $kitchenSpace = array('value' => $object['ploshad_k'], 'unit' => 'кв.м'); } } } else { $lotArea = array('value'=>$object['land_area'], 'unit'=>'сотка'); } if ($object['type'] == 3) { $lotArea = array('value'=>$object['land_area'], 'unit'=>'сотка'); } if ($object['operation_type'] == 1) { if ($object['deal_type'] == 1) { $dealStatus = 'прямая продажа'; } if ($object['deal_type'] == 2) { $dealStatus = 'встречная продажа'; } if ($object['deal_type'] == 4) { $dealStatus = 'первичная продажа вторички'; } if ($object['deal_type'] == 5) { $dealStatus = 'переуступка'; } } $object['creation-date'] = (strtotime($object['date_really_add']) != 0) ? strtotime($object['date_really_add']) : strtotime($object['date_add']); $object['last-update-date'] = strtotime($object['date_add']); $result = array( 'type'=>$operationType, 'property-type'=>$propertyType, 'category'=>$category, 'mortgage'=>$mortgage, 'building-type'=>$buildingType, 'creation-date'=>date('Y-m-d\TH:i:s\+03:00', $object['creation-date']), 'last-update-date'=>date('Y-m-d\TH:i:s\+03:00', $object['last-update-date']), 'location'=>$location, 'price' => $price, 'video-review' => array('youtube-video-review-url'=>$object['video_url']), 'images' => $images, 'sales'=>$sales, 'description'=>trim(htmlspecialchars(br2nl($object['opis']), ENT_QUOTES)), 'balcony'=>$balcony, 'bathroom-unit'=>$bathroomUnit, 'apartments'=>($object['apartments'] && $object['apartments'] == 1 ? "true" : "false"), 'new-flat'=>$newFlat, 'renovation'=>$renovation, 'commercial-building-type'=> $commercialBuildingType, 'area'=>$area, 'floor' => $object['etazh'], 'floors-total' => $object['etazh_iz'], ); if(!empty($dealStatus)) $result['deal-status'] = $dealStatus; if(!empty($roomSpace)) $result['room-space'] = $roomSpace; if(!empty($livingSpace)) $result['living-space'] = $livingSpace; if(!empty($kitchenSpace)) $result['kitchen-space'] = $kitchenSpace; if(!empty($lotArea)) $result['lot-area'] = $lotArea; // Кадастровый номер (все типы объектов) if (!empty($object['cadastral_number'])) { $result['cadastral-number'] = htmlspecialchars(strip_tags($object['cadastral_number'])); } // Количество комнат (квартиры, комнаты, дома) if (!empty($object['komnat']) && $object['komnat'] > 0) { $result['rooms'] = $object['komnat']; } if ($object['type'] == 2) { if (!empty($object['vsego_komn']) && $object['vsego_komn'] > 0) { $result['rooms-offered'] = $object['vsego_komn']; } } // Коммуникации: дома, части домов, участки (types 3, 5, 7) if (in_array($object['type'], [3, 5, 7])) { // Газоснабжение if (isset($object['gas_type_id']) && $object['gas_type_id'] > 0) { if (in_array($object['gas_type_id'], [1, 4])) { $result['gas-supply'] = 'нет'; } elseif (in_array($object['gas_type_id'], [2, 3, 5])) { $result['gas-supply'] = 'да'; } } // Электроснабжение if (isset($object['electricity_type_id']) && $object['electricity_type_id'] > 0) { if (in_array($object['electricity_type_id'], [1, 3])) { $result['electricity-supply'] = 'нет'; } elseif (in_array($object['electricity_type_id'], [2, 4])) { $result['electricity-supply'] = 'да'; } } // Водоснабжение if (isset($object['plumbing_type_id']) && $object['plumbing_type_id'] > 0) { if (in_array($object['plumbing_type_id'], [2, 3, 4, 5])) { $result['water-supply'] = 'да'; } elseif ($object['plumbing_type_id'] == 1) { $result['water-supply'] = 'нет'; } } // Канализация if (isset($object['sewerage_type']) && $object['sewerage_type'] > 0) { if (in_array($object['sewerage_type'], [2, 3, 4, 5])) { $result['sewerage-supply'] = 'да'; } elseif ($object['sewerage_type'] == 1) { $result['sewerage-supply'] = 'нет'; } } } // Вид разрешённого использования участка (types 7, 3) if (in_array($object['type'], [7, 3]) && !empty($object['land_usage_type_id'])) { $sqlUsageType = "SELECT code FROM land_usage_type WHERE id = {$object['land_usage_type_id']}"; $qUsageType = $this->db->query($sqlUsageType); if($this->db->num_rows($qUsageType) > 0){ $usageType = $this->db->fetch_row($qUsageType); if (!empty($usageType[0])) { if ($usageType[0] == 'IGS') { $result['lot-type'] = 'ИЖС'; } elseif ($usageType[0] == 'SNT' || $usageType[0] == 'GARDEN') { $result['lot-type'] = 'садоводство'; } } } } // Год постройки if (!empty($object['build_year']) && $object['build_year'] > 0) { $result['built-year'] = $object['build_year']; } // Высота потолков (квартиры, комнаты, коммерция) if (in_array((int)$object['type'], [1, 2]) || ((int)$object['type'] == 4 && in_array((int)$object['type_category'], [1, 2, 3, 4, 5, 6]))) { if (!empty($object['ceiling_height']) && $object['ceiling_height'] > 0) { $result['ceiling-height'] = (double)$object['ceiling_height']; } } // Студия if (!empty($object['studio_flag']) && $object['studio_flag'] == 1) { $result['studio'] = 1; } // Вид из окон if (!empty($object['window_view']) && $object['window_view'] > 0) { if (in_array((int)$object['window_view'], [1, 6, 7])) { $result['window-view'] = 'во двор'; } elseif (in_array((int)$object['window_view'], [2, 3, 4, 5, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 34, 35, 36])) { $result['window-view'] = 'на улицу'; } } // Лифт (квартиры, комнаты) if ($object['type'] == 1 || $object['type'] == 2) { if ((!empty($object['passenger_lifts']) && $object['passenger_lifts'] > 0) || (!empty($object['cargo_lifts']) && $object['cargo_lifts'] > 0)) { $result['lift'] = 'true'; } } // Тип гаража и тип парковки if ($object['type'] == 4 && $object['type_category'] == 7) { $garageType = 'гараж'; if ($object['garage_type_id'] && ($object['garage_type_id'] == 1 || $object['garage_type_id'] == 3)) { $garageType = 'машиноместо'; } $result['garage-type'] = $garageType; if ($object['parking_type_id'] > 0) { if ($object['parking_type_id'] == 2) { $result['parking-type'] = 'подземная'; } elseif ($object['parking_type_id'] == 3) { $result['parking-type'] = 'многоуровневая'; } elseif ($object['parking_type_id'] >= 5) { $result['parking-type'] = 'наземная'; } } } // Класс бизнес-центра (коммерция, кроме гаражей) if ($object['type'] == 4 && $object['type_category'] != 7) { if (!empty($object['commerc_building_class_id'])) { $classMap = array(1 => 'A', 2 => 'A+', 3 => 'B', 4 => 'B+', 5 => 'C+', 6 => 'C'); if (isset($classMap[$object['commerc_building_class_id']])) { $result['office-class'] = $classMap[$object['commerc_building_class_id']]; } } } // Тип коммерческого объекта if ($object['type'] == 6 || $object['type'] == 4) { if (!empty($object['type_category'])) { $commercialTypeMap = array( 1 => 'office', 2 => 'warehouse', 3 => 'retail', 4 => 'manufacturing', 5 => 'free purpose', 6 => 'free purpose', 8 => 'business', 9 => 'land' ); if (isset($commercialTypeMap[$object['type_category']]) && $object['type_category'] != 7) { $result['commercial-type'] = $commercialTypeMap[$object['type_category']]; } } } // Комиссия (аренда) if ($object['operation_type'] == 0 && !empty($object['commission'])) { if ($object['type'] == 4) { $result['commission'] = $object['commission']; } else { $result['agent-fee'] = $object['commission']; } } // Залог (аренда) if ($object['operation_type'] == 0) { if (!empty($object['lease_deposit_id']) || !empty($object['lease'])) { $result['rent-pledge'] = 'да'; } else { $result['rent-pledge'] = 'нет'; } } // Новостройки if (isset($object['deal_type']) && ($object['deal_type'] == 5 || $object['deal_type'] == 6)) { if (isset($object['newbuilding_id']) && $object['newbuilding_id']) { $sqlNb = "SELECT * FROM newbuildings WHERE id = {$object['newbuilding_id']}"; $rezNb = $this->db->query($sqlNb); if ($this->db->num_rows($rezNb) > 0) { $nb = $this->db->fetch_assoc($rezNb); $sqlObjName = "SELECT value FROM newbuilding_object WHERE id = {$nb['newbuilding_object_id']}"; $rezObjName = $this->db->query($sqlObjName); $objName = $this->db->fetch_assoc($rezObjName); if (!empty($objName['value'])) { $result['building-name'] = htmlspecialchars(strip_tags($objName['value']), ENT_QUOTES); } if (!empty($nb['yandex_id'])) { $result['yandex-building-id'] = $nb['yandex_id']; } if (!empty($nb['yandex_housing_id'])) { $result['yandex-house-id'] = $nb['yandex_housing_id']; } } } if (isset($object['zipal_new_flat_type_id']) && $object['zipal_new_flat_type_id']) { $sqlNbState = "SELECT code FROM zipal_new_flat_type WHERE id = '{$object['zipal_new_flat_type_id']}'"; $rezNbState = $this->db->query($sqlNbState); if ($this->db->num_rows($rezNbState) > 0) { $nbState = $this->db->fetch_assoc($rezNbState); if ($nbState['code'] == 'NOT_READY') { $result['building-state'] = 'unfinished'; } elseif ($nbState['code'] == 'READY') { $result['building-state'] = 'built'; } else { $result['building-state'] = 'hand-over'; } } } } if (isset($object['is_nb']) && $object['is_nb'] && isset($object['deal_type']) && ($object['deal_type'] == 1 || $object['deal_type'] == 2)) { if (isset($object['newbuilding_id']) && $object['newbuilding_id']) { $sqlNb = "SELECT * FROM newbuildings WHERE id = {$object['newbuilding_id']}"; $rezNb = $this->db->query($sqlNb); if ($this->db->num_rows($rezNb) > 0) { $nb = $this->db->fetch_assoc($rezNb); $sqlObjName = "SELECT value FROM newbuilding_object WHERE id = {$nb['newbuilding_object_id']}"; $rezObjName = $this->db->query($sqlObjName); $objName = $this->db->fetch_assoc($rezObjName); if (!empty($objName['value']) && empty($result['building-name'])) { $result['building-name'] = htmlspecialchars(strip_tags($objName['value']), ENT_QUOTES); } if (!empty($nb['yandex_id']) && empty($result['yandex-building-id'])) { $result['yandex-building-id'] = $nb['yandex_id']; } if (!empty($nb['yandex_housing_id']) && empty($result['yandex-house-id'])) { $result['yandex-house-id'] = $nb['yandex_housing_id']; } } } if (isset($object['zipal_new_flat_type_id']) && $object['zipal_new_flat_type_id'] && empty($result['building-state'])) { $sqlNbState = "SELECT code FROM zipal_new_flat_type WHERE id = '{$object['zipal_new_flat_type_id']}'"; $rezNbState = $this->db->query($sqlNbState); if ($this->db->num_rows($rezNbState) > 0) { $nbState = $this->db->fetch_assoc($rezNbState); if ($nbState['code'] == 'NOT_READY') { $result['building-state'] = 'unfinished'; } elseif ($nbState['code'] == 'READY') { $result['building-state'] = 'built'; } else { $result['building-state'] = 'hand-over'; } } } } } return $result; } /** * Получение только ответственного по объекту */ public function get_object_sales($user_id){ $result = array(); if($user_id > 0){ $userOwner = new User; $userOwner->get($user_id); $sales = array( 'agent_id' => $user_id, 'name' => htmlspecialchars_decode(trim($userOwner->last_name . ' ' . $userOwner->first_name . ' ' . $userOwner->middle_name)), 'email' => $userOwner->email ); $result['sales'] = $sales; } return $result; } /** * Получение данных сотрудника */ public function get_employee($id){ $result = array(); if($id > 0){ $sql = "SELECT * FROM users WHERE id = {$id}"; $q = $this->db->query($sql); $employee = $this->db->fetch_assoc($q); $result['full_name'] = trim($employee['last_name'] . ' ' . $employee['first_name'] . ' ' . $employee['middle_name']); $result['phone'] = $employee['phone']; $result['email'] = $employee['email']; $result['manager_id'] = $employee['id_manager']; } return $result; } /** * Сохранение временных данных по объекту */ public function save_temp_object($object_id){ if($object_id > 0 && $this->agency_id > 0){ $object = $this->get_object($object_id); $description = $object['description']; unset($object['description']); $info = json_encode($object, JSON_UNESCAPED_UNICODE); $sql = "INSERT INTO `webhook_temp_object`(`object_id`, `info`, `description`) VALUES ({$object_id}, '{$info}', '{$description}')"; $this->db->query($sql); } } /** * Сохранение временных данных по сотруднику */ public function save_temp_employee($employee_id){ if($employee_id > 0 && $this->agency_id > 0){ $employee = json_encode($this->get_employee($employee_id), JSON_UNESCAPED_UNICODE); $sql = "INSERT INTO `webhook_temp_employee`(`employee_id`, `info`) VALUES ({$employee_id}, '{$employee}')"; $this->db->query($sql); } } /** * Сохранение данных для последующей отправки по крону */ public function save_webhook_cron($user_id, $section, $action, $entity_id, $advert_platform = ''){ if($entity_id > 0 && $this->agency_id > 0){ $sql = "INSERT INTO `webhook_cron`(`event_type`, `entity_type`, `entity_id`, `initiator_user_id`, `initiator_agency_id`, `advert_platform`) VALUES ('{$action}', '{$section}', '{$entity_id}', {$user_id}, {$this->agency_id}, '$advert_platform')"; $this->db->query($sql); } } /** * Сохранение данных по нескльким объекта при смене ответственного */ public function save_webhook_cron_many($user_id, $old_user_id, $new_user_id){ if($old_user_id > 0 && $new_user_id > 0 && $this->agency_id > 0){ $object_ids = array(); $sql = "SELECT id FROM objects WHERE id_add_user = {$old_user_id}"; $q = $this->db->query($sql); if($this->db->num_rows($q) > 0){ $sql_w = "INSERT INTO `webhook_cron`(`event_type`, `entity_type`, `entity_id`, `initiator_user_id`, `initiator_agency_id`, new_user_id) VALUES "; $part_sql = ''; while($r=$this->db->fetch_assoc($q)){ if($part_sql != '') $part_sql .= ','; $part_sql .= "('object_update', 'object', {$r['id']}, {$user_id}, {$this->agency_id}, {$new_user_id})"; } if(!empty($part_sql)){ $sql_w .= $part_sql; //file_put_contents(__DIR__.'/log_hook_test.txt', date('d.m.Y H:i:s')." ".$sql_w. "\n", FILE_APPEND); $this->db->query($sql_w); } } } } }