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

Размер файла: 11.41Kb
  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. defined('IN_SYSTEM') or die('<b>403<br />Запрет доступа</b>');
  14.  
  15. /**
  16. * Подключение файла
  17. */
  18. function a_import($file) {
  19. if (!strstr($file, '.php'))
  20. $file .= '.php';
  21. if (file_exists(ROOT . $file)) {
  22. include_once ROOT . $file;
  23. return TRUE;
  24. } else {
  25. a_error($file . ': Подключаемый файл не найден!');
  26. return FALSE;
  27. }
  28. }
  29.  
  30. /**
  31. * Перенаправление
  32. */
  33. function redirect($url) {
  34. header('Location: ' . URL . $url);
  35. exit;
  36. }
  37.  
  38. /**
  39. * Проверка авторизации пользователя
  40. */
  41. function is_user() {
  42. if (USER_ID != -1) {
  43. return TRUE;
  44. } else {
  45. return FALSE;
  46. }
  47. }
  48.  
  49. /**
  50. * Вывод ошибки
  51. */
  52. function a_error($error_message = '', $link = '') {
  53. $tpl = Registry::get('tpl');
  54.  
  55. if (empty($error_message)) {
  56. $error_message = 'Произошла неизвестная ошибка';
  57. }
  58.  
  59. if (!empty($tpl)) {
  60. $tpl->assign(array(
  61. 'error_message' => $error_message,
  62. 'link' => $link,
  63. ));
  64. $tpl->display('error');
  65. } else {
  66. echo '<b>' . $error_message . '</b>';
  67. }
  68.  
  69. exit;
  70. }
  71.  
  72. /**
  73. * Вывод ошибки
  74. */
  75. function error($error_message = '', $link = '') {
  76. $tpl = Registry::get('tpl');
  77.  
  78. if (empty($error_message)) {
  79. $error_message = 'Произошла неизвестная ошибка';
  80. }
  81.  
  82. if (!empty($tpl)) {
  83. $tpl->assign(array(
  84. 'error_message' => $error_message,
  85. 'link' => $link,
  86. ));
  87. $tpl->display('error');
  88. } else {
  89. echo '<b>' . $error_message . '</b>';
  90. }
  91.  
  92. exit;
  93. }
  94.  
  95. /**
  96. * Вывод информирующего сообщения
  97. */
  98. function a_notice($message, $link, $timeout = 5) {
  99. $tpl = Registry::get('tpl');
  100.  
  101. $message = str_safe($message);
  102. $link = str_safe($link);
  103. if (isset($tpl)) {
  104. $tpl->assign(array(
  105. 'title' => 'Информация',
  106. 'message' => $message,
  107. 'link' => $link,
  108. 'timeout' => $timeout,
  109. 'from' => 'info'
  110. ));
  111.  
  112. $tpl->display('notice');
  113. } else {
  114. echo '<b>' . $message . '</b><br />';
  115. echo '<a href="' . $link . '">Продолжить</a>';
  116. }
  117. exit;
  118. }
  119.  
  120. /**
  121. * Подтверждение
  122. */
  123. function a_confirm($message, $link_ok, $link_cancel) {
  124. $tpl = Registry::get('tpl');
  125. $message = str_safe($message);
  126. $link_ok = str_safe(strtr($link_ok, '&amp', '&'));
  127. $link_cancel = str_safe(strtr($link_cancel, '&amp', '&'));
  128. if (empty($message))
  129. $message = 'Подтверждаете выполнение данного действия?';
  130.  
  131. if (isset($tpl)) {
  132. $tpl->assign(array(
  133. 'message' => $message,
  134. 'link_ok' => $link_ok,
  135. 'link_cancel' => $link_cancel
  136. ));
  137.  
  138. $tpl->display('confirm');
  139. } else {
  140. echo '<b>' . $message . '</b><br />';
  141. echo '<a href="' . $link_ok . '">Да</a> | <a href="' . $link_cancel . '">Нет</a>';
  142. }
  143. exit;
  144. }
  145.  
  146. /**
  147. * Генерация URL адреса
  148. */
  149. function a_url($path, $query = '', $header = FALSE) {
  150. if (!empty($query)) {
  151. if ($header)
  152. $query = '&' . $query;
  153. else
  154. $query = '&amp;' . $query;
  155. }
  156. $url = URL . $path . EXT . '?' . SID . $query;
  157. $url = str_replace('?&amp;', '?', $url);
  158. $url = str_replace('?&', '?', $url);
  159.  
  160. if (substr($url, -1) == '?')
  161. $url = substr($url, 0, -1);
  162.  
  163. return $url;
  164. }
  165.  
  166. /**
  167. * Обработка строки для помещения ее в базу данных
  168. */
  169. function a_safe($str) {
  170. $db = Registry::get('db');
  171. return htmlspecialchars(mysqli_real_escape_string($db->db_link, trim($str)));
  172. }
  173.  
  174. /**
  175. * Вывод дампа переменной
  176. */
  177. function a_debug($var, $exit = TRUE) {
  178. print '<pre>';
  179. print_r($var);
  180. print '</pre>';
  181.  
  182. if ($exit)
  183. exit;
  184. }
  185.  
  186. /**
  187. * Онлайн ли пользователь
  188. */
  189. function a_is_online($last_visit) {
  190. if ($last_visit > time() - 180)
  191. return '<span style="color: green;">On</span>';
  192. else
  193. return '<span style="color: red;">Off</span>';
  194. }
  195.  
  196. /**
  197. * Аватар пользователя
  198. */
  199. function avatar($user_id) {
  200. if (file_exists(ROOT . 'files/avatars/' . $user_id . '_100' . '.png'))
  201. return '<img src="' . URL . 'files/avatars/' . $user_id . '_100.png' . '" alt="" /><br /><br />';
  202. elseif (file_exists(ROOT . 'files/avatars/' . $user_id . '_150' . '.png'))
  203. return '<img src="' . URL . 'files/avatars/' . $user_id . '_150.png' . '" alt="" /><br /><br />';
  204. elseif (file_exists(ROOT . 'files/avatars/' . $user_id . '_100' . '.gif'))
  205. return '<img src="' . URL . 'files/avatars/' . $user_id . '_100.gif' . '" alt="" /><br /><br />';
  206. elseif (file_exists(ROOT . 'files/avatars/' . $user_id . '_150' . '.gif'))
  207. return '<img src="' . URL . 'files/avatars/' . $user_id . '_150.gif' . '" alt="" /><br /><br />';
  208. elseif (file_exists(ROOT . 'files/avatars/' . $user_id . '_100' . '.jpg'))
  209. return '<img src="' . URL . 'files/avatars/' . $user_id . '_100.jpg' . '" alt="" /><br /><br />';
  210. elseif (file_exists(ROOT . 'files/avatars/' . $user_id . '_150' . '.jpg'))
  211. return '<img src="' . URL . 'files/avatars/' . $user_id . '_150.jpg' . '" alt="" /><br /><br />';
  212. elseif (file_exists(ROOT . 'files/avatars/' . $user_id . '_100' . '.jpeg'))
  213. return '<img src="' . URL . 'files/avatars/' . $user_id . '_100.jpeg' . '" alt="" /><br /><br />';
  214. elseif (file_exists(ROOT . 'files/avatars/' . $user_id . '_150' . '.jpeg'))
  215. return '<img src="' . URL . 'files/avatars/' . $user_id . '_150.jpeg' . '" alt="" /><br /><br />';
  216. }
  217.  
  218. /**
  219. * Небольшой профайлер приложения
  220. */
  221. function a_profiler($start_time) {
  222. GLOBAL $db;
  223.  
  224. $end_time = microtime(true);
  225.  
  226. echo PHP_EOL . '<!-- ' . PHP_EOL;
  227. echo 'Время выполнения: ' . round($end_time - $start_time, 5) . ' сек.' . PHP_EOL . PHP_EOL;
  228. if ($db) {
  229. echo 'Запросов к БД: ' . count($db->list_queries) . PHP_EOL;
  230. if (count($db->list_queries) > 0) {
  231. foreach ($db->list_queries AS $query_data) {
  232. echo $query_data['query'] . ' (' . round($query_data['time'], 5) . ' сек.)' . PHP_EOL;
  233. }
  234. }
  235. } else {
  236. echo "Подключения к базе не было.";
  237. }
  238. echo PHP_EOL . PHP_EOL;
  239. echo 'GET данные:' . PHP_EOL;
  240. print_r($_GET);
  241. echo PHP_EOL . PHP_EOL;
  242. echo 'POST данные:' . PHP_EOL;
  243. print_r($_POST);
  244. echo ' -->';
  245. }
  246.  
  247. /**
  248. * Если переменная пуста, функция возвращает значение по умолчанию
  249. */
  250. function a_default($var, $default = 0) {
  251. if (empty($var))
  252. return $default;
  253. return $var;
  254. }
  255.  
  256. /**
  257. * Подключение и инициализация класса
  258. *
  259. * @param string $path_to_class
  260. * @param <type> $type
  261. * @return class_name
  262. */
  263. function a_load_class($path_to_class, $type = '') {
  264. # Подключем файл класса
  265. a_import($path_to_class);
  266.  
  267. # Определяем имя класса
  268. $file_name = str_replace('.php', '', basename($path_to_class));
  269. $ex = explode('_', $file_name);
  270. foreach ($ex as $value)
  271. $array[] = ucfirst($value);
  272. $class_name = implode('_', $array);
  273.  
  274. switch ($type) {
  275. case 'controller':
  276. $class_name = $class_name . '_Controller';
  277. break;
  278. case 'ci':
  279. $class_name = 'CI_' . $class_name;
  280. break;
  281. case 'model':
  282. $class_name = $class_name . '_Model';
  283. }
  284.  
  285. # Инициализируем класс
  286. return new $class_name();
  287. }
  288.  
  289. /**
  290. * Функция антифлуда
  291. */
  292. function a_antiflud($error = '', $antiflud_time = 0) {
  293. $config = Registry::get('config');
  294.  
  295. if ($antiflud_time == 0)
  296. $antiflud_time = $config['system']['antiflud_time'];
  297. if (empty($error))
  298. $error = 'Отправляйте сообщения не раньше ' . $antiflud_time . ' секунд с момента последнего поста!';
  299. else
  300. $error = str_replace('{ANTIFLUD_TIME}', $antiflud_time, $error);
  301.  
  302. if ($_SESSION['last_message_time'] > time() - $antiflud_time)
  303. a_error($error);
  304. else
  305. $_SESSION['last_message_time'] = time();
  306. }
  307.  
  308. /**
  309. * Функция проверки прав пользователя на выполнение определенных действий
  310. */
  311. function a_check_rights($check_user_id, $check_user_status) {
  312. if (USER_ID == -1)
  313. return FALSE;
  314. if (!class_exists('Access'))
  315. a_import('libraries/access');
  316. $access = new Access;
  317. $access_level = $access->get_level($check_user_status);
  318. if ((ACCESS_LEVEL > $access_level && ACCESS_LEVEL > 5) OR $check_user_id == USER_ID)
  319. return TRUE;
  320. else
  321. return FALSE;
  322. }
  323.  
  324. /**
  325. * htmlspecialchars for arrays
  326. */
  327. function htmlspecialchars_array($var) {
  328. if (!is_array($var))
  329. return htmlspecialchars($var);
  330. return false;
  331. }
  332.  
  333. if (!function_exists('file_put_contents')) {
  334.  
  335. /**
  336. * @param string $file
  337. */
  338. function file_put_contents($file, $data) {
  339. $fp = fopen($file, "w+");
  340. fwrite($fp, $data);
  341. fclose($fp);
  342. }
  343.  
  344. }
  345.  
  346. if (!function_exists('parse_ini_string')) {
  347.  
  348. function parse_ini_string($string) {
  349. $array = Array();
  350.  
  351. $lines = explode("\n", $string);
  352.  
  353. foreach ($lines as $line) {
  354. $statement = preg_match("/^(?!;)(?P<key>[\w+\.\-]+?)\s*=\s*(?P<value>.+?)\s*$/", $line, $match);
  355.  
  356. if ($statement) {
  357. $key = $match['key'];
  358. $value = $match['value'];
  359.  
  360. # Remove quote
  361. if (preg_match("/^\".*\"$/", $value) || preg_match("/^'.*'$/", $value)) {
  362. $win_value = iconv('utf-8', 'windows-1251', $value);
  363. $win_value = substr($win_value, 1, strlen($win_value) - 2);
  364. $value = iconv('windows-1251', 'utf-8', $win_value);
  365. }
  366.  
  367. $array[$key] = $value;
  368. }
  369. }
  370. return $array;
  371. }
  372.  
  373. }
  374.  
  375. function highlight($str) {
  376. $str = stripslashes(htmlspecialchars_decode($str));
  377. $str = highlight_string($str, true);
  378. return '<div style="border: 1px silver solid; margin: 10px; padding-left: 5px; background-color: #f1f2f1;">' . $str . '</div>';
  379. }
  380.  
  381. /**
  382. * Вывод проверочного кода (капчи)
  383. */
  384. function captcha() {
  385. echo '<img src="' . URL . 'utils/captcha.php" alt="captcha" /><br />';
  386. }
  387.  
  388. /**
  389. * Обработка содержимого строки
  390. */
  391. function str_safe($str) {
  392. return htmlspecialchars(trim($str));
  393. }
  394.  
  395. /**
  396. * Генерация URL адреса
  397. */
  398. function url($path, $query = '', $header = FALSE) {
  399. if (!empty($query)) {
  400. if ($header)
  401. $query = '&' . $query;
  402. else
  403. $query = '&amp;' . $query;
  404. }
  405.  
  406. $url = URL . $path . EXT . '?' . SID . $query;
  407. $url = str_replace('?&amp;', '?', $url);
  408. $url = str_replace('?&', '?', $url);
  409.  
  410. if (substr($url, -1) == '?')
  411. $url = substr($url, 0, -1);
  412.  
  413. return $url;
  414. }
  415.  
  416. ?>