From 0229f64f4ebc49427307a72bf78568b0e5a5e484 Mon Sep 17 00:00:00 2001 From: Hosteroid Date: Tue, 21 Oct 2025 16:13:58 +0300 Subject: [PATCH] Implementing Manual Expiration Dates --- app/Controllers/DomainController.php | 18 +++++++++++----- app/Helpers/DomainHelper.php | 29 +++++++++++++++++++++++++ app/Views/domains/edit.php | 32 ++++++++++++++++++++++++++++ app/Views/domains/index.php | 9 +++++++- app/Views/domains/view.php | 10 ++++++++- 5 files changed, 91 insertions(+), 7 deletions(-) diff --git a/app/Controllers/DomainController.php b/app/Controllers/DomainController.php index 29b61e7..13c2eb1 100644 --- a/app/Controllers/DomainController.php +++ b/app/Controllers/DomainController.php @@ -285,6 +285,7 @@ class DomainController extends Controller $groupId = !empty($_POST['notification_group_id']) ? (int)$_POST['notification_group_id'] : null; $isActive = isset($_POST['is_active']) ? 1 : 0; $tagsInput = trim($_POST['tags'] ?? ''); + $manualExpirationDate = !empty($_POST['manual_expiration_date']) ? $_POST['manual_expiration_date'] : null; // Validate tags $tagValidation = \App\Helpers\InputValidator::validateTags($tagsInput); @@ -317,7 +318,8 @@ class DomainController extends Controller $this->domainModel->update($id, [ 'notification_group_id' => $groupId, 'tags' => $tags, - 'is_active' => $isActive + 'is_active' => $isActive, + 'expiration_date' => $manualExpirationDate ]); // Send notification if monitoring status changed and has notification group @@ -403,12 +405,15 @@ class DomainController extends Controller return; } - $status = $this->whoisService->getDomainStatus($whoisData['expiration_date'], $whoisData['status'] ?? []); + // Use WHOIS expiration date if available, otherwise preserve manual expiration date + $expirationDate = $whoisData['expiration_date'] ?? $domain['expiration_date']; + + $status = $this->whoisService->getDomainStatus($expirationDate, $whoisData['status'] ?? []); $this->domainModel->update($id, [ 'registrar' => $whoisData['registrar'], 'registrar_url' => $whoisData['registrar_url'] ?? null, - 'expiration_date' => $whoisData['expiration_date'], + 'expiration_date' => $expirationDate, 'updated_date' => $whoisData['updated_date'] ?? null, 'abuse_email' => $whoisData['abuse_email'] ?? null, 'last_checked' => date('Y-m-d H:i:s'), @@ -707,12 +712,15 @@ class DomainController extends Controller continue; } - $status = $this->whoisService->getDomainStatus($whoisData['expiration_date'], $whoisData['status'] ?? []); + // Use WHOIS expiration date if available, otherwise preserve manual expiration date + $expirationDate = $whoisData['expiration_date'] ?? $domain['expiration_date']; + + $status = $this->whoisService->getDomainStatus($expirationDate, $whoisData['status'] ?? []); $this->domainModel->update($id, [ 'registrar' => $whoisData['registrar'], 'registrar_url' => $whoisData['registrar_url'] ?? null, - 'expiration_date' => $whoisData['expiration_date'], + 'expiration_date' => $expirationDate, 'updated_date' => $whoisData['updated_date'] ?? null, 'abuse_email' => $whoisData['abuse_email'] ?? null, 'last_checked' => date('Y-m-d H:i:s'), diff --git a/app/Helpers/DomainHelper.php b/app/Helpers/DomainHelper.php index ac39278..979d583 100644 --- a/app/Helpers/DomainHelper.php +++ b/app/Helpers/DomainHelper.php @@ -30,9 +30,38 @@ class DomainHelper // Determine expiry color for labels $domain['expiryColor'] = self::getExpiryColor($domain['daysLeft']); + // Check if expiration date is manual (not from WHOIS/RDAP) + $domain['isManualExpiration'] = self::isManualExpiration($domain); + return $domain; } + /** + * Check if expiration date is manually set (not from WHOIS/RDAP) + */ + private static function isManualExpiration(array $domain): bool + { + // If no expiration date, it's not manual + if (empty($domain['expiration_date'])) { + return false; + } + + // Parse WHOIS data to check if it contains expiration date + $whoisData = json_decode($domain['whois_data'] ?? '{}', true); + + // If WHOIS data doesn't have expiration date, it's likely manual + if (empty($whoisData['expiration_date'])) { + return true; + } + + // If WHOIS expiration date is different from stored expiration date, it's manual + if ($whoisData['expiration_date'] !== $domain['expiration_date']) { + return true; + } + + return false; + } + /** * Determine domain status from WHOIS data */ diff --git a/app/Views/domains/edit.php b/app/Views/domains/edit.php index 2be4488..9586ff1 100644 --- a/app/Views/domains/edit.php +++ b/app/Views/domains/edit.php @@ -119,6 +119,38 @@ ob_start();

+ +
+ +
+ + +
+

+ + Set a manual expiration date if WHOIS/RDAP doesn't provide one (e.g., for .nl domains). + This will be used for expiration notifications and status calculations. +

+ +

+ + Current expiration date: +

+ +

+ + No expiration date available from WHOIS/RDAP. Consider setting a manual date. +

+ +
+