Vor und Nachname separat speichern sowie Profilbearbeitung #18
+94
-28
@@ -1,36 +1,76 @@
|
|||||||
<?php
|
<?php
|
||||||
include_once 'php/controller/profile-controller.php';
|
include_once 'php/controller/profile-controller.php';
|
||||||
$user = $user ?? null;
|
|
||||||
?>
|
|
||||||
|
|
||||||
<!--
|
$user = $user ?? null;
|
||||||
Content: Profil
|
$isEditMode = isset($_GET["edit"]) && $_GET["edit"] === "1";
|
||||||
Inhalt: Das eigene Profil, wenn man angemeldet ist. Dort hat man die Möglichkeit seine Angaben zu ändern.
|
?>
|
||||||
-->
|
|
||||||
|
|
||||||
<main class="form-page">
|
<main class="form-page">
|
||||||
<div class="flexbox">
|
<div class="flexbox">
|
||||||
<!-- Linke Spalte: Profildaten -->
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<form>
|
|
||||||
<label class="input-label">Name</label>
|
<?php if (isset($error) && $error): ?>
|
||||||
|
<p style="color:red;">
|
||||||
|
<?php echo htmlspecialchars($error); ?>
|
||||||
|
</p>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<form method="post" action="index.php?pfad=profile">
|
||||||
|
|
||||||
|
<label class="input-label">Vorname</label>
|
||||||
<input type="text"
|
<input type="text"
|
||||||
|
name="vorname"
|
||||||
class="login-input"
|
class="login-input"
|
||||||
readonly
|
value="<?php echo htmlspecialchars($user["vorname"] ?? ""); ?>"
|
||||||
value="<?php echo htmlspecialchars($user["username"] ?? ""); ?>">
|
<?php echo $isEditMode ? "" : "readonly"; ?>
|
||||||
|
required>
|
||||||
|
|
||||||
|
<label class="input-label">Nachname</label>
|
||||||
|
<input type="text"
|
||||||
|
name="nachname"
|
||||||
|
class="login-input"
|
||||||
|
value="<?php echo htmlspecialchars($user["nachname"] ?? ""); ?>"
|
||||||
|
<?php echo $isEditMode ? "" : "readonly"; ?>
|
||||||
|
required>
|
||||||
|
|
||||||
<label class="input-label">Email-Adresse</label>
|
<label class="input-label">Email-Adresse</label>
|
||||||
<input type="email"
|
<input type="email"
|
||||||
|
name="email"
|
||||||
class="login-input"
|
class="login-input"
|
||||||
readonly
|
value="<?php echo htmlspecialchars($user["email"] ?? ""); ?>"
|
||||||
value="<?php echo htmlspecialchars($user["email"] ?? ""); ?>">
|
<?php echo $isEditMode ? "" : "readonly"; ?>
|
||||||
|
required>
|
||||||
|
|
||||||
<label class="input-label">Passwort</label>
|
<label class="input-label">
|
||||||
|
<?php echo $isEditMode ? "Neues Passwort" : "Passwort"; ?>
|
||||||
|
</label>
|
||||||
<input type="password"
|
<input type="password"
|
||||||
|
name="password"
|
||||||
class="login-input"
|
class="login-input"
|
||||||
readonly
|
placeholder="<?php echo $isEditMode ? "Leer lassen, wenn es gleich bleiben soll" : "********"; ?>"
|
||||||
value="********">
|
<?php echo $isEditMode ? "" : "readonly"; ?>>
|
||||||
|
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<?php if ($isEditMode): ?>
|
||||||
|
<button type="submit"
|
||||||
|
name="saveProfile"
|
||||||
|
class="button">
|
||||||
|
Speichern
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<a href="index.php?pfad=profile" class="button">
|
||||||
|
Abbrechen
|
||||||
|
</a>
|
||||||
|
<?php else: ?>
|
||||||
|
<a href="index.php?pfad=profile&edit=1" class="button">
|
||||||
|
Bearbeiten
|
||||||
|
</a>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
<a href="index.php?pfad=deleteAccount" class="button">
|
<a href="index.php?pfad=deleteAccount" class="button">
|
||||||
@@ -44,36 +84,53 @@ $user = $user ?? null;
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Rechte Spalte: Eigene Beiträge -->
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h2 class="section-title">Meine Beiträge</h2>
|
<h2 class="section-title">Meine Beiträge</h2>
|
||||||
|
|
||||||
<div class="articles-list">
|
<div class="articles-list">
|
||||||
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "internal_error"): ?>
|
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "internal_error"): ?>
|
||||||
|
|
||||||
<p class="alert-message is-error">
|
<p class="alert-message is-error">
|
||||||
Es ist ein interner Fehler aufgetreten. Bitte versuche es erneut.
|
Es ist ein interner Fehler aufgetreten. Bitte versuche es erneut.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<?php elseif (isset($userArticles) && count($userArticles) > 0): ?>
|
<?php elseif (isset($userArticles) && count($userArticles) > 0): ?>
|
||||||
|
|
||||||
<?php foreach ($userArticles as $userArticle): ?>
|
<?php foreach ($userArticles as $userArticle): ?>
|
||||||
<!-- Ein einzelner Artikel-Eintrag -->
|
|
||||||
<div class="article-item">
|
<div class="article-item">
|
||||||
<div class="article-meta">
|
<div class="article-meta">
|
||||||
<span class="article-date"><?php echo htmlspecialchars($userArticle->getCreationDate()); ?></span>
|
<span class="article-date">
|
||||||
<span class="article-category"><?php echo htmlspecialchars($userArticle->getCategory()); ?></span>
|
<?php echo htmlspecialchars($userArticle->getCreationDate()); ?>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<span class="article-category">
|
||||||
|
<?php echo htmlspecialchars($userArticle->getCategory()); ?>
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<h3 class="article-title"><?php echo htmlspecialchars($userArticle->getTitle()); ?></h3>
|
|
||||||
|
<h3 class="article-title">
|
||||||
|
<?php echo htmlspecialchars($userArticle->getTitle()); ?>
|
||||||
|
</h3>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
$tags = $userArticle->getTags();
|
$tags = $userArticle->getTags();
|
||||||
if (isset($tags) && !empty($tags)): ?>
|
if (isset($tags) && !empty($tags)):
|
||||||
|
?>
|
||||||
<div class="article-view-bottom-section">
|
<div class="article-view-bottom-section">
|
||||||
<div class="article-view-tags-label">Tags:</div>
|
<div class="article-view-tags-label">Tags:</div>
|
||||||
|
|
||||||
<div class="article-view-tags-list">
|
<div class="article-view-tags-list">
|
||||||
<?php
|
<?php
|
||||||
$tagArray = is_array($tags) ? $tags : explode(',', $tags);
|
$tagArray = is_array($tags) ? $tags : explode(',', $tags);
|
||||||
|
|
||||||
foreach ($tagArray as $tag):
|
foreach ($tagArray as $tag):
|
||||||
$trimmedTag = trim($tag);
|
$trimmedTag = trim($tag);
|
||||||
|
|
||||||
if (!empty($trimmedTag)):
|
if (!empty($trimmedTag)):
|
||||||
?>
|
?>
|
||||||
<span class="article-view-tag-item"><?php echo htmlspecialchars($trimmedTag); ?></span>
|
<span class="article-view-tag-item">
|
||||||
|
<?php echo htmlspecialchars($trimmedTag); ?>
|
||||||
|
</span>
|
||||||
<?php
|
<?php
|
||||||
endif;
|
endif;
|
||||||
endforeach;
|
endforeach;
|
||||||
@@ -81,18 +138,27 @@ $user = $user ?? null;
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<a href="index.php?pfad=updateArticle&id=<?php echo $userArticle->getID(); ?>" class="edit-link-button">Bearbeiten</a>
|
|
||||||
|
<a href="index.php?pfad=updateArticle&id=<?php echo $userArticle->getID(); ?>"
|
||||||
|
class="edit-link-button">
|
||||||
|
Bearbeiten
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
|
|
||||||
<?php else: ?>
|
<?php else: ?>
|
||||||
|
|
||||||
<p>Du hast noch keine Beiträge erstellt.</p>
|
<p>Du hast noch keine Beiträge erstellt.</p>
|
||||||
<button type="button" class="button" onclick="window.location.href='index.php?pfad=createArticle';">
|
|
||||||
|
<button type="button"
|
||||||
|
class="button"
|
||||||
|
onclick="window.location.href='index.php?pfad=createArticle';">
|
||||||
Beitrag erstellen!
|
Beitrag erstellen!
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<?php
|
|
||||||
unset($_SESSION["message"]);
|
<?php unset($_SESSION["message"]); ?>
|
||||||
?>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,6 @@ include_once 'php/controller/register-controller.php';
|
|||||||
$error = $error ?? null;
|
$error = $error ?? null;
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<!--
|
|
||||||
Form: Registrierung
|
|
||||||
Funktion: Erstellung neuer Benutzerkonten
|
|
||||||
-->
|
|
||||||
<main class="login-page">
|
<main class="login-page">
|
||||||
<div class="login-container">
|
<div class="login-container">
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,12 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") {
|
|||||||
|
|
||||||
if ($user && password_verify($password, $user["password"])) {
|
if ($user && password_verify($password, $user["password"])) {
|
||||||
|
|
||||||
$_SESSION["user"] = $user["username"];
|
if (isset($user["vorname"]) && isset($user["nachname"])) {
|
||||||
|
$_SESSION["user"] = $user["vorname"] . " " . $user["nachname"];
|
||||||
|
} else {
|
||||||
|
$_SESSION["user"] = $user["username"] ?? "";
|
||||||
|
}
|
||||||
|
|
||||||
$_SESSION["user_email"] = $user["email"];
|
$_SESSION["user_email"] = $user["email"];
|
||||||
|
|
||||||
header("Location: index.php");
|
header("Location: index.php");
|
||||||
@@ -27,4 +32,4 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") {
|
|||||||
} else {
|
} else {
|
||||||
$error = "Login fehlgeschlagen. Bitte überprüfe deine Eingaben.";
|
$error = "Login fehlgeschlagen. Bitte überprüfe deine Eingaben.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,28 +4,106 @@ require_once "php/model/LocalUserDAO.php";
|
|||||||
require_once 'php/model/Article.php';
|
require_once 'php/model/Article.php';
|
||||||
require_once 'php/model/ArticleManager.php';
|
require_once 'php/model/ArticleManager.php';
|
||||||
|
|
||||||
|
$error = null;
|
||||||
|
|
||||||
if (!isset($_SESSION["user"])) {
|
if (!isset($_SESSION["user"])) {
|
||||||
header("Location: index.php?pfad=login");
|
header("Location: index.php?pfad=login");
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
caroline.slt marked this conversation as resolved
Outdated
|
|||||||
|
|
||||||
try {
|
/*
|
||||||
$dao = new LocalUserDAO();
|
* Prüft Vor- und Nachnamen.
|
||||||
$user = $dao->findUser($_SESSION["user_email"] ?? "");
|
* Erlaubt sind Buchstaben, Umlaute, Leerzeichen und Bindestriche.
|
||||||
$articleManager = ArticleManager::getInstance();
|
*/
|
||||||
$userArticles = $articleManager->getArticlesByAuthor($_SESSION["user_email"]);
|
function isValidName($name): bool {
|
||||||
if(!isset($userArticles)) {
|
return preg_match("/^[a-zA-ZäöüÄÖÜß -]{2,50}$/", $name);
|
||||||
$_SESSION["message"] = "user_has_no_articles";
|
|
||||||
}
|
|
||||||
} catch (Exception $e) {
|
|
||||||
$_SESSION["message"] = "internal_error";
|
|
||||||
exit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$user) {
|
/*
|
||||||
$_SESSION = [];
|
* Prüft, ob die E-Mail-Adresse ein gültiges Format hat.
|
||||||
session_destroy();
|
*/
|
||||||
|
function isValidEmailAddress($email): bool {
|
||||||
|
return filter_var($email, FILTER_VALIDATE_EMAIL) !== false
|
||||||
|
&& strlen($email) <= 100;
|
||||||
|
}
|
||||||
|
|
||||||
header("Location: index.php?pfad=login");
|
/*
|
||||||
exit();
|
* Prüft das neue Passwort.
|
||||||
|
* Leeres Passwort ist erlaubt, wenn der Nutzer es nicht ändern möchte.
|
||||||
|
*/
|
||||||
|
function isValidProfilePassword($password): bool {
|
||||||
|
if ($password === "") {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
caroline.slt marked this conversation as resolved
Outdated
niklas.ortmann
commented
Eingabevalidierung fehlt noch. Eingabevalidierung fehlt noch.
Was darf ein Nutzer überhaupt alles eingeben? Z.B. Buchstaben a-z, A-Z, Sonderzeichen?
(Wenn du das zu dieser Abgabe nicht schaffst, dann bitte ein TODO setzen, dass das später noch erfolgt (wichtig) und einen Hinweis in der ReadMe hinterlassen)!
|
|||||||
|
return strlen($password) >= 8 && strlen($password) <= 72;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$dao = new LocalUserDAO();
|
||||||
|
|
||||||
|
$user = $dao->findUser($_SESSION["user_email"] ?? "");
|
||||||
|
|
||||||
|
if (!$user) {
|
||||||
|
$_SESSION = [];
|
||||||
|
session_destroy();
|
||||||
|
|
||||||
|
header("Location: index.php?pfad=login");
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($_SERVER["REQUEST_METHOD"] === "POST" && isset($_POST["saveProfile"])) {
|
||||||
|
$oldEmail = $_SESSION["user_email"];
|
||||||
|
|
||||||
|
$newEmail = trim($_POST["email"] ?? "");
|
||||||
|
$vorname = trim($_POST["vorname"] ?? "");
|
||||||
|
$nachname = trim($_POST["nachname"] ?? "");
|
||||||
|
$password = $_POST["password"] ?? "";
|
||||||
|
|
||||||
|
if (!isValidName($vorname)) {
|
||||||
|
$error = "Der Vorname darf nur Buchstaben, Leerzeichen und Bindestriche enthalten und muss 2 bis 50 Zeichen lang sein.";
|
||||||
|
} elseif (!isValidName($nachname)) {
|
||||||
|
$error = "Der Nachname darf nur Buchstaben, Leerzeichen und Bindestriche enthalten und muss 2 bis 50 Zeichen lang sein.";
|
||||||
|
} elseif (!isValidEmailAddress($newEmail)) {
|
||||||
|
$error = "Bitte gib eine gültige E-Mail-Adresse ein.";
|
||||||
|
} elseif (!isValidProfilePassword($password)) {
|
||||||
|
$error = "Das Passwort muss mindestens 8 Zeichen lang sein.";
|
||||||
|
} else {
|
||||||
|
$existingUser = $dao->findUser($newEmail);
|
||||||
|
|
||||||
|
if ($existingUser && $newEmail !== $oldEmail) {
|
||||||
|
$error = "Diese E-Mail-Adresse wird bereits verwendet.";
|
||||||
|
} else {
|
||||||
|
$updated = $dao->updateUser(
|
||||||
|
$oldEmail,
|
||||||
|
$newEmail,
|
||||||
|
$vorname,
|
||||||
|
$nachname,
|
||||||
|
$password
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($updated) {
|
||||||
|
$_SESSION["user"] = $vorname . " " . $nachname;
|
||||||
|
$_SESSION["user_email"] = $newEmail;
|
||||||
|
|
||||||
|
header("Location: index.php?pfad=profile");
|
||||||
|
exit();
|
||||||
|
} else {
|
||||||
|
$error = "Die Daten konnten nicht gespeichert werden.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$user = $dao->findUser($_SESSION["user_email"] ?? "");
|
||||||
|
|
||||||
|
$articleManager = ArticleManager::getInstance();
|
||||||
|
$userArticles = $articleManager->getArticlesByAuthor($_SESSION["user_email"]);
|
||||||
|
|
||||||
|
if (!isset($userArticles)) {
|
||||||
|
$_SESSION["message"] = "user_has_no_articles";
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$_SESSION["message"] = "internal_error";
|
||||||
}
|
}
|
||||||
@@ -5,10 +5,6 @@ require_once "php/model/LocalUserDAO.php";
|
|||||||
$dao = new LocalUserDAO();
|
$dao = new LocalUserDAO();
|
||||||
$error = null;
|
$error = null;
|
||||||
|
|
||||||
/*
|
|
||||||
Verarbeitung des Registrierungs-Formulars
|
|
||||||
Funktion: Erstellt neuen Benutzer und speichert ihn im DAO + Session
|
|
||||||
*/
|
|
||||||
if ($_SERVER["REQUEST_METHOD"] === "POST") {
|
if ($_SERVER["REQUEST_METHOD"] === "POST") {
|
||||||
|
|
||||||
$email = $_POST["email"] ?? "";
|
$email = $_POST["email"] ?? "";
|
||||||
@@ -27,7 +23,8 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") {
|
|||||||
|
|
||||||
$dao->addUser(
|
$dao->addUser(
|
||||||
$email,
|
$email,
|
||||||
$vorname . " " . $nachname,
|
$vorname,
|
||||||
|
$nachname,
|
||||||
$password
|
$password
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -37,4 +34,4 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") {
|
|||||||
header("Location: index.php");
|
header("Location: index.php");
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+100
-5
@@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once "UserDAOInterface.php";
|
require_once "UserDAOInterface.php";
|
||||||
|
|
||||||
class LocalUserDAO implements UserDAOInterface {
|
class LocalUserDAO implements UserDAOInterface {
|
||||||
@@ -11,23 +12,65 @@ class LocalUserDAO implements UserDAOInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$json = file_get_contents($this->file);
|
$json = file_get_contents($this->file);
|
||||||
|
|
||||||
|
if ($json === false) {
|
||||||
|
throw new RuntimeException("Benutzerdaten konnten nicht gelesen werden.");
|
||||||
|
}
|
||||||
|
|
||||||
$users = json_decode($json, true);
|
$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 : [];
|
return is_array($users) ? $users : [];
|
||||||
}
|
}
|
||||||
|
|
||||||
private function saveUsers($users) {
|
private function saveUsers($users) {
|
||||||
file_put_contents(
|
$result = file_put_contents(
|
||||||
$this->file,
|
$this->file,
|
||||||
json_encode($users, JSON_PRETTY_PRINT)
|
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."
|
||||||
|
);
|
||||||
|
caroline.slt marked this conversation as resolved
Outdated
niklas.ortmann
commented
Werden die Daten überprüft? Werden die Daten überprüft?
Können Fehler auftreten?
Werden Exceptions geworfen, abgefangen und an die Instanz, die diese Methode aufruft, weitergegeben?
|
|||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function validatePassword($password) {
|
||||||
|
if (empty($password)) {
|
||||||
|
throw new InvalidArgumentException("Passwort darf nicht leer sein.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function findUser($email) {
|
public function findUser($email) {
|
||||||
|
$this->validateEmail($email);
|
||||||
|
|
||||||
$users = $this->loadUsers();
|
$users = $this->loadUsers();
|
||||||
|
|
||||||
foreach ($users as $user) {
|
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;
|
return $user;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -35,23 +78,75 @@ class LocalUserDAO implements UserDAOInterface {
|
|||||||
return null;
|
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();
|
$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[] = [
|
$users[] = [
|
||||||
"email" => $email,
|
"email" => $email,
|
||||||
"username" => $username,
|
"vorname" => $vorname,
|
||||||
|
"nachname" => $nachname,
|
||||||
"password" => $password
|
"password" => $password
|
||||||
];
|
];
|
||||||
|
|
||||||
$this->saveUsers($users);
|
$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) {
|
public function deleteUser($email) {
|
||||||
|
$this->validateEmail($email);
|
||||||
|
|
||||||
$users = $this->loadUsers();
|
$users = $this->loadUsers();
|
||||||
|
|
||||||
foreach ($users as $i => $user) {
|
foreach ($users as $i => $user) {
|
||||||
if ($user["email"] === $email) {
|
if (isset($user["email"]) && $user["email"] === $email) {
|
||||||
unset($users[$i]);
|
unset($users[$i]);
|
||||||
$users = array_values($users);
|
$users = array_values($users);
|
||||||
$this->saveUsers($users);
|
$this->saveUsers($users);
|
||||||
|
|||||||
@@ -11,26 +11,85 @@ interface UserDAOInterface {
|
|||||||
/**
|
/**
|
||||||
* Sucht einen Benutzer anhand seiner E-Mail-Adresse.
|
* 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
|
* @param string $email E-Mail-Adresse des gesuchten Benutzers
|
||||||
|
*
|
||||||
|
* Ausgabe:
|
||||||
* @return array|null Benutzerdaten als Array oder null
|
* @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);
|
public function findUser($email);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fügt einen neuen Benutzer hinzu.
|
* 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 $email E-Mail-Adresse des Benutzers
|
||||||
* @param string $username Benutzername des Benutzers
|
* @param string $vorname Vorname des Benutzers
|
||||||
|
caroline.slt marked this conversation as resolved
Outdated
niklas.ortmann
commented
Die möglichen Exceptions müssen angeben werden. Die möglichen Exceptions müssen angeben werden.
(Können wir auch noch nachreichen, aber dann würde ich hier zumindest ein TODO schreiben, dass das noch gemacht werden muss).
|
|||||||
|
* @param string $nachname Nachname des Benutzers
|
||||||
* @param string $password Passwort des Benutzers
|
* @param string $password Passwort des Benutzers
|
||||||
|
*
|
||||||
|
* Ausgabe:
|
||||||
* @return void
|
* @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.
|
* 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
|
* @param string $email E-Mail-Adresse des zu löschenden Benutzers
|
||||||
|
*
|
||||||
|
* Ausgabe:
|
||||||
* @return bool true, wenn der Benutzer gelöscht wurde, sonst false
|
* @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);
|
public function deleteUser($email);
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user
Das sollte zwingend im try-Block bleiben. Wenn beim Instanziieren eines LocalUserDAO ein fehler auftritt, dann wird dieser nicht abgefangen!