WIP teilnahme

This commit is contained in:
Karol Bielski 2025-07-11 10:22:39 +02:00
parent e5637d4929
commit 3dc185b667
5 changed files with 120 additions and 48 deletions

View File

@ -18,6 +18,13 @@
cursor: pointer; cursor: pointer;
} }
.btn-link {
text-decoration: underline;
background-color: transparent;
color: var(--brand-white);
border: none;
}
.btn-primary { .btn-primary {
background: var(--brand-primary); background: var(--brand-primary);
border-radius: 3px; border-radius: 3px;

View File

@ -267,7 +267,7 @@ class UserController{
$currentUser = $this->db->getUserById($userId); $currentUser = $this->db->getUserById($userId);
if(!$currentUser){ if(!$currentUser){
throw new \Exception("User nicht gefunden"); new \Blog\Library\ErrorMsg("User nicht gefunden");
} }
$validData = [ $validData = [
@ -296,7 +296,7 @@ class UserController{
$currentUser = $this->db->getUserById($userId); $currentUser = $this->db->getUserById($userId);
if (!$currentUser) { if (!$currentUser) {
throw new \Exception('User nicht gefunden'); new \Blog\Library\ErrorMsg('User nicht gefunden');
} }
$submitted = [ $submitted = [
@ -388,5 +388,20 @@ class UserController{
} }
public function enroll() {
$courseId = $_POST['id'] ?? null;
$userId = $_SESSION['user_id'] ?? null;
if ($userId === null) {
new \Blog\Library\ErrorMsg("Nicht eingeloggt.");
}
if ($courseId === null) {
new \Blog\Library\ErrorMsg("Kein Kurs ausgewählt");
}
$this->db->enroll($courseId, $userId);
$this->view->setDoMethodName("showEnrollmentConfirmation");
}
} }

View File

@ -192,15 +192,32 @@ class UserModel extends Database
} }
public function getAllCourses() { public function getAllCourses() {
$pdo = $this->linkDB(); $pdo = $this->linkDB();
$userId = $_SESSION['user_id'] ?? null;
$sql = "SELECT k.id, k.name, k.preis, k.dauer, k.rabatt, k.kategorie, k.beschreibung, k.ort_id, if ($userId === null) {
o.stadt, o.strasse, o.plz, b.note, b.kommentar $sql = "SELECT
k.id, k.name, k.preis, k.dauer, k.rabatt, k.kategorie, k.beschreibung, k.ort_id,
o.stadt, o.strasse, o.plz, b.note, b.kommentar,
0 AS isTeilnehmer
FROM kurs AS k FROM kurs AS k
JOIN ort AS o ON o.id = k.ort_id JOIN ort AS o ON o.id = k.ort_id
LEFT JOIN bewertungen AS b ON b.kurs_id = k.id"; LEFT JOIN bewertungen AS b ON b.kurs_id = k.id";
$params = [];
} else {
$sql = "SELECT
k.id, k.name, k.preis, k.dauer, k.rabatt, k.kategorie, k.beschreibung, k.ort_id,
o.stadt, o.strasse, o.plz, b.note, b.kommentar,
CASE WHEN ku.user_id IS NULL THEN 0 ELSE 1 END AS isTeilnehmer
FROM kurs AS k
JOIN ort AS o ON o.id = k.ort_id
LEFT JOIN bewertungen AS b ON b.kurs_id = k.id
LEFT JOIN kurs_user AS ku ON ku.kurs_id = k.id AND ku.user_id = :userId";
$params = ['userId' => $userId];
}
try { try {
$sth = $pdo->prepare($sql); $sth = $pdo->prepare($sql);
$sth->execute(); $sth->execute($params);
return $sth->fetchAll(\PDO::FETCH_ASSOC); return $sth->fetchAll(\PDO::FETCH_ASSOC);
} catch (PDOException $e) { } catch (PDOException $e) {
new \Blog\Library\ErrorMsg("Fehler beim Lesen der Daten.", $e); new \Blog\Library\ErrorMsg("Fehler beim Lesen der Daten.", $e);
@ -208,7 +225,6 @@ class UserModel extends Database
} }
} }
public function updateCourse($course) { public function updateCourse($course) {
$pdo = $this->linkDB(); $pdo = $this->linkDB();
@ -278,4 +294,35 @@ class UserModel extends Database
return true; return true;
} }
public function enroll($courseId, $userId) {
$pdo = $this->linkDB();
try {
$checkSql = "SELECT COUNT(*) FROM kurs_user WHERE user_id = :user_id AND kurs_id = :kurs_id";
$checkStmt = $pdo->prepare($checkSql);
$checkStmt->execute([
':user_id' => $userId,
':kurs_id' => $courseId
]);
if ($checkStmt->fetchColumn() > 0) {
return false;
}
$insertSql = "INSERT INTO kurs_user (user_id, kurs_id) VALUES (:user_id, :kurs_id)";
$insertStmt = $pdo->prepare($insertSql);
$insertStmt->execute([
':user_id' => $userId,
':kurs_id' => $courseId
]);
} catch (PDOException $e) {
new \Blog\Library\ErrorMsg("Fehler beim Einschreiben in den Kurs.", $e);
die;
}
return true;
}
} }

View File

@ -0,0 +1,12 @@
<?php
include dirname(__DIR__).'/header.phtml';
?>
<div class="msg">
<p>Erfolgreich aufgenommen!</p>
<a href="?controller=welcome">Weiter</a>
</div>
<?php include dirname(__DIR__).'/footer.phtml'; ?>

View File

@ -59,46 +59,37 @@ $location = $_GET['location'] ?? '';
if (!empty($filteredKurse)) { if (!empty($filteredKurse)) {
echo '<div class="courses-view">'; echo '<div class="courses-view">';
foreach ($filteredKurse as $kurs) { foreach ($filteredKurse as $kurs) {
$courseCard = $doc->createElement('div'); foreach ($filteredKurse as $kurs) {
$courseCard->setAttribute('class', 'course-card'); $id = htmlspecialchars($kurs['id']);
$note = htmlspecialchars($kurs['note'] ?? 'Keine Bewertung') . ' ★';
$name = htmlspecialchars($kurs['name']);
$address = htmlspecialchars($kurs['strasse'] . ', ' . $kurs['stadt'] . ' ' . $kurs['plz']);
$preis = htmlspecialchars($kurs['preis']) . ' €';
$kategorie = htmlspecialchars($kurs['kategorie'] ?? 'Keine Kategorie');
$courseImage = $doc->createElement('div'); echo <<<HTML
$courseImage->setAttribute('class', 'course-image'); <div class="course-card">
$courseCard->appendChild($courseImage); <div class="course-image"></div>
<div class="course-content">
$courseContent = $doc->createElement('div'); <div class="course-left">
$courseContent->setAttribute('class', 'course-content'); <div>$note</div>
$courseCard->appendChild($courseContent); <div>$name</div>
<div>$address</div>
$courseLeft = $doc->createElement('div'); </div>
$courseLeft->setAttribute('class', 'course-left'); <div class="course-right">
$courseContent->appendChild($courseLeft); <div>$preis</div>
<div>$kategorie</div>
$note = $doc->createElement('div', htmlspecialchars($kurs['note'] ?? 'Keine Bewertung') . ' ★'); <form method="POST" class="course-card-form">
$courseLeft->appendChild($note); <input type="hidden" name="do" value="enroll">
<input type="hidden" name="controller" value="user">
$name = $doc->createElement('div', htmlspecialchars($kurs['name'])); <input type="hidden" name="id" value="$id">
$courseLeft->appendChild($name); <button type="submit" class="btn-link">Teilnehmen</button>
</form>
$address = $doc->createElement('div', htmlspecialchars($kurs['strasse'] . ', ' . $kurs['stadt'] . ' ' . $kurs['plz'])); </div>
$courseLeft->appendChild($address); </div>
</div>
$courseRight = $doc->createElement('div'); HTML;
$courseRight->setAttribute('class', 'course-right'); }
$courseContent->appendChild($courseRight);
$price = $doc->createElement('div', htmlspecialchars($kurs['preis']) . ' €');
$courseRight->appendChild($price);
$category = $doc->createElement('div', htmlspecialchars($kurs['kategorie'] ?? 'Keine Kategorie'));
$courseRight->appendChild($category);
$editLink = $doc->createElement('a', "Bearbeiten");
$editLink->setAttribute('href', '?controller=User&do=showUserAccountPage&id=' . $kurs['id']);
$editLink->setAttribute('class', 'course-card-link');
$courseRight->appendChild($editLink);
echo $doc->saveHTML($courseCard);
} }
echo '</div>'; echo '</div>';
} else { } else {