some progress
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('title', 'Add Domain')
|
||||
|
||||
@section('content')
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h4 class="mb-0"><i class="bi bi-plus-circle"></i> Add Domain for Monitoring</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form action="{{ route('domains.store') }}" method="POST">
|
||||
@csrf
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="site_id" class="form-label">Associated Site <span class="text-danger">*</span></label>
|
||||
<select class="form-select @error('site_id') is-invalid @enderror"
|
||||
id="site_id" name="site_id" required>
|
||||
<option value="">Select a site...</option>
|
||||
@foreach($sites as $site)
|
||||
<option value="{{ $site->id }}" {{ old('site_id') == $site->id ? 'selected' : '' }}>
|
||||
{{ $site->name }} ({{ $site->url }})
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('site_id')
|
||||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
@enderror
|
||||
<div class="form-text">Select the site this domain belongs to</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="domain" class="form-label">Domain Name <span class="text-danger">*</span></label>
|
||||
<input type="text" class="form-control @error('domain') is-invalid @enderror"
|
||||
id="domain" name="domain" value="{{ old('domain') }}" required
|
||||
placeholder="example.com">
|
||||
@error('domain')
|
||||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
@enderror
|
||||
<div class="form-text">Enter the domain name without protocol (e.g., example.com)</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<div class="form-check">
|
||||
<input type="checkbox" class="form-check-input" id="is_active"
|
||||
name="is_active" {{ old('is_active', true) ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="is_active">
|
||||
Active Monitoring
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-text">Monitor this domain's expiration date</div>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-info">
|
||||
<i class="bi bi-info-circle"></i> <strong>Note:</strong> After adding, we'll automatically check the domain's expiration date using WHOIS lookup.
|
||||
</div>
|
||||
|
||||
<div class="d-flex gap-2">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="bi bi-check-circle"></i> Add Domain
|
||||
</button>
|
||||
<a href="{{ route('domains.index') }}" class="btn btn-secondary">
|
||||
<i class="bi bi-x-circle"></i> Cancel
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -0,0 +1,69 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('title', 'Edit Domain')
|
||||
|
||||
@section('content')
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h4 class="mb-0"><i class="bi bi-pencil"></i> Edit Domain</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form action="{{ route('domains.update', $domain) }}" method="POST">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="site_id" class="form-label">Associated Site <span class="text-danger">*</span></label>
|
||||
<select class="form-select @error('site_id') is-invalid @enderror"
|
||||
id="site_id" name="site_id" required>
|
||||
<option value="">Select a site...</option>
|
||||
@foreach($sites as $site)
|
||||
<option value="{{ $site->id }}" {{ old('site_id', $domain->site_id) == $site->id ? 'selected' : '' }}>
|
||||
{{ $site->name }} ({{ $site->url }})
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('site_id')
|
||||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
@enderror
|
||||
<div class="form-text">Select the site this domain belongs to</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="domain" class="form-label">Domain Name <span class="text-danger">*</span></label>
|
||||
<input type="text" class="form-control @error('domain') is-invalid @enderror"
|
||||
id="domain" name="domain" value="{{ old('domain', $domain->domain) }}" required
|
||||
placeholder="example.com">
|
||||
@error('domain')
|
||||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
@enderror
|
||||
<div class="form-text">Enter the domain name without protocol (e.g., example.com)</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<div class="form-check">
|
||||
<input type="checkbox" class="form-check-input" id="is_active"
|
||||
name="is_active" {{ old('is_active', $domain->is_active) ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="is_active">
|
||||
Active Monitoring
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-text">Monitor this domain's expiration date</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex gap-2">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="bi bi-check-circle"></i> Update Domain
|
||||
</button>
|
||||
<a href="{{ route('domains.index') }}" class="btn btn-secondary">
|
||||
<i class="bi bi-x-circle"></i> Cancel
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -0,0 +1,129 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('title', 'Domain Monitoring')
|
||||
|
||||
@section('content')
|
||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||
<h1><i class="bi bi-globe"></i> Domain Monitoring</h1>
|
||||
<a href="{{ route('domains.create') }}" class="btn btn-primary">
|
||||
<i class="bi bi-plus-circle"></i> Add Domain
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@if(session('success'))
|
||||
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
||||
<i class="bi bi-check-circle"></i> {{ session('success') }}
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if($domains->isEmpty())
|
||||
<div class="alert alert-info">
|
||||
<i class="bi bi-info-circle"></i> No domains are being monitored yet. Click "Add Domain" to get started!
|
||||
</div>
|
||||
@else
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover mb-0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Domain</th>
|
||||
<th>Site</th>
|
||||
<th>Status</th>
|
||||
<th>Expires At</th>
|
||||
<th>Days Left</th>
|
||||
<th>Last Checked</th>
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($domains as $domain)
|
||||
<tr>
|
||||
<td>
|
||||
<strong>{{ $domain->domain }}</strong>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ route('dashboard.show', $domain->site) }}">
|
||||
{{ $domain->site->name }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
@if($domain->isExpired())
|
||||
<span class="badge bg-danger">Expired</span>
|
||||
@elseif($domain->isExpiringSoon())
|
||||
<span class="badge bg-warning text-dark">Expiring Soon</span>
|
||||
@elseif($domain->expires_at)
|
||||
<span class="badge bg-success">Active</span>
|
||||
@else
|
||||
<span class="badge bg-secondary">Unknown</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@if($domain->expires_at)
|
||||
{{ $domain->expires_at->format('Y-m-d') }}
|
||||
@else
|
||||
<span class="text-muted">Not checked</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@php
|
||||
$days = $domain->daysUntilExpiration();
|
||||
@endphp
|
||||
@if($days !== null)
|
||||
@if($days < 0)
|
||||
<span class="text-danger fw-bold">Expired {{ abs($days) }} days ago</span>
|
||||
@elseif($days < 30)
|
||||
<span class="text-warning fw-bold">{{ $days }} days</span>
|
||||
@else
|
||||
<span class="text-success">{{ $days }} days</span>
|
||||
@endif
|
||||
@else
|
||||
<span class="text-muted">-</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@if($domain->last_checked_at)
|
||||
<small>{{ $domain->last_checked_at->diffForHumans() }}</small>
|
||||
@else
|
||||
<span class="text-muted">Never</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
<div class="btn-group btn-group-sm" role="group">
|
||||
<a href="{{ route('domains.show', $domain) }}" class="btn btn-outline-primary" title="View">
|
||||
<i class="bi bi-eye"></i>
|
||||
</a>
|
||||
<a href="{{ route('domains.edit', $domain) }}" class="btn btn-outline-secondary" title="Edit">
|
||||
<i class="bi bi-pencil"></i>
|
||||
</a>
|
||||
<form action="{{ route('domains.check', $domain) }}" method="POST" class="d-inline">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-outline-info" title="Check Now">
|
||||
<i class="bi bi-arrow-clockwise"></i>
|
||||
</button>
|
||||
</form>
|
||||
<form action="{{ route('domains.destroy', $domain) }}" method="POST" class="d-inline"
|
||||
onsubmit="return confirm('Are you sure you want to delete this domain?');">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="submit" class="btn btn-outline-danger" title="Delete">
|
||||
<i class="bi bi-trash"></i>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
@if($domains->hasPages())
|
||||
<div class="card-footer">
|
||||
{{ $domains->links() }}
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
@endsection
|
||||
@@ -0,0 +1,178 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('title', 'Domain Details')
|
||||
|
||||
@section('content')
|
||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||
<h1><i class="bi bi-globe"></i> Domain Details</h1>
|
||||
<div>
|
||||
<a href="{{ route('domains.edit', $domain) }}" class="btn btn-secondary">
|
||||
<i class="bi bi-pencil"></i> Edit
|
||||
</a>
|
||||
<a href="{{ route('domains.index') }}" class="btn btn-outline-secondary">
|
||||
<i class="bi bi-arrow-left"></i> Back to List
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if(session('success'))
|
||||
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
||||
<i class="bi bi-check-circle"></i> {{ session('success') }}
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-8">
|
||||
<div class="card mb-4">
|
||||
<div class="card-header">
|
||||
<h5 class="mb-0">Domain Information</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-4 fw-bold">Domain Name:</div>
|
||||
<div class="col-md-8">{{ $domain->domain }}</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-4 fw-bold">Associated Site:</div>
|
||||
<div class="col-md-8">
|
||||
<a href="{{ route('dashboard.show', $domain->site) }}">
|
||||
{{ $domain->site->name }}
|
||||
</a>
|
||||
<br>
|
||||
<small class="text-muted">{{ $domain->site->url }}</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-4 fw-bold">Status:</div>
|
||||
<div class="col-md-8">
|
||||
@if($domain->isExpired())
|
||||
<span class="badge bg-danger fs-6">Expired</span>
|
||||
@elseif($domain->isExpiringSoon())
|
||||
<span class="badge bg-warning text-dark fs-6">Expiring Soon</span>
|
||||
@elseif($domain->expires_at)
|
||||
<span class="badge bg-success fs-6">Active</span>
|
||||
@else
|
||||
<span class="badge bg-secondary fs-6">Unknown</span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-4 fw-bold">Monitoring:</div>
|
||||
<div class="col-md-8">
|
||||
@if($domain->is_active)
|
||||
<span class="badge bg-success">Active</span>
|
||||
@else
|
||||
<span class="badge bg-secondary">Inactive</span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="mb-0">Expiration Details</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-4 fw-bold">Expires At:</div>
|
||||
<div class="col-md-8">
|
||||
@if($domain->expires_at)
|
||||
{{ $domain->expires_at->format('F j, Y') }}
|
||||
<br>
|
||||
<small class="text-muted">{{ $domain->expires_at->format('g:i A T') }}</small>
|
||||
@else
|
||||
<span class="text-muted">Not yet checked</span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-4 fw-bold">Days Until Expiration:</div>
|
||||
<div class="col-md-8">
|
||||
@php
|
||||
$days = $domain->daysUntilExpiration();
|
||||
@endphp
|
||||
@if($days !== null)
|
||||
@if($days < 0)
|
||||
<span class="text-danger fs-4 fw-bold">Expired {{ abs($days) }} days ago</span>
|
||||
@elseif($days < 30)
|
||||
<span class="text-warning fs-4 fw-bold">{{ $days }} days</span>
|
||||
@else
|
||||
<span class="text-success fs-4 fw-bold">{{ $days }} days</span>
|
||||
@endif
|
||||
@else
|
||||
<span class="text-muted">Unknown</span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-4 fw-bold">Last Checked:</div>
|
||||
<div class="col-md-8">
|
||||
@if($domain->last_checked_at)
|
||||
{{ $domain->last_checked_at->format('F j, Y g:i A') }}
|
||||
<br>
|
||||
<small class="text-muted">{{ $domain->last_checked_at->diffForHumans() }}</small>
|
||||
@else
|
||||
<span class="text-muted">Never</span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4">
|
||||
<div class="card mb-4">
|
||||
<div class="card-header">
|
||||
<h5 class="mb-0">Actions</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form action="{{ route('domains.check', $domain) }}" method="POST" class="mb-3">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-primary w-100">
|
||||
<i class="bi bi-arrow-clockwise"></i> Check Expiry Now
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<a href="{{ route('domains.edit', $domain) }}" class="btn btn-secondary w-100 mb-3">
|
||||
<i class="bi bi-pencil"></i> Edit Domain
|
||||
</a>
|
||||
|
||||
<form action="{{ route('domains.destroy', $domain) }}" method="POST"
|
||||
onsubmit="return confirm('Are you sure you want to delete this domain?');">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="submit" class="btn btn-danger w-100">
|
||||
<i class="bi bi-trash"></i> Delete Domain
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if($domain->isExpiringSoon() || $domain->isExpired())
|
||||
<div class="card border-{{ $domain->isExpired() ? 'danger' : 'warning' }}">
|
||||
<div class="card-header bg-{{ $domain->isExpired() ? 'danger' : 'warning' }} text-{{ $domain->isExpired() ? 'white' : 'dark' }}">
|
||||
<h5 class="mb-0"><i class="bi bi-exclamation-triangle"></i> Alert</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
@if($domain->isExpired())
|
||||
<p class="mb-0">
|
||||
<strong>This domain has expired!</strong> Please renew it immediately to avoid losing ownership.
|
||||
</p>
|
||||
@else
|
||||
<p class="mb-0">
|
||||
<strong>This domain is expiring soon!</strong> Consider renewing it to prevent any interruptions.
|
||||
</p>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
Reference in New Issue
Block a user