some progress
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('title', 'Add Sitemap')
|
||||
|
||||
@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 Sitemap for Monitoring</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form action="{{ route('sitemaps.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 sitemap belongs to</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="url" class="form-label">Sitemap URL <span class="text-danger">*</span></label>
|
||||
<input type="url" class="form-control @error('url') is-invalid @enderror"
|
||||
id="url" name="url" value="{{ old('url') }}" required
|
||||
placeholder="https://example.com/sitemap.xml">
|
||||
@error('url')
|
||||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
@enderror
|
||||
<div class="form-text">The full URL to your sitemap file (e.g., https://example.com/sitemap.xml)</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">Automatically validate this sitemap</div>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-info">
|
||||
<i class="bi bi-info-circle"></i> <strong>Note:</strong> After adding, we'll automatically validate your sitemap to ensure it's accessible and well-formed XML.
|
||||
</div>
|
||||
|
||||
<div class="d-flex gap-2">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="bi bi-check-circle"></i> Add Sitemap
|
||||
</button>
|
||||
<a href="{{ route('sitemaps.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 Sitemap')
|
||||
|
||||
@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 Sitemap</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form action="{{ route('sitemaps.update', $sitemap) }}" 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', $sitemap->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 sitemap belongs to</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="url" class="form-label">Sitemap URL <span class="text-danger">*</span></label>
|
||||
<input type="url" class="form-control @error('url') is-invalid @enderror"
|
||||
id="url" name="url" value="{{ old('url', $sitemap->url) }}" required
|
||||
placeholder="https://example.com/sitemap.xml">
|
||||
@error('url')
|
||||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
@enderror
|
||||
<div class="form-text">The full URL to your sitemap file</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', $sitemap->is_active) ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="is_active">
|
||||
Active Monitoring
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-text">Automatically validate this sitemap</div>
|
||||
</div>
|
||||
|
||||
<div class="d-flex gap-2">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="bi bi-check-circle"></i> Update Sitemap
|
||||
</button>
|
||||
<a href="{{ route('sitemaps.index') }}" class="btn btn-secondary">
|
||||
<i class="bi bi-x-circle"></i> Cancel
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -0,0 +1,124 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('title', 'Sitemap Monitoring')
|
||||
|
||||
@section('content')
|
||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||
<h1><i class="bi bi-diagram-3"></i> Sitemap Monitoring</h1>
|
||||
<a href="{{ route('sitemaps.create') }}" class="btn btn-primary">
|
||||
<i class="bi bi-plus-circle"></i> Add Sitemap
|
||||
</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($sitemaps->isEmpty())
|
||||
<div class="alert alert-info">
|
||||
<i class="bi bi-info-circle"></i> No sitemaps are being monitored yet. Click "Add Sitemap" 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>Site</th>
|
||||
<th>Sitemap URL</th>
|
||||
<th>Status</th>
|
||||
<th>URL Count</th>
|
||||
<th>Last Checked</th>
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($sitemaps as $sitemap)
|
||||
<tr class="{{ $sitemap->hasErrors() ? 'table-danger' : '' }}">
|
||||
<td>
|
||||
<a href="{{ route('dashboard.show', $sitemap->site) }}">
|
||||
{{ $sitemap->site->name }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ $sitemap->url }}" target="_blank" rel="noopener" class="text-break">
|
||||
{{ Str::limit($sitemap->url, 60) }}
|
||||
<i class="bi bi-box-arrow-up-right small"></i>
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<span class="badge {{ $sitemap->getStatusBadgeClass() }}">
|
||||
{{ $sitemap->getStatusText() }}
|
||||
</span>
|
||||
@if($sitemap->last_error)
|
||||
<i class="bi bi-exclamation-triangle text-danger"
|
||||
data-bs-toggle="tooltip"
|
||||
title="{{ $sitemap->last_error }}"></i>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@if($sitemap->url_count)
|
||||
<span class="badge bg-info">{{ number_format($sitemap->url_count) }} URLs</span>
|
||||
@else
|
||||
<span class="text-muted">-</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@if($sitemap->last_checked_at)
|
||||
<small>{{ $sitemap->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('sitemaps.show', $sitemap) }}" class="btn btn-outline-primary" title="View">
|
||||
<i class="bi bi-eye"></i>
|
||||
</a>
|
||||
<a href="{{ route('sitemaps.edit', $sitemap) }}" class="btn btn-outline-secondary" title="Edit">
|
||||
<i class="bi bi-pencil"></i>
|
||||
</a>
|
||||
<form action="{{ route('sitemaps.check', $sitemap) }}" method="POST" class="d-inline">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-outline-info" title="Validate Now">
|
||||
<i class="bi bi-arrow-clockwise"></i>
|
||||
</button>
|
||||
</form>
|
||||
<form action="{{ route('sitemaps.destroy', $sitemap) }}" method="POST" class="d-inline"
|
||||
onsubmit="return confirm('Are you sure you want to delete this sitemap?');">
|
||||
@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($sitemaps->hasPages())
|
||||
<div class="card-footer">
|
||||
{{ $sitemaps->links() }}
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
// Initialize Bootstrap tooltips
|
||||
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
|
||||
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
|
||||
return new bootstrap.Tooltip(tooltipTriggerEl)
|
||||
})
|
||||
</script>
|
||||
@endpush
|
||||
@endsection
|
||||
@@ -0,0 +1,169 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('title', 'Sitemap Details')
|
||||
|
||||
@section('content')
|
||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||
<h1><i class="bi bi-diagram-3"></i> Sitemap Details</h1>
|
||||
<div>
|
||||
<a href="{{ route('sitemaps.edit', $sitemap) }}" class="btn btn-secondary">
|
||||
<i class="bi bi-pencil"></i> Edit
|
||||
</a>
|
||||
<a href="{{ route('sitemaps.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">Sitemap Information</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<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', $sitemap->site) }}">
|
||||
{{ $sitemap->site->name }}
|
||||
</a>
|
||||
<br>
|
||||
<small class="text-muted">{{ $sitemap->site->url }}</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-4 fw-bold">Sitemap URL:</div>
|
||||
<div class="col-md-8">
|
||||
<a href="{{ $sitemap->url }}" target="_blank" rel="noopener" class="text-break">
|
||||
{{ $sitemap->url }}
|
||||
<i class="bi bi-box-arrow-up-right small"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-4 fw-bold">Status:</div>
|
||||
<div class="col-md-8">
|
||||
<span class="badge {{ $sitemap->getStatusBadgeClass() }} fs-6">
|
||||
{{ $sitemap->getStatusText() }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-4 fw-bold">Monitoring:</div>
|
||||
<div class="col-md-8">
|
||||
@if($sitemap->is_active)
|
||||
<span class="badge bg-success">Active</span>
|
||||
@else
|
||||
<span class="badge bg-secondary">Inactive</span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if($sitemap->url_count)
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-4 fw-bold">URLs in Sitemap:</div>
|
||||
<div class="col-md-8">
|
||||
<span class="fs-4 fw-bold text-primary">{{ number_format($sitemap->url_count) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="mb-0">Validation Details</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-4 fw-bold">Last Checked:</div>
|
||||
<div class="col-md-8">
|
||||
@if($sitemap->last_checked_at)
|
||||
{{ $sitemap->last_checked_at->format('F j, Y g:i A') }}
|
||||
<br>
|
||||
<small class="text-muted">{{ $sitemap->last_checked_at->diffForHumans() }}</small>
|
||||
@else
|
||||
<span class="text-muted">Never</span>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if($sitemap->last_error)
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-4 fw-bold">Last Error:</div>
|
||||
<div class="col-md-8">
|
||||
<div class="alert alert-danger mb-0">
|
||||
<i class="bi bi-exclamation-triangle"></i> {{ $sitemap->last_error }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</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('sitemaps.check', $sitemap) }}" method="POST" class="mb-3">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-primary w-100">
|
||||
<i class="bi bi-arrow-clockwise"></i> Validate Now
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<a href="{{ route('sitemaps.edit', $sitemap) }}" class="btn btn-secondary w-100 mb-3">
|
||||
<i class="bi bi-pencil"></i> Edit Sitemap
|
||||
</a>
|
||||
|
||||
<form action="{{ route('sitemaps.destroy', $sitemap) }}" method="POST"
|
||||
onsubmit="return confirm('Are you sure you want to delete this sitemap?');">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="submit" class="btn btn-danger w-100">
|
||||
<i class="bi bi-trash"></i> Delete Sitemap
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if($sitemap->hasErrors())
|
||||
<div class="card border-danger">
|
||||
<div class="card-header bg-danger text-white">
|
||||
<h5 class="mb-0"><i class="bi bi-exclamation-triangle"></i> Validation Issue</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="mb-0">
|
||||
<strong>Your sitemap has validation errors.</strong> Please check the error message above and fix the issues.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@elseif($sitemap->is_valid && $sitemap->last_checked_at)
|
||||
<div class="card border-success">
|
||||
<div class="card-header bg-success text-white">
|
||||
<h5 class="mb-0"><i class="bi bi-check-circle"></i> Validation Passed</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="mb-0">
|
||||
Your sitemap is valid and accessible. It contains {{ number_format($sitemap->url_count ?? 0) }} URL(s).
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
Reference in New Issue
Block a user