Hideout.php
См. документацию.
1 <?php
2 
3 /**
4  * @file
5  * @brief скрытие отключенных/недоступных по правам, элементов и возможностей(ссылок, кнопок вызова действий, форм, кнопок вызова модалок)
6  *
7  */
8 
9 namespace Wrong\Html;
10 
12 use Wrong\Start\Env;
14 
15 /**
16  * @brief Hideout используется для скрытия элементов в HTML.
17  *
18  */
19 
20 class Hideout extends Assets
21 {
22  /** статический массив всех действий отсортированный по наименьшему минимальному весу групп доступа */
23  public static $actions = [];
24 
25  /** статический массив всех модалок отсортированный по наименьшему минимальному весу групп доступа */
26  public static $modals = [];
27 
28  /** статический массив всех страниц отсортированный по наименьшему минимальному весу групп доступа */
29  public static $pages = [];
30 
31  /**
32  * скрывает все элементы, которые не разрешены для просмотра текущему пользователю.
33  *
34  * @param string $str Строка для обработки - html код на выходе из ob_get_contents(), вызывается в register_shutdown_function() в include/session.php
35  *
36  * @return строка, которая передается ему.
37  */
38  public static function hide($str)
39  {
40  global $user;
41 
42  $dbh = Connect::getInstance()->dbh;
43 
44  if (defined('USE_ASSETS_PATH')) {
45  $str = self::path($str);
46  }
47 
48  if (Env::$e->HIDE_OUT_ACTIONS_MODALS) {
49  self::$actions = Group::weightSort($dbh->query("SELECT * FROM `actions`")->fetchAll());
50  self::$modals = Group::weightSort($dbh->query("SELECT * FROM `modals`")->fetchAll());
51  }
52  if (Env::$e->HIDE_OUT_LINKS) {
53  self::$pages = Group::weightSort($dbh->query("SELECT * FROM `pages`")->fetchAll());
54  }
55 
56  $hide_rules = [];
57  $requests = [];
58  foreach (array_reverse(self::$actions) as $row) {
59  if (in_array($row->request, $requests)) continue;
60  $requests[] = $row->request;
61  if ((!$row->act || !array_intersect($user->groups, json_decode($row->groups, true))) && !in_array($row->owner_group, $user->groups)) {
62  if (strpos($str, 'data-action="' . basename($row->request) . '"') !== false || strpos($str, 'action="' . basename($row->request) . '"') !== false) {
63  $hide_rules[] = '[data-action="' . basename($row->request) . '"]{display:none!important}';
64  $hide_rules[] = '[action="' . basename($row->request) . '"]{display:none!important}';
65  }
66  }
67  }
68  $requests = [];
69  foreach (array_reverse(self::$modals) as $row) {
70  if (in_array($row->request, $requests)) continue;
71  $requests[] = $row->request;
72  if ((!$row->act || !array_intersect($user->groups, json_decode($row->groups, true))) && !in_array($row->owner_group, $user->groups)) {
73  if (strpos($str, 'data-target="#' . basename($row->request) . '"') !== false) {
74  $hide_rules[] = '[data-target="#' . basename($row->request) . '"]{display:none!important}';
75  }
76  }
77  }
78  $requests = [];
79  foreach (array_reverse(self::$pages) as $row) {
80  if (in_array($row->request, $requests)) continue;
81  $requests[] = $row->request;
82  if ((!$row->act || !array_intersect($user->groups, json_decode($row->groups, true))) && !in_array($row->owner_group, $user->groups)) {
83  if (strpos($str, 'href="' . $row->request . '"') !== false) {
84  $hide_rules[] = '[href="' . $row->request . '"]{display:none!important}';
85  }
86  }
87  }
88  if ($hide_rules) {
89  $str = str_replace('</head>', '<style>' . implode(array_unique($hide_rules)) . '</style></head>', $str);
90  }
91  return $str;
92  }
93 
94 }
Connect создает подключение к базе данных
Definition: Connect.php:19
static getInstance($ignore_error=false)
Definition: Connect.php:50
Assets класс преобразует относительные пути в шаблонах
Definition: Assets.php:17
static path($str)
Definition: Assets.php:25
Hideout используется для скрытия элементов в HTML.
Definition: Hideout.php:21
static hide($str)
Definition: Hideout.php:38
Group класс, содержащий статические методы, используемые для управления группами пользователей.
Definition: Group.php:25
static weightSort($arr)
Definition: Group.php:136
Env класс управляющий, добавляющий или записывающий переменные среды
Definition: Env.php:17
static $e
Definition: Env.php:22
$user
Definition: from-user.php:38
$dbh
Definition: session.php:19