aboutsummaryrefslogtreecommitdiffhomepage
path: root/application/front/controller/visitor/BookmarkListController.php
diff options
context:
space:
mode:
Diffstat (limited to 'application/front/controller/visitor/BookmarkListController.php')
-rw-r--r--application/front/controller/visitor/BookmarkListController.php63
1 files changed, 22 insertions, 41 deletions
diff --git a/application/front/controller/visitor/BookmarkListController.php b/application/front/controller/visitor/BookmarkListController.php
index 106440b6..4aae2652 100644
--- a/application/front/controller/visitor/BookmarkListController.php
+++ b/application/front/controller/visitor/BookmarkListController.php
@@ -37,7 +37,6 @@ class BookmarkListController extends ShaarliVisitorController
37 37
38 $searchTags = normalize_spaces($request->getParam('searchtags') ?? ''); 38 $searchTags = normalize_spaces($request->getParam('searchtags') ?? '');
39 $searchTerm = escape(normalize_spaces($request->getParam('searchterm') ?? '')); 39 $searchTerm = escape(normalize_spaces($request->getParam('searchterm') ?? ''));
40 ;
41 40
42 // Filter bookmarks according search parameters. 41 // Filter bookmarks according search parameters.
43 $visibility = $this->container->sessionManager->getSessionParameter('visibility'); 42 $visibility = $this->container->sessionManager->getSessionParameter('visibility');
@@ -45,39 +44,26 @@ class BookmarkListController extends ShaarliVisitorController
45 'searchtags' => $searchTags, 44 'searchtags' => $searchTags,
46 'searchterm' => $searchTerm, 45 'searchterm' => $searchTerm,
47 ]; 46 ];
48 $linksToDisplay = $this->container->bookmarkService->search(
49 $search,
50 $visibility,
51 false,
52 !!$this->container->sessionManager->getSessionParameter('untaggedonly')
53 ) ?? [];
54
55 // ---- Handle paging.
56 $keys = [];
57 foreach ($linksToDisplay as $key => $value) {
58 $keys[] = $key;
59 }
60
61 $linksPerPage = $this->container->sessionManager->getSessionParameter('LINKS_PER_PAGE', 20) ?: 20;
62 47
63 // Select articles according to paging. 48 // Select articles according to paging.
64 $pageCount = (int) ceil(count($keys) / $linksPerPage) ?: 1; 49 $page = (int) ($request->getParam('page') ?? 1);
65 $page = (int) $request->getParam('page') ?? 1;
66 $page = $page < 1 ? 1 : $page; 50 $page = $page < 1 ? 1 : $page;
67 $page = $page > $pageCount ? $pageCount : $page; 51 $linksPerPage = $this->container->sessionManager->getSessionParameter('LINKS_PER_PAGE', 20) ?: 20;
68 52
69 // Start index. 53 $searchResult = $this->container->bookmarkService->search(
70 $i = ($page - 1) * $linksPerPage; 54 $search,
71 $end = $i + $linksPerPage; 55 $visibility,
56 false,
57 !!$this->container->sessionManager->getSessionParameter('untaggedonly'),
58 false,
59 ['offset' => $linksPerPage * ($page - 1), 'limit' => $linksPerPage]
60 ) ?? [];
72 61
73 $linkDisp = [];
74 $save = false; 62 $save = false;
75 while ($i < $end && $i < count($keys)) { 63 $links = [];
76 $save = $this->updateThumbnail($linksToDisplay[$keys[$i]], false) || $save; 64 foreach ($searchResult->getBookmarks() as $key => $bookmark) {
77 $link = $formatter->format($linksToDisplay[$keys[$i]]); 65 $save = $this->updateThumbnail($bookmark, false) || $save;
78 66 $links[$key] = $formatter->format($bookmark);
79 $linkDisp[$keys[$i]] = $link;
80 $i++;
81 } 67 }
82 68
83 if ($save) { 69 if ($save) {
@@ -87,15 +73,10 @@ class BookmarkListController extends ShaarliVisitorController
87 // Compute paging navigation 73 // Compute paging navigation
88 $searchtagsUrl = $searchTags === '' ? '' : '&searchtags=' . urlencode($searchTags); 74 $searchtagsUrl = $searchTags === '' ? '' : '&searchtags=' . urlencode($searchTags);
89 $searchtermUrl = $searchTerm === '' ? '' : '&searchterm=' . urlencode($searchTerm); 75 $searchtermUrl = $searchTerm === '' ? '' : '&searchterm=' . urlencode($searchTerm);
76 $page = $searchResult->getPage();
90 77
91 $previous_page_url = ''; 78 $previousPageUrl = !$searchResult->isLastPage() ? '?page=' . ($page + 1) . $searchtermUrl . $searchtagsUrl : '';
92 if ($i !== count($keys)) { 79 $nextPageUrl = !$searchResult->isFirstPage() ? '?page=' . ($page - 1) . $searchtermUrl . $searchtagsUrl : '';
93 $previous_page_url = '?page=' . ($page + 1) . $searchtermUrl . $searchtagsUrl;
94 }
95 $next_page_url = '';
96 if ($page > 1) {
97 $next_page_url = '?page=' . ($page - 1) . $searchtermUrl . $searchtagsUrl;
98 }
99 80
100 $tagsSeparator = $this->container->conf->get('general.tags_separator', ' '); 81 $tagsSeparator = $this->container->conf->get('general.tags_separator', ' ');
101 $searchTagsUrlEncoded = array_map('urlencode', tags_str2array($searchTags, $tagsSeparator)); 82 $searchTagsUrlEncoded = array_map('urlencode', tags_str2array($searchTags, $tagsSeparator));
@@ -105,16 +86,16 @@ class BookmarkListController extends ShaarliVisitorController
105 $data = array_merge( 86 $data = array_merge(
106 $this->initializeTemplateVars(), 87 $this->initializeTemplateVars(),
107 [ 88 [
108 'previous_page_url' => $previous_page_url, 89 'previous_page_url' => $previousPageUrl,
109 'next_page_url' => $next_page_url, 90 'next_page_url' => $nextPageUrl,
110 'page_current' => $page, 91 'page_current' => $page,
111 'page_max' => $pageCount, 92 'page_max' => $searchResult->getLastPage(),
112 'result_count' => count($linksToDisplay), 93 'result_count' => $searchResult->getTotalCount(),
113 'search_term' => escape($searchTerm), 94 'search_term' => escape($searchTerm),
114 'search_tags' => escape($searchTags), 95 'search_tags' => escape($searchTags),
115 'search_tags_url' => $searchTagsUrlEncoded, 96 'search_tags_url' => $searchTagsUrlEncoded,
116 'visibility' => $visibility, 97 'visibility' => $visibility,
117 'links' => $linkDisp, 98 'links' => $links,
118 ] 99 ]
119 ); 100 );
120 101