Compare commits

..

2 Commits

14 changed files with 36 additions and 101 deletions
-42
View File
@@ -1,42 +0,0 @@
<DataSourcesHistory>
<DataSourceFromHistory isRemovedFromProject="true">
<data-source source="LOCAL" name="articles" uuid="a0abcd0a-1d6f-40e4-88be-f442bcb431ba">
<database-info product="SQLite" version="3.51.1" jdbc-version="4.2" driver-name="SQLite JDBC" driver-version="3.51.1.0" dbms="SQLITE" exact-version="3.51.1" exact-driver-version="3.51">
<identifier-quote-string>&quot;</identifier-quote-string>
</database-info>
<case-sensitivity plain-identifiers="mixed" quoted-identifiers="mixed" />
<driver-ref>sqlite.xerial</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/db/articles</jdbc-url>
<secret-storage>master_key</secret-storage>
<auth-provider>no-auth</auth-provider>
<schema-mapping>
<introspection-scope>
<node kind="schema" qname="@" />
</introspection-scope>
</schema-mapping>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
</DataSourceFromHistory>
<DataSourceFromHistory isRemovedFromProject="false">
<data-source source="LOCAL" name="articles" uuid="315cb5c9-2b0f-435b-b602-59823b160908">
<database-info product="SQLite" version="3.51.1" jdbc-version="4.2" driver-name="SQLite JDBC" driver-version="3.51.1.0" dbms="SQLITE" exact-version="3.51.1" exact-driver-version="3.51">
<identifier-quote-string>&quot;</identifier-quote-string>
</database-info>
<case-sensitivity plain-identifiers="mixed" quoted-identifiers="mixed" />
<driver-ref>sqlite.xerial</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/db/articles</jdbc-url>
<secret-storage>master_key</secret-storage>
<auth-provider>no-auth</auth-provider>
<schema-mapping>
<introspection-scope>
<node kind="schema" qname="@" />
</introspection-scope>
</schema-mapping>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
</DataSourceFromHistory>
</DataSourcesHistory>
+4 -8
View File
@@ -19,17 +19,13 @@ Jeweils im Format `Anmeldename, Passwort, Mailadresse`:
- Bitte auf die gesetzten TODO's achten. Wenn Inhalte fehlen, sind sie i.d.R. als TODO kommentiert.
- Die Navbar hat noch keine onHover-Effekte und erschwert etwas die Bedienung.
- Suchleiste in der Nav ist in der mobilen Ansicht etwas schmal. Ggf. ein alternatives (kleineres) Logo implementieren.
- Die Suchseite und Kategorieseite packen momentan alle passenden Beiträge untereinander. Später sollen zunächst 10
Ergebnisse auf einer Seite angezeigt werden.
## Besonderheiten des Projektes
- Es wurde ein einfacher Beitrags-Editor erstellt. Mit diesem können Beiträge erstellt oder bearbeitet werden.
Es handelt es sich um eine einfache Version. Später sollen z.B. Bilder und die Positionierung der Elemente folgen.
- Es sind drei Dummy-Beiträge für den Nutzer max.mustermann hinterlegt.
- Beim Verwenden der Navbar-Links bitte Folgendes beachten: nur die Kategorien Physik, Mathe, Informatik führen
exemplarisch auf eine Beispiel-Seite.
- Beim Verwenden der Navbar-Links bitte Folgendes beachten: nur die Kategorien Physik, Mathe, Informatik führen exemplarisch auf eine Beispiel-Seite.
Die anderen Links sind erstmal Platzhalter und führen auf eine 404-Seite.
- Die Such-Seite umfasst eine Suchfunktion (aber noch nicht nach Tags) und Sortierfunktion. Jedoch fehlt noch eine
Filterfunktion (z.B. nur Mathe anzeigen).
Wenn die Filterfunktion implementiert ist, dann können die statischen Seiten "Informatik", "Mathe", "Physik" entfernt
und dynamisch auf der Suchseite nach gefiltertem Fach angezeigt werden. (Vorläufige showCategory.php implementiert).
- Die Such-Seite umfasst eine Suchfunktion (aber noch nicht nach Tags) und Sortierfunktion. Jedoch fehlt noch eine Filterfunktion (z.B. nur Mathe anzeigen).
Wenn die Filterfunktion implementiert ist, dann können die statischen Seiten "Informatik", "Mathe", "Physik" entfernt und dynamisch auf der Suchseite
nach gefiltertem Fach angezeigt werden. (Vorläufige showCategory.php implementiert)
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
require_once "php/model/LocalUserManager.php";
require_once "php/model/LocalUserDAO.php";
$dao = new LocalUserManager();
$dao = new LocalUserDAO();
/*
Deregistrierung
-5
View File
@@ -58,11 +58,6 @@ include_once 'php/controller/showArticle-controller.php';
Sie sind nicht berechtigt, diesen Beitrag zu bearbeiten.
</p>
<?php endif; ?>
<?php if (isset($_SESSION["message"]) && $_SESSION["message"] == "not_found_article"): ?>
<p class="alert-message is-error">
Der zu bearbeitende Artikel wurde nicht gefunden. Bitte versuche es erneut.
</p>
<?php endif; ?>
<?php
unset($_SESSION["message"]);
?>
+1 -1
View File
@@ -3,7 +3,7 @@ SESSION_START();
require_once '../model/LocalArticleManager.php';
require_once '../model/ArticleManager.php';
require_once '../validator/article-validator.php';
require_once "../model/LocalUserManager.php";
require_once "../model/LocalUserDAO.php";
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$_SESSION["old_title"] = $_POST["title"] ?? '';
+2 -2
View File
@@ -1,8 +1,8 @@
<?php
require_once "php/model/LocalUserManager.php";
require_once "php/model/LocalUserDAO.php";
$dao = new LocalUserManager();
$dao = new LocalUserDAO();
$error = null;
/*
+2 -2
View File
@@ -1,6 +1,6 @@
<?php
require_once "php/model/LocalUserManager.php";
require_once "php/model/LocalUserDAO.php";
require_once "php/model/Article.php";
require_once "php/model/ArticleManager.php";
require_once "php/validator/user-validator.php";
@@ -13,7 +13,7 @@ if (!isset($_SESSION["user"])) {
}
try {
$dao = new LocalUserManager();
$dao = new LocalUserDAO();
$user = $dao->findUser($_SESSION["user_email"] ?? "");
@@ -5,10 +5,10 @@
require_once 'php/model/Article.php';
require_once 'php/model/ArticleManager.php';
require_once "../model/LocalUserManager.php";
require_once "../model/LocalUserDAO.php";
try {
$dao = new LocalUserManager();
$dao = new LocalUserDAO();
$user = $dao->findUser($_SESSION["user_email"] ?? "");
$author = $user["email"];
+2 -2
View File
@@ -1,6 +1,6 @@
<?php
require_once "php/model/LocalUserManager.php";
require_once "php/model/LocalUserDAO.php";
require_once "php/validator/user-validator.php";
$error = null;
@@ -22,7 +22,7 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") {
$error = "Das Passwort muss 8 bis 72 Zeichen lang sein.";
} else {
try {
$dao = new LocalUserManager();
$dao = new LocalUserDAO();
$password = password_hash($plainPassword, PASSWORD_DEFAULT);
+12 -11
View File
@@ -20,7 +20,8 @@ interface ArticleManagerDAO
* @param $category string Kategorie des Beitrages
* @param $tags string optionale Schlagworte für eine bessere Suche
*
* @throws InternalServerErrorException
* Mögliche Exceptions:
* TODO: Exceptions implementieren.
*/
public function addArticle($title, $content, $author, $category, $tags);
@@ -36,33 +37,34 @@ interface ArticleManagerDAO
* @throws InternalServerErrorException
* @throws NotFoundException
* @throws UnauthorizedAccessException
* /
*/
public function updateArticle($id, $article, $author);
/**
* Löscht einen Beitrag aus übergebener ID und dem Nutzer, der die Löschung ausführt.
* Löscht einen Beitrag aus übergebener ID.
* @param $id
* @param $author
* @return void
* @throws InternalServerErrorException
* @throws NotFoundException
* @throws UnauthorizedAccessException
*
* TODO: Exceptions implementieren.
*/
public function deleteArticle($id, $author);
public function deleteArticle($id);
/**
* Beitrag aufrufen.
* $id ID des Beitrags
*
* @return Article
* @throws InternalServerErrorException
* Mögliche Exceptions:
* TODO: Exceptions implementieren.
*/
public function getArticle($id);
/**
* Alle Beiträge aufrufen.
*
* @throws InternalServerErrorException
* Mögliche Exceptions:
* TODO: Exceptions implementieren.
*/
public function getAllArticles();
@@ -70,7 +72,7 @@ interface ArticleManagerDAO
* Gibt alle Beiträge eines Nutzer mit einer gegebenen ID aus.
* @param $author
* @return Article[]
* @throws InternalServerErrorException
* TODO: Exceptions implementieren.
*/
public function getArticlesByAuthor($author);
@@ -87,7 +89,6 @@ interface ArticleManagerDAO
* Gibt alle Beiträge einer gegebenen Kategorie aus.
* @param $category
* @return mixed
* @throws InternalServerErrorException
*/
public function getArticlesByCategory($category);
+3 -13
View File
@@ -66,7 +66,7 @@ class LocalArticleManager implements ArticleManagerDAO {
public function updateArticle($id, $article, $author)
{
if (empty($article)) {
throw new NotFoundException("not_found_article");
throw new InternalServerErrorException("internal_error");
}
// Berechtigungsprüfung:
@@ -102,18 +102,8 @@ class LocalArticleManager implements ArticleManagerDAO {
}
}
public function deleteArticle($id, $author)
public function deleteArticle($id)
{
$article = getArticle($id);
if (empty($article)) {
throw new NotFoundException("not_found_article");
}
// Berechtigungsprüfung:
if ($article->getAuthor() !== $author) {
throw new UnauthorizedAccessException("unauthorized_access");
}
$articles = $this->getAllArticles();
$articleFound = false;
@@ -208,7 +198,7 @@ class LocalArticleManager implements ArticleManagerDAO {
}
}
return $filteredArticles;
return $filteredArticles;
}
public function getArticlesByCategory($category)
@@ -1,8 +1,8 @@
<?php
require_once "UserManagerDAO.php";
require_once "UserDAOInterface.php";
class LocalUserManager implements UserManagerDAO {
class LocalUserDAO implements UserDAOInterface {
private string $file = "data/users.json";
@@ -158,8 +158,6 @@ class LocalUserManager implements UserManagerDAO {
/**
* Löscht einen Benutzer anhand seiner E-Mail-Adresse.
*
* TODO: wenn ein Benutzer gelöscht wird, sollten dann auch seine Beiträge gelöscht werden?
*
* @param string $email E-Mail-Adresse des zu löschenden Benutzers
* @return bool true, wenn der Benutzer gelöscht wurde, sonst false
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen oder gespeichert werden können
@@ -6,7 +6,7 @@
* Definiert die Methoden, die jede UserDAO-Implementierung
* bereitstellen muss.
*/
interface UserManagerDAO {
interface UserDAOInterface {
/**
* Sucht einen Benutzer anhand seiner E-Mail-Adresse.
-3
View File
@@ -1,3 +0,0 @@
<?php
// TODO: implement this.
// dummy-user anlegen: - `max.mustermann, test123, mustermann@web.de`