construct-action.php
См. документацию.
1 <?php
2 
3 /**
4  * @file
5  * @brief окно с формой конструктора кнопки вызова обработчика
6  */
7 
8 isset($user) or require $_SERVER['DOCUMENT_ROOT'] . '/page/404.php';
9 $name = htmlspecialchars($_GET['name'], ENT_QUOTES);
10 
11 ?>
12 <div class="modal fade" id="<?= $basename ?>" tabindex="-1" data-backdrop="static" data-keyboard="false">
13  <div class="modal-dialog modal-lg modal-dialog-centered" role="document">
14  <div class="modal-content">
15  <div class="modal-header">
16  <h5 class="modal-title"><i class="fa fa-cubes"></i> Конструктор триггера действия</h5>
17  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
18  <span aria-hidden="true">&times;</span>
19  </button>
20  </div>
21  <div class="modal-body">
22  <form onsubmit="return false;">
23  <div class="input-group input-group-sm">
24  <div class="input-group-prepend w-50">
25  <span class="input-group-text w-100">Тип тега</span>
26  </div>
27  <select name="tag" class="custom-select">
28  <option value="a">&lt;a&gt;</option>
29  <option value="button">&lt;button&gt;</option>
30  <option value="div">&lt;div&gt;</option>
31  </select>
32  </div>
33  <div class="input-group input-group-sm mt-2">
34  <div class="input-group-prepend w-50">
35  <span class="input-group-text w-100">Анкор</span>
36  </div>
37  <input type="text" name="anchor" class="form-control" value="Кнопка" placeholder="Анкор" autocomplete="off">
38  </div>
39  <div class="input-group input-group-sm mt-2">
40  <div class="input-group-prepend w-50">
41  <span class="input-group-text w-100">Действие</span>
42  </div>
43  <input type="text" name="name" class="form-control" value="<?= $name ?>" placeholder="Имя действия" autocomplete="off" readonly>
44  </div>
45  <div class="input-group input-group-sm mt-2">
46  <div class="input-group-prepend w-50">
47  <span class="input-group-text w-100">С подтверждением</span>
48  </div>
49  <select name="confirm" class="custom-select">
50  <option value="true">Да</option>
51  <option value="false">Нет (по умолчанию)</option>
52  </select>
53  </div>
54  <div class="input-group input-group-sm mt-2">
55  <div class="input-group-prepend w-50">
56  <span class="input-group-text w-100">Заголовок подтверждения</span>
57  </div>
58  <input type="text" name="header" class="form-control" value="" placeholder="Подтвердите действие (по умолчанию)" autocomplete="off">
59  </div>
60  <div class="input-group input-group-sm mt-2">
61  <div class="input-group-prepend w-50">
62  <span class="input-group-text w-100">Текст подтверждения</span>
63  </div>
64  <input type="text" name="body" class="form-control" value="" placeholder="Body содержимое модалки" autocomplete="off">
65  </div>
66  <div class="input-group input-group-sm mt-2">
67  <div class="input-group-prepend w-50">
68  <span class="input-group-text w-100">Ajax dataType</span>
69  </div>
70  <select name="response" class="custom-select">
71  <option value="json">json (по умолчанию)</option>
72  <option value="html">html</option>
73  <option value="script">script</option>
74  <option value="xml">xml</option>
75  </select>
76  </div>
77  <div class="input-group input-group-sm mt-2">
78  <div class="input-group-prepend w-50">
79  <span class="input-group-text w-100">Callback функция</span>
80  </div>
81  <input type="text" name="callback" class="form-control" value="" placeholder="" autocomplete="off">
82  </div>
83  <ul class="rounded bg-light-info border small mt-2 p-2 pl-4 mb-0">
84  <li>Можно добавить любые data-* аттрибуты, они все будут переданы в $_POST[*] переменных на скрипт обработчик</li>
85  <li>Если задана callback функция - она будет вызвана с аргументом response(ответ обработчика)</li>
86  </ul>
87  <div class="position-relative">
88  <textarea name="result-button" class="mt-2 form-control p-1" rows="1" style="font-size:14px;"></textarea>
89  <a style="position:absolute;top:0;right:4px;" title="Копировать код" href="#"><i class="fa fa-copy" aria-hidden="true"></i></a>
90  </div>
91  <div class="position-relative" style="display:none;">
92  <textarea name="result-function" class="mt-2 form-control p-1" rows="7" style="font-size:14px;"></textarea>
93  <a style="position:absolute;top:0;right:4px;" title="Копировать код" href="#"><i class="fa fa-copy" aria-hidden="true"></i></a>
94  </div>
95  </form>
96 
97  </div>
98  </div>
99  </div>
100  <script>
101  $(function() {
102  function construct() {
103  let action = $('#<?= $basename ?> [name=name]').val().trim();
104  let code = $('<a class="btn btn-primary" data-action="' + action + '"></a>');
105  let anchor = $('#<?= $basename ?> [name=anchor]').val().trim();
106  code.html(anchor);
107  if ($('#<?= $basename ?> [name=confirm]').val() == 'true') {
108  code.attr('data-confirm', 'true');
109  $('#<?= $basename ?> [name=header]').parent().slideDown();
110  $('#<?= $basename ?> [name=body]').parent().slideDown();
111  let header = $('#<?= $basename ?> [name=header]').val().trim();
112  let body = $('#<?= $basename ?> [name=body]').val().trim();
113  if (header) {
114  code.attr('data-header', header);
115  }
116  if (body) {
117  code.attr('data-body', body);
118  }
119  } else {
120  $('#<?= $basename ?> [name=header]').parent().slideUp();
121  $('#<?= $basename ?> [name=body]').parent().slideUp();
122  }
123  let response = $('#<?= $basename ?> [name=response]').val().trim();
124  if (response != 'json') {
125  code.attr('data-response', response);
126  }
127  let callback = $('#<?= $basename ?> [name=callback]').val().trim();
128  $('#<?= $basename ?> [name=result-function]').val('');
129  if (callback) {
130  code.attr('data-callback', callback);
131  $('#<?= $basename ?> [name=result-function]').val('function ' + callback + '(response) {\n if (response.error) {\n errorToast(response.error);\n return;\n }\n successToast(response.message);\n}');
132  $('#<?= $basename ?> [name=result-function]').parent().slideDown();
133  } else {
134  $('#<?= $basename ?> [name=result-function]').parent().slideUp();
135  }
136 
137  code = code[0].outerHTML;
138  let tag = $('#<?= $basename ?> [name=tag]').val();
139  code = code.replace(/^<[a-z]+/, '<' + tag);
140  code = code.replace(/[a-z]+>$/, tag + '>');
141 
142  $('#<?= $basename ?> [name=result-button]').val(code);
143  $('#<?= $basename ?> [name=result-button]').css({
144  'height': 'auto'
145  });
146  $('#<?= $basename ?> [name=result-button]').css({
147  'height': ($('#<?= $basename ?> [name=result-button]')[0].scrollHeight + 3) + 'px'
148  });
149 
150  }
151 
152  $('#<?= $basename ?> form').on('input keyup', construct);
153  setTimeout(() => {
154  $('#<?= $basename ?> form').trigger('keyup');
155  }, 300);
156 
157  $('#<?= $basename ?> textarea').next().click(function(e) {
158  e.preventDefault();
159  $(this).prev().focus();
160  $(this).prev().select();
161  document.execCommand('copy', false);
162  successToast('Скопировано в буфер');
163  setTimeout(() => {
164  window.getSelection().removeAllRanges();
165  }, 500);
166  });
167  });
168  </script>
169 </div>
$_POST['groups']
Definition: add-action.php:16
$user
Definition: from-user.php:38
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' $_SERVER['HTTP_HOST']
Definition: from-user.php:36
href
Definition: main.php:21