Stackjs.php
См. документацию.
1 <?php
2 
3 /**
4  * @file
5  * @brief javascript стеки
6  *
7  */
8 
9 namespace Wrong\Task;
10 
11 /**
12  * @brief Stackjs класс добавляющий и вызывающий javascript стеки
13  *
14  */
15 
16 class Stackjs
17 {
18  /**
19  * Добавляет js код в стек
20  *
21  * @param string $code строка с javascript кодом
22  * @param int $timeout таймаут в секундах спустя который код будет добавлен в html страницу
23  * @param string $key ключ в массиве во избежание дублирования кодов
24  */
25  public static function add($code, $timeout = 0, $key = '')
26  {
27  $_SESSION['Stackjs'] = empty($_SESSION['Stackjs']) ? [] : $_SESSION['Stackjs'];
28  if ($key) {
29  $_SESSION['Stackjs'][$key] = [
30  'code' => $code,
31  'timeout' => $timeout,
32  'timestamp' => time()
33  ];
34  } else {
35  $_SESSION['Stackjs'][] = [
36  'code' => $code,
37  'timeout' => $timeout,
38  'timestamp' => time()
39  ];
40  }
41  }
42 
43  /**
44  * возвращает строки кода javascript, которые были добавлены в стек, и должны быть исполнена по таймауту(время вышло)
45  * удаляет возвращенные элементы из массива, и возвращает функцию с очередным js таймаутом если есть в стеке ещё задачи
46  */
47  public static function execute()
48  {
49  if (empty($_SESSION['Stackjs'])) {
50  return '';
51  }
52  $code = '';
53  foreach ($_SESSION['Stackjs'] as $key => $value) {
54  if ($value['timestamp'] + $value['timeout'] <= time()) {
55  $code .= $value['code'];
56  unset($_SESSION['Stackjs'][$key]);
57  }
58  }
59  $code .= self::set();
60  return $code;
61  }
62 
63  /**
64  * возвращает javascript код с таймаутом, спустя который будет запрошен js код исполнения из апи.
65  */
66  public static function set()
67  {
68  if (empty($_SESSION['Stackjs'])) {
69  return '';
70  }
71  $arr = [];
72  foreach ($_SESSION['Stackjs'] as $key => $value) {
73  if ($value['timestamp'] + $value['timeout'] <= time()) {
74  $arr[] = 0;
75  } else {
76  $arr[] = $value['timestamp'] + $value['timeout'] - time();
77  }
78  }
79  if ($arr) {
80  $timeout = min($arr) * 1000;
81  return "setTimeout(()=>{\$.getScript('/api/action/stackjs');}, $timeout);";
82  }
83  return '';
84  }
85 }
$_SESSION['filter']
Definition: filter.php:22
Stackjs класс добавляющий и вызывающий javascript стеки
Definition: Stackjs.php:17
static add($code, $timeout=0, $key='')
Definition: Stackjs.php:25
static execute()
Definition: Stackjs.php:47
static set()
Definition: Stackjs.php:66
setcookie('FROM_UID', $uid, [ 'expires'=> time()+31536000, 'path'=> '/', 'domain'=> $_SERVER['HTTP_HOST'], 'secure'=> Wrong\Start\Env::$e->IS_SECURE, 'httponly'=> false, 'samesite'=> Wrong\Start\Env::$e->IS_SECURE ? 'None' :'Lax']) or setcookie('FROM_UID' time()+31536000
Definition: from-user.php:36
$arr
Definition: actions.php:25