2 Commits

5 changed files with 84 additions and 39 deletions

View File

@@ -94,7 +94,7 @@ final class account extends core
if (mb_strlen($parameters['number']) === 11) $account->number = $parameters['number']; if (mb_strlen($parameters['number']) === 11) $account->number = $parameters['number'];
else throw new exception('Номер должен состоять из 11 символов'); else throw new exception('Номер должен состоять из 11 символов');
if ($parameters['mail'] !== $account->mail) $account->mail = $parameters['mail']; if ($parameters['mail'] !== $account->mail) $account->mail = $parameters['mail'];
if (!empty($parameters['password']) && !sodium_crypto_pwhash_str_verify($parameters['password'], $account->password) && $password = true) if (!empty($parameters['password']) && !@sodium_crypto_pwhash_str_verify($parameters['password'], $account->password ?? '') && $password = true)
if (mb_strlen($parameters['password']) > 6) $account->password = sodium_crypto_pwhash_str( if (mb_strlen($parameters['password']) > 6) $account->password = sodium_crypto_pwhash_str(
$parameters['password'], $parameters['password'],
SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE, SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE,

View File

@@ -359,7 +359,7 @@ final class market extends core
// Авторизован аккаунт администратора или оператора // Авторизован аккаунт администратора или оператора
// Инициализация данных магазина // Инициализация данных магазина
$market = model::read('d.id == "' . $parameters['id'] . '"', return: '{ name: d.name, number: d.number, mail: d.mail, type: d.type, city: d.city, district: d.district, address: d.address}')->getAll(); $market = model::read('d.id == "' . urldecode($parameters['id']) . '"', return: '{ name: d.name, number: d.number, mail: d.mail, type: d.type, city: d.city, district: d.district, address: d.address}')->getAll();
if (!empty($market)) { if (!empty($market)) {
// Найдены данные магазина // Найдены данные магазина
@@ -399,7 +399,7 @@ final class market extends core
// Авторизован аккаунт администратора или оператора // Авторизован аккаунт администратора или оператора
// Инициализация данных магазина // Инициализация данных магазина
$market = model::read('d.id == "' . $parameters['id'] . '"'); $market = model::read('d.id == "' . urldecode($parameters['id']) . '"');
if (!empty($market)) { if (!empty($market)) {
// Найден магазин // Найден магазин

View File

@@ -2077,24 +2077,40 @@ final class task extends core
// Заявка подтверждена? // Заявка подтверждена?
if ($task->confirmed) throw new exception('Запрещено редактировать тип работы у подтверждённой заявки'); if ($task->confirmed) throw new exception('Запрещено редактировать тип работы у подтверждённой заявки');
// Инициализация даты if ($this->account->type === 'market') {
$date = (new DateTime('@' . $task->date))->setTimezone(new DateTimeZone('Asia/Krasnoyarsk')); // Магазин
// Инициализация времени // Инициализация даты
$start = datetime::createFromFormat('H:i', (string) $task->start); $date = (new DateTime('@' . $task->date))->setTimezone(new DateTimeZone('Asia/Krasnoyarsk'));
$end = datetime::createFromFormat('H:i', (string) $task->end);
// Перенос времени в дату // Инициализация времени
$start = $date->setTime((int) $start->format('H'), (int) $start->format('i'))->format('U'); $start = datetime::createFromFormat('H:i', (string) $task->start);
$end = $date->setTime((int) $end->format('H'), (int) $end->format('i'))->format('U'); $end = datetime::createFromFormat('H:i', (string) $task->end);
// Заявка уже начата // Перенос времени в дату
if ($this->account->type === 'market' and time() - $start > 0) $start = $date->setTime((int) $start->format('H'), (int) $start->format('i'))->format('U');
throw new exception('Запрещено редактировать тип работы начатой заявки'); $end = $date->setTime((int) $end->format('H'), (int) $end->format('i'))->format('U');
// Заявка уже завершена // Заявка уже начата?
if ($this->account->type === 'market' and $task->completed === true || time() - $end > 0) if (time() - $start > 0)
throw new exception('Запрещено редактировать тип работы завершённой заявки'); throw new exception('Запрещено редактировать тип работы начатой заявки');
// Заявка уже прошла?
if (time() - $end > 0)
throw new exception('Запрещено редактировать тип работы прошедшей заявки');
// Заявка уже завершена?
if ($task->completed === true)
throw new exception('Запрещено редактировать тип работы завершённой заявки');
// Прошло более 30 минут после создания заявки? (1800 секунд = 30 минут)
/* if (time() - $task->created > 1800)
throw new exception('Запрещено редактировать заявку спустя 30 минут после создания'); */
// До начала заявки осталось менее 16 часов? (57600 секунд = 16 часов)
if ($start - time() < 57600)
throw new exception('Запрещено редактировать тип работы заявки за менее 16 часов до её начала');
}
if ($task instanceof _document) { if ($task instanceof _document) {
// Найдена заявка // Найдена заявка
@@ -2317,24 +2333,40 @@ final class task extends core
// Заявка подтверждена? // Заявка подтверждена?
if ($task->confirmed) throw new exception('Запрещено редактировать дату и время у подтверждённой заявки'); if ($task->confirmed) throw new exception('Запрещено редактировать дату и время у подтверждённой заявки');
// Инициализация даты if ($this->account->type === 'market') {
$date = (new DateTime('@' . $task->date))->setTimezone(new DateTimeZone('Asia/Krasnoyarsk')); // Магазин
// Инициализация времени // Инициализация даты
$start = datetime::createFromFormat('H:i', (string) $task->start); $date = (new DateTime('@' . $task->date))->setTimezone(new DateTimeZone('Asia/Krasnoyarsk'));
$end = datetime::createFromFormat('H:i', (string) $task->end);
// Перенос времени в дату // Инициализация времени
$start = $date->setTime((int) $start->format('H'), (int) $start->format('i'))->format('U'); $start = datetime::createFromFormat('H:i', (string) $task->start);
$end = $date->setTime((int) $end->format('H'), (int) $end->format('i'))->format('U'); $end = datetime::createFromFormat('H:i', (string) $task->end);
// Заявка уже начата // Перенос времени в дату
if ($this->account->type === 'market' and time() - $start > 0) $start = $date->setTime((int) $start->format('H'), (int) $start->format('i'))->format('U');
throw new exception('Запрещено редактировать дату и время начатой заявки'); $end = $date->setTime((int) $end->format('H'), (int) $end->format('i'))->format('U');
// Заявка уже завершена // Заявка уже начата?
if ($this->account->type === 'market' and $task->completed === true || time() - $end > 0) if (time() - $start > 0)
throw new exception('Запрещено редактировать дату и время завершённой заявки'); throw new exception('Запрещено редактировать дату и время начатой заявки');
// Заявка уже прошла?
if (time() - $end > 0)
throw new exception('Запрещено редактировать дату и время прошедшей заявки');
// Заявка уже завершена?
if ($task->completed === true)
throw new exception('Запрещено редактировать дату и время завершённой заявки');
// Прошло более 30 минут после создания заявки? (1800 секунд = 30 минут)
/* if (time() - $task->created > 1800)
throw new exception('Запрещено редактировать заявку спустя 30 минут после создания'); */
// До начала заявки осталось менее 16 часов? (57600 секунд = 16 часов)
if ($start - time() < 57600)
throw new exception('Запрещено редактировать дату и время заявки за менее 16 часов до её начала');
}
if ($task instanceof _document) { if ($task instanceof _document) {
// Найдена заявка // Найдена заявка

View File

@@ -396,7 +396,7 @@ final class worker extends core
// Авторизован аккаунт администратора или оператора // Авторизован аккаунт администратора или оператора
// Инициализация данных сотрудника // Инициализация данных сотрудника
$worker = model::read('d.id == "' . $parameters['id'] . '"', return: '{ name: d.name, number: d.number, mail: d.mail, birth: d.birth, passport: d.passport, issued: d.issued, department: d.department, requisites: d.requisites, payment: d.payment, tax: d.tax, city: d.city, district: d.district, address: d.address, worl: d.work, hiring: d.hiring}')->getAll(); $worker = model::read('d.id == "' . urldecode($parameters['id']) . '"', return: '{ name: d.name, number: d.number, mail: d.mail, birth: d.birth, passport: d.passport, issued: d.issued, department: d.department, requisites: d.requisites, payment: d.payment, tax: d.tax, city: d.city, district: d.district, address: d.address, worl: d.work, hiring: d.hiring}')->getAll();
if (!empty($worker)) { if (!empty($worker)) {
// Найдены данные сотрудника // Найдены данные сотрудника
@@ -436,7 +436,7 @@ final class worker extends core
// Авторизован аккаунт администратора или оператора // Авторизован аккаунт администратора или оператора
// Инициализация данных сотрудника // Инициализация данных сотрудника
$worker = model::read('d.id == "' . $parameters['id'] . '"'); $worker = model::read('d.id == "' . urldecode($parameters['id']) . '"');
if (!empty($worker)) { if (!empty($worker)) {
// Найден сотрудник // Найден сотрудник
@@ -533,7 +533,7 @@ final class worker extends core
// Авторизован аккаунт администратора или оператора // Авторизован аккаунт администратора или оператора
// Инициализация данных сотрудника // Инициализация данных сотрудника
$worker = model::read('d.id == "' . $parameters['id'] . '"'); $worker = model::read('d.id == "' . urldecode($parameters['id']) . '"');
if (!empty($worker)) { if (!empty($worker)) {
// Найден сотрудник // Найден сотрудник
@@ -587,7 +587,7 @@ final class worker extends core
// Авторизован аккаунт администратора или оператора // Авторизован аккаунт администратора или оператора
// Инициализация данных сотрудника // Инициализация данных сотрудника
$worker = model::read('d.id == "' . $parameters['id'] . '"'); $worker = model::read('d.id == "' . urldecode($parameters['id']) . '"');
if (!empty($worker)) { if (!empty($worker)) {
// Найден сотрудник // Найден сотрудник

View File

@@ -2606,6 +2606,10 @@ if (typeof window.tasks !== "function") {
work.classList.add("row", "connected", "stretched"); work.classList.add("row", "connected", "stretched");
this.works(task).then((html) => (work.innerHTML = html)); this.works(task).then((html) => (work.innerHTML = html));
work.setAttribute("title", "Тип работы"); work.setAttribute("title", "Тип работы");
work.setAttribute(
'onchange',
`tasks.work(document.getElementById('${task}'), this)`
);
// Инициализация поля ввода описания // Инициализация поля ввода описания
const description = document.createElement("textarea"); const description = document.createElement("textarea");
@@ -2938,8 +2942,19 @@ if (typeof window.tasks !== "function") {
// Блокировка закрытия окна (чтобы не вызвался click() через событие onclick) // Блокировка закрытия окна (чтобы не вызвался click() через событие onclick)
this.freeze = true; this.freeze = true;
// Активация виртуальной кнопки "подтвердить" if (
confirm.click(); typeof core === "function" &&
core.interface === "operator" &&
core.interface === "administrator"
) {
// Оператор или администратор
// Активация виртуальной кнопки "подтвердить"
confirm.click();
} else {
// Магазин или сотрудник
}
// Возвращение статуса блокировки закрытия окна // Возвращение статуса блокировки закрытия окна
this.freeze = freeze; this.freeze = freeze;
@@ -3783,8 +3798,6 @@ if (typeof window.tasks !== "function") {
// Инициализация идентификатора строки // Инициализация идентификатора строки
const id = row.getAttribute("id"); const id = row.getAttribute("id");
alert(228);
if (typeof id === "string") { if (typeof id === "string") {
// Инициализирован идентификатор // Инициализирован идентификатор