add-crontab.php
См. документацию.
1 <?php
2 
3 /**
4  * @file
5  * @brief окно добавления новой cron задачи
6  */
7 
8 isset($user) or require $_SERVER['DOCUMENT_ROOT'] . '/page/404.php';
9 
10 ?>
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">&times;</span>
18  </button>
19  </div>
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>
25  </div>
26  <select name="owner_group" class="custom-select">
27  <?php
28  foreach ($user->subordinate_groups as $id) {
29  $row = Wrong\Rights\Group::row($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>';
31  }
32  ?>
33  </select>
34  </div>
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>
38  </div>
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>
45  </select>
46  </div>
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>
50  </div>
51  <input type="text" name="request" class="form-control" value="/request" placeholder="/request" autocomplete="off">
52  </div>
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>
56  </div>
57  <input type="text" name="cli" class="form-control" value="" placeholder="CLI команда" autocomplete="off">
58  </div>
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>
62  </div>
63  <input title="Если не указано, задача будет выполняться без авторизации" type="number" name="user_id" class="form-control" value="" placeholder="ID от кого выполнять задачу">
64  </div>
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>
68  </div>
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>
72  </div>
73  </div>
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>
77  </div>
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>
82  </select>
83  </div>
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>
87  </div>
88  <div class="flex-fill">
89  <input type="text" name="headers[]" class="form-control form-control-sm" value="" placeholder="Key: value" autocomplete="off">
90  </div>
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>
94  </div>
95  </div>
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>
99  </div>
100  <div class="flex-fill">
101  <input type="text" name="data[]" class="form-control form-control-sm" value="" placeholder="Key: value" autocomplete="off">
102  </div>
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>
106  </div>
107  </div>
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>
111  </div>
112  <input type="text" name="note" class="form-control" value="" placeholder="Необязательный комментарий к задаче" autocomplete="off">
113  </div>
114  <button type="submit" class="btn btn-sm btn-block btn-success mt-3">Сохранить</button>
115  </form>
116  </div>
117  </div>
118  </div>
119  <script>
120  $("#<?= $basename ?> form").submit(function(e) {
121  lockSubmit($("#<?= $basename ?> form [type=submit]"));
122  e.preventDefault();
123  $.ajax({
124  type: "POST",
125  url: $(this).attr("action"),
126  data: $(this).serialize(),
127  dataType: "json",
128  statusCode: {
129  404: errorToast,
130  403: errorToast
131  }
132  })
133  .done(response => {
134  if (response.error) {
135  errorToast(response.error);
136  return;
137  }
138  $('.dataTable').DataTable().ajax.reload(null, false);
139  $('.toast').toast('hide');
140  successToast(response.message);
141  $("#<?= $basename ?>").modal("hide");
142  })
143  .always(() => {
144  unlockSubmit($("#<?= $basename ?> form [type=submit]"));
145  });
146  });
147 
148  $("#<?= $basename ?> .add-header").click(() => {
149  let input = $("#<?= $basename ?> [type='text'][name='headers[]']:last");
150  let clone = input.clone();
151  clone.val("");
152  input.after(clone);
153  $("#<?= $basename ?> .rm-header").show();
154  });
155 
156  $("#<?= $basename ?> .rm-header").click(() => {
157  if ($("#<?= $basename ?> [type='text'][name='headers[]']").length > 1) {
158  $("#<?= $basename ?> [type='text'][name='headers[]']:last").remove();
159  }
160  if ($("#<?= $basename ?> [type='text'][name='headers[]']").length == 1) {
161  $("#<?= $basename ?> .rm-header").hide();
162  }
163  });
164 
165  $("#<?= $basename ?> .add-data").click(() => {
166  let input = $("#<?= $basename ?> [type='text'][name='data[]']:last");
167  let clone = input.clone();
168  clone.val("");
169  input.after(clone);
170  $("#<?= $basename ?> .rm-data").show();
171  });
172 
173  $("#<?= $basename ?> .rm-data").click(() => {
174  if ($("#<?= $basename ?> [type='text'][name='data[]']").length > 1) {
175  $("#<?= $basename ?> [type='text'][name='data[]']:last").remove();
176  }
177  if ($("#<?= $basename ?> [type='text'][name='data[]']").length == 1) {
178  $("#<?= $basename ?> .rm-data").hide();
179  }
180  });
181 
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');
187  } else {
188  $("#<?= $basename ?> [data-cli='false']").attr("hidden", false);
189  $("#<?= $basename ?> [data-cli='true']").attr("hidden", true);
190  $('#<?= $basename ?> .modal-title span').html('HTTP');
191  }
192  }).trigger("change");
193  </script>
194 </div>
static row($id)
Definition: Group.php:245
$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