add-modal.php
См. документацию.
1 <?php
2 
3 /**
4  * @file
5  * @brief окно добавления нового модального окна
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-lg modal-dialog-centered" role="document">
13  <div class="modal-content">
14  <div class="modal-header">
15  <h5 class="modal-title"><i class="fa fa-window-restore mr-2"></i>Добавить модальное окно</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(7)->request ?>">
22  <div class="border px-2 py-1 rounded bg-light-info">
23  <small>Группы доступа <a onclick="if(~~this.dataset.checked){$(this).html('отметить все');this.dataset.checked=0;$(this).parents('form').find('[name^=groups]').prop('checked', false);}else{$(this).html('снять все');this.dataset.checked=1;$(this).parents('form').find('[name^=groups]').prop('checked', true);}return false;" href="#">отметить все</a></small>
24  <?php
25  foreach (Wrong\Rights\Group::$groups_not_system as $row) {
26  echo '<div class="custom-control custom-checkbox small">
27  <input type="checkbox" name="groups[' . $row->id . ']" class="custom-control-input" id="check-group-' . $row->id . '">
28  <label class="custom-control-label" for="check-group-' . $row->id . '">' . Wrong\Rights\Group::text($row->id) . '</label>
29  </div>';
30  }
31  ?>
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  <select name="owner_group" class="custom-select">
38  <?php
39  foreach ($user->subordinate_groups as $id) {
40  $row = Wrong\Rights\Group::row($id);
41  echo '<option data-path="' . $row->path . '" value="' . $row->id . '" ' . ($row->id == $user->main_group_id ? ' selected' : '') . '>' . Wrong\Rights\Group::text($row->id) . '</option>';
42  }
43  ?>
44  </select>
45  </div>
46  <div class="input-group input-group-sm mt-2">
47  <div class="input-group-prepend w-50">
48  <span class="input-group-text w-100">Шаблон</span>
49  </div>
50  <select name="template_id" class="custom-select">
51  <?php
52  foreach (Wrong\Models\Templates::all_available('modal', 'type') as $row) {
53  echo '<option value="' . $row->id . '">' . $row->name . '</option>';
54  }
55  ?>
56  </select>
57  </div>
58  <div class="input-group input-group-sm mt-2">
59  <div class="input-group-prepend w-50">
60  <span class="input-group-text w-100">Запрос</span>
61  </div>
62  <input type="text" name="request" class="form-control" value="/api/modal/request" placeholder="/api/modal/request" autocomplete="off" required>
63  </div>
64  <div class="input-group input-group-sm mt-2">
65  <div class="input-group-prepend w-50">
66  <span class="input-group-text w-100">Файл обработчик</span>
67  </div>
68  <input title="Доступные каталоги: <?= implode(', ', $user->writeble_paths) ?>" type="text" name="file" class="form-control" value="/api/modal/<?= Wrong\Rights\Group::row($user->main_group_id)->path ?>/request.php" placeholder="/api/modal/<?= Wrong\Rights\Group::row($user->main_group_id)->path ?>/request.php" autocomplete="off" required>
69  </div>
70  <div class="bg-light-info border mt-2 px-2 py-1 rounded">
71  <div class="custom-control custom-checkbox small">
72  <input type="checkbox" name="add-action" class="custom-control-input" id="add-action">
73  <label class="custom-control-label" for="add-action">Добавить действие<i class="fa fa-flash ml-2"></i></label>
74  </div>
75  </div>
76  <button type="submit" class="btn btn-sm btn-block btn-success mt-3">Сохранить</button>
77  </form>
78  </div>
79  </div>
80  </div>
81  <script>
82  $("#<?= $basename ?> form").submit(function(e) {
83  lockSubmit($("#<?= $basename ?> form [type=submit]"));
84  e.preventDefault();
85  $.ajax({
86  type: "POST",
87  url: $(this).attr("action"),
88  data: $(this).serialize(),
89  dataType: "json",
90  statusCode: {
91  404: errorToast,
92  403: errorToast
93  }
94  })
95  .done(response => {
96  if (response.error) {
97  errorToast(response.error);
98  return;
99  }
100  $('.dataTable').DataTable().ajax.reload(null, false);
101  $('.toast').toast('hide');
102  successToast(response.message);
103  $("#<?= $basename ?>").modal("hide");
104  })
105  .always(() => {
106  unlockSubmit($("#<?= $basename ?> form [type=submit]"));
107  });
108  });
109 
110  $("#<?= $basename ?> form [name=request]").keyup(function() {
111  let filename = ($(this).val().trim().match(/[^\/]+$/)?. [0] || '') + '.php';
112  let replace = $("#<?= $basename ?> form [name=file]").val().trim().replace(/[^\/]+$/, filename);
113  $("#<?= $basename ?> form [name=file]").val(replace);
114  });
115 
116  $(function() {
117  function setPath() {
118  let path = $('#<?= $basename ?> [name="owner_group"] option:selected').data('path');
119  let file = $("#<?= $basename ?> form [name=file]").val();
120  file = file.replace(/^(\/api\/[^/]+\/)[^/]+/, '$1' + path);
121  $("#<?= $basename ?> form [name=file]").val(file);
122  }
123  $('#<?= $basename ?> [name="owner_group"]').on('change', setPath);
124  $('#<?= $basename ?> [name="owner_group"]').trigger('change');
125  });
126  </script>
127 </div>
static row($id)
Definition: Group.php:245
static text($id)
Definition: Group.php:233
$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