-
Notifications
You must be signed in to change notification settings - Fork 0
/
adminFindUser.php
204 lines (168 loc) · 13.3 KB
/
adminFindUser.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
<?php
/* Страница администратора для отображения данных о найденных пользователях и их объектах недвижимости */
// Стартуем сессию с пользователем - сделать доступными переменные сессии
session_start();
// Подключаем нужные модели и представления
$websiteRoot = $_SERVER['DOCUMENT_ROOT'];
require_once $websiteRoot . '/models/DBconnect.php';
require_once $websiteRoot . '/models/GlobFunc.php';
require_once $websiteRoot . '/models/Logger.php';
require_once $websiteRoot . '/models/User.php';
require_once $websiteRoot . '/models/UserIncoming.php';
require_once $websiteRoot . '/views/View.php';
// Удалось ли подключиться к БД?
if (DBconnect::get() == FALSE) die('Ошибка подключения к базе данных (. Попробуйте зайти к нам немного позже.');
// Инициализируем модель для запросившего страницу пользователя
$userIncoming = new UserIncoming();
// Инициализируем ассоциативный массив, в который будем складывать все параметры искомого пользователя
$goalUser = array();
// Уточняем - имеет ли пользователь права админа.
$isAdmin = $userIncoming->isAdmin();
/*************************************************************************************
* Проверяем - может ли данный пользователь просматривать данную страницу
************************************************************************************/
// Если пользователь не авторизирован, то пересылаем юзера на страницу авторизации
if (!$userIncoming->login()) {
header('Location: login.php');
exit();
}
// Если пользователь не является администратором, то доступ к странице ему запрещен - разавторизуем его и перекинем на главную (в идеале нужно перекидывать на login.php)
// Кроме того, проверяем, что у данного администратора есть право на поиск пользователей и вход в их Личные кабинеты
if (!$isAdmin['searchUser']) {
header('Location: out.php');
exit();
}
/********************************************************************************
* ПОЛУЧИМ ДАННЫЕ ЗАПРОСА НА ПОИСК ПОЛЬЗОВАТЕЛЯ
*******************************************************************************/
if (isset($_POST['surname'])) $goalUser['surname'] = htmlspecialchars($_POST['surname'], ENT_QUOTES);
if (isset($_POST['name'])) $goalUser['name'] = htmlspecialchars($_POST['name'], ENT_QUOTES);
if (isset($_POST['secondName'])) $goalUser['secondName'] = htmlspecialchars($_POST['secondName'], ENT_QUOTES);
if (isset($_POST['login'])) $goalUser['login'] = htmlspecialchars($_POST['login'], ENT_QUOTES);
if (isset($_POST['telephon'])) $goalUser['telephon'] = htmlspecialchars($_POST['telephon'], ENT_QUOTES);
if (isset($_POST['email'])) $goalUser['email'] = htmlspecialchars($_POST['email'], ENT_QUOTES);
if (isset($_POST['address'])) $goalUser['address'] = htmlspecialchars($_POST['address'], ENT_QUOTES);
/********************************************************************************
* ПОЛУЧАЕМ РЕЗУЛЬТАТЫ ПОИСКА ИЗ БД
*******************************************************************************/
// Инициализируем массивы для хранения результатов
$allUsers = array();
$allProperties = array();
// ЗАПРОС К ТАБЛИЦЕ USERS. Если хотя бы одно поле из тех, что связаны с параметрами пользователя, а не его недвижимости заполнено
if ($goalUser['surname'] != "" || $goalUser['name'] != "" || $goalUser['secondName'] != "" || $goalUser['login'] != "" || $goalUser['telephon'] != "" || $goalUser['email'] != "") {
// Инициализируем массив, в который будем собирать условия поиска
$searchLimits = array(); // массив условий для поиска в таблице users
// Ограничение на ФИО и логин
$searchLimits['surname'] = "";
if (isset($goalUser['surname']) && $goalUser['surname'] != "") $searchLimits['surname'] = " (surname = '" . $goalUser['surname'] . "')";
$searchLimits['name'] = "";
if (isset($goalUser['name']) && $goalUser['name'] != "") $searchLimits['name'] = " (name = '" . $goalUser['name'] . "')";
$searchLimits['secondName'] = "";
if (isset($goalUser['secondName']) && $goalUser['secondName'] != "") $searchLimits['secondName'] = " (secondName = '" . $goalUser['secondName'] . "')";
$searchLimits['login'] = "";
if (isset($goalUser['login']) && $goalUser['login'] != "") $searchLimits['login'] = " (login = '" . $goalUser['login'] . "')";
// Ограничение на телефон и e-mail
$searchLimits['telephon'] = "";
if (isset($goalUser['telephon']) && $goalUser['telephon'] != "") $searchLimits['telephon'] = " (telephon = '" . $goalUser['telephon'] . "')";
$searchLimits['email'] = "";
if (isset($goalUser['email']) && $goalUser['email'] != "") $searchLimits['email'] = " (email = '" . $goalUser['email'] . "')";
// Собираем строку WHERE для поискового запроса к таблице users
$strWHERE = "";
foreach ($searchLimits as $value) {
if ($value == "") continue;
if ($strWHERE != "") $strWHERE .= " AND" . $value; else $strWHERE .= $value;
}
// Получаем данные из БД
// Количество результатов ограничено первыми 20-тью, чтобы не перегружать БД
// В итоге получим массив ($allUsers), каждый элемент которого представляет собой еще один массив параметров конкретного пользователя
if ($strWHERE != "") {
$res = DBconnect::get()->query("SELECT id, typeTenant, typeOwner, typeAdmin, name, secondName, surname, login, password, telephon, email FROM users WHERE" . $strWHERE . " LIMIT 20");
if ((DBconnect::get()->errno)
OR (($allUsers = $res->fetch_all(MYSQLI_ASSOC)) === FALSE)
) {
// Логируем ошибку
//TODO: сделать логирование ошибки
$allUsers = array();
}
}
// Собираем строку WHERE для поискового запроса к БД по соответствующим объектам недвижимости
$strWHERE = "";
if (is_array($allUsers) && count($allUsers) != 0) {
foreach ($allUsers as $value) {
if ($strWHERE != "") $strWHERE .= " OR (userId = '" . $value['id'] . "')"; else $strWHERE .= " (userId = '" . $value['id'] . "')";
}
}
// Получим информацию по объектам недвижимости, которые принадлежат найденным пользователям
// В итоге получим массив ($allProperties), каждый элемент которого представляет собой еще один массив параметров конкретного объекта недвижимости, принадлежащего одному из найденных выше пользователей
if ($strWHERE != "") {
$res = DBconnect::get()->query("SELECT id, userId, typeOfObject, address, apartmentNumber, status, adminComment, completeness FROM property WHERE" . $strWHERE);
if ((DBconnect::get()->errno)
OR (($allProperties = $res->fetch_all(MYSQLI_ASSOC)) === FALSE)
) {
// Логируем ошибку
//TODO: сделать логирование ошибки
$allProperties = array();
}
}
} elseif ($goalUser['address'] != "") { // ЗАПРОС К ТАБЛИЦЕ PROPERTY. Если поля, связанные с параметрами пользователя пусты, а поле с адресом недвижимости заполнено
// Инициализируем массив, в который будем собирать условия поиска
$searchLimits = array(); // массив условий для поиска в таблице property
// Ограничение на адрес объекта недвижимости (работает только для собственников)
$searchLimits['address'] = "";
if (isset($goalUser['address']) && $goalUser['address'] != "") $searchLimits['address'] = " (address LIKE '%" . $goalUser['address'] . "%')";
// Собираем строку WHERE для поискового запроса к таблице property
$strWHERE = "";
foreach ($searchLimits as $value) {
if ($value == "") continue;
if ($strWHERE != "") $strWHERE .= " AND" . $value; else $strWHERE .= $value;
}
// Получим информацию по объектам недвижимости, чьи адреса похожи на тот, что указал администратор
// Количество результатов ограничено первыми 40-ка, чтобы не перегружать БД
// В итоге получим массив ($allProperties), каждый элемент которого представляет собой еще один массив параметров конкретного объекта недвижимости
if ($strWHERE != "") {
$res = DBconnect::get()->query("SELECT id, userId, typeOfObject, address, apartmentNumber, status, adminComment, completeness FROM property WHERE" . $strWHERE . " LIMIT 40");
if ((DBconnect::get()->errno)
OR (($allProperties = $res->fetch_all(MYSQLI_ASSOC)) === FALSE)
) {
// Логируем ошибку
//TODO: сделать логирование ошибки
$allProperties = array();
}
}
// Соберем уникальные id пользователей из полученного массива
$allUsersId = array();
foreach ($allProperties as $value) {
$allUsersId[] = $value['userId'];
}
$allUsersId = array_unique($allUsersId);
// Сформируем строку WHERE для получения данных по собственникам найденных объектов
$strWHERE = "";
if (is_array($allUsersId) && count($allUsersId) != 0) {
foreach ($allUsersId as $value) {
if ($strWHERE != "") $strWHERE .= " OR (id = '" . $value . "')"; else $strWHERE .= " (id = '" . $value . "')";
}
}
// Получаем информацию о собственниках той недвижимости, что мы ранее отобрали по адресу ($allProperties)
// В итоге получим массив ($allUsers), каждый элемент которого представляет собой еще один массив параметров конкретного пользователя
if ($strWHERE != "") {
$res = DBconnect::get()->query("SELECT id, typeTenant, typeOwner, typeAdmin, name, secondName, surname, login, password, telephon, email FROM users WHERE" . $strWHERE);
if ((DBconnect::get()->errno)
OR (($allUsers = $res->fetch_all(MYSQLI_ASSOC)) === FALSE)
) {
// Логируем ошибку
//TODO: сделать логирование ошибки
$allUsers = array();
}
}
}
/********************************************************************************
* ФОРМИРОВАНИЕ ПРЕДСТАВЛЕНИЯ (View)
*******************************************************************************/
//$allUsers массив, каждый элемент которого представляет собой еще один массив параметров конкретного пользователя
//$allProperties массив, каждый элемент которого представляет собой еще один массив параметров конкретного объекта недвижимости, принадлежащего одному из найденных пользователей
// Подсоединяем нужный основной шаблон
require $websiteRoot . "/templates/adminTemplates/templ_adminFindUser.php";
/********************************************************************************
* Закрываем соединение с БД
*******************************************************************************/
DBconnect::closeConnectToDB();