Merge pull request 'Vor und Nachname separat speichern sowie Profilbearbeitung' (#18) from Profilbearbeitung into dev
Reviewed-on: #18
This commit was merged in pull request #18.
This commit is contained in:
+100
-5
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
require_once "UserDAOInterface.php";
|
||||
|
||||
class LocalUserDAO implements UserDAOInterface {
|
||||
@@ -11,23 +12,65 @@ class LocalUserDAO implements UserDAOInterface {
|
||||
}
|
||||
|
||||
$json = file_get_contents($this->file);
|
||||
|
||||
if ($json === false) {
|
||||
throw new RuntimeException("Benutzerdaten konnten nicht gelesen werden.");
|
||||
}
|
||||
|
||||
$users = json_decode($json, true);
|
||||
|
||||
if ($users === null && json_last_error() !== JSON_ERROR_NONE) {
|
||||
throw new RuntimeException("Benutzerdaten sind fehlerhaft.");
|
||||
}
|
||||
|
||||
return is_array($users) ? $users : [];
|
||||
}
|
||||
|
||||
private function saveUsers($users) {
|
||||
file_put_contents(
|
||||
$result = file_put_contents(
|
||||
$this->file,
|
||||
json_encode($users, JSON_PRETTY_PRINT)
|
||||
);
|
||||
|
||||
if ($result === false) {
|
||||
throw new RuntimeException("Benutzerdaten konnten nicht gespeichert werden.");
|
||||
}
|
||||
}
|
||||
|
||||
private function validateEmail($email) {
|
||||
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||
throw new InvalidArgumentException("Ungültige E-Mail-Adresse.");
|
||||
}
|
||||
}
|
||||
|
||||
private function validateName($name, $fieldName) {
|
||||
if (!preg_match("/^[a-zA-ZäöüÄÖÜß -]{2,50}$/", $name)) {
|
||||
throw new InvalidArgumentException(
|
||||
$fieldName . " darf nur Buchstaben, Leerzeichen und Bindestriche enthalten."
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private function validatePassword($password) {
|
||||
if (empty($password)) {
|
||||
throw new InvalidArgumentException("Passwort darf nicht leer sein.");
|
||||
}
|
||||
}
|
||||
|
||||
public function findUser($email) {
|
||||
$this->validateEmail($email);
|
||||
|
||||
$users = $this->loadUsers();
|
||||
|
||||
foreach ($users as $user) {
|
||||
if ($user["email"] === $email) {
|
||||
if (isset($user["email"]) && $user["email"] === $email) {
|
||||
|
||||
if (!isset($user["vorname"]) && isset($user["username"])) {
|
||||
$nameParts = explode(" ", $user["username"], 2);
|
||||
$user["vorname"] = $nameParts[0] ?? "";
|
||||
$user["nachname"] = $nameParts[1] ?? "";
|
||||
}
|
||||
|
||||
return $user;
|
||||
}
|
||||
}
|
||||
@@ -35,23 +78,75 @@ class LocalUserDAO implements UserDAOInterface {
|
||||
return null;
|
||||
}
|
||||
|
||||
public function addUser($email, $username, $password) {
|
||||
public function addUser($email, $vorname, $nachname, $password) {
|
||||
$this->validateEmail($email);
|
||||
$this->validateName($vorname, "Vorname");
|
||||
$this->validateName($nachname, "Nachname");
|
||||
$this->validatePassword($password);
|
||||
|
||||
$users = $this->loadUsers();
|
||||
|
||||
foreach ($users as $user) {
|
||||
if (isset($user["email"]) && $user["email"] === $email) {
|
||||
throw new InvalidArgumentException("Diese E-Mail-Adresse wird bereits verwendet.");
|
||||
}
|
||||
}
|
||||
|
||||
$users[] = [
|
||||
"email" => $email,
|
||||
"username" => $username,
|
||||
"vorname" => $vorname,
|
||||
"nachname" => $nachname,
|
||||
"password" => $password
|
||||
];
|
||||
|
||||
$this->saveUsers($users);
|
||||
}
|
||||
|
||||
public function updateUser($oldEmail, $newEmail, $vorname, $nachname, $password = null) {
|
||||
$this->validateEmail($oldEmail);
|
||||
$this->validateEmail($newEmail);
|
||||
$this->validateName($vorname, "Vorname");
|
||||
$this->validateName($nachname, "Nachname");
|
||||
|
||||
$users = $this->loadUsers();
|
||||
|
||||
foreach ($users as $user) {
|
||||
if (
|
||||
isset($user["email"])
|
||||
&& $user["email"] === $newEmail
|
||||
&& $newEmail !== $oldEmail
|
||||
) {
|
||||
throw new InvalidArgumentException("Diese E-Mail-Adresse wird bereits verwendet.");
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($users as $i => $user) {
|
||||
if (isset($user["email"]) && $user["email"] === $oldEmail) {
|
||||
$users[$i]["email"] = $newEmail;
|
||||
$users[$i]["vorname"] = $vorname;
|
||||
$users[$i]["nachname"] = $nachname;
|
||||
|
||||
unset($users[$i]["username"]);
|
||||
|
||||
if (!empty($password)) {
|
||||
$users[$i]["password"] = password_hash($password, PASSWORD_DEFAULT);
|
||||
}
|
||||
|
||||
$this->saveUsers($users);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function deleteUser($email) {
|
||||
$this->validateEmail($email);
|
||||
|
||||
$users = $this->loadUsers();
|
||||
|
||||
foreach ($users as $i => $user) {
|
||||
if ($user["email"] === $email) {
|
||||
if (isset($user["email"]) && $user["email"] === $email) {
|
||||
unset($users[$i]);
|
||||
$users = array_values($users);
|
||||
$this->saveUsers($users);
|
||||
|
||||
@@ -11,26 +11,85 @@ interface UserDAOInterface {
|
||||
/**
|
||||
* Sucht einen Benutzer anhand seiner E-Mail-Adresse.
|
||||
*
|
||||
* Funktion:
|
||||
* Liefert die gespeicherten Benutzerdaten zu einer E-Mail-Adresse.
|
||||
*
|
||||
* Eingabe:
|
||||
* @param string $email E-Mail-Adresse des gesuchten Benutzers
|
||||
*
|
||||
* Ausgabe:
|
||||
* @return array|null Benutzerdaten als Array oder null
|
||||
*
|
||||
* Mögliche Fehler:
|
||||
* @throws InvalidArgumentException wenn die E-Mail-Adresse ungültig ist
|
||||
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen werden können
|
||||
*/
|
||||
public function findUser($email);
|
||||
|
||||
/**
|
||||
* Fügt einen neuen Benutzer hinzu.
|
||||
*
|
||||
* Funktion:
|
||||
* Erstellt einen neuen Benutzereintrag und speichert ihn
|
||||
* in der jeweiligen Datenquelle.
|
||||
*
|
||||
* Eingabe:
|
||||
* @param string $email E-Mail-Adresse des Benutzers
|
||||
* @param string $username Benutzername des Benutzers
|
||||
* @param string $vorname Vorname des Benutzers
|
||||
* @param string $nachname Nachname des Benutzers
|
||||
* @param string $password Passwort des Benutzers
|
||||
*
|
||||
* Ausgabe:
|
||||
* @return void
|
||||
*
|
||||
* Mögliche Fehler:
|
||||
* @throws InvalidArgumentException wenn Eingabedaten ungültig sind
|
||||
* oder die E-Mail-Adresse bereits verwendet wird
|
||||
* @throws RuntimeException wenn die Benutzerdaten nicht gespeichert werden können
|
||||
*/
|
||||
public function addUser($email, $username, $password);
|
||||
public function addUser($email, $vorname, $nachname, $password);
|
||||
|
||||
/**
|
||||
* Aktualisiert einen bestehenden Benutzer.
|
||||
*
|
||||
* Funktion:
|
||||
* Ändert die E-Mail-Adresse, den Vornamen, den Nachnamen
|
||||
* und optional das Passwort eines bestehenden Benutzers.
|
||||
*
|
||||
* Eingabe:
|
||||
* @param string $oldEmail Alte E-Mail-Adresse
|
||||
* @param string $newEmail Neue E-Mail-Adresse
|
||||
* @param string $vorname Neuer Vorname
|
||||
* @param string $nachname Neuer Nachname
|
||||
* @param string|null $password Neues Passwort oder null
|
||||
*
|
||||
* Ausgabe:
|
||||
* @return bool true, wenn der Benutzer aktualisiert wurde, sonst false
|
||||
*
|
||||
* Mögliche Fehler:
|
||||
* @throws InvalidArgumentException wenn Eingabedaten ungültig sind
|
||||
* oder die neue E-Mail-Adresse bereits verwendet wird
|
||||
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen
|
||||
* oder gespeichert werden können
|
||||
*/
|
||||
public function updateUser($oldEmail, $newEmail, $vorname, $nachname, $password = null);
|
||||
|
||||
/**
|
||||
* Löscht einen Benutzer anhand seiner E-Mail-Adresse.
|
||||
*
|
||||
* Funktion:
|
||||
* Entfernt einen vorhandenen Benutzer aus der Datenquelle.
|
||||
*
|
||||
* Eingabe:
|
||||
* @param string $email E-Mail-Adresse des zu löschenden Benutzers
|
||||
*
|
||||
* Ausgabe:
|
||||
* @return bool true, wenn der Benutzer gelöscht wurde, sonst false
|
||||
*
|
||||
* Mögliche Fehler:
|
||||
* @throws InvalidArgumentException wenn die E-Mail-Adresse ungültig ist
|
||||
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen
|
||||
* oder gespeichert werden können
|
||||
*/
|
||||
public function deleteUser($email);
|
||||
}
|
||||
Reference in New Issue
Block a user