-
Notifications
You must be signed in to change notification settings - Fork 0
/
AJAXChangeMessages.php
96 lines (71 loc) · 5.04 KB
/
AJAXChangeMessages.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
<?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/MessageNewProperty.php';
// Удалось ли подключиться к БД?
if (DBconnect::get() == FALSE) die('Ошибка подключения к базе данных (. Попробуйте зайти к нам немного позже.'); // TODO: Вернуть ошибку
// Инициализируем модель для запросившего страницу пользователя
$userIncoming = new UserIncoming();
/*************************************************************************************
* ПРОВЕРКА ПРАВ ДОСТУПА К СКРИПТУ
************************************************************************************/
// Проверяем, залогинен ли пользователь, если нет - то отказываем в доступе
if (!$userIncoming->login()) {
GlobFunc::accessDenied();
}
/*************************************************************************************
* ПОЛУЧИМ POST ПАРАМЕТРЫ
* Для защиты от XSS атаки и для использования в коде более простого имени для переменной
************************************************************************************/
// Получаем идентификатор уведомления
$messageId = "";
if (isset($_POST['messageId'])) $messageId = intval(htmlspecialchars($_POST['messageId'], ENT_QUOTES));
// Получаем тип уведомления
$messageType = "";
if (isset($_POST['messageType'])) $messageType = htmlspecialchars($_POST['messageType'], ENT_QUOTES);
// Команда пользователя
$action = "";
if (isset($_POST['action'])) $action = htmlspecialchars($_POST['action'], ENT_QUOTES);
// Валидация входных параметров
if ($messageId == "" || $messageId == 0 || $messageType != "newProperty" || $action == "") GlobFunc::accessDenied();
/*************************************************************************************
* ИНИЦИАЛИЗАЦИЯ МОДЕЛИ УВЕДОМЛЕНИЯ (в зависимости от его типа)
*************************************************************************************/
switch ($messageType) {
case "newProperty":
$message = new MessageNewProperty($messageId);
break;
}
/*************************************************************************************
* УДАЛЕНИЕ УВЕДОМЛЕНИЯ
*************************************************************************************/
if ($action == "remove") {
// Убедимся, что это уведомление принадлежит пользователю, который запросил ее удаление
if (!$message->referToUser($userIncoming->getId())) GlobFunc::accessDenied();
if (!$message->remove()) GlobFunc::accessDenied();
}
/*************************************************************************************
* УВЕДОМЛЕНИЕ ПРОЧИТАНО
*************************************************************************************/
if ($action == "isReadedTrue") {
// Убедимся, что это уведомление принадлежит пользователю, который запросил изменение ее статуса прочитанности
if (!$message->referToUser($userIncoming->getId())) GlobFunc::accessDenied();
if (!$message->changeIsReadedTrue() || !$message->saveParamsToDB()) GlobFunc::accessDenied();
}
/*************************************************************************************
* Если все хорошо - возвращаем положительный статус выполнения операции
*************************************************************************************/
header('Content-Type: text/xml; charset=UTF-8');
echo "<xml><span status='successful'></span></xml>";
/********************************************************************************
* Закрываем соединение с БД
*******************************************************************************/
DBconnect::closeConnectToDB();