From 27e7a426b1c7ba7ec878204a937a0ecfff5214ed Mon Sep 17 00:00:00 2001 From: Thomas Lange Date: Thu, 22 Jul 2021 22:44:34 +0200 Subject: Add user and category filter on post search Add a user and category filter option for the post search in the administration area. Filter on default theme is followed later. --- admin/post/search.php | 39 +++++++++++++++++++++++++++++++-- core/namespace/ORM/RepositorySearch.php | 10 +++++++++ theme/admin/html/post/search.php | 37 +++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 2 deletions(-) diff --git a/admin/post/search.php b/admin/post/search.php index 8cbfafb..46ff60d 100644 --- a/admin/post/search.php +++ b/admin/post/search.php @@ -13,6 +13,7 @@ require '../../core/application.php'; #=============================================================================== # Get repositories #=============================================================================== +$CategoryRepository = Application::getRepository('Category'); $PostRepository = Application::getRepository('Post'); $UserRepository = Application::getRepository('User'); @@ -31,7 +32,12 @@ $offset = ($currentSite-1) * $site_size; #=============================================================================== if($search = HTTP::GET('q')) { try { - foreach ($PostRepository->search($search, [], $site_size, $offset) as $Post) { + $filter = [ + 'user' => HTTP::GET('user'), + 'category' => HTTP::GET('category') + ]; + + foreach ($PostRepository->search($search, $filter, $site_size, $offset) as $Post) { $User = $UserRepository->find($Post->get('user')); $templates[] = generatePostItemTemplate($Post, $User); } @@ -55,6 +61,28 @@ if($count = $PostRepository->getLastSearchOverallCount()) { ]; } +#=============================================================================== +# Generate user list +#=============================================================================== +foreach($UserRepository->getAll([], 'fullname ASC') as $User) { + $userList[] = [ + 'ID' => $User->getID(), + 'FULLNAME' => $User->get('fullname'), + 'USERNAME' => $User->get('username'), + ]; +} + +#=============================================================================== +# Generate category list +#=============================================================================== +foreach($CategoryRepository->getAll([], 'name ASC') as $Category) { + $categoryList[] = [ + 'ID' => $Category->getID(), + 'NAME' => $Category->get('name'), + 'PARENT' => $Category->get('parent'), + ]; +} + #=============================================================================== # Build document #=============================================================================== @@ -62,7 +90,14 @@ $SearchTemplate = Template\Factory::build('post/search'); $SearchTemplate->set('QUERY', $search); $SearchTemplate->set('POSTS', $templates ?? []); $SearchTemplate->set('FORM', [ - 'INFO' => $messages ?? [] + 'INFO' => $messages ?? [], + 'DATA' => [ + 'USER' => HTTP::GET('user'), + 'CATEGORY' => HTTP::GET('category') + ], + 'USER_LIST' => $userList ?? [], + 'CATEGORY_LIST' => $categoryList ?? [], + 'CATEGORY_TREE' => generateCategoryDataTree($categoryList ?? []) ]); $SearchTemplate->set('PAGINATION', $pagination_data ?? []); diff --git a/core/namespace/ORM/RepositorySearch.php b/core/namespace/ORM/RepositorySearch.php index 8a61998..aac46ef 100644 --- a/core/namespace/ORM/RepositorySearch.php +++ b/core/namespace/ORM/RepositorySearch.php @@ -24,6 +24,16 @@ trait RepositorySearch { $params[] = $filter['day']; } + if(is_numeric($filter['user'] ?? NULL)) { + $extend[] = 'user = ? AND'; + $params[] = $filter['user']; + } + + if(is_numeric($filter['category'] ?? NULL)) { + $extend[] = 'category = ? AND'; + $params[] = $filter['category']; + } + if($limit) { $limit = "LIMIT $offset,$limit"; } diff --git a/theme/admin/html/post/search.php b/theme/admin/html/post/search.php index 10aa43d..ff4cf59 100644 --- a/theme/admin/html/post/search.php +++ b/theme/admin/html/post/search.php @@ -1,3 +1,18 @@ +%s%s [%d]'; + $select = ($category['ID'] == $selected) ? ' selected' : ''; + + printf($option, $category['ID'], $select, $prefix, escapeHTML($category['NAME']), $category['ID']); + + if(isset($category['CHILDS'])) { + # If there are children, call self and pass children array. + (__FUNCTION__)($category['CHILDS'], $selected, $prefix.'– '); + } + } +} +?>
>

text('title_post_search')?>

text('search_post_desc')?>

@@ -20,6 +35,28 @@
+ + + +
+ +
+ + + +
+ +
-- cgit v1.2.3