feat: improve campsites and events management UX
- Add map-based location picker with centered pin for campsites (two-step process) - Hide edit buttons for campsites not owned by current user - Allow numbers in campsite names (fix validateName function) - Prepopulate edit form with existing campsite data - Preserve country/province selection when confirming location - Add real-time filter functionality to campsites table - Fix events publish button error handling (use output buffering cleanup) - Improve AJAX response handling with complete callback Changes: - src/pages/bookings/campsites.php: Location mode UI, filter, edit form improvements - src/config/functions.php: Allow numbers in validateName regex - src/admin/toggle_event_published.php: Clean output buffers before JSON response - src/admin/admin_events.php: Use complete callback instead of success/error handlers
This commit is contained in:
@@ -224,25 +224,29 @@ if ($result && $result->num_rows > 0) {
|
||||
event_id: eventId
|
||||
},
|
||||
dataType: 'json',
|
||||
success: function(response) {
|
||||
if (response.status === 'success') {
|
||||
if (response.published == 1) {
|
||||
button.removeClass('btn-success').addClass('btn-warning');
|
||||
button.find('i').removeClass('fa-eye').addClass('fa-eye-slash');
|
||||
button.attr('title', 'Unpublish');
|
||||
row.find('td:nth-child(5)').html('<span class="badge bg-success">Published</span>');
|
||||
complete: function(xhr, status) {
|
||||
// Handle all response codes
|
||||
try {
|
||||
var response = JSON.parse(xhr.responseText);
|
||||
|
||||
if (response.status === 'success') {
|
||||
if (response.published == 1) {
|
||||
button.removeClass('btn-success').addClass('btn-warning');
|
||||
button.find('i').removeClass('fa-eye').addClass('fa-eye-slash');
|
||||
button.attr('title', 'Unpublish');
|
||||
row.find('td:nth-child(5)').html('<span class="badge bg-success">Published</span>');
|
||||
} else {
|
||||
button.removeClass('btn-warning').addClass('btn-success');
|
||||
button.find('i').removeClass('fa-eye-slash').addClass('fa-eye');
|
||||
button.attr('title', 'Publish');
|
||||
row.find('td:nth-child(5)').html('<span class="badge bg-warning">Draft</span>');
|
||||
}
|
||||
} else {
|
||||
button.removeClass('btn-warning').addClass('btn-success');
|
||||
button.find('i').removeClass('fa-eye-slash').addClass('fa-eye');
|
||||
button.attr('title', 'Publish');
|
||||
row.find('td:nth-child(5)').html('<span class="badge bg-warning">Draft</span>');
|
||||
alert('Error: ' + response.message);
|
||||
}
|
||||
} else {
|
||||
alert('Error: ' + response.message);
|
||||
} catch (e) {
|
||||
alert('Error updating event status. Response: ' + xhr.responseText);
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
alert('Error updating event status');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user