Schwarzes-Web-Brett/src/adverts.php

117 lines
4.4 KiB
PHP

<?php
require_once "database.php";
require_once "users.php";
// Eine einfache Klasse zur Verwaltung von Anzeigen
// Diese Klasse bietet statische Methoden zum Abrufen und Erstellen von Anzeigen in der Datenbank.
class Adverts {
// Holt alle Anzeigen für eine bestimmte Kategorie
// $categoryId: Die ID der Kategorie
// Gibt ein Array von Anzeigen zurück, die zur angegebenen Kategorie gehören
public static function getAdvertsByCategoryId(int $categoryId): array {
$db = new Database();
$sql = "SELECT a.id, a.name, a.description, a.date, a.user_id
FROM advert a
JOIN advert_category ac ON a.id = ac.advert_id
WHERE ac.category_id = ?
ORDER BY a.date DESC";
$result = $db->query($sql, [$categoryId]);
$adverts = $db->fetchAll($result);
// Füge Benutzerinformationen zu jeder Anzeige hinzu
foreach ($adverts as &$advert) {
if (isset($advert['user_id'])) {
$user = Users::getUserById($advert['user_id']);
if ($user) {
$advert['user_name'] = $user['name'];
$advert['user_email'] = $user['email'];
$advert['user_telephone'] = $user['telephone'];
}
}
}
return $adverts;
}
// Holt alle Anzeigen sortiert nach Erstellungsdatum
// Gibt ein Array aller Anzeigen zurück
public static function getAllAdverts(): array {
$db = new Database();
$sql = "SELECT id, name, description, date, user_id
FROM advert
ORDER BY date DESC";
$result = $db->query($sql);
$adverts = $db->fetchAll($result);
// Füge Benutzerinformationen zu jeder Anzeige hinzu
foreach ($adverts as &$advert) {
if (isset($advert['user_id'])) {
$user = Users::getUserById($advert['user_id']);
if ($user) {
$advert['user_name'] = $user['name'];
$advert['user_email'] = $user['email'];
$advert['user_telephone'] = $user['telephone'];
}
}
}
return $adverts;
}
// Erstellt eine neue Anzeige in der Datenbank
// Diese Methode erstellt eine neue Anzeige und verknüpft sie mit einem Benutzer und Kategorien.
// Die Benutzerverwaltung wird von der Users-Klasse übernommen.
//
// $name: Der Name der Anzeige
// $description: Die Beschreibung der Anzeige
// $categoryIds: Array von Kategorie-IDs, die mit der Anzeige verknüpft werden sollen
// $userName: Der Name des Benutzers
// $userEmail: Die E-Mail des Benutzers
// $userTelephone: Die Telefonnummer des Benutzers
// Gibt die ID der erstellten Anzeige zurück oder false bei einem Fehler
public static function createAdvert(
string $name,
string $description,
array $categoryIds,
string $userName,
string $userEmail,
string $userTelephone
): int|false {
$db = new Database();
try {
// Prüfe, ob Benutzer mit der angegebenen E-Mail existiert
$userId = Users::getUserIdByEmail($userEmail);
if ($userId === null) {
// Benutzer existiert nicht, erstelle einen neuen Benutzer
$userId = Users::createUser($userName, $userEmail, $userTelephone);
}
// Erstelle die Anzeige
$sql = "INSERT INTO advert (name, description, date, user_id) VALUES (?, ?, NOW(), ?)";
$db->query($sql, [$name, $description, $userId]);
// Hole die ID der neu erstellten Anzeige
$sql = "SELECT MAX(id) as id FROM advert WHERE name = ? AND user_id = ?";
$result = $db->query($sql, [$name, $userId]);
$advert = $db->fetchOne($result);
$advertId = $advert['id'];
// Verknüpfe die Anzeige mit Kategorien
foreach ($categoryIds as $categoryId) {
$sql = "INSERT INTO advert_category (advert_id, category_id) VALUES (?, ?)";
$db->query($sql, [$advertId, $categoryId]);
}
return $advertId;
} catch (Exception $e) {
// Fehler protokollieren oder nach Bedarf behandeln
return false;
}
}
}