Joywork/ajax/analytics/loadAnalyticsPolygonsMap.php

358 lines
11 KiB
PHP
Raw Normal View History

2026-05-22 20:21:54 +02:00
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
if ($_SESSION['id'] && isset($_POST['objId'])) {
$db = new MysqlPdo(hstsph, null, null, null, true, '9306');
$post = clearInputData($_POST);
$objectId = trim($post['objId']);
$areaFrom = trim($post['areaFrom']);
$areaTo = trim($post['areaTo']);
$kitchenAreaFrom = trim($post['kitchenAreaFrom']);
$kitchenAreaTo = trim($post['kitchenAreaTo']);
$yearFrom = trim($post['yearFrom']);
$yearTo = trim($post['yearTo']);
$kvType = $post['kvType'];
$commType = $post['commType'];
$poly1 = trim($post['poly1']);
$poly2 = trim($post['poly2']);
$poly3 = trim($post['poly3']);
$poly4 = trim($post['poly4']);
$sql = "SELECT * FROM objects WHERE id = $objectId";
$res = mysql_query($sql);
$obj = mysql_fetch_assoc($res);
$parentRegion = '2';
$parentRegionName = '';
$sqlRegion = "SELECT parent, name FROM rf_regions WHERE id=$obj[id_rf_region] or parent=$obj[id_rf_region]";
$resRegion = mysql_query($sqlRegion);
if (mysql_num_rows($resRegion) > 0) {
while($row = mysql_fetch_assoc($resRegion)){
if ($row['parent']) {
$parentRegion = $row['parent'];
}
}
}
$sqlParentRegion = "SELECT name FROM rf_regions WHERE id=$parentRegion";
$resParentRegion = mysql_query($sqlParentRegion);
if (mysql_num_rows($resParentRegion)) {
$parentReg = mysql_fetch_assoc($resParentRegion);
$parentRegionName = $parentReg['name'];
}
//ищем исключения для этого объекта и этого пользователя
$sqlExcl = "SELECT excluded_object_id FROM objects_analytic_exclude WHERE object_id = $objectId and user_id = $_SESSION[id]";
$resExcl = mysql_query($sqlExcl);
$exclIds = array();
$exclSql = "";
$komnSql = "";
$komnSqlWhere = "";
$commTypeSql = "";
if (mysql_num_rows($resExcl) > 0) {
while($row = mysql_fetch_assoc($resExcl)){
if ($row['excluded_object_id']) {
$exclIds[] = $row['excluded_object_id'];
}
}
}
if (count($exclIds)) {
$exclSql = "AND id NOT IN (" . implode(",", $exclIds) . ")";
}
$komnArray = [];
$studioFlag = false;
if ($obj['studio_flag'] > 0) {
$studioFlag = true;
$komnArray[] = "studio_flag = '1'";
}
if ($obj['type'] == 1) {
if ($kvType) {
foreach ($kvType as $key => $value) {
if ($value <= 9) {
$komnArray[] = "komnat = $value";
} else {
if ($value == 100) {
$komnArray[] = "komnat > 9";
} else {
if (!$studioFlag && $value == 1000) {
$komnArray[] = "studio_flag = '1'";
}
}
}
}
}
}
if ($obj['komnat'] && !$studioFlag && $obj['type'] != 3) {
$komnArray[] = "komnat = " . $obj['komnat'];
}
if (count($komnArray) > 0) {
$komnSql = ", (" . implode(' OR ', $komnArray) . ") AS komnCond";
$komnSqlWhere = ' AND komnCond > 0 ';
}
if ($obj['type'] == 4) {
$commArray = [];
if ($commType) {
foreach ($commType as $key => $value) {
$commArray[] = $value;
}
}
$commArray[] = $obj['type_category'];
if (count($commArray) > 0) {
if (count($commArray) == 1) {
$commTypeSql = "AND type_category=$commArray[0]";
} else {
$commTypeSql = "AND type_category in (" . implode(",", $commArray) . ")";
}
}
}
$areaSql = "";
$yearSql = "";
if ($areaFrom) {
$areaSql .= "AND ploshad >= $areaFrom ";
}
if ($areaTo) {
$areaSql .= "AND ploshad <= $areaTo ";
}
if ($yearFrom) {
$yearSql .= "AND build_year >= $yearFrom ";
}
if ($yearTo) {
$yearSql .= "AND build_year <= $yearTo ";
}
$kitchenAreaSql = "";
if ($kitchenAreaFrom) {
$kitchenAreaSql .= "AND ploshad_k >= $kitchenAreaFrom ";
}
if ($kitchenAreaTo) {
$kitchenAreaSql .= "AND ploshad_k <= $kitchenAreaTo ";
}
$resultArrayMap = array();
$data = array(
"type" => "FeatureCollection"
);
$adres_usl = " AND MATCH ('(@(id_rf_region,parent) $parentRegion)') ";
$foundIds = array();
if ($poly1) {
$sql = "SELECT id, CONTAINS(GEOPOLY2D(" . $poly1 . "),latitude,longitude) AS inside $komnSql FROM objects, objects_delta WHERE inside = 1 AND fbn_id = 0 AND
archive = 0 AND black = 0 AND moder = 0 AND id <> $obj[id] AND operation_type = $obj[operation_type] AND type=$obj[type] $kitchenAreaSql $commTypeSql $areaSql $yearSql $komnSqlWhere $adres_usl $exclSql LIMIT 0, 100000 OPTION max_matches=1000000";
if ($_SESSION['id'] == 93) {
//echo $sql;
}
$res = $db->query($sql, true);
if ($db->num_rows($res) > 0) {
while ($objAddr = $db->fetch_assoc($res)) {
if (!in_array($objAddr['id'], $foundIds)) {
$foundIds[] = $objAddr['id'];
}
}
}
}
if ($poly2) {
$sql = "SELECT id, CONTAINS(GEOPOLY2D(" . $poly2 . "),latitude,longitude) AS inside $komnSql FROM objects, objects_delta WHERE inside = 1 AND fbn_id = 0 AND
archive = 0 AND black = 0 AND moder = 0 AND id <> $obj[id] AND operation_type = $obj[operation_type] AND type=$obj[type] $kitchenAreaSql $commTypeSql $areaSql $komnSqlWhere $adres_usl $exclSql LIMIT 0, 100000 OPTION max_matches=1000000";
if ($_SESSION['id'] == 93) {
//echo $sql;
}
$res = $db->query($sql, true);
if ($db->num_rows($res) > 0) {
while ($objAddr = $db->fetch_assoc($res)) {
if (!in_array($objAddr['id'], $foundIds)) {
$foundIds[] = $objAddr['id'];
}
}
}
}
if ($poly3) {
$sql = "SELECT id, CONTAINS(GEOPOLY2D(" . $poly3 . "),latitude,longitude) AS inside $komnSql FROM objects, objects_delta WHERE inside = 1 AND fbn_id = 0 AND
archive = 0 AND black = 0 AND moder = 0 AND id <> $obj[id] AND operation_type = $obj[operation_type] AND type=$obj[type] $kitchenAreaSql $commTypeSql $areaSql $komnSqlWhere $adres_usl $exclSql LIMIT 0, 100000 OPTION max_matches=1000000";
if ($_SESSION['id'] == 93) {
//echo $sql;
}
$res = $db->query($sql, true);
if ($db->num_rows($res) > 0) {
while ($objAddr = $db->fetch_assoc($res)) {
if (!in_array($objAddr['id'], $foundIds)) {
$foundIds[] = $objAddr['id'];
}
}
}
}
if ($poly4) {
$sql = "SELECT id, CONTAINS(GEOPOLY2D(" . $poly4 . "),latitude,longitude) AS inside $komnSql FROM objects, objects_delta WHERE inside = 1 AND fbn_id = 0 AND
archive = 0 AND black = 0 AND moder = 0 AND id <> $obj[id] AND operation_type = $obj[operation_type] AND type=$obj[type] $kitchenAreaSql $commTypeSql $areaSql $komnSqlWhere $adres_usl $exclSql LIMIT 0, 100000 OPTION max_matches=1000000";
if ($_SESSION['id'] == 93) {
//echo $sql;
}
$res = $db->query($sql, true);
if ($db->num_rows($res) > 0) {
while ($objAddr = $db->fetch_assoc($res)) {
if (!in_array($objAddr['id'], $foundIds)) {
$foundIds[] = $objAddr['id'];
}
}
}
}
$vsego = count($foundIds);
if ($vsego > 0) {
$pageNumber = 1;
$asScript = false;
//подключаем расчет цен
include($_SERVER['DOCUMENT_ROOT'] . "/ajax/analytics/getAnalyticsPriceStats.php");
$order = 'date_add';
$order_by = 'DESC';
if(isset($post['order'])){
switch(trim($post['order'])){
case 'date_desc' : {
$order = 'date_add';
$order_by = 'DESC';
break;
}
case 'date_asc' : {
$order = 'date_add';
$order_by = 'ASC';
break;
}
case 'date_publish_desc' : {
$order = 'date_really_add';
$order_by = 'DESC';
break;
}
case 'date_publish_asc' : {
$order = 'date_really_add';
$order_by = 'ASC';
break;
}
case 'price_desc' : {
$order = 'stoim';
$order_by = 'DESC';
break;
}
case 'price_asc' : {
$order = 'stoim';
$order_by = 'ASC';
break;
}
case 'pricekv_desc' : {
$order = 'stoim_kvm';
$order_by = 'DESC';
break;
}
case 'pricekv_asc' : {
$order = 'stoim_kvm';
$order_by = 'ASC';
break;
}
case 'area_desc' : {
$order = 'ploshad';
$order_by = 'DESC';
break;
}
case 'area_asc' : {
$order = 'ploshad';
$order_by = 'ASC';
break;
}
}
}
$sqlSearch = "SELECT *, (stoim/ploshad) as stoim_kvm FROM objects, objects_delta WHERE id in (" . implode(",", $foundIds) . ") ORDER BY $order $order_by LIMIT 0, 100000 OPTION max_matches=1000000";
$rezSearch = $db->query($sqlSearch);
$i = 0;
while ($obj = $db->fetch_assoc($rezSearch)) {
if($obj['latitude'] && $obj['longitude']) {
$options = [];
if (isset($_SESSION['analytics']) && isset($_SESSION['analytics'][$objectId]) &&
isset($_SESSION['analytics'][$objectId]['low']) && in_array($obj['id'], $_SESSION['analytics'][$objectId]['low'])) {
$options = [
"preset" => "islands#redIcon"
];
}
$data["features"][] =[
"type" => "Feature",
"id" => $i,
"geometry" => [
"type" => "Point",
"coordinates" => [$obj['latitude'], $obj['longitude']]
],
"properties" => [
"balloonContent" => $obj['id'],
"clusterCaption" => str_replace(array('"', '\''), '', $obj['adres']),
"hintContent" => str_replace(array('"', '\''), '', $obj['adres'])
],
"options" => $options
];
$i++;
}
}
}
$resultArrayMap['data'] = $data;
echo json_encode($resultArrayMap, JSON_UNESCAPED_UNICODE);
exit;
}
?>