diff options
Diffstat (limited to 'application/front/controller/visitor/BookmarkListController.php')
-rw-r--r-- | application/front/controller/visitor/BookmarkListController.php | 63 |
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 | ||