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) { public function deleteEpisode($contentId) {
return $this->request('DELETE', '/content/v1/episodes/' . $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, '/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 && !isset($data)) return ["mediaAssetLabel" => "TEL_MOCK_" . rand(100, 999)];
if (strpos($endpoint, '/mam/v1/mediaAssets') !== false) return ["id" => "MOCK_ASSET_" . time()]; 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 && strpos($endpoint, 'PUT') === false) return ["statusCode" => "201", "id" => "MOCK_TX_" . time()];
if (strpos($endpoint, '/linearSchedule/v1/transmissions') !== false) return ["statusCode" => "200", "message" => "Transmission updated"]; if (strpos($endpoint, '/linearSchedule/v1/transmissions') !== false) return ["statusCode" => "200", "message" => "Transmission updated"];
return []; return [];

View File

@ -6,6 +6,7 @@
require_once __DIR__ . '/../vendor/autoload.php'; require_once __DIR__ . '/../vendor/autoload.php';
require_once __DIR__ . '/../helpers.php'; require_once __DIR__ . '/../helpers.php';
require_once __DIR__ . '/../TalpaAPI.php';
use Dotenv\Dotenv; use Dotenv\Dotenv;
@ -32,18 +33,33 @@ try {
], 400); ], 400);
} }
// Check if transmission exists // Check if transmission exists and get talpa_transmission_id
$stmt = $db->prepare("SELECT id FROM transmissions WHERE id = ?"); $stmt = $db->prepare("SELECT id, talpa_transmission_id FROM transmissions WHERE id = ?");
$stmt->execute([$input['id']]); $stmt->execute([$input['id']]);
$transmission = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$stmt->fetch()) { if (!$transmission) {
jsonResponse([ jsonResponse([
'success' => false, 'success' => false,
'error' => 'Transmission not found' 'error' => 'Transmission not found'
], 404); ], 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 = $db->prepare("DELETE FROM transmissions WHERE id = ?");
$stmt->execute([$input['id']]); $stmt->execute([$input['id']]);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -44,14 +44,8 @@ if (isset($_POST['add_to_block'])) {
exit; exit;
} }
// Handle remove transmission // Handle remove transmission - REMOVED: Now handled via AJAX to delete_transmission.php API
if (isset($_POST['remove_transmission'])) { // This ensures proper Talpa API deletion
$stmt = $db->prepare("DELETE FROM transmissions WHERE id = ?");
$stmt->execute([$_POST['transmission_id']]);
header("Location: planner.php?date={$_POST['date']}&success=removed");
exit;
}
// Handle reorder (move up/down) // Handle reorder (move up/down)
if (isset($_POST['reorder'])) { if (isset($_POST['reorder'])) {
@ -268,7 +262,7 @@ function calculateNextStartTimeForBlock($db, $date, $channel, $blockId) {
</a> </a>
<div class="navbar-nav"> <div class="navbar-nav">
<a class="nav-link" href="index.php">Dashboard</a> <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="calendar.php">Kalender</a>
<a class="nav-link" href="blocks.php">Blokken</a> <a class="nav-link" href="blocks.php">Blokken</a>
<a class="nav-link" href="infomercials.php">Infomercials</a> <a class="nav-link" href="infomercials.php">Infomercials</a>
@ -304,7 +298,6 @@ function calculateNextStartTimeForBlock($db, $date, $channel, $blockId) {
</a> </a>
</div> </div>
<div class="col-md-3"> <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> <input type="date" name="date" class="form-control" value="<?= $selectedDate ?>" required>
</div> </div>
<div class="col-md-1"> <div class="col-md-1">
@ -601,13 +594,11 @@ function calculateNextStartTimeForBlock($db, $date, $channel, $blockId) {
</form> </form>
<?php endif; ?> <?php endif; ?>
<form method="POST" style="display:inline;" onsubmit="return confirm('Verwijderen?');"> <button type="button"
<input type="hidden" name="transmission_id" value="<?= $tx['id'] ?>"> class="btn-icon btn-icon-xs btn-icon-danger"
<input type="hidden" name="date" value="<?= $selectedDate ?>"> onclick="deleteTransmissionPlanner(<?= $tx['id'] ?>, '<?= $selectedDate ?>')">
<button type="submit" name="remove_transmission" class="btn-icon btn-icon-xs btn-icon-danger"> <i class="bi bi-trash"></i>
<i class="bi bi-trash"></i> </button>
</button>
</form>
</div> </div>
</td> </td>
</tr> </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 // Sync block to Talpa
function syncBlockPlanner(date, channel) { function syncBlockPlanner(date, channel) {
if (!confirm(`Wilt u alle uitzendingen in dit blok synchroniseren naar Talpa?\n\nDatum: ${date}\nZender: ${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 ## 📋 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 ## 🎯 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 - **Bloktijden**: De `actual_start_time` en `actual_end_time` van het bronblok
### Gebruikersflow ### 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 2. Gebruiker klikt op "Kopieer Blok" knop bij een specifiek blok
3. Modal opent met: 3. Modal opent met:
- Selectie van **brondag** (datepicker) - Selectie van **brondag** (datepicker)