This commit is contained in:
Mark Pinkster 2026-02-19 10:58:47 +01:00
parent 5d9c5dbe5a
commit 0b0396af48
9 changed files with 92 additions and 28 deletions

View File

@ -116,6 +116,10 @@ class TalpaApi {
]);
}
public function deleteTransmission($transmissionId) {
return $this->request('DELETE', '/linearSchedule/v1/transmissions/' . $transmissionId);
}
public function deleteEpisode($contentId) {
return $this->request('DELETE', '/content/v1/episodes/' . $contentId);
}
@ -127,6 +131,7 @@ class TalpaApi {
if (strpos($endpoint, '/content/v1/episodes') !== false) return ["statusCode" => "200", "message" => "Episode deleted"];
if (strpos($endpoint, '/mam/v1/mediaAssets') !== false && !isset($data)) return ["mediaAssetLabel" => "TEL_MOCK_" . rand(100, 999)];
if (strpos($endpoint, '/mam/v1/mediaAssets') !== false) return ["id" => "MOCK_ASSET_" . time()];
if (strpos($endpoint, '/linearSchedule/v1/transmissions') !== false && strpos($endpoint, 'DELETE') !== false) return ["statusCode" => "200", "message" => "Transmission deleted"];
if (strpos($endpoint, '/linearSchedule/v1/transmissions') !== false && strpos($endpoint, 'PUT') === false) return ["statusCode" => "201", "id" => "MOCK_TX_" . time()];
if (strpos($endpoint, '/linearSchedule/v1/transmissions') !== false) return ["statusCode" => "200", "message" => "Transmission updated"];
return [];

View File

@ -6,6 +6,7 @@
require_once __DIR__ . '/../vendor/autoload.php';
require_once __DIR__ . '/../helpers.php';
require_once __DIR__ . '/../TalpaAPI.php';
use Dotenv\Dotenv;
@ -32,18 +33,33 @@ try {
], 400);
}
// Check if transmission exists
$stmt = $db->prepare("SELECT id FROM transmissions WHERE id = ?");
// Check if transmission exists and get talpa_transmission_id
$stmt = $db->prepare("SELECT id, talpa_transmission_id FROM transmissions WHERE id = ?");
$stmt->execute([$input['id']]);
$transmission = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$stmt->fetch()) {
if (!$transmission) {
jsonResponse([
'success' => false,
'error' => 'Transmission not found'
], 404);
}
// Delete transmission
// Delete from Talpa API if talpa_transmission_id exists
if (!empty($transmission['talpa_transmission_id'])) {
try {
$talpaApi = new TalpaApi();
$talpaResponse = $talpaApi->deleteTransmission($transmission['talpa_transmission_id']);
// Log the Talpa API response
error_log("Talpa API delete response: " . json_encode($talpaResponse));
} catch (Exception $e) {
// Log error but continue with local deletion
error_log("Failed to delete transmission from Talpa API: " . $e->getMessage());
}
}
// Delete transmission from local database
$stmt = $db->prepare("DELETE FROM transmissions WHERE id = ?");
$stmt->execute([$input['id']]);

View File

@ -298,6 +298,13 @@ body {
display: inline-flex;
gap: 0.25rem;
align-items: center;
justify-content: flex-end;
}
.action-buttons .btn-icon {
display: inline-flex;
align-items: center;
justify-content: center;
}
/* Standard Button Colors */
@ -928,6 +935,13 @@ body {
display: flex;
gap: 0.25rem;
align-items: center;
flex-shrink: 0;
}
.block-header-actions .btn-icon {
display: inline-flex;
align-items: center;
justify-content: center;
}
.block-header-time {

View File

@ -111,7 +111,7 @@ $dayNames = [
</a>
<div class="navbar-nav">
<a class="nav-link" href="index.php">Dashboard</a>
<a class="nav-link" href="planner.php">Excel Planner</a>
<a class="nav-link" href="planner.php">Planner</a>
<a class="nav-link" href="calendar.php">Kalender</a>
<a class="nav-link active" href="blocks.php">Blokken</a>
<a class="nav-link" href="infomercials.php">Infomercials</a>

View File

@ -71,7 +71,7 @@ $infomercials = $db->query("
</a>
<div class="navbar-nav">
<a class="nav-link" href="index.php">Dashboard</a>
<a class="nav-link" href="planner.php">Excel Planner</a>
<a class="nav-link" href="planner.php">Planner</a>
<a class="nav-link active" href="calendar.php">Kalender</a>
<a class="nav-link" href="blocks.php">Blokken</a>
<a class="nav-link" href="infomercials.php">Infomercials</a>

View File

@ -115,7 +115,7 @@ if (isset($_GET['edit'])) {
</a>
<div class="navbar-nav">
<a class="nav-link active" href="index.php">Dashboard</a>
<a class="nav-link" href="planner.php">Excel Planner</a>
<a class="nav-link" href="planner.php">Planner</a>
<a class="nav-link" href="calendar.php">Kalender</a>
<a class="nav-link" href="blocks.php">Blokken</a>
<a class="nav-link" href="infomercials.php">Infomercials</a>
@ -176,7 +176,7 @@ if (isset($_GET['edit'])) {
<div class="card shadow-sm h-100">
<div class="card-body text-center">
<i class="bi bi-table" style="font-size: 3rem; color: #2ecc71;"></i>
<h5 class="mt-3">Excel Planner</h5>
<h5 class="mt-3">Planner</h5>
<p class="text-muted">Tabel-gebaseerde planning</p>
<a href="planner.php" class="btn btn-success">
<i class="bi bi-arrow-right-circle"></i> Open Planner

View File

@ -284,7 +284,7 @@ $infomercials = $db->query("
</a>
<div class="navbar-nav">
<a class="nav-link" href="index.php">Dashboard</a>
<a class="nav-link" href="planner.php">Excel Planner</a>
<a class="nav-link" href="planner.php">Planner</a>
<a class="nav-link" href="calendar.php">Kalender</a>
<a class="nav-link" href="blocks.php">Blokken</a>
<a class="nav-link active" href="infomercials.php">Infomercials</a>

View File

@ -44,14 +44,8 @@ if (isset($_POST['add_to_block'])) {
exit;
}
// Handle remove transmission
if (isset($_POST['remove_transmission'])) {
$stmt = $db->prepare("DELETE FROM transmissions WHERE id = ?");
$stmt->execute([$_POST['transmission_id']]);
header("Location: planner.php?date={$_POST['date']}&success=removed");
exit;
}
// Handle remove transmission - REMOVED: Now handled via AJAX to delete_transmission.php API
// This ensures proper Talpa API deletion
// Handle reorder (move up/down)
if (isset($_POST['reorder'])) {
@ -268,7 +262,7 @@ function calculateNextStartTimeForBlock($db, $date, $channel, $blockId) {
</a>
<div class="navbar-nav">
<a class="nav-link" href="index.php">Dashboard</a>
<a class="nav-link active" href="planner.php">Excel Planner</a>
<a class="nav-link active" href="planner.php">Planner</a>
<a class="nav-link" href="calendar.php">Kalender</a>
<a class="nav-link" href="blocks.php">Blokken</a>
<a class="nav-link" href="infomercials.php">Infomercials</a>
@ -304,7 +298,6 @@ function calculateNextStartTimeForBlock($db, $date, $channel, $blockId) {
</a>
</div>
<div class="col-md-3">
<label class="form-label"><strong>Selecteer Datum</strong></label>
<input type="date" name="date" class="form-control" value="<?= $selectedDate ?>" required>
</div>
<div class="col-md-1">
@ -601,13 +594,11 @@ function calculateNextStartTimeForBlock($db, $date, $channel, $blockId) {
</form>
<?php endif; ?>
<form method="POST" style="display:inline;" onsubmit="return confirm('Verwijderen?');">
<input type="hidden" name="transmission_id" value="<?= $tx['id'] ?>">
<input type="hidden" name="date" value="<?= $selectedDate ?>">
<button type="submit" name="remove_transmission" class="btn-icon btn-icon-xs btn-icon-danger">
<button type="button"
class="btn-icon btn-icon-xs btn-icon-danger"
onclick="deleteTransmissionPlanner(<?= $tx['id'] ?>, '<?= $selectedDate ?>')">
<i class="bi bi-trash"></i>
</button>
</form>
</div>
</td>
</tr>
@ -905,6 +896,44 @@ function calculateNextStartTimeForBlock($db, $date, $channel, $blockId) {
});
});
// Delete transmission via API (calls Talpa API)
function deleteTransmissionPlanner(transmissionId, date) {
if (!confirm('Weet je zeker dat je deze uitzending wilt verwijderen?\n\nDit verwijdert ook de uitzending uit Talpa.')) {
return;
}
// Show loading indicator
const btn = event.target.closest('button');
const originalHTML = btn.innerHTML;
btn.disabled = true;
btn.innerHTML = '<span class="spinner-border spinner-border-sm" role="status"></span>';
fetch('api/delete_transmission.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ id: transmissionId })
})
.then(response => response.json())
.then(data => {
if (data.success) {
// Reload page to show updated list
window.location.href = `planner.php?date=${date}&success=removed`;
} else {
alert('✗ Fout bij verwijderen: ' + (data.error || 'Onbekende fout'));
btn.disabled = false;
btn.innerHTML = originalHTML;
}
})
.catch(error => {
console.error('Error:', error);
alert('✗ Netwerkfout bij verwijderen');
btn.disabled = false;
btn.innerHTML = originalHTML;
});
}
// Sync block to Talpa
function syncBlockPlanner(date, channel) {
if (!confirm(`Wilt u alle uitzendingen in dit blok synchroniseren naar Talpa?\n\nDatum: ${date}\nZender: ${channel}`)) {

View File

@ -2,7 +2,7 @@
## 📋 Overzicht
Implementatie van een functie om blokken (inclusief transmissions en bloktijden) te kopiëren van andere dagen naar de huidige dag in de Excel Planner view.
Implementatie van een functie om blokken (inclusief transmissions en bloktijden) te kopiëren van andere dagen naar de huidige dag in de Planner view.
## 🎯 Functionaliteit Vereisten
@ -11,7 +11,7 @@ Implementatie van een functie om blokken (inclusief transmissions en bloktijden)
- **Bloktijden**: De `actual_start_time` en `actual_end_time` van het bronblok
### Gebruikersflow
1. Gebruiker opent Excel Planner ([`planner.php`](planner.php))
1. Gebruiker opent Planner ([`planner.php`](planner.php))
2. Gebruiker klikt op "Kopieer Blok" knop bij een specifiek blok
3. Modal opent met:
- Selectie van **brondag** (datepicker)