Просмотр файла mc-2.7.0/libraries/controller.php

Размер файла: 6.03Kb
  1. <?php
  2.  
  3. /**
  4. * MobileCMS
  5. *
  6. * Open source content management system for mobile sites
  7. *
  8. * @author MobileCMS Team <support@mobilecms.pro>
  9. * @copyright Copyright (c) 2011-2019, MobileCMS Team
  10. * @link https://mobilecms.pro Official site
  11. * @license MIT license
  12. */
  13.  
  14. /**
  15. * Главный контроллер
  16. */
  17. abstract class Controller {
  18.  
  19. /**
  20. *
  21. * @var model
  22. */
  23. protected $model;
  24.  
  25. /**
  26. * Переменная, в которую записываем ошибки при валидации форм
  27. */
  28. public $error = false;
  29.  
  30. /**
  31. * Класс шаблонизатора
  32. */
  33. public $tpl;
  34.  
  35. /**
  36. * Тема
  37. */
  38. protected $template_theme = 'default';
  39.  
  40. /**
  41. * Количество элементов на страницу по умолчанию
  42. */
  43. protected $per_page = 7;
  44.  
  45. /**
  46. * Constructor
  47. */
  48. public function __construct() {
  49. $this->config = Registry::get('config');
  50. $this->db = Registry::get('db');
  51.  
  52. // Определение старта для пагинации
  53. $this->start = !empty($_GET['start']) ? intval($_GET['start']) : 0;
  54. if (!empty($_GET['page']) && is_numeric($_GET['page'])) {
  55. $this->start = $_GET['page'] * $this->per_page - 1;
  56. }
  57. if ($this->start < 0) {
  58. a_error('Не верный формат данных');
  59. }
  60.  
  61. // Подключение шаблонизатора
  62. a_import('libraries/template');
  63. $this->tpl = new Template;
  64.  
  65. if (file_exists(ROOT . 'modules/' . ROUTE_MODULE . '/models/' . ROUTE_CONTROLLER_NAME . '.php')) {
  66. a_import('libraries/model');
  67. $this->model = a_load_class(str_replace('controllers', 'models', ROUTE_CONTROLLER_PATH), 'model');
  68. }
  69. // Добавляем объект шаблона в Registry
  70. Registry::set('tpl', $this->tpl);
  71.  
  72. // Подключение кеширования
  73. if (!class_exists('File_Cache')) {
  74. a_import('libraries/file_cache');
  75. }
  76. $this->cache = new File_Cache(ROOT . 'cache/file_cache');
  77.  
  78. // Добавление мета данных на страницу
  79. define('DESCRIPTION', $this->config['system']['description']);
  80. define('KEYWORDS', $this->config['system']['keywords']);
  81.  
  82. // Получение данных о польльзователе
  83. if (!empty($_SESSION['check_user_id'])) {
  84. $user_id = $_SESSION['check_user_id'];
  85. } elseif (!empty($_SESSION['user_id'])) {
  86. $user_id = $_SESSION['user_id'];
  87. } else {
  88. $user_id = -1;
  89. }
  90.  
  91. // Авторизация гостей по COOKIES, добавление гостей в бд
  92. if ($user_id === -1 && !empty($_COOKIE['username'])) {
  93. if ($try_user_id = $this->db->get_one("SELECT user_id FROM #__users WHERE username = '" . a_safe($_COOKIE['username']) . "' AND password = '" . a_safe($_COOKIE['password']) . "'")) {
  94. $user_id = $try_user_id;
  95. $_SESSION['user_id'] = $user_id;
  96. }
  97. }
  98.  
  99. // Добавление гостей в бд
  100. if ($user_id == -1) {
  101. $user_agent = $_SERVER['HTTP_USER_AGENT'];
  102.  
  103. // Проверяем наличие гостя в списке
  104. if ($guest = $this->db->get_row("SELECT id FROM #__guests WHERE ip = '" . a_safe($_SERVER['REMOTE_ADDR']) . "' AND user_agent = '" . a_safe($user_agent) . "'")) {
  105. // Обновляем дату последнего посещения
  106. $this->db->query("UPDATE #__guests SET
  107. last_time = UNIX_TIMESTAMP()
  108. WHERE id = '" . intval($guest['id']) . "'
  109. ");
  110. }
  111. // Добавляем нового гостя в список
  112. else {
  113. // Записываем гостя в базу
  114. $this->db->query("INSERT INTO #__guests SET
  115. ip = '" . a_safe($_SERVER['REMOTE_ADDR']) . "',
  116. user_agent = '" . a_safe($user_agent) . "',
  117. last_time = UNIX_TIMESTAMP()
  118. ");
  119. }
  120. }
  121.  
  122. $this->user = $this->db->get_row("SELECT * FROM #__users LEFT JOIN #__users_profiles USING(user_id) WHERE user_id = $user_id");
  123.  
  124. define('USER_ID', $this->user['user_id']);
  125. $this->tpl->assign('user', $this->user);
  126.  
  127. // Обновляем время последнего посещения
  128. if (USER_ID != -1)
  129. $this->db->query("UPDATE #__users SET last_visit = UNIX_TIMESTAMP() WHERE user_id = '" . USER_ID . "'");
  130.  
  131. // Подключения помощника пользователей
  132. a_import('modules/user/helpers/user');
  133.  
  134. // Управление правами доступа
  135. $this->access = a_load_class('libraries/access');
  136.  
  137. if ($this->user) {
  138. $access_level = $this->access->get_level($this->user['status']);
  139. } else {
  140. $access_level = 1;
  141. }
  142.  
  143. define('ACCESS_LEVEL', $access_level);
  144.  
  145. // Выполнение событий до вызова контроллера
  146. main::events_exec($this->db, 'pre_controller');
  147.  
  148. if (ACCESS_LEVEL < $this->access_level) {
  149. if (USER_ID == -1) {
  150. header('Location: ' . a_url('user/login', 'from=' . urlencode($_SERVER["REQUEST_URI"]), true));
  151. exit;
  152. } else {
  153. a_error('У вас нет доступа к данной странице!');
  154. }
  155. }
  156.  
  157. // Получение темы оформления, для админки
  158. if ($this->template_theme == 'admin') {
  159. $this->tpl->theme = $this->config['system']['admin_theme'];
  160. $this->tpl->admin = true;
  161. } else {
  162. $this->tpl->theme = $this->config['system']['default_theme'];
  163. }
  164.  
  165. define('THEME', $this->tpl->theme);
  166.  
  167. // Проверка модерации пользователя
  168. if (defined('MODERATE')) {
  169. a_error(MODERATE);
  170. }
  171. }
  172.  
  173. }