Данный обработчик формы находится в папке model . Его задача проверить входящий запрос, открыть базу данных, произвести изменения в ячейке с указанием статуса обращения и открыть страницу вывода всех обращений.
Рассмотрим код подробнее.
1 <?php
2 /**
3 * @Author WDS
4 * @subpackage Components
5 * @link Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
6 * @license GNU/GPL
7 * @copyright Copyright (C) 2019
8 * ------------ ОБРАБОТЧИК ИЗМЕНЕНИЯ СТАТУСА ОБРАЩЕНИЙ ------------
9 */
10 // Защита от несанкционированного доступа
11 defined( '_JEXEC' ) or die( 'Доступ запрещен...' );
Здесь всё как обычно, как и во всех других файлах.
12 // ОБРАБОТКА ПОЛУЧЕННЫХ ДАННЫХ
13 if (empty($_POST['status0'])) {
Функция empty в строке 13 проверяет, пуста ли переменная $_POST['status0']. Данная переменная получает значение 0 в случае, если администратор нажмёт кнопку "Обращение закрыто" (см. главу 22, строка кода 192). Если переменная пуста, проверяется наличие значения 2 в переменной $_POST['status2']:
14 if (empty($_POST['status2'])) {
Если окажется, что и эта переменная пуста, т.е. в системе произошла какая-то ошибка, то вывод сообщения и прекращение выполнения скрипта:
15 include(JPATH_COMPONENT .'/err/err_data.php');
16 exit;
Если же всё нормально и в запросе переменная $_POST['status2'] содержит значение (2), то выполнение кода продолжается. В этом случае происходит подключение к базе данных и проверка соединения (строки 18-22), после чего переменная $Mess_Number при помощи метода JRequest::getVar получает из адреса страницы (ссылки) номер обращения (строка 23):
17 } else {
18 $db = JFactory::getDBO();
19 if (!$db->connected()) {
20 include(JPATH_COMPONENT .'/err/err_db.php');
21 exit;
22 }
23 $Mess_Number = JRequest::getVar( 'mess_number' );
Если номер не получен, выводится сообщение об ошибке и выполнение кода прекращается (строки 24-26), если номер получен, создаётся (строка 28) и выполняется (строка 29) соответствующий запрос к базе данных, после чего осуществляется переход на страницу просмотра всех обращений (строка 30):
24 if ($Mess_Number == NULL) {
25 include(JPATH_COMPONENT .'/err/err_data.php');
26 exit;
27 } else {
28 $db->setQuery("UPDATE #__feedback_form SET status_mess = '2' WHERE id = " . $Mess_Number);
29 $db->query();
30 header('Location: /index.php?option=com_feedback_form&task=adm_view_feedback');
31 }
32 }
Вторая часть кода работает по тому же принципу.
Если переменная $_POST['status0'] содержит значение (в этом случае значение переменной $_POST['status2'] не проверяется, она должна быть пуста), то строки 14-32 игнорируются и выполняется нижеследующий код:
33 } else {
34 $db = JFactory::getDBO();
35 if (!$db->connected()) {
36 include(JPATH_COMPONENT .'/err/err_db.php');
37 exit;
38 }
39 $Mess_Number = JRequest::getVar( 'mess_number' );
40 if ($Mess_Number == NULL) {
41 include(JPATH_COMPONENT .'/err/err_data.php');
42 exit;
43 } else {
44 $db->setQuery("UPDATE #__feedback_form SET status_mess = '0' WHERE id = " . $Mess_Number);
45 $db->query();
46 header('Location: /index.php?option=com_feedback_form&task=adm_view_feedback');
47 }
48 }
49 ?>
В этом случае разница лишь в том, что в колонке статуса будет прописана цифра 0, а не 2, после чего точно так же будет открыта страница просмотра всех обращений (с уже изменённым статусом).
Теперь вы можете проверить работу всего компонента и перейти к заключительной главе, где узнаете, как снова собрать весь компонент в единый установочный файл, что бы его можно было переставить на любой другой сайт.