repository = $repository; $this->queueService = $queueService; } /** * Handle manual retry trigger for a single queue entry. * * @return void */ public function handleRetryItem(): void { if (!isset($_GET['oneclickformsync_retry_item'])) { return; } $id = (int)$_GET['oneclickformsync_retry_item']; check_admin_referer('oneclickformsync_retry_item_action_' . $id); if (!current_user_can('manage_options')) { wp_die(esc_html__('You do not have permission to perform this action.', '1-click-form-sync'), 403); } $item = $this->repository->find($id); if (!$item) { wp_safe_redirect( add_query_arg( ['oneclickformsync_error' => 'item_not_found'], menu_page_url('1-click-form-sync-queue', false) ) ); exit; } // Try reprocessing the queue entry. $success = $this->queueService->processItem($item); if ($success) { wp_safe_redirect( add_query_arg( ['oneclickformsync_retried' => '1'], menu_page_url('1-click-form-sync-queue', false) ) ); } else { $msg = $item->getErrorMessage() ?: __('Connection error.', '1-click-form-sync'); wp_safe_redirect( add_query_arg( [ 'oneclickformsync_error' => 'retry_failed', 'oneclickformsync_msg' => urlencode(substr($msg, 0, 200)), ], menu_page_url('1-click-form-sync-queue', false) ) ); } exit; } /** * Handle manual deletion of a queue entry. * * @return void */ public function handleDeleteItem(): void { if (!isset($_GET['oneclickformsync_delete_item'])) { return; } $id = (int)$_GET['oneclickformsync_delete_item']; check_admin_referer('oneclickformsync_delete_item_action_' . $id); if (!current_user_can('manage_options')) { wp_die(esc_html__('You do not have permission to perform this action.', '1-click-form-sync'), 403); } $this->repository->delete($id); wp_safe_redirect( add_query_arg( ['oneclickformsync_deleted' => '1'], menu_page_url('1-click-form-sync-queue', false) ) ); exit; } }