117 lines
4.4 KiB
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;
|
|
}
|
|
}
|
|
}
|