parent = $parent; } /** @return string */ public function handleIgnoreAction(): string { return $this->handleStatusUpdate('ignore', 'abj404_ignore404', ABJ404_STATUS_IGNORED, 'ignore', 'ignored'); } /** @return string */ public function handleLaterAction(): string { return $this->handleStatusUpdate('later', 'abj404_organizeLater', ABJ404_STATUS_LATER, 'organize later', 'organize later'); } /** * @param string $paramName The $_GET parameter name. * @param string $nonceAction The nonce action name. * @param int $activeStatus The status constant to use when action=1. * @param string $errorActionName Action name for error messages. * @param string $successActionName Action name for success messages. * @return string */ private function handleStatusUpdate($paramName, $nonceAction, $activeStatus, $errorActionName, $successActionName): string { if (!isset($_GET[$paramName])) { return ''; } if (!is_admin() || !$this->parent->verifyLinkNonce($nonceAction)) { return ''; } $operation = trim(ABJ_404_Solution_RequestInputNormalizer::normalizeScalar($_GET[$paramName] ?? '')); if ($operation !== '0' && $operation !== '1') { $this->parent->getLogger()->debugMessage("Unexpected {$errorActionName} operation: " . esc_html($operation)); return sprintf(__('Error: Bad %s operation specified.', '404-solution'), $errorActionName); } $id = ABJ_404_Solution_ExactInteger::readOr($_GET['id'] ?? null, 1, 0); if ($id === 0) { return ''; } $newstatus = $operation === '1' ? $activeStatus : ABJ404_STATUS_CAPTURED; try { $message = $this->parent->getRedirectsRepo()->updateRedirectTypeStatus($id, (string)$newstatus); } catch (ABJ_404_Solution_RedirectCycleException $e) { return __('Error:', '404-solution') . ' ' . esc_html($e->getMessage()); } if ($message == '') { if ($newstatus == ABJ404_STATUS_CAPTURED) { return sprintf(__('Removed 404 URL from %s list successfully!', '404-solution'), $successActionName); } return sprintf(__('404 URL marked as %s successfully!', '404-solution'), $successActionName); } // The repository's message is the cause (a refused graph lock, a refused UPDATE): // keep it next to the translated summary rather than replacing it. if ($newstatus == ABJ404_STATUS_CAPTURED) { return sprintf(__('Error: unable to remove URL from %s list', '404-solution'), $successActionName) . ': ' . esc_html($message); } return sprintf(__('Error: unable to mark URL as %s', '404-solution'), $successActionName) . ': ' . esc_html($message); } }