edit-threads.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 if (!($row = Wrong\Models\Crontabs::find($_GET['id']))) {
11  exit('<script>errorToast("Ошибка!");</script>');
12 }
13 
14 $threads = json_decode($row->threads, true) ?: Wrong\Task\Cron::DEFAULT_THERADS_SET;
15 
16 ?>
17 <div class="modal fade" id="<?= $basename ?>" tabindex="-1" data-backdrop="static" data-keyboard="false">
18  <div class="modal-dialog modal-xl modal-dialog-centered" role="document">
19  <div class="modal-content">
20  <div class="modal-header">
21  <h5 class="modal-title">Настройка потоков и нагрузки</h5>
22  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
23  <span aria-hidden="true">&times;</span>
24  </button>
25  </div>
26  <div class="modal-body pt-2">
27  <form action="<?= Wrong\Models\Actions::find(47)->request ?>">
28  <input type="hidden" name="id" value="<?= $row->id ?>">
29  <div class="input-group input-group-sm">
30  <div class="input-group-prepend w-25">
31  <span class="input-group-text w-100">Минимум <b></b> потоков</span>
32  </div>
33  <div class="flex-fill bg-light-info border d-flex align-items-center px-2 rounded-right">
34  <input type="range" name="min" class="form-control-range" value="<?= $threads['min'] ?>" min="1" max="1000" required>
35  </div>
36  </div>
37  <div class="input-group input-group-sm mt-2">
38  <div class="input-group-prepend w-25">
39  <span class="input-group-text w-100">Максимум <b></b> потоков</span>
40  </div>
41  <div class="flex-fill bg-light-info border d-flex align-items-center px-2 rounded-right">
42  <input type="range" name="max" class="form-control-range" value="<?= $threads['max'] ?>" min="1" max="1000" required>
43  </div>
44  </div>
45  <div class="input-group input-group-sm mt-2">
46  <div class="input-group-prepend w-25">
47  <span class="input-group-text w-100">Предельная нагрузка сервера <b></b>%</span>
48  </div>
49  <div class="flex-fill bg-light-info border d-flex align-items-center px-2 rounded-right">
50  <input type="range" name="load" class="form-control-range" value="<?= $threads['load'] ?>" min="1" max="1000" required>
51  </div>
52  </div>
53  <div class="bg-light-info border mt-2 px-2 py-1 rounded">
54  <div class="custom-control custom-checkbox small">
55  <input type="checkbox" name="fixed" class="custom-control-input" id="fixed-threads" <?= $threads['fixed'] ? 'checked' : '' ?>>
56  <label class="custom-control-label" for="fixed-threads">Держать <span id="fixed-min"></span> постоянно</label>
57  </div>
58  </div>
59  <button type="submit" class="btn btn-sm btn-block btn-success mt-3">Сохранить</button>
60  </form>
61  </div>
62  </div>
63  </div>
64  <script>
65  $("#<?= $basename ?> form").submit(function(e) {
66  lockSubmit($("#<?= $basename ?> form [type=submit]"));
67  e.preventDefault();
68  $.ajax({
69  type: "POST",
70  url: $(this).attr("action"),
71  data: $(this).serialize(),
72  dataType: "json",
73  statusCode: {
74  404: errorToast,
75  403: errorToast
76  }
77  })
78  .done(response => {
79  if (response.error) {
80  errorToast(response.error);
81  return;
82  }
83  $('.dataTable').DataTable().ajax.reload(null, false);
84  $('.toast').toast('hide');
85  successToast(response.message);
86  $("#<?= $basename ?>").modal("hide");
87  })
88  .always(() => {
89  unlockSubmit($("#<?= $basename ?> form [type=submit]"));
90  });
91  });
92 
93  $("#<?= $basename ?> [type=range]").on('input', function() {
94  if ($(this).attr("name") == "min" && +this.value > +$("#<?= $basename ?> [name=max]").val()) {
95  $("#<?= $basename ?> [name=max]").val(this.value).trigger('input');
96  }
97  if ($(this).attr("name") == "max" && +this.value < +$("#<?= $basename ?> [name=min]").val()) {
98  $("#<?= $basename ?> [name=min]").val(this.value).trigger('input');
99  }
100  $("#fixed-min").html("<b>" + $("#<?= $basename ?> [name=min]").val() + "</b> поток" + (function(n) {
101  let s = n + "";
102  s = s.substr(-1);
103  let arr = ["", "а", "ов"];
104  return (s == 1 && n != 11) ? arr[0] : (s < 5 && s > 1 && n != 12 && n != 13 && n != 14 ? arr[1] : arr[2]);
105  })($("#<?= $basename ?> [name=min]").val()));
106  $(this).parent().prev().find('b').html('&nbsp;' + this.value + '&nbsp;');
107  }).trigger('input');
108  </script>
109 </div>
if(!($row=Wrong\Models\Crontabs::find($_POST['id']))) if(! $user->access() ->write($row)) if($_POST['min']< 1|| $_POST['min'] > 100000|| $_POST['max']< 1|| $_POST['max'] > 100000|| $_POST['load']< 1|| $_POST['load'] > 1000) $threads
const DEFAULT_THERADS_SET
Definition: Cron.php:25
$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
if(($dbh=Connect::getInstance(true) ->dbh) && $dbh->query("SHOW TABLES") ->fetchAll() && $dbh->query("SELECT COUNT(*) FROM `users`") ->fetchColumn()) if(!empty($_POST)) exit
Definition: install.php:198