feat: update ticket management and calendar functionality with improved data handling and local storage support
This commit is contained in:
46
.vscode/ftp-kr.sync.cache.json
vendored
46
.vscode/ftp-kr.sync.cache.json
vendored
@@ -4,8 +4,8 @@
|
||||
"tickets": {
|
||||
"AGENTS.md": {
|
||||
"type": "-",
|
||||
"size": 824,
|
||||
"lmtime": 1772746796821,
|
||||
"size": 819,
|
||||
"lmtime": 1772746840701,
|
||||
"modified": false
|
||||
},
|
||||
"ajax.php": {
|
||||
@@ -60,8 +60,8 @@
|
||||
"controls": {
|
||||
"class.Apanel.php": {
|
||||
"type": "-",
|
||||
"size": 7347,
|
||||
"lmtime": 1771856674000,
|
||||
"size": 9256,
|
||||
"lmtime": 1772747455304,
|
||||
"modified": false
|
||||
},
|
||||
"class.Cron.php": {
|
||||
@@ -84,8 +84,8 @@
|
||||
},
|
||||
"class.Tickets.php": {
|
||||
"type": "-",
|
||||
"size": 21842,
|
||||
"lmtime": 1771856674000,
|
||||
"size": 23598,
|
||||
"lmtime": 1772747653836,
|
||||
"modified": false
|
||||
},
|
||||
"class.Users.php": {
|
||||
@@ -122,8 +122,8 @@
|
||||
},
|
||||
"class.Tickets.php": {
|
||||
"type": "-",
|
||||
"size": 2630,
|
||||
"lmtime": 0,
|
||||
"size": 7784,
|
||||
"lmtime": 1772747439621,
|
||||
"modified": false
|
||||
},
|
||||
"class.Users.php": {
|
||||
@@ -248,8 +248,8 @@
|
||||
},
|
||||
"style.scss": {
|
||||
"type": "-",
|
||||
"size": 26805,
|
||||
"lmtime": 1771856674000,
|
||||
"size": 41713,
|
||||
"lmtime": 1772748650339,
|
||||
"modified": false
|
||||
}
|
||||
},
|
||||
@@ -263,8 +263,8 @@
|
||||
},
|
||||
"style.css": {
|
||||
"type": "-",
|
||||
"size": 20712,
|
||||
"lmtime": 1771856674000,
|
||||
"size": 33864,
|
||||
"lmtime": 1772748664976,
|
||||
"modified": false
|
||||
},
|
||||
"style.css.map": {
|
||||
@@ -864,8 +864,8 @@
|
||||
},
|
||||
"basket-view.php": {
|
||||
"type": "-",
|
||||
"size": 11856,
|
||||
"lmtime": 1771856674000,
|
||||
"size": 12298,
|
||||
"lmtime": 1772747633070,
|
||||
"modified": false
|
||||
},
|
||||
"disabled-sell.php": {
|
||||
@@ -876,8 +876,8 @@
|
||||
},
|
||||
"main-view.php": {
|
||||
"type": "-",
|
||||
"size": 13730,
|
||||
"lmtime": 1771856674000,
|
||||
"size": 14587,
|
||||
"lmtime": 1772747912267,
|
||||
"modified": false
|
||||
},
|
||||
"order-confirm.php": {
|
||||
@@ -961,6 +961,12 @@
|
||||
"size": 4615,
|
||||
"lmtime": 1771856674000,
|
||||
"modified": false
|
||||
},
|
||||
"calendar.php": {
|
||||
"type": "-",
|
||||
"size": 5189,
|
||||
"lmtime": 1772747510115,
|
||||
"modified": false
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
@@ -988,8 +994,8 @@
|
||||
},
|
||||
"layout-logged.php": {
|
||||
"type": "-",
|
||||
"size": 6106,
|
||||
"lmtime": 1771856674000,
|
||||
"size": 6230,
|
||||
"lmtime": 1772747514918,
|
||||
"modified": false
|
||||
},
|
||||
"layout-unlogged.php": {
|
||||
@@ -1070,8 +1076,8 @@
|
||||
},
|
||||
"upgrade.php": {
|
||||
"type": "-",
|
||||
"size": 1444,
|
||||
"lmtime": 1771856674000,
|
||||
"size": 1777,
|
||||
"lmtime": 1772747640419,
|
||||
"modified": false
|
||||
},
|
||||
"upload": {}
|
||||
|
||||
@@ -214,15 +214,20 @@ class Apanel
|
||||
|
||||
static public function tickets_save()
|
||||
{
|
||||
global $mdb;
|
||||
global $mdb, $settings;
|
||||
|
||||
if (empty($_POST['tickets']) || !is_array($_POST['tickets'])) {
|
||||
echo json_encode(['status' => 'error', 'message' => 'Brak danych']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$allowedTicketIds = array_keys($settings['tickets']);
|
||||
|
||||
foreach ($_POST['tickets'] as $ticketId => $data) {
|
||||
$ticketId = preg_replace('/[^a-z0-9\-]/', '', $ticketId);
|
||||
$ticketId = trim((string) $ticketId);
|
||||
if (!in_array($ticketId, $allowedTicketIds, true)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$price = trim($data['price'] ?? '') !== '' ? (float) $data['price'] : null;
|
||||
$priceWkd = trim($data['price_weekend'] ?? '') !== '' ? (float) $data['price_weekend'] : null;
|
||||
|
||||
@@ -32,6 +32,13 @@ class Tickets {
|
||||
'gift-bilet-all-open-normalny',
|
||||
],
|
||||
],
|
||||
'bilety-rodzinne' => [
|
||||
'label' => 'Bilety rodzinne',
|
||||
'ticket_ids' => [
|
||||
'bilet-rodzina-2+1',
|
||||
'bilet-rodzina-2+2',
|
||||
],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -35,6 +35,10 @@
|
||||
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
const storageKeys = {
|
||||
selectedGroup: 'admin_calendar_selected_group',
|
||||
visibleMonth: 'admin_calendar_visible_month'
|
||||
};
|
||||
let enabledDatesSet = new Set();
|
||||
|
||||
const calendarInstance = flatpickr("#admin-flatpickr", {
|
||||
@@ -43,6 +47,12 @@
|
||||
dateFormat: "Y-m-d",
|
||||
disableMobile: true,
|
||||
locale: "pl",
|
||||
onMonthChange: function() {
|
||||
persistVisibleMonth();
|
||||
},
|
||||
onYearChange: function() {
|
||||
persistVisibleMonth();
|
||||
},
|
||||
onChange: function(selectedDates, dateStr, instance) {
|
||||
syncSetWithPicker(instance);
|
||||
}
|
||||
@@ -62,7 +72,47 @@
|
||||
}
|
||||
|
||||
function renderCurrentSetToPicker() {
|
||||
const currentViewDate = new Date(calendarInstance.currentYear, calendarInstance.currentMonth, 1);
|
||||
calendarInstance.setDate(Array.from(enabledDatesSet), false, "Y-m-d");
|
||||
calendarInstance.jumpToDate(currentViewDate, false);
|
||||
}
|
||||
|
||||
function persistSelectedGroup() {
|
||||
try {
|
||||
localStorage.setItem(storageKeys.selectedGroup, getCurrentGroup());
|
||||
} catch (error) {}
|
||||
}
|
||||
|
||||
function restoreSelectedGroup() {
|
||||
try {
|
||||
const savedGroup = localStorage.getItem(storageKeys.selectedGroup);
|
||||
if (!savedGroup) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($('#ticket_group option[value="' + savedGroup + '"]').length > 0) {
|
||||
$('#ticket_group').val(savedGroup);
|
||||
}
|
||||
} catch (error) {}
|
||||
}
|
||||
|
||||
function persistVisibleMonth() {
|
||||
try {
|
||||
const month = String(calendarInstance.currentMonth + 1).padStart(2, "0");
|
||||
const year = String(calendarInstance.currentYear);
|
||||
localStorage.setItem(storageKeys.visibleMonth, year + "-" + month);
|
||||
} catch (error) {}
|
||||
}
|
||||
|
||||
function restoreVisibleMonth() {
|
||||
try {
|
||||
const savedMonth = localStorage.getItem(storageKeys.visibleMonth);
|
||||
if (!savedMonth || !/^\d{4}-\d{2}$/.test(savedMonth)) {
|
||||
return;
|
||||
}
|
||||
|
||||
calendarInstance.jumpToDate(savedMonth + "-01", false);
|
||||
} catch (error) {}
|
||||
}
|
||||
|
||||
function getCurrentGroup() {
|
||||
@@ -77,16 +127,33 @@
|
||||
}
|
||||
}
|
||||
|
||||
function parseServerResponse(rawResponse) {
|
||||
if (rawResponse && typeof rawResponse === 'object') {
|
||||
return rawResponse;
|
||||
}
|
||||
|
||||
try {
|
||||
return JSON.parse(rawResponse);
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function fetchDatesForGroup() {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
cache: false,
|
||||
url: '/apanel/calendar_dates/',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
ticket_group: getCurrentGroup()
|
||||
},
|
||||
success: function(rawResponse) {
|
||||
const response = $.parseJSON(rawResponse);
|
||||
const response = parseServerResponse(rawResponse);
|
||||
if (!response) {
|
||||
handleError('Nie udalo sie odczytac odpowiedzi serwera.');
|
||||
return;
|
||||
}
|
||||
if (response.status !== 'ok') {
|
||||
handleError(response.message || 'Nie udało się pobrać danych kalendarza.');
|
||||
return;
|
||||
@@ -124,13 +191,18 @@
|
||||
type: 'POST',
|
||||
cache: false,
|
||||
url: '/apanel/calendar_save/',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
ticket_group: getCurrentGroup(),
|
||||
dates: Array.from(enabledDatesSet),
|
||||
csrf_token: $('#calendar_csrf_token').val()
|
||||
},
|
||||
success: function(rawResponse) {
|
||||
const response = $.parseJSON(rawResponse);
|
||||
const response = parseServerResponse(rawResponse);
|
||||
if (!response) {
|
||||
handleError('Nie udalo sie odczytac odpowiedzi serwera.');
|
||||
return;
|
||||
}
|
||||
if (response.status !== 'ok') {
|
||||
handleError(response.message || 'Nie udało się zapisać kalendarza.');
|
||||
return;
|
||||
@@ -147,6 +219,7 @@
|
||||
}
|
||||
|
||||
$('body').on('change', '#ticket_group', function() {
|
||||
persistSelectedGroup();
|
||||
fetchDatesForGroup();
|
||||
});
|
||||
|
||||
@@ -162,6 +235,8 @@
|
||||
saveCalendar();
|
||||
});
|
||||
|
||||
restoreSelectedGroup();
|
||||
restoreVisibleMonth();
|
||||
fetchDatesForGroup();
|
||||
});
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user