-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathman.php
127 lines (109 loc) · 9.62 KB
/
man.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
<?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 . '/models/UserFull.php';
require_once $websiteRoot . '/models/SearchRequest.php';
require_once $websiteRoot . '/views/View.php';
// Удалось ли подключиться к БД?
if (DBconnect::get() == FALSE) die('Ошибка подключения к базе данных (. Попробуйте зайти к нам немного позже.');
// Инициализируем модель для запросившего страницу пользователя
$userIncoming = new UserIncoming();
/*************************************************************************************
* ПОЛУЧИМ GET ПАРАМЕТРЫ
* Для защиты от XSS атаки и для использования в коде более простого имени для переменной
************************************************************************************/
// Получаем идентификатор интересующего (целевого) пользователя
$compId = "";
if (isset($_GET['compId'])) $compId = intval(htmlspecialchars($_GET['compId'], ENT_QUOTES));
// Вычисляем истинный идентификатор целевого пользователя из $compId
$targetUserId = "0";
if ($compId != "" && $compId != 0) {
$targetUserId = GlobFunc::compIdToId($compId); // Получаем идентификатор пользователя для показа его страницы
} else { // Если в строке GET запроса не указан идентификатор интересующего (целевого) пользователя, то пересылаем нашего пользователя на спец. страницу
// Инициализируем используемые в шаблоне(ах) переменные
$isLoggedIn = $userIncoming->login(); // Используется в templ_header.php
$amountUnreadMessages = $userIncoming->getAmountUnreadMessages(); // Количество непрочитанных уведомлений пользователя
$mode = "notfound";
require $websiteRoot . '/templates/templ_error.php';
exit();
}
/*************************************************************************************
* ИНИЦИАЛИЗАЦИЯ ПОЛНОЙ МОДЕЛИ ЦЕЛЕВОГО ПОЛЬЗОВАТЕЛЯ
************************************************************************************/
// Инициализируем полную модель для целевого пользователя по его идентификатору из GET строки
$user = new UserFull($targetUserId);
$user->readCharacteristicFromDB();
$user->readFotoInformationFromDB();
// Инициализируем модель поискового запроса пользователя
$searchRequest = new SearchRequest($targetUserId);
$searchRequest->writeFromDB();
/*************************************************************************************
* ПРОВЕРКА ПРАВ ДОСТУПА К СТРАНИЦЕ
*
* Правила следующие:
*
* Неавторизованный пользователь не имеет права смотреть чью-либо анкету
* Авторизованный пользователь может смотреть как минимум свою анкету
*
* Собственник может смотреть анкеты арендаторов, которые заинтересовались его объектом недвижимости (нажали на кнопку "Контакты собственника").
* TODO: Собственник теряет право смотреть анкету арендатора, если тот удалил свой поисковый запрос (то есть перестал быть арендатором)
*
* Возможно в будущем: Арендатор может смотреть анкеты собственников тех объектов недвижимости, у которых он нажал на кнопку "Контакты собственника" и получил их.
* Возможно в будущем: Если собственник снял с публикации объект недвижимости, которым интересовался арендатор, то арендатор теряет право смотреть анкету этого собственника
* Возможно в будущем: Если арендатор удалил поисковый запрос (то есть перестал быть арендатором), то он теряет право смотреть любые анкеты собственников, к которым имел доступ ранее
*
************************************************************************************/
// Если пользователь не авторизован, то он не сможет посмотреть ни одной анкеты
if (!$userIncoming->login()) {
// Инициализируем используемые в шаблоне(ах) переменные
$isLoggedIn = $userIncoming->login(); // Используется в templ_header.php
$amountUnreadMessages = $userIncoming->getAmountUnreadMessages(); // Количество непрочитанных уведомлений пользователя
$mode = "accessdenied";
require $websiteRoot . '/templates/templ_error.php';
exit();
}
// Получаем список пользователей, которые интересовались недвижимостью нашего пользователя ($userIncoming->getId). Он выступает в качестве собственника
$tenantsWithRequestsForOwnerContacts = array();
// Формировать список имеет смысл только, если целевой пользователь на текущий момент времени является арендатором. В ином случае, доступ к анкете целевого пользователя для собственников - закрыт. Таким образом реализуется правило: собственник может видеть только анкеты тех пользователей, которые заинтересовались его недвижимостью и в текущий момент времени являются арендаторами (= имеют поисковый запрос)
if ($user->isTenant()) {
$tenantsWithRequestsForOwnerContacts = $userIncoming->getAllTenantsId();
}
// Проверяем, есть ли среди этого списка текущий целевой пользователь ($targetUserId)
// Проверка вынесена в отдельный блок, так как это позволяет одновременно проверить несколько условий на доступ к данной странице
// Админы имеют доступ к странице всегда
$isAdmin = $userIncoming->isAdmin();
if (!in_array($targetUserId, $tenantsWithRequestsForOwnerContacts)
AND $userIncoming->getId() != $targetUserId
AND !$isAdmin['searchUser']
) {
// Инициализируем используемые в шаблоне(ах) переменные
$isLoggedIn = $userIncoming->login(); // Используется в templ_header.php
$amountUnreadMessages = $userIncoming->getAmountUnreadMessages(); // Количество непрочитанных уведомлений пользователя
$mode = "accessdenied";
require $websiteRoot . '/templates/templ_error.php';
exit();
}
/********************************************************************************
* ФОРМИРОВАНИЕ ПРЕДСТАВЛЕНИЯ (View)
*******************************************************************************/
// Инициализируем используемые в шаблоне(ах) переменные
$isLoggedIn = $userIncoming->login(); // Используется в templ_header.php
$amountUnreadMessages = $userIncoming->getAmountUnreadMessages(); // Количество непрочитанных уведомлений пользователя
$userCharacteristic = $user->getCharacteristicData();
$userFotoInformation = $user->getFotoInformationData();
$userSearchRequest = $searchRequest->getSearchRequestData();
$mode = "tenantForOwner"; // Режим в котором будет работать шаблон анкеты пользователя (templ_notEditedProfile.php)
//$isAdmin
// Подсоединяем нужный основной шаблон
require $websiteRoot . "/templates/templ_man.php";
/********************************************************************************
* Закрываем соединение с БД
*******************************************************************************/
DBconnect::closeConnectToDB();