From 0ef70e5489dc3866ca63eb1fb542ceb7d5efdd9a Mon Sep 17 00:00:00 2001 From: live-soft Date: Mon, 12 Jan 2026 15:56:18 +0400 Subject: [PATCH 1/7] Fix issue where pagination state is lost after viewing a single post --- .../src/Controllers/PostController.php.tpl | 35 ++++++++++++++++--- .../src/Views/post/partials/back.php.tpl | 2 +- .../src/Views/post/partials/post-item.php.tpl | 2 +- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl b/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl index ba27ac009..c1f4761f0 100644 --- a/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl @@ -68,11 +68,15 @@ class PostController extends BaseController $paginatedPosts = $this->postService->getPosts($perPage, $currentPage, $search); - $this->view->setParams([ + $params = [ 'title' => t('common.posts') . ' | ' . config()->get('app.name'), 'posts' => $this->postService->transformData($paginatedPosts->data()->all()), 'pagination' => $paginatedPosts - ]); + ]; + + $params = $this->addFromParam($params, true); + + $this->view->setParams($params); $response->html($this->view->render('post/post')); } @@ -101,13 +105,36 @@ class PostController extends BaseController $comments = $commentService->transformData($comments->all()); - $this->view->setParams([ + $params = [ 'title' => $post->title . ' | ' . config()->get('app.name'), 'post' => new RawParam(current($this->postService->transformData([$post]))), 'comments' => $comments, 'referer' => $ref, - ]); + ]; + + $params = $this->addFromParam($params); + + $this->view->setParams($params); $response->html($this->view->render('post/single')); } + + private function addFromParam($params, $encode = false) + { + if (!empty($_GET)) { + if ($encode) { + $json = json_encode($_GET); + $base64 = base64_encode($json); + + $params['from'] = $base64; + } else { + $base64 = base64_decode($_GET['from']); + $json = json_decode($base64, true); + + $params['from'] = http_build_query($json); + } + } + + return $params; + } } \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Views/post/partials/back.php.tpl b/src/Module/Templates/DemoWeb/src/Views/post/partials/back.php.tpl index a948498c3..53fe0d6a5 100644 --- a/src/Module/Templates/DemoWeb/src/Views/post/partials/back.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Views/post/partials/back.php.tpl @@ -1,3 +1,3 @@ - + arrow_back \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Views/post/partials/post-item.php.tpl b/src/Module/Templates/DemoWeb/src/Views/post/partials/post-item.php.tpl index 23755cfca..f18b5c11a 100644 --- a/src/Module/Templates/DemoWeb/src/Views/post/partials/post-item.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Views/post/partials/post-item.php.tpl @@ -1,6 +1,6 @@
- +
From 5b9f2b4d5a9c48a9721382dfe9e01f7a542d0ff1 Mon Sep 17 00:00:00 2001 From: live-soft Date: Tue, 13 Jan 2026 11:34:19 +0400 Subject: [PATCH 2/7] Fix issue where pagination state is lost after viewing a single post (code refactoring) --- src/Http/Helpers/http.php | 23 ++++++++++ .../src/Controllers/PostController.php.tpl | 45 +++++-------------- .../PostManagementController.php.tpl | 2 +- .../src/Views/post/partials/back.php.tpl | 4 +- .../src/Views/post/partials/post-item.php.tpl | 2 +- 5 files changed, 39 insertions(+), 37 deletions(-) diff --git a/src/Http/Helpers/http.php b/src/Http/Helpers/http.php index 510c674d7..73be7c127 100644 --- a/src/Http/Helpers/http.php +++ b/src/Http/Helpers/http.php @@ -133,3 +133,26 @@ function page_not_found() ); } } + +/** + * Encodes current query string to URL-safe base64. + * + * @return string + */ +function nav_ref_encode(): string +{ + $q = Request::getQuery(); + return $q ? rtrim(strtr(base64_encode($q), '+/', '-_'), '=') : ''; +} + +/** + * Decodes a URL-safe base64 reference back to query string. + * + * @param string|null $ref + * @return string|null + */ +function nav_ref_decode(?string $ref): ?string +{ + if (!$ref) return null; + return base64_decode(strtr($ref, '-_', '+/')) ?: null; +} \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl b/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl index c1f4761f0..e1e762ebf 100644 --- a/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl @@ -68,15 +68,12 @@ class PostController extends BaseController $paginatedPosts = $this->postService->getPosts($perPage, $currentPage, $search); - $params = [ + $this->view->setParams([ 'title' => t('common.posts') . ' | ' . config()->get('app.name'), 'posts' => $this->postService->transformData($paginatedPosts->data()->all()), - 'pagination' => $paginatedPosts - ]; - - $params = $this->addFromParam($params, true); - - $this->view->setParams($params); + 'pagination' => $paginatedPosts, + 'referer' => nav_ref_encode() + ]); $response->html($this->view->render('post/post')); } @@ -105,36 +102,18 @@ class PostController extends BaseController $comments = $commentService->transformData($comments->all()); - $params = [ + $ref = $request->get('ref'); + $query = nav_ref_decode($ref); + + $referer = '/posts' . ($query ? '?' . $query : ''); + + $this->view->setParams([ 'title' => $post->title . ' | ' . config()->get('app.name'), 'post' => new RawParam(current($this->postService->transformData([$post]))), 'comments' => $comments, - 'referer' => $ref, - ]; - - $params = $this->addFromParam($params); - - $this->view->setParams($params); + 'referer' => $ref == 'my-posts' ? '/my-posts' : $referer, + ]); $response->html($this->view->render('post/single')); } - - private function addFromParam($params, $encode = false) - { - if (!empty($_GET)) { - if ($encode) { - $json = json_encode($_GET); - $base64 = base64_encode($json); - - $params['from'] = $base64; - } else { - $base64 = base64_decode($_GET['from']); - $json = json_decode($base64, true); - - $params['from'] = http_build_query($json); - } - } - - return $params; - } } \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Controllers/PostManagementController.php.tpl b/src/Module/Templates/DemoWeb/src/Controllers/PostManagementController.php.tpl index d6290d601..5dbf39b27 100644 --- a/src/Module/Templates/DemoWeb/src/Controllers/PostManagementController.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Controllers/PostManagementController.php.tpl @@ -120,7 +120,7 @@ class PostManagementController extends BaseController $this->view->setParams([ 'title' => $post->title . ' | ' . config()->get('app.name'), 'post' => $post->asArray(), - 'referer' => $ref + 'referer' => '/' . $ref ]); $response->html($this->view->render('post/form')); diff --git a/src/Module/Templates/DemoWeb/src/Views/post/partials/back.php.tpl b/src/Module/Templates/DemoWeb/src/Views/post/partials/back.php.tpl index 53fe0d6a5..fe2fbc38b 100644 --- a/src/Module/Templates/DemoWeb/src/Views/post/partials/back.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Views/post/partials/back.php.tpl @@ -1,3 +1,3 @@ - - arrow_back + + arrow_back \ No newline at end of file diff --git a/src/Module/Templates/DemoWeb/src/Views/post/partials/post-item.php.tpl b/src/Module/Templates/DemoWeb/src/Views/post/partials/post-item.php.tpl index f18b5c11a..65709777c 100644 --- a/src/Module/Templates/DemoWeb/src/Views/post/partials/post-item.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Views/post/partials/post-item.php.tpl @@ -1,6 +1,6 @@
- +
From ab599d9819f81ed2dedd56d202675651101f5879 Mon Sep 17 00:00:00 2001 From: live-soft Date: Tue, 13 Jan 2026 14:05:19 +0400 Subject: [PATCH 3/7] code refactoring --- src/Http/Helpers/http.php | 23 ------------------- .../Libraries/HttpClient/HttpClientTest.php | 2 +- 2 files changed, 1 insertion(+), 24 deletions(-) diff --git a/src/Http/Helpers/http.php b/src/Http/Helpers/http.php index 73be7c127..e96faf485 100644 --- a/src/Http/Helpers/http.php +++ b/src/Http/Helpers/http.php @@ -132,27 +132,4 @@ function page_not_found() StatusCode::NOT_FOUND ); } -} - -/** - * Encodes current query string to URL-safe base64. - * - * @return string - */ -function nav_ref_encode(): string -{ - $q = Request::getQuery(); - return $q ? rtrim(strtr(base64_encode($q), '+/', '-_'), '=') : ''; -} - -/** - * Decodes a URL-safe base64 reference back to query string. - * - * @param string|null $ref - * @return string|null - */ -function nav_ref_decode(?string $ref): ?string -{ - if (!$ref) return null; - return base64_decode(strtr($ref, '-_', '+/')) ?: null; } \ No newline at end of file diff --git a/tests/Unit/Libraries/HttpClient/HttpClientTest.php b/tests/Unit/Libraries/HttpClient/HttpClientTest.php index 4a1909d68..9bacbc536 100644 --- a/tests/Unit/Libraries/HttpClient/HttpClientTest.php +++ b/tests/Unit/Libraries/HttpClient/HttpClientTest.php @@ -109,7 +109,7 @@ function ($instance) { function ($instance) { $this->assertTrue($instance->isError()); - $this->assertEquals(405, $instance->getErrorCode()); + $this->assertEquals(404, $instance->getErrorCode()); } ) ->setOpt(CURLOPT_SSL_VERIFYPEER, false) From 8f623e47c64734f878a611838480b5e0d759c788 Mon Sep 17 00:00:00 2001 From: live-soft Date: Tue, 13 Jan 2026 14:34:27 +0400 Subject: [PATCH 4/7] cs fixer --- src/Http/Helpers/http.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/Helpers/http.php b/src/Http/Helpers/http.php index e96faf485..d17c08155 100644 --- a/src/Http/Helpers/http.php +++ b/src/Http/Helpers/http.php @@ -123,7 +123,7 @@ function page_not_found() if ($isJson) { Response::json( - ['status' => 'error', 'message' => 'Page not found'], + ['status' => 'error', 'message' => 'Page not found',], StatusCode::NOT_FOUND ); } else { From 105f428b874e4296790efe9a1831b10bca452d19 Mon Sep 17 00:00:00 2001 From: live-soft Date: Tue, 13 Jan 2026 17:25:29 +0400 Subject: [PATCH 5/7] cs fixer --- src/Http/Helpers/http.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/Helpers/http.php b/src/Http/Helpers/http.php index d17c08155..83d0bcbad 100644 --- a/src/Http/Helpers/http.php +++ b/src/Http/Helpers/http.php @@ -132,4 +132,4 @@ function page_not_found() StatusCode::NOT_FOUND ); } -} \ No newline at end of file +} From 978764ef944efd40b37c5966b3bc3a247afb3177 Mon Sep 17 00:00:00 2001 From: live-soft Date: Wed, 14 Jan 2026 19:04:58 +0400 Subject: [PATCH 6/7] code refactoring --- .../Templates/DemoWeb/src/Controllers/PostController.php.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl b/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl index e1e762ebf..eaa894e4d 100644 --- a/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl @@ -72,7 +72,7 @@ class PostController extends BaseController 'title' => t('common.posts') . ' | ' . config()->get('app.name'), 'posts' => $this->postService->transformData($paginatedPosts->data()->all()), 'pagination' => $paginatedPosts, - 'referer' => nav_ref_encode() + 'referer' => nav_ref_encode(Request::getQuery()) ]); $response->html($this->view->render('post/post')); From 0366b458d550c6aadac566d7e675db1f0e02950a Mon Sep 17 00:00:00 2001 From: live-soft Date: Thu, 15 Jan 2026 11:56:02 +0400 Subject: [PATCH 7/7] code refactoring --- .../DemoWeb/src/Controllers/PostController.php.tpl | 7 +------ .../src/Controllers/PostManagementController.php.tpl | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl b/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl index eaa894e4d..646c27ab1 100644 --- a/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Controllers/PostController.php.tpl @@ -102,16 +102,11 @@ class PostController extends BaseController $comments = $commentService->transformData($comments->all()); - $ref = $request->get('ref'); - $query = nav_ref_decode($ref); - - $referer = '/posts' . ($query ? '?' . $query : ''); - $this->view->setParams([ 'title' => $post->title . ' | ' . config()->get('app.name'), 'post' => new RawParam(current($this->postService->transformData([$post]))), 'comments' => $comments, - 'referer' => $ref == 'my-posts' ? '/my-posts' : $referer, + 'referer' => nav_ref_decode($ref), ]); $response->html($this->view->render('post/single')); diff --git a/src/Module/Templates/DemoWeb/src/Controllers/PostManagementController.php.tpl b/src/Module/Templates/DemoWeb/src/Controllers/PostManagementController.php.tpl index 5dbf39b27..d31ed6b84 100644 --- a/src/Module/Templates/DemoWeb/src/Controllers/PostManagementController.php.tpl +++ b/src/Module/Templates/DemoWeb/src/Controllers/PostManagementController.php.tpl @@ -120,7 +120,7 @@ class PostManagementController extends BaseController $this->view->setParams([ 'title' => $post->title . ' | ' . config()->get('app.name'), 'post' => $post->asArray(), - 'referer' => '/' . $ref + 'referer' => nav_ref_decode($ref) ]); $response->html($this->view->render('post/form'));