diff --git a/admin/class-twp-admin.php b/admin/class-twp-admin.php index 4cdc18c..86422b3 100644 --- a/admin/class-twp-admin.php +++ b/admin/class-twp-admin.php @@ -6817,42 +6817,54 @@ class TWP_Admin { call_sid: callSid, nonce: '' }, function(response) { + console.log('Recording start response:', response); if (response.success) { adminIsRecording = true; adminRecordingSid = response.data.recording_sid; + console.log('Recording started - SID:', adminRecordingSid, 'Call SID:', response.data.call_sid); $recordBtn.html(' Stop Recording').addClass('btn-active'); showNotice('Recording started', 'success'); } else { + console.error('Recording start failed:', response); showNotice('Failed to start recording: ' + (response.data || 'Unknown error'), 'error'); } }).fail(function(xhr, status, error) { - console.error('Recording start failed:', xhr.responseText); + console.error('Recording start AJAX failed:', xhr.responseText); showNotice('Failed to start recording: ' + error, 'error'); }); } function adminStopRecording() { - if (!adminRecordingSid) return; + if (!adminRecordingSid) { + console.error('No recording SID to stop'); + showNotice('No recording to stop', 'error'); + return; + } var callSid = currentCall ? (currentCall.parameters.CallSid || currentCall.customParameters.CallSid) : ''; var $recordBtn = $('#admin-record-btn'); + console.log('Stopping recording - SID:', adminRecordingSid, 'Call SID:', callSid); + $.post(ajaxurl, { action: 'twp_stop_recording', call_sid: callSid, recording_sid: adminRecordingSid, nonce: '' }, function(response) { + console.log('Recording stop response:', response); if (response.success) { adminIsRecording = false; adminRecordingSid = null; $recordBtn.html(' Record').removeClass('btn-active'); showNotice('Recording stopped', 'info'); } else { + console.error('Recording stop failed:', response); showNotice('Failed to stop recording: ' + (response.data || 'Unknown error'), 'error'); } - }).fail(function() { - showNotice('Failed to stop recording', 'error'); + }).fail(function(xhr, status, error) { + console.error('Recording stop AJAX failed:', xhr.responseText); + showNotice('Failed to stop recording: ' + error, 'error'); }); } @@ -7139,6 +7151,9 @@ class TWP_Admin { error_log("TWP: Starting recording for call SID: $call_sid"); + // Ensure database table exists + TWP_Activator::ensure_tables_exist(); + try { $twilio = new TWP_Twilio_API(); $client = $twilio->get_client(); @@ -7183,11 +7198,16 @@ class TWP_Admin { if ($insert_result === false) { error_log("TWP: Database insert failed: " . $wpdb->last_error); + wp_send_json_error("Failed to save recording to database: " . $wpdb->last_error); + return; + } else { + error_log("TWP: Recording saved to database - Recording SID: {$recording->sid}, Call SID: $call_sid"); } wp_send_json_success([ 'message' => 'Recording started', - 'recording_sid' => $recording->sid + 'recording_sid' => $recording->sid, + 'call_sid' => $call_sid // Include call_sid for debugging ]); } catch (Exception $e) { error_log("TWP: Recording start error: " . $e->getMessage()); @@ -7222,8 +7242,23 @@ class TWP_Admin { )); if (!$recording_info) { - wp_send_json_error('Recording not found in database'); - return; + error_log("TWP: Recording $recording_sid not found in database, attempting Twilio-only stop"); + + // Try to stop the recording in Twilio anyway (might exist there but not in DB) + try { + $twilio = new TWP_Twilio_API(); + $client = $twilio->get_client(); + + $recording = $client->recordings($recording_sid)->update(['status' => 'stopped']); + error_log("TWP: Successfully stopped recording $recording_sid in Twilio despite DB issue"); + + wp_send_json_success(['message' => 'Recording stopped (was not tracked in database)']); + return; + } catch (Exception $twilio_error) { + error_log("TWP: Recording $recording_sid not found in database or Twilio: " . $twilio_error->getMessage()); + wp_send_json_error('Recording not found in database or Twilio system'); + return; + } } if ($recording_info->status === 'completed') {