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 header("Content-type: application/json");
11 
12 $cli = $_POST['cli'];
13 array_walk_recursive($_POST, function (&$item) {
14  $item = trim(htmlspecialchars($item, ENT_QUOTES));
15 });
16 $_POST['cli'] = $cli;
17 
18 if (empty($_POST['owner_group']) || !in_array($_POST['owner_group'], $user->subordinate_groups)) {
19  exit(json_encode(['error' => '"Группа владелец" не найдена среди подчиненных групп']));
20 }
21 
22 if (($models_limit = Wrong\Database\Controller::find($_POST['owner_group'], 'id', 'groups')->models_limit) && $models_limit <= Wrong\Rights\Group::count_all_owner_models($_POST['owner_group'])) {
23  exit(json_encode(['error' => 'Лимит моделей для данной группы исчерпан']));
24 }
25 
26 if (empty($_POST['cli']) && (empty($_POST['request']) || !preg_match('#^/[a-z0-9]*#i', $_POST['request']))) {
27  exit(json_encode(['error' => 'Неверный формат для "Запрос"']));
28 }
29 
30 if (!empty($_POST['user_id'])) {
31  $row = Wrong\Auth\User::get($_POST['user_id']);
32  if (!$row) {
33  exit(json_encode(['error' => 'Исполнитель не найден в системе!']));
34  }
35  if (!$user->access()->write($row, true)) {
36  exit(json_encode(['error' => 'Недостаточно прав для выполнения задач от этого пользователя']));
37  }
38 } else {
39  $_POST['user_id'] = 0;
40 }
41 
42 try {
43  $cron = Cron\CronExpression::factory($_POST['shedule']);
44 } catch (\Throwable $th) {
45  exit(json_encode(['error' => $th->getMessage()]));
46 }
47 
48 $shedules = [];
49 for ($i = 0; $i < 25; $i++) {
50  $shedules[] = $cron->getNextRunDate(null, $i)->format('Y-m-d H:i:s');
51 }
52 
53 if (count($shedules) != 25) {
54  exit(json_encode(['error' => 'Расписание указано некорректно']));
55 }
56 
57 $_POST['run_at'] = $shedules[0];
58 
59 if (empty($_POST['method']) || !in_array($_POST['method'], ['GET', 'POST', 'PUT', 'DELETE', 'CLI'])) {
60  exit(json_encode(['error' => 'Метод запроса указан некорректно']));
61 }
62 
63 if ($_POST['method'] == 'CLI') {
64  $_POST['headers'] = $_POST['request'] = '';
65 }
66 
67 $_POST['headers'] = array_map('trim', $_POST['headers']);
68 $_POST['headers'] = array_filter($_POST['headers']);
69 foreach ($_POST['headers'] as $key => $item) {
70  $arr = explode(':', $item, 2);
71  $_POST['headers'][$key] = trim($arr[0]) . ': ' . trim($arr[1]);
72 }
73 $_POST['headers'] = json_encode($_POST['headers']);
74 
75 $_POST['data'] = array_map('trim', $_POST['data']);
76 $_POST['data'] = array_filter($_POST['data']);
77 foreach ($_POST['data'] as $key => $item) {
78  $arr = array_map('trim', explode(':', $item, 2));
79  $_POST['data'][$arr[0]] = $arr[1];
80  unset($_POST['data'][$key]);
81 }
82 $_POST['data'] = json_encode($_POST['data']);
83 
84 
85 if (Wrong\Models\Crontabs::create($_POST)) {
86  exit(json_encode(['result' => 'ok', 'message' => 'Успешно']));
87 }
88 
89 exit(json_encode(['error' => 'Ошибка']));
$cli
Definition: add-crontab.php:12
$_POST['cli']
Definition: add-crontab.php:16
catch(\Throwable $th) $shedules
Definition: add-crontab.php:48
if(empty($_POST['name'])) if(empty($_POST['type'])||!in_array($_POST['type'], ['page', 'modal', 'incode', 'select', 'action'])) $i
static get($id)
Definition: User.php:171
$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
$arr
Definition: actions.php:25