Files
pagedev.pl/views/calendar/index.php
2026-01-29 21:08:01 +01:00

222 lines
11 KiB
PHP

<?php
$pageTitle = 'Kalendarz - System 2FA';
$bodyClass = 'bg-light';
$extraHead = '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">'
. '<link rel="stylesheet" href="/public/css/calendar.css">';
ob_start();
?>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container-fluid">
<a class="navbar-brand" href="/panel">
<i class="fas fa-shield-alt"></i> System 2FA
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav me-auto">
<li class="nav-item">
<a class="nav-link" href="/pulpit">
<i class="fas fa-home"></i> Pulpit
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/notatnik">
<i class="fas fa-sticky-note"></i> Notatnik
</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="/kalendarz">
<i class="fas fa-calendar-alt"></i> Kalendarz
</a>
</li>
</ul>
<ul class="navbar-nav">
<li class="nav-item">
<span class="nav-link text-white">
<i class="fas fa-user"></i> <?php echo htmlspecialchars($_SESSION['username']); ?>
</span>
</li>
<li class="nav-item">
<a class="nav-link" href="/wyloguj-sie">
<i class="fas fa-sign-out-alt"></i> Wyloguj
</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container mt-4">
<?php if (isset($_SESSION['success'])): ?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<i class="fas fa-check-circle"></i> <?php echo htmlspecialchars($_SESSION['success']); unset($_SESSION['success']); ?>
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
<?php endif; ?>
<?php if (isset($_SESSION['error'])): ?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<i class="fas fa-exclamation-circle"></i> <?php echo htmlspecialchars($_SESSION['error']); unset($_SESSION['error']); ?>
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
<?php endif; ?>
<div class="d-flex flex-wrap justify-content-between align-items-center mb-3">
<div class="d-flex align-items-center gap-2">
<a class="btn btn-outline-secondary" href="/kalendarz?month=<?php echo $prevMonth; ?>">
<i class="fas fa-chevron-left"></i>
</a>
<h3 class="mb-0 calendar-title"><?php echo htmlspecialchars($monthLabel); ?></h3>
<a class="btn btn-outline-secondary" href="/kalendarz?month=<?php echo $nextMonth; ?>">
<i class="fas fa-chevron-right"></i>
</a>
</div>
<a href="/wydarzenie/nowe?date=<?php echo htmlspecialchars($selectedDate); ?>&month=<?php echo $month; ?>" class="btn btn-primary">
<i class="fas fa-plus"></i> Nowe wydarzenie
</a>
</div>
<div class="calendar-grid">
<div class="calendar-weekday">Pon</div>
<div class="calendar-weekday">Wto</div>
<div class="calendar-weekday">Śro</div>
<div class="calendar-weekday">Czw</div>
<div class="calendar-weekday">Pią</div>
<div class="calendar-weekday">Sob</div>
<div class="calendar-weekday">Ndz</div>
<?php
$dayCounter = 1;
$totalCells = 42; // 6 tygodni
for ($cell = 1; $cell <= $totalCells; $cell++):
$cellDay = $cell - $startWeekday + 1;
$isCurrentMonth = $cellDay >= 1 && $cellDay <= $daysInMonth;
$dateStr = $isCurrentMonth ? $monthDate->format('Y-m') . '-' . str_pad($cellDay, 2, '0', STR_PAD_LEFT) : '';
$isSelected = $isCurrentMonth && $dateStr === $selectedDate;
$eventsForDay = $isCurrentMonth && isset($eventsByDate[$dateStr]) ? $eventsByDate[$dateStr] : [];
?>
<div class="calendar-cell <?php echo $isCurrentMonth ? '' : 'calendar-cell--disabled'; ?> <?php echo $isSelected ? 'calendar-cell--selected' : ''; ?>">
<?php if ($isCurrentMonth): ?>
<a class="calendar-day" href="/kalendarz?month=<?php echo $month; ?>&date=<?php echo $dateStr; ?>">
<?php echo $cellDay; ?>
</a>
<?php if (!empty($eventsForDay)): ?>
<div class="calendar-events">
<?php foreach (array_slice($eventsForDay, 0, 2) as $event): ?>
<div class="calendar-event">
<i class="fas fa-circle"></i>
<?php echo htmlspecialchars($event['title']); ?>
</div>
<?php endforeach; ?>
<?php if (count($eventsForDay) > 2): ?>
<div class="calendar-event calendar-event--more">+<?php echo count($eventsForDay) - 2; ?> więcej</div>
<?php endif; ?>
</div>
<?php endif; ?>
<?php endif; ?>
</div>
<?php endfor; ?>
</div>
<div class="row mt-4">
<div class="col-lg-6">
<div class="card shadow-sm">
<div class="card-header bg-primary text-white">
<i class="fas fa-list"></i> Wydarzenia: <?php echo htmlspecialchars($selectedDate); ?>
</div>
<div class="card-body">
<?php if (empty($eventsForSelected)): ?>
<p class="text-muted mb-0">Brak wydarzeń dla wybranego dnia.</p>
<?php else: ?>
<div class="list-group">
<?php foreach ($eventsForSelected as $event): ?>
<div class="list-group-item list-group-item-action d-flex justify-content-between align-items-start">
<div class="me-3">
<h6 class="mb-1">
<i class="fas fa-calendar-check text-primary"></i>
<?php echo htmlspecialchars($event['title']); ?>
</h6>
<p class="mb-1 small text-muted">
<?php echo nl2br(htmlspecialchars($event['content'] ?? '')); ?>
</p>
</div>
<div class="btn-group">
<a class="btn btn-sm btn-outline-primary" href="/wydarzenie/edytuj?id=<?php echo $event['id']; ?>&month=<?php echo $month; ?>">
<i class="fas fa-edit"></i>
</a>
<button class="btn btn-sm btn-outline-danger" type="button"
onclick="confirmDeleteEvent(<?php echo $event['id']; ?>, '<?php echo htmlspecialchars(addslashes($event['title'])); ?>')">
<i class="fas fa-trash"></i>
</button>
</div>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
</div>
</div>
</div>
<div class="col-lg-6 mt-3 mt-lg-0">
<div class="card shadow-sm">
<div class="card-header bg-light">
<i class="fas fa-info-circle"></i> Szybkie akcje
</div>
<div class="card-body">
<p class="mb-2">Dodaj wydarzenie dla wybranego dnia:</p>
<a class="btn btn-primary" href="/wydarzenie/nowe?date=<?php echo htmlspecialchars($selectedDate); ?>&month=<?php echo $month; ?>">
<i class="fas fa-plus"></i> Dodaj wydarzenie
</a>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="deleteEventModal" tabindex="-1" aria-labelledby="deleteEventModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header bg-danger text-white">
<h5 class="modal-title" id="deleteEventModalLabel">
<i class="fas fa-exclamation-triangle"></i> Potwierdź usunięcie
</h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<p>Czy na pewno chcesz usunąć wydarzenie:</p>
<p class="fw-bold" id="eventTitle"></p>
<p class="text-muted small">Tej operacji nie można cofnąć.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">
<i class="fas fa-times"></i> Anuluj
</button>
<form method="POST" action="/wydarzenie/usun">
<input type="hidden" name="event_id" id="deleteEventId">
<input type="hidden" name="return_month" value="<?php echo $month; ?>">
<input type="hidden" name="return_date" value="<?php echo htmlspecialchars($selectedDate); ?>">
<button type="submit" class="btn btn-danger">
<i class="fas fa-trash"></i> Usuń wydarzenie
</button>
</form>
</div>
</div>
</div>
</div>
<?php
$content = ob_get_clean();
$extraScript = '<script>
function confirmDeleteEvent(eventId, eventTitle) {
document.getElementById("deleteEventId").value = eventId;
document.getElementById("eventTitle").textContent = eventTitle;
const modal = new bootstrap.Modal(document.getElementById("deleteEventModal"));
modal.show();
}
</script>';
require __DIR__ . '/../layout.php';
?>