function saveTicket() { const editables = document.querySelectorAll('.editable'); const data = {}; // Extract ticket ID from URL (works with both old and new URL formats) let ticketId; if (window.location.href.includes('?id=')) { ticketId = window.location.href.split('id=')[1]; } else { const matches = window.location.pathname.match(/\/ticket\/(\d+)/); ticketId = matches ? matches[1] : null; } if (!ticketId) { console.error('Could not determine ticket ID'); return; } editables.forEach(field => { if (field.dataset.field) { data[field.dataset.field] = field.value; } }); // Use the correct API path const apiUrl = '/api/update_ticket.php'; console.log('Sending request to:', apiUrl); console.log('Sending data:', JSON.stringify({ ticket_id: ticketId, ...data })); fetch(apiUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ticket_id: ticketId, ...data }) }) .then(response => { console.log('Response status:', response.status); if (!response.ok) { return response.text().then(text => { console.error('Server response:', text); throw new Error('Network response was not ok'); }); } return response.json(); }) .then(data => { console.log('Response data:', data); if(data.success) { const statusDisplay = document.getElementById('statusDisplay'); if (statusDisplay) { statusDisplay.className = `status-${data.status}`; statusDisplay.textContent = data.status; } console.log('Ticket updated successfully'); } else { console.error('Error in API response:', data.error || 'Unknown error'); } }) .catch(error => { console.error('Error updating ticket:', error); }); } function toggleEditMode() { const editButton = document.getElementById('editButton'); const editables = document.querySelectorAll('.title-input, textarea[data-field="description"]'); const isEditing = editButton.classList.contains('active'); if (!isEditing) { editButton.textContent = 'Save Changes'; editButton.classList.add('active'); editables.forEach(field => { field.disabled = false; if (field.classList.contains('title-input')) { field.focus(); } }); } else { saveTicket(); editButton.textContent = 'Edit Ticket'; editButton.classList.remove('active'); editables.forEach(field => { field.disabled = true; }); } } function addComment() { const commentText = document.getElementById('newComment').value; if (!commentText.trim()) { console.error('Comment text cannot be empty'); return; } // Extract ticket ID from URL (works with both old and new URL formats) let ticketId; if (window.location.href.includes('?id=')) { ticketId = window.location.href.split('id=')[1]; } else { const matches = window.location.pathname.match(/\/ticket\/(\d+)/); ticketId = matches ? matches[1] : null; } if (!ticketId) { console.error('Could not determine ticket ID'); return; } const isMarkdownEnabled = document.getElementById('markdownMaster').checked; fetch('/api/add_comment.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ticket_id: ticketId, comment_text: commentText, markdown_enabled: isMarkdownEnabled }) }) .then(response => { if (!response.ok) { return response.text().then(text => { console.error('Server response:', text); throw new Error('Network response was not ok'); }); } return response.json(); }) .then(data => { if(data.success) { // Clear the comment box document.getElementById('newComment').value = ''; // Add new comment to the list const commentsList = document.querySelector('.comments-list'); const newComment = `