Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 35d4425086 | |||
| d3435d4cde | |||
| f61c548b9e | |||
| 101a2a247b | |||
| 423941e7ed | |||
| a8e76c782d | |||
| 3f9c048493 | |||
| fee5a701df | |||
| d341312192 | |||
| 4dadfb8863 |
@@ -45,7 +45,7 @@ $resultCount = count($results);
|
|||||||
<!-- Links: Seitenleiste für Filter und Suche -->
|
<!-- Links: Seitenleiste für Filter und Suche -->
|
||||||
<aside class="s-res-sidebar">
|
<aside class="s-res-sidebar">
|
||||||
|
|
||||||
<!-- Sortierfuntion Box und Such Box-->
|
<!-- Sortierfuntion Box und Such Box-->
|
||||||
<form action="php/controller/search-results-controller.php" method="GET" id="search-form-id" class="s-res-sidebar-form">
|
<form action="php/controller/search-results-controller.php" method="GET" id="search-form-id" class="s-res-sidebar-form">
|
||||||
|
|
||||||
<input type="hidden" id="s-res-page-input" name="page" value="<?php echo $_GET['page'] ?? 1; ?>">
|
<input type="hidden" id="s-res-page-input" name="page" value="<?php echo $_GET['page'] ?? 1; ?>">
|
||||||
@@ -131,7 +131,7 @@ $resultCount = count($results);
|
|||||||
<?php foreach ($results as $item):
|
<?php foreach ($results as $item):
|
||||||
// Anzahl der Likes ermitteln (falls es ein Array ist, zählen; falls Zahl, direkt nutzen)
|
// Anzahl der Likes ermitteln (falls es ein Array ist, zählen; falls Zahl, direkt nutzen)
|
||||||
$likesCount = isset($item['likes']) && is_array($item['likes']) ? count($item['likes']) : ($item['likes'] ?? 0);
|
$likesCount = isset($item['likes']) && is_array($item['likes']) ? count($item['likes']) : ($item['likes'] ?? 0);
|
||||||
?>
|
?>
|
||||||
<div class="s-res-item" data-likes="<?php echo $likesCount; ?>" data-category="<?php echo strtolower($item['category'] ?? ''); ?>">
|
<div class="s-res-item" data-likes="<?php echo $likesCount; ?>" data-category="<?php echo strtolower($item['category'] ?? ''); ?>">
|
||||||
<div class="s-res-content">
|
<div class="s-res-content">
|
||||||
<h2 class="s-res-item-title">
|
<h2 class="s-res-item-title">
|
||||||
|
|||||||
@@ -2,99 +2,49 @@
|
|||||||
if (session_status() === PHP_SESSION_NONE) {
|
if (session_status() === PHP_SESSION_NONE) {
|
||||||
session_start();
|
session_start();
|
||||||
}
|
}
|
||||||
ob_start();
|
include_once "php/controller/index-controller.php";
|
||||||
include_once("php/controller/index.php");
|
|
||||||
|
|
||||||
$pfad = $_GET["pfad"] ?? "home";
|
|
||||||
|
|
||||||
/*
|
|
||||||
Controller für Aktionen werden vor der HTML-Ausgabe geladen,
|
|
||||||
damit Weiterleitungen mit header() funktionieren.
|
|
||||||
*/
|
|
||||||
if ($pfad === "login") {
|
|
||||||
include_once "php/controller/login-controller.php";
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($pfad === "register") {
|
|
||||||
include_once "php/controller/register-controller.php";
|
|
||||||
}
|
|
||||||
if ($pfad === "password-forgotten") {
|
|
||||||
include_once "php/controller/password-forgotten-controller.php";
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($pfad === "confirm-register") {
|
|
||||||
include_once "php/controller/confirm-register-controller.php";
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($pfad === "confirm-password") {
|
|
||||||
include_once "php/controller/confirm-password-controller.php";
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($pfad === "logout") {
|
|
||||||
include_once "php/controller/logout-controller.php";
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($pfad === "deleteAccount") {
|
|
||||||
include_once "php/controller/deleteAccount-controller.php";
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
?>
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="description" content="EduForge">
|
||||||
|
<meta name="author" content="Niklas Ortmann">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link rel="icon" type="image/x-icon" href="images/logos/logo_icon.ico">
|
||||||
|
|
||||||
<!--
|
<link rel="stylesheet" href="css/main.css">
|
||||||
Seite: Index der Lernplattform
|
<link rel="stylesheet" href="css/navbar.css">
|
||||||
Funktion: Webseitengerüst, Anzeigen von Content
|
<link rel="stylesheet" href="css/footer.css">
|
||||||
-->
|
<link rel="stylesheet" href="css/search-results.css">
|
||||||
<!DOCTYPE html>
|
<link rel="stylesheet" href="css/createArticle.css">
|
||||||
<html lang="de">
|
<link rel="stylesheet" href="css/profile.css">
|
||||||
|
<link rel="stylesheet" href="css/showArticle.css">
|
||||||
|
<link rel="stylesheet" href="css/message.css">
|
||||||
|
<link rel="stylesheet" href="css/showCategory.css">
|
||||||
|
|
||||||
<head>
|
<script src="js/paginator.js" async></script>
|
||||||
<meta charset="utf-8">
|
<script src="js/sorter.js" async></script>
|
||||||
<meta name="description" content="EduForge">
|
<script src="js/comments.js" defer></script>
|
||||||
<meta name="author" content="Niklas Ortmann">
|
<script src="js/editor.js" async></script>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<script src="js/filter.js" async></script>
|
||||||
<link rel="icon" type="image/x-icon" href="images/logos/logo_icon.ico">
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="css/main.css">
|
<title>EduForge</title>
|
||||||
<link rel="stylesheet" href="css/navbar.css">
|
</head>
|
||||||
<link rel="stylesheet" href="css/footer.css">
|
<body>
|
||||||
<link rel="stylesheet" href="css/search-results.css">
|
|
||||||
<link rel="stylesheet" href="css/createArticle.css">
|
|
||||||
<link rel="stylesheet" href="css/profile.css">
|
|
||||||
<link rel="stylesheet" href="css/showArticle.css">
|
|
||||||
<link rel="stylesheet" href="css/message.css">
|
|
||||||
<link rel="stylesheet" href="css/showCategory.css">
|
|
||||||
|
|
||||||
<script src="js/paginator.js" async></script>
|
|
||||||
<script src="js/sorter.js" async></script>
|
|
||||||
<script src="js/comments.js" defer></script>
|
|
||||||
<script src="js/editor.js" async></script>
|
|
||||||
<script src="js/filter.js" async></script>
|
|
||||||
|
|
||||||
<title>EduForge</title>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<?php
|
|
||||||
include_once 'includes/navbar.php';
|
|
||||||
|
|
||||||
/*
|
|
||||||
Dynamischer Inhalt:
|
|
||||||
Je nach pfad-Parameter wird die passende Datei aus content geladen.
|
|
||||||
*/
|
|
||||||
if (file_exists('content/' . $pfad . '.php')) {
|
|
||||||
include_once 'content/' . $pfad . '.php';
|
|
||||||
} else {
|
|
||||||
include_once 'content/404.php';
|
|
||||||
}
|
|
||||||
|
|
||||||
include_once 'includes/footer.php';
|
|
||||||
?>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
ob_end_flush();
|
include_once 'includes/navbar.php';
|
||||||
|
|
||||||
|
// Dynamischer Inhalt
|
||||||
|
if (isset($pfad) && $pfad !== "404" && file_exists('content/' . $pfad . '.php')) {
|
||||||
|
include_once 'content/' . $pfad . '.php';
|
||||||
|
} else {
|
||||||
|
include_once 'content/404.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
include_once 'includes/footer.php';
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|||||||
+3
-3
@@ -1,13 +1,13 @@
|
|||||||
console.log("editor.js wurde erfolgreich geladen!");
|
console.log("Die JavaScript-Datei wurde erfolgreich geladen!");
|
||||||
|
|
||||||
function initEditor() {
|
function initEditor() {
|
||||||
const form = document.getElementById("editor-form");
|
const form = document.getElementById("editor-form");
|
||||||
|
|
||||||
if (!form) {
|
if (!form) {
|
||||||
console.error("editor.js wurde abgebrochen: Formular nicht gefunden!");
|
console.error("Skript abgebrochen: Formular nicht gefunden!");
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
console.log("Formular gefunden und editor.js initialisiert:", form);
|
console.log("Formular gefunden und Editor initialisiert:", form);
|
||||||
}
|
}
|
||||||
|
|
||||||
const container = document.getElementById("block-container");
|
const container = document.getElementById("block-container");
|
||||||
|
|||||||
+21
-223
@@ -1,229 +1,27 @@
|
|||||||
console.log("editor.js wurde erfolgreich geladen!");
|
function initPaginator() {
|
||||||
(function () {
|
const form = document.getElementById('search-form-id');
|
||||||
'use strict';
|
const pageInput = document.getElementById('s-res-page-input');
|
||||||
|
const pageButtons = document.querySelectorAll('.s-res-page-navigation .s-res-page-btn');
|
||||||
|
|
||||||
const state = {
|
pageButtons.forEach(button => {
|
||||||
items: [],
|
button.addEventListener('click', function() {
|
||||||
sorted: [],
|
if (this.disabled) return;
|
||||||
category: 'all',
|
|
||||||
sort: 'alphabet',
|
|
||||||
limit: 10,
|
|
||||||
page: 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
function loadData() {
|
const targetPage = this.getAttribute('data-page');
|
||||||
const el = document.getElementById('s-res-data');
|
|
||||||
if (!el) return [];
|
|
||||||
try {
|
|
||||||
return JSON.parse(el.textContent);
|
|
||||||
} catch (e) {
|
|
||||||
console.error('Suchergebnis-Daten konnten nicht gelesen werden', e);
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function applyFilterAndSort() {
|
if (targetPage && form && pageInput) {
|
||||||
let list = state.items.slice();
|
pageInput.value = targetPage;
|
||||||
|
form.submit();
|
||||||
if (state.category && state.category !== 'all') {
|
|
||||||
list = list.filter(item => (item.category || '') === state.category);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (state.sort) {
|
|
||||||
case 'likes':
|
|
||||||
list.sort((a, b) => (b.likes || 0) - (a.likes || 0));
|
|
||||||
break;
|
|
||||||
case 'newest':
|
|
||||||
list.sort((a, b) => (b.creationDate || '').localeCompare(a.creationDate || ''));
|
|
||||||
break;
|
|
||||||
case 'oldest':
|
|
||||||
list.sort((a, b) => (a.creationDate || '').localeCompare(b.creationDate || ''));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
list.sort((a, b) => (a.title || '').localeCompare(b.title || '', 'de', { sensitivity: 'base' }));
|
|
||||||
}
|
|
||||||
|
|
||||||
state.sorted = list;
|
|
||||||
const totalPages = Math.max(1, Math.ceil(state.sorted.length / state.limit));
|
|
||||||
state.page = Math.min(Math.max(state.page, 1), totalPages);
|
|
||||||
}
|
|
||||||
|
|
||||||
function el(tag, className, text) {
|
|
||||||
const e = document.createElement(tag);
|
|
||||||
if (className) e.className = className;
|
|
||||||
if (text !== undefined) e.textContent = text;
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderList() {
|
|
||||||
const container = document.querySelector('.s-res-list');
|
|
||||||
if (!container) return;
|
|
||||||
|
|
||||||
const start = (state.page - 1) * state.limit;
|
|
||||||
const pageItems = state.sorted.slice(start, start + state.limit);
|
|
||||||
|
|
||||||
container.innerHTML = '';
|
|
||||||
|
|
||||||
if (pageItems.length === 0) {
|
|
||||||
container.appendChild(el('p', null, 'Keine Beiträge zu diesem Suchbegriff gefunden.'));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
pageItems.forEach(item => {
|
|
||||||
const item_el = el('div', 's-res-item');
|
|
||||||
item_el.dataset.likes = item.likes;
|
|
||||||
item_el.dataset.category = item.category;
|
|
||||||
|
|
||||||
const link = el('a', 's-res-link', item.title);
|
|
||||||
link.href = 'index.php?pfad=showArticle&id=' + encodeURIComponent(item.id);
|
|
||||||
|
|
||||||
const title = el('h2', 's-res-item-title');
|
|
||||||
title.appendChild(link);
|
|
||||||
|
|
||||||
const authorName = el('span', 's-res-author-name', item.author);
|
|
||||||
const author = el('p', 's-res-author', 'Von: ');
|
|
||||||
author.appendChild(authorName);
|
|
||||||
|
|
||||||
const likes = el('span', 's-res-likes', '❤️ ' + item.likes);
|
|
||||||
|
|
||||||
const metaRow = el('div', 's-res-meta-row');
|
|
||||||
metaRow.appendChild(author);
|
|
||||||
metaRow.appendChild(likes);
|
|
||||||
|
|
||||||
const content = el('div', 's-res-content');
|
|
||||||
content.appendChild(title);
|
|
||||||
content.appendChild(metaRow);
|
|
||||||
|
|
||||||
item_el.appendChild(content);
|
|
||||||
item_el.appendChild(el('div', 's-res-arrow', '→'));
|
|
||||||
|
|
||||||
container.appendChild(item_el);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderMeta() {
|
|
||||||
const metaEl = document.querySelector('.s-res-meta');
|
|
||||||
const queryInput = document.getElementById('site-search');
|
|
||||||
if (metaEl) {
|
|
||||||
const q = queryInput ? queryInput.value : '';
|
|
||||||
metaEl.textContent = state.sorted.length + ' Treffer für Ihre Suchanfrage "' + q + '"';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderPagination() {
|
|
||||||
const nav = document.querySelector('.s-res-page-navigation');
|
|
||||||
if (!nav) return;
|
|
||||||
|
|
||||||
const totalPages = Math.max(1, Math.ceil(state.sorted.length / state.limit));
|
|
||||||
nav.innerHTML = '';
|
|
||||||
|
|
||||||
const makeBtn = (label, page, disabled, active) => {
|
|
||||||
const btn = el('button', 's-res-page-btn' + (active ? ' is-active' : ''), label);
|
|
||||||
btn.type = 'button';
|
|
||||||
btn.disabled = !!disabled;
|
|
||||||
btn.addEventListener('click', () => goToPage(page));
|
|
||||||
return btn;
|
|
||||||
};
|
|
||||||
|
|
||||||
nav.appendChild(makeBtn('«', state.page - 1, state.page <= 1));
|
|
||||||
|
|
||||||
const windowSize = 2;
|
|
||||||
for (let p = 1; p <= totalPages; p++) {
|
|
||||||
const edge = p === 1 || p === totalPages;
|
|
||||||
const near = Math.abs(p - state.page) <= windowSize;
|
|
||||||
if (!edge && !near) {
|
|
||||||
if (p === 2 || p === totalPages - 1) nav.appendChild(el('span', 's-res-page-dots', '…'));
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
nav.appendChild(makeBtn(String(p), p, false, p === state.page));
|
|
||||||
}
|
|
||||||
|
|
||||||
nav.appendChild(makeBtn('»', state.page + 1, state.page >= totalPages));
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateUrl() {
|
|
||||||
const url = new URL(window.location.href);
|
|
||||||
url.searchParams.set('sort', state.sort);
|
|
||||||
url.searchParams.set('category', state.category);
|
|
||||||
url.searchParams.set('limit', state.limit);
|
|
||||||
url.searchParams.set('page', state.page);
|
|
||||||
window.history.replaceState(null, '', url);
|
|
||||||
}
|
|
||||||
|
|
||||||
function rerender() {
|
|
||||||
applyFilterAndSort();
|
|
||||||
renderList();
|
|
||||||
renderMeta();
|
|
||||||
renderPagination();
|
|
||||||
updateUrl();
|
|
||||||
}
|
|
||||||
|
|
||||||
function goToPage(page) {
|
|
||||||
const totalPages = Math.max(1, Math.ceil(state.sorted.length / state.limit));
|
|
||||||
state.page = Math.min(Math.max(page, 1), totalPages);
|
|
||||||
renderList();
|
|
||||||
renderPagination();
|
|
||||||
updateUrl();
|
|
||||||
}
|
|
||||||
|
|
||||||
function initPaginator() {
|
|
||||||
state.items = loadData();
|
|
||||||
|
|
||||||
const checkedSort = document.querySelector('.sort-radio:checked');
|
|
||||||
state.sort = checkedSort ? checkedSort.value : 'alphabet';
|
|
||||||
|
|
||||||
const categorySelect = document.getElementById('category-filter');
|
|
||||||
state.category = categorySelect ? categorySelect.value.toLowerCase() : 'all';
|
|
||||||
|
|
||||||
const limitSelect = document.getElementById('s-res-per-page');
|
|
||||||
state.limit = limitSelect ? parseInt(limitSelect.value, 10) || 10 : 10;
|
|
||||||
|
|
||||||
const params = new URLSearchParams(window.location.search);
|
|
||||||
state.page = parseInt(params.get('page') || '1', 10) || 1;
|
|
||||||
|
|
||||||
document.querySelectorAll('.sort-radio').forEach(radio => {
|
|
||||||
radio.addEventListener('change', function () {
|
|
||||||
state.sort = this.value;
|
|
||||||
state.page = 1;
|
|
||||||
rerender();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (categorySelect) {
|
// ist das DOM bereits vollständig aufgebaut?
|
||||||
categorySelect.addEventListener('change', function () {
|
if (document.readyState === 'loading') {
|
||||||
state.category = this.value.toLowerCase();
|
// Falls noch geladen wird, auf das Event warten
|
||||||
state.page = 1;
|
document.addEventListener('DOMContentLoaded', initPaginator);
|
||||||
rerender();
|
} else {
|
||||||
});
|
// Falls das HTML bereits komplett da ist, sofort ausführen
|
||||||
}
|
initPaginator();
|
||||||
|
}
|
||||||
if (limitSelect) {
|
|
||||||
limitSelect.addEventListener('change', function () {
|
|
||||||
state.limit = parseInt(this.value, 10) || 10;
|
|
||||||
state.page = 1;
|
|
||||||
rerender();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// "Filter anwenden"-Button wird bei aktivem JS nicht gebraucht
|
|
||||||
const applyBtn = document.querySelector('.s-res-apply-btn');
|
|
||||||
if (applyBtn) applyBtn.style.display = 'none';
|
|
||||||
|
|
||||||
// Server-gerenderte Pagination-Links durch clientseitige Steuerung ersetzen
|
|
||||||
document.querySelectorAll('.s-res-page-navigation .s-res-page-btn').forEach(link => {
|
|
||||||
link.addEventListener('click', function (evt) {
|
|
||||||
evt.preventDefault();
|
|
||||||
const target = parseInt(this.getAttribute('data-page'), 10);
|
|
||||||
if (!isNaN(target)) goToPage(target);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
rerender();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (document.readyState === 'loading') {
|
|
||||||
document.addEventListener('DOMContentLoaded', initPaginator);
|
|
||||||
} else {
|
|
||||||
initPaginator();
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
@@ -1,3 +1,35 @@
|
|||||||
<?php
|
<?php
|
||||||
|
// Standardpfad
|
||||||
|
$pfad = $_GET["pfad"] ?? "home";
|
||||||
|
|
||||||
?>
|
if ($pfad === "logout") {
|
||||||
|
include_once "php/controller/logout-controller.php";
|
||||||
|
exit();
|
||||||
|
} elseif ($pfad === "deleteAccount") {
|
||||||
|
include_once "php/controller/deleteAccount-controller.php";
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($pfad === "login") {
|
||||||
|
include_once "php/controller/login-controller.php";
|
||||||
|
} elseif ($pfad === "register") {
|
||||||
|
include_once "php/controller/register-controller.php";
|
||||||
|
} elseif ($pfad === "password-forgotten") {
|
||||||
|
include_once "php/controller/password-forgotten-controller.php";
|
||||||
|
} elseif ($pfad === "confirm-register") {
|
||||||
|
include_once "php/controller/confirm-register-controller.php";
|
||||||
|
} elseif ($pfad === "confirm-password") {
|
||||||
|
include_once "php/controller/confirm-password-controller.php";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Whitelist
|
||||||
|
$erlaubte_content_seiten = [
|
||||||
|
"accessibility", "confirm-password", "confirm-register", "createArticle",
|
||||||
|
"datenschutz", "home", "impressum", "login", "nutzungsbedingungen",
|
||||||
|
"password-forgotten", "profile", "register", "search-results",
|
||||||
|
"show-mail", "showArticle", "showCategory", "updateArticle"
|
||||||
|
];
|
||||||
|
|
||||||
|
if (!in_array($pfad, $erlaubte_content_seiten)) {
|
||||||
|
$pfad = "404";
|
||||||
|
}
|
||||||
|
|||||||
@@ -16,11 +16,37 @@ if ($_SERVER["REQUEST_METHOD"] === "GET" && isset($_GET["q"])) {
|
|||||||
$_SESSION["message"] = "invalid_search_query";
|
$_SESSION["message"] = "invalid_search_query";
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$articleManager = ArticleManager::getInstance();
|
$articleManager = ArticleManager::getInstance();
|
||||||
$userManager = UserManager::getInstance();
|
$userManager = UserManager::getInstance();
|
||||||
|
|
||||||
$results = $articleManager->search($search);
|
$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 = [];
|
$safeArrayResults = [];
|
||||||
foreach ($results as $obj) {
|
foreach ($results as $obj) {
|
||||||
$safeArrayResults[] = [
|
$safeArrayResults[] = [
|
||||||
@@ -39,16 +65,20 @@ if ($_SERVER["REQUEST_METHOD"] === "GET" && isset($_GET["q"])) {
|
|||||||
$_SESSION["search_query"] = $search;
|
$_SESSION["search_query"] = $search;
|
||||||
$_SESSION["message"] = "new_search_results";
|
$_SESSION["message"] = "new_search_results";
|
||||||
|
|
||||||
// Bei einer neuen Suche Anzeige-Filter zurücksetzen
|
} catch (Exception $e){
|
||||||
$_SESSION['search_sort'] = 'alphabet';
|
|
||||||
$_SESSION['search_category'] = 'all';
|
|
||||||
$_SESSION['search_limit'] = 10;
|
|
||||||
|
|
||||||
} catch (Exception $e) {
|
|
||||||
$_SESSION["message"] = "internal_error";
|
$_SESSION["message"] = "internal_error";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
header("Location: ../../index.php?pfad=search-results&q=" . urlencode($search));
|
$sort = $_GET['sort'] ?? 'alphabet';
|
||||||
|
$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();
|
exit();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
Reference in New Issue
Block a user