Files
michaelschiemer/src/Application/Admin/templates/presave/campaigns/index.view.php
Michael Schiemer 36ef2a1e2c
Some checks failed
🚀 Build & Deploy Image / Determine Build Necessity (push) Failing after 10m14s
🚀 Build & Deploy Image / Build Runtime Base Image (push) Has been skipped
🚀 Build & Deploy Image / Build Docker Image (push) Has been skipped
🚀 Build & Deploy Image / Run Tests & Quality Checks (push) Has been skipped
🚀 Build & Deploy Image / Auto-deploy to Staging (push) Has been skipped
🚀 Build & Deploy Image / Auto-deploy to Production (push) Has been skipped
Security Vulnerability Scan / Check for Dependency Changes (push) Failing after 11m25s
Security Vulnerability Scan / Composer Security Audit (push) Has been cancelled
fix: Gitea Traefik routing and connection pool optimization
- Remove middleware reference from Gitea Traefik labels (caused routing issues)
- Optimize Gitea connection pool settings (MAX_IDLE_CONNS=30, authentication_timeout=180s)
- Add explicit service reference in Traefik labels
- Fix intermittent 504 timeouts by improving PostgreSQL connection handling

Fixes Gitea unreachability via git.michaelschiemer.de
2025-11-09 14:46:15 +01:00

104 lines
4.4 KiB
PHP

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pre-Save Campaigns - Admin</title>
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<layout name="admin">
<div class="container">
<div class="page-header">
<h1>Pre-Save Campaigns</h1>
<a href="/admin/presave/campaigns/create" class="btn btn-primary">New Campaign</a>
</div>
<div class="stats-grid" if="{{$stats}}">
<div class="stat-card">
<h3>Total Campaigns</h3>
<p class="stat-value">{{$stats['total']}}</p>
</div>
<div class="stat-card">
<h3>Active</h3>
<p class="stat-value">{{$stats['active']}}</p>
</div>
<div class="stat-card">
<h3>Total Registrations</h3>
<p class="stat-value">{{$stats['total_registrations']}}</p>
</div>
<div class="stat-card">
<h3>Completed</h3>
<p class="stat-value">{{$stats['completed']}}</p>
</div>
</div>
<div class="campaigns-list" if="{{$campaigns}}">
<div class="campaign-card" foreach="$campaigns as $campaign">
<div class="campaign-header">
<img src="{{$campaign->coverImageUrl}}" alt="{{$campaign->title}}" class="campaign-cover">
<div class="campaign-info">
<h3>{{$campaign->title}}</h3>
<p class="artist">{{$campaign->artistName}}</p>
<p class="release-date">Release: {{$campaign->releaseDate}}</p>
</div>
<div class="campaign-status">
<span class="badge badge-{{$campaign->status->value}}">{{$campaign->status->value}}</span>
</div>
</div>
<div class="campaign-actions">
<a href="/admin/presave/campaigns/{{$campaign->id}}" class="btn btn-sm">View</a>
<a href="/admin/presave/campaigns/{{$campaign->id}}/edit" class="btn btn-sm">Edit</a>
<form action="/admin/presave/campaigns/{{$campaign->id}}/activate" method="POST" style="display: inline;" if="{{$campaign->status->value === 'draft'}}">
<csrf-token />
<button type="submit" class="btn btn-sm btn-success">Activate</button>
</form>
<form action="/admin/presave/campaigns/{{$campaign->id}}/pause" method="POST" style="display: inline;" if="{{$campaign->status->value === 'active'}}">
<csrf-token />
<button type="submit" class="btn btn-sm btn-warning">Pause</button>
</form>
<button class="btn btn-sm btn-danger" onclick="deleteCampaign({{$campaign->id}})">Delete</button>
</div>
</div>
</div>
<div class="empty-state" if="{{!$campaigns || count($campaigns) === 0}}">
<p>No campaigns yet.</p>
<a href="/admin/presave/campaigns/create" class="btn btn-primary">Create your first campaign</a>
</div>
</div>
</layout>
<script>
async function deleteCampaign(id) {
if (!confirm('Are you sure you want to delete this campaign? This will also delete all registrations.')) {
return;
}
try {
const response = await fetch(`/admin/presave/campaigns/${id}`, {
method: 'DELETE',
headers: {
'Content-Type': 'application/json'
}
});
const data = await response.json();
if (data.success) {
window.location.reload();
} else {
alert(data.message || 'Failed to delete campaign');
}
} catch (error) {
alert('Error deleting campaign');
console.error(error);
}
}
</script>
</body>
</html>