Merge branch 'PaginatorOhneJS2' into dev
This commit is contained in:
@@ -17,37 +17,12 @@ if ($_SERVER["REQUEST_METHOD"] === "GET" && isset($_GET["q"])) {
|
||||
$_SESSION["message"] = "invalid_search_query";
|
||||
} else {
|
||||
try {
|
||||
|
||||
|
||||
$articleManager = ArticleManager::getInstance();
|
||||
$userManager = UserManager::getInstance();
|
||||
|
||||
|
||||
$results = $articleManager->search($search);
|
||||
|
||||
$sortStyle = $_GET['sort'] ?? 'alphabet';
|
||||
$_SESSION['search_sort'] = $sortStyle;
|
||||
|
||||
if ($sortStyle === 'alphabet') {
|
||||
// Titel aufsteigend alphabetiisch sortiert
|
||||
usort($results, function ($a, $b) {
|
||||
return strcasecmp($a->getTitle(), $b->getTitle());
|
||||
});
|
||||
} elseif ($sortStyle === 'likes') {
|
||||
usort($results, function($a, $b) {
|
||||
return $b->getLikeCount() <=> $a->getLikeCount();
|
||||
});
|
||||
} elseif ($sortStyle === 'newest') {
|
||||
// Datum neu zu alt sortiert
|
||||
usort($results, function($a, $b) {
|
||||
return strcmp($b->getCreationDate(), $a->getCreationDate());
|
||||
});
|
||||
} elseif ($sortStyle === 'oldest') {
|
||||
// Datum alt zu neu sortiert
|
||||
usort($results, function($a, $b) {
|
||||
return strcmp($a->getCreationDate(), $b->getCreationDate());
|
||||
});
|
||||
}
|
||||
|
||||
// Ergebnisse werden in ein flaches array umgewandelt, da sont incomplete-PHP error im Ergebnis
|
||||
$safeArrayResults = [];
|
||||
foreach ($results as $obj) {
|
||||
$safeArrayResults[] = [
|
||||
@@ -61,25 +36,30 @@ if ($_SERVER["REQUEST_METHOD"] === "GET" && isset($_GET["q"])) {
|
||||
"likes" => $obj->getLikes(),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
$_SESSION["search_results"] = $safeArrayResults;
|
||||
$_SESSION["search_query"] = $search;
|
||||
$_SESSION["message"] = "new_search_results";
|
||||
|
||||
} catch (Exception $e){
|
||||
} catch (Exception $e) {
|
||||
$_SESSION["message"] = "internal_error";
|
||||
}
|
||||
}
|
||||
|
||||
$sort = $_GET['sort'] ?? 'alphabet';
|
||||
$sort = $_GET['sort'] ?? 'alphabet';
|
||||
$_SESSION['search_sort'] = $sort;
|
||||
|
||||
$category = $_GET['category'] ?? 'all';
|
||||
$_SESSION['search_category'] = $category;
|
||||
|
||||
$limit = isset($_GET['limit']) ? (int)$_GET['limit'] : 10;
|
||||
if (!searchLimitValidator($limit)) {
|
||||
$limit = 10;
|
||||
}
|
||||
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
|
||||
header("Location: ../../index.php?pfad=search-results&q=" . urlencode($search) . "&sort=" . urlencode($sort) . "&limit=" . $limit . "&page=" . $page);
|
||||
exit();
|
||||
|
||||
}
|
||||
$_SESSION['search_limit'] = $limit;
|
||||
|
||||
?>
|
||||
// Neue Suche -> immer wieder bei Seite 1 beginnen
|
||||
header("Location: ../../index.php?pfad=search-results&q=" . urlencode($search) . "&sort=" . urlencode($sort) . "&category=" . urlencode($category) . "&limit=" . $limit . "&page=1");
|
||||
exit();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
/**
|
||||
* Liefert den vollständigen, zuletzt gefundenen Ergebnis-Datensatz als JSON.
|
||||
*
|
||||
* Wird von js/search-results.js EINMALIG per fetch() geladen, damit Sortierung,
|
||||
* Filterung und Pagination danach komplett im Browser laufen können, ohne
|
||||
* weitere Serveranfragen oder eine erneute Datenbank-Suche auszulösen.
|
||||
*/
|
||||
if (session_status() === PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
require_once __DIR__ . '/../../includes/resultsHelper.php';
|
||||
|
||||
$rawResults = $_SESSION['search_results'] ?? [];
|
||||
|
||||
$payload = array_map(function ($item) {
|
||||
return [
|
||||
'id' => $item['id'],
|
||||
'title' => $item['title'],
|
||||
'author' => $item['author'],
|
||||
'category' => $item['category'] ?? '',
|
||||
'likes' => getLikeCount($item),
|
||||
];
|
||||
}, $rawResults);
|
||||
|
||||
echo json_encode([
|
||||
'query' => $_SESSION['search_query'] ?? '',
|
||||
'results' => array_values($payload),
|
||||
]);
|
||||
@@ -2,66 +2,51 @@
|
||||
if (session_status() === PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
require_once 'php/model/Article.php';
|
||||
require_once 'php/model/ArticleManager.php';
|
||||
require_once 'php/model/UserManager.php';
|
||||
require_once 'php/validator/article-validator.php';
|
||||
require_once __DIR__ . '/../../includes/resultsHelper.php';
|
||||
|
||||
if (isset($_GET["category"]) && !empty($_GET["category"]) && articleCategoryValidator($_GET["category"])) {
|
||||
|
||||
if (isset($_GET["category"]) && !empty($_GET["category"]) && articleCategoryValidator($_GET["category"])){
|
||||
$category = $_GET["category"];
|
||||
|
||||
// Sortierung auslesen (Standard: alphabet)
|
||||
$sortStyle = isset($_GET['sort']) ? trim($_GET['sort']) : 'alphabet';
|
||||
|
||||
// Aktuelle Seite auslesen
|
||||
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
|
||||
if ($page < 1) { $page = 1; }
|
||||
|
||||
try {
|
||||
$articleManager = ArticleManager::getInstance();
|
||||
$userManager = UserManager::getInstance();
|
||||
|
||||
$allArticles = $articleManager->getArticlesByCategory($category);
|
||||
|
||||
$safeArrayResults = [];
|
||||
foreach ($allArticles as $article) {
|
||||
$article->setAuthor($userManager->findUser($article->getAuthor())["vorname"] . " " . $userManager->findUser($article->getAuthor())["nachname"]);
|
||||
}
|
||||
$totalArticles = count($allArticles);
|
||||
|
||||
// --- SORTIERUNG LOGIK ---
|
||||
if ($sortStyle === 'alphabet') {
|
||||
usort($allArticles, function($a, $b) {
|
||||
return strcasecmp($a->getTitle(), $b->getTitle());
|
||||
});
|
||||
} elseif ($sortStyle === 'likes') {
|
||||
usort($allArticles, function($a, $b) {
|
||||
return $b->getLikes() <=> $a->getLikes(); // Absteigend nach Likes
|
||||
});
|
||||
} elseif ($sortStyle === 'newest') {
|
||||
usort($allArticles, function($a, $b) {
|
||||
return strtotime($b->getCreationDate()) <=> strtotime($a->getCreationDate()); // Neueste zuerst
|
||||
});
|
||||
} elseif ($sortStyle === 'oldest') {
|
||||
usort($allArticles, function($a, $b) {
|
||||
return strtotime($a->getCreationDate()) <=> strtotime($b->getCreationDate()); // Älteste zuerst
|
||||
});
|
||||
$authorName = $userManager->findUser($article->getAuthor())["vorname"] . " " . $userManager->findUser($article->getAuthor())["nachname"];
|
||||
$safeArrayResults[] = [
|
||||
"id" => $article->getID(),
|
||||
"title" => $article->getTitle(),
|
||||
"content" => $article->getContent(),
|
||||
"author" => $authorName,
|
||||
"category" => $article->getCategory(),
|
||||
"tags" => $article->getTags(),
|
||||
"creationDate" => $article->getCreationDate(),
|
||||
"likes" => $article->getLikes(),
|
||||
];
|
||||
}
|
||||
|
||||
// Paginierung konfigurieren
|
||||
$limit = 10;
|
||||
$totalPages = ceil($totalArticles / $limit);
|
||||
if ($page > $totalPages && $totalPages > 0) { $page = $totalPages; }
|
||||
|
||||
$offset = ($page - 1) * $limit;
|
||||
$articles = array_slice($allArticles, $offset, $limit);
|
||||
// Session dient hier (wie bei search-results) als Zwischenspeicher, damit
|
||||
// js/showCategory.js den kompletten Datensatz per showCategory-data.php
|
||||
// nachladen kann, ohne die Kategorie-Abfrage ein zweites Mal auszuführen.
|
||||
$_SESSION['category_results'] = $safeArrayResults;
|
||||
$_SESSION['category_name'] = $category;
|
||||
|
||||
} catch (Exception $e) {
|
||||
$_SESSION["message"] = "internal_error";
|
||||
include_once "content/404.php";
|
||||
exit();
|
||||
}
|
||||
|
||||
} else {
|
||||
$_SESSION["message"] = "invalid_category";
|
||||
include_once "content/404.php";
|
||||
exit();
|
||||
}
|
||||
?>
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/**
|
||||
* Liefert den vollständigen, zuletzt geladenen Kategorie-Datensatz als JSON.
|
||||
*
|
||||
* Wird von js/showCategory.js EINMALIG per fetch() geladen, damit Sortierung,
|
||||
* Suche und Pagination danach komplett im Browser laufen können, ohne
|
||||
* weitere Serveranfragen oder eine erneute Datenbank-Abfrage auszulösen
|
||||
*
|
||||
* Analog zu php/controller/search-results-data.php
|
||||
*/
|
||||
if (session_status() === PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
require_once __DIR__ . '/../../includes/resultsHelper.php';
|
||||
|
||||
$rawResults = $_SESSION['category_results'] ?? [];
|
||||
|
||||
$payload = array_map(function ($item) {
|
||||
return [
|
||||
'id' => $item['id'],
|
||||
'title' => $item['title'],
|
||||
'content' => $item['content'] ?? '',
|
||||
'author' => $item['author'],
|
||||
'category' => $item['category'] ?? '',
|
||||
'likes' => getLikeCount($item),
|
||||
];
|
||||
}, $rawResults);
|
||||
|
||||
echo json_encode([
|
||||
'category' => $_SESSION['category_name'] ?? '',
|
||||
'results' => array_values($payload),
|
||||
]);
|
||||
Reference in New Issue
Block a user