8 isset(
$user) or require
$_SERVER[
'DOCUMENT_ROOT'] .
'/page/404.php';
11 <div
class=
"modal fade" id=
"<?= $basename ?>" tabindex=
"-1" data-backdrop=
"static" data-keyboard=
"false">
12 <div
class=
"modal-dialog modal-xl modal-dialog-centered" role=
"document">
13 <div
class=
"modal-content">
14 <div
class=
"modal-header">
15 <h5
class=
"modal-title"><i
class=
"fa fa-calendar"></i> Добавить <span>HTTP</span> задачу</h5>
16 <button type=
"button" class=
"close" data-dismiss=
"modal" aria-label=
"Close">
17 <span aria-hidden=
"true">×</span>
20 <div
class=
"modal-body pt-2">
21 <form action=
"<?= Wrong\Models\Actions::find(29)->request ?>">
22 <div
class=
"input-group input-group-sm">
23 <div
class=
"input-group-prepend w-50">
24 <span
class=
"input-group-text w-100">Группа владелец</span>
26 <select name=
"owner_group" class=
"custom-select">
28 foreach (
$user->subordinate_groups as $id) {
30 echo
'<option data-path="' . $row->path .
'" value="' . $row->id .
'" ' . ($row->id ==
$user->main_group_id ?
' selected' :
'') .
'>' . Wrong\Rights\Group::text($row->id) .
'</option>';
35 <div
class=
"input-group input-group-sm mt-2">
36 <div
class=
"input-group-prepend w-50">
37 <span
class=
"input-group-text w-100">Метод</span>
39 <select name=
"method" class=
"custom-select">
40 <option value=
"GET">HTTP GET</option>
41 <option value=
"POST">HTTP POST</option>
42 <option value=
"PUT">HTTP PUT</option>
43 <option value=
"DELETE">HTTP DELETE</option>
44 <option value=
"CLI">CLI COMMAND</option>
47 <div
class=
"input-group input-group-sm mt-2" data-cli=
"false" hidden>
48 <div
class=
"input-group-prepend w-50">
49 <span
class=
"input-group-text w-100">Запрос</span>
51 <input type=
"text" name=
"request" class=
"form-control" value=
"/request" placeholder=
"/request" autocomplete=
"off">
53 <div
class=
"input-group input-group-sm mt-2" data-cli=
"true" hidden>
54 <div
class=
"input-group-prepend w-50">
55 <span
class=
"input-group-text w-100">CLI команда</span>
57 <input type=
"text" name=
"cli" class=
"form-control" value=
"" placeholder=
"CLI команда" autocomplete=
"off">
59 <div
class=
"input-group input-group-sm mt-2" data-cli=
"false" hidden>
60 <div
class=
"input-group-prepend w-50">
61 <span
class=
"input-group-text w-100">ID исполнителя(опционально)</span>
63 <input title=
"Если не указано, задача будет выполняться без авторизации" type=
"number" name=
"user_id" class=
"form-control" value=
"" placeholder=
"ID от кого выполнять задачу">
65 <div
class=
"input-group input-group-sm mt-2">
66 <div
class=
"input-group-prepend w-50">
67 <span
class=
"input-group-text w-100">Расписание cron<a tabindex=
"0" id=
"shedule-next" role=
"button" href=
"#"></a></span>
69 <input title=
"Минуты Часы День Месяц День недели" type=
"text" name=
"shedule" class=
"form-control" value=
"* * * * *" placeholder=
"* * * * *" autocomplete=
"off">
70 <div
class=
"input-group-append">
71 <a onclick=
"$(this).data({'shedule':$(this).parents('.input-group').find('[name=shedule]').val(),'id':Date.now()});initSheduleNextPopover();" data-action=
"show-next-crontabs" data-callback=
"showNextCrontabs" title=
"Посмотреть расписание ближайших выполнений" href=
"#" class=
"btn btn-primary" role=
"button"><i
class=
"fa fa-clock-o"></i></a>
74 <div
class=
"input-group input-group-sm mt-2" data-cli=
"false" hidden>
75 <div
class=
"input-group-prepend w-50">
76 <span
class=
"input-group-text w-100">Content-Type</span>
78 <select name=
"headers[]" class=
"custom-select">
79 <option value=
"">none</option>
80 <option value=
"Content-Type: application/x-www-form-urlencoded">application/x-www-form-urlencoded</option>
81 <option value=
"Content-Type: application/json; charset=utf-8">application/json; charset=utf-8</option>
84 <div
class=
"input-group input-group-sm mt-2" data-cli=
"false" hidden>
85 <div
class=
"input-group-prepend w-50">
86 <span
class=
"input-group-text w-100">Дополнительные заголовки(опционально)</span>
88 <div
class=
"flex-fill">
89 <input type=
"text" name=
"headers[]" class=
"form-control form-control-sm" value=
"" placeholder=
"Key: value" autocomplete=
"off">
91 <div
class=
"input-group-append">
92 <button title=
"Убрать крайнее поле" type=
"button" class=
"btn btn-danger rm-header" style=
"display:none;"><i
class=
"fa fa-minus"></i></button>
93 <button title=
"Добавить ещё поле" type=
"button" class=
"btn btn-primary add-header"><i
class=
"fa fa-plus"></i></button>
96 <div
class=
"input-group input-group-sm mt-2" data-cli=
"false" hidden>
97 <div
class=
"input-group-prepend w-50">
98 <span
class=
"input-group-text w-100">Данные json объекта или post формы(опционально)</span>
100 <div
class=
"flex-fill">
101 <input type=
"text" name=
"data[]" class=
"form-control form-control-sm" value=
"" placeholder=
"Key: value" autocomplete=
"off">
103 <div
class=
"input-group-append">
104 <button title=
"Убрать крайнее поле" type=
"button" class=
"btn btn-danger rm-data" style=
"display:none;"><i
class=
"fa fa-minus"></i></button>
105 <button title=
"Добавить ещё поле" type=
"button" class=
"btn btn-primary add-data"><i
class=
"fa fa-plus"></i></button>
108 <div
class=
"input-group input-group-sm mt-2">
109 <div
class=
"input-group-prepend w-50">
110 <span
class=
"input-group-text w-100">Комментарий</span>
112 <input type=
"text" name=
"note" class=
"form-control" value=
"" placeholder=
"Необязательный комментарий к задаче" autocomplete=
"off">
114 <button type=
"submit" class=
"btn btn-sm btn-block btn-success mt-3">Сохранить</button>
120 $(
"#<?= $basename ?> form").submit(
function(e) {
121 lockSubmit($(
"#<?= $basename ?> form [type=submit]"));
125 url: $(
this).attr(
"action"),
126 data: $(
this).serialize(),
134 if (response.error) {
135 errorToast(response.error);
138 $(
'.dataTable').DataTable().ajax.reload(
null,
false);
139 $(
'.toast').toast(
'hide');
140 successToast(response.message);
141 $(
"#<?= $basename ?>").modal(
"hide");
144 unlockSubmit($(
"#<?= $basename ?> form [type=submit]"));
148 $(
"#<?= $basename ?> .add-header").click(() => {
149 let input = $(
"#<?= $basename ?> [type='text'][name='headers[]']:last");
150 let clone = input.clone();
153 $(
"#<?= $basename ?> .rm-header").show();
156 $(
"#<?= $basename ?> .rm-header").click(() => {
157 if ($(
"#<?= $basename ?> [type='text'][name='headers[]']").length > 1) {
158 $(
"#<?= $basename ?> [type='text'][name='headers[]']:last").
remove();
160 if ($(
"#<?= $basename ?> [type='text'][name='headers[]']").length == 1) {
161 $(
"#<?= $basename ?> .rm-header").hide();
165 $(
"#<?= $basename ?> .add-data").click(() => {
166 let input = $(
"#<?= $basename ?> [type='text'][name='data[]']:last");
167 let clone = input.clone();
170 $(
"#<?= $basename ?> .rm-data").show();
173 $(
"#<?= $basename ?> .rm-data").click(() => {
174 if ($(
"#<?= $basename ?> [type='text'][name='data[]']").length > 1) {
175 $(
"#<?= $basename ?> [type='text'][name='data[]']:last").
remove();
177 if ($(
"#<?= $basename ?> [type='text'][name='data[]']").length == 1) {
178 $(
"#<?= $basename ?> .rm-data").hide();
182 $(
"#<?= $basename ?> [name=method]").change(
function() {
183 if (this.value ==
"CLI") {
184 $(
"#<?= $basename ?> [data-cli='false']").attr(
"hidden",
true);
185 $(
"#<?= $basename ?> [data-cli='true']").attr(
"hidden",
false);
186 $(
'#<?= $basename ?> .modal-title span').html(
'CLI');
188 $(
"#<?= $basename ?> [data-cli='false']").attr(
"hidden",
false);
189 $(
"#<?= $basename ?> [data-cli='true']").attr(
"hidden",
true);
190 $(
'#<?= $basename ?> .modal-title span').html(
'HTTP');
192 }).trigger(
"change");
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']