Skip to content

Commit 70964fb

Browse files
committed
only show featured slider on first page
1 parent f39c6fd commit 70964fb

File tree

5 files changed

+80
-36
lines changed

5 files changed

+80
-36
lines changed

config/.env.ddev

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,5 @@ export DATABASE_URL="mysql://db:db@db:3306/db"
3636
# Uncomment these to define logging configuration via environment variables.
3737
#export LOG_DEBUG_URL="file:///path/to/logs/?levels[]=notice&levels[]=info&levels[]=debug&file=debug"
3838
#export LOG_ERROR_URL="file:///path/to/logs/?levels[]=warning&levels[]=error&levels[]=critical&levels[]=alert&levels[]=emergency&file=error"
39-
export APP_FULL_BASE_URL="https://plugins.cakephp.org.ddev.site"
4039
export DEBUG_KIT_SAFE_TLD="site"
40+
export APP_FULL_BASE_URL="https://plugins.cakephp.org.ddev.site"

resources/css/style.css

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,14 @@
6060
.featured-packages-slider-button::after {
6161
content: none;
6262
}
63+
64+
.packages-section-divider {
65+
@apply flex items-center gap-4 text-xs font-semibold uppercase tracking-[0.24em] text-slate-400;
66+
}
67+
68+
.packages-section-divider::before,
69+
.packages-section-divider::after {
70+
content: "";
71+
@apply h-px flex-1 bg-slate-200;
72+
}
6373
}

src/Controller/PackagesController.php

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,25 @@ public function index()
2929
));
3030
}
3131

32-
$featuredPackageNames = array_values(array_filter((array)Configure::read('Packages.featured', [])));
33-
if ($featuredPackageNames !== []) {
34-
shuffle($featuredPackageNames);
35-
}
3632
$featuredPackages = [];
33+
$activeFilterKeys = ['search', 'cakephp_slugs', 'php_slugs'];
34+
$hasActiveFilters = false;
35+
foreach ($activeFilterKeys as $key) {
36+
if ($this->hasActiveFilterValue($queryParams[$key] ?? null)) {
37+
$hasActiveFilters = true;
38+
break;
39+
}
40+
}
41+
$currentPage = max(1, (int)($queryParams['page'] ?? 1));
42+
$showFeaturedPackages = !$hasActiveFilters && $currentPage === 1;
43+
$featuredPackageNames = [];
44+
45+
if ($showFeaturedPackages) {
46+
$featuredPackageNames = array_values(array_filter((array)Configure::read('Packages.featured', [])));
47+
if ($featuredPackageNames !== []) {
48+
shuffle($featuredPackageNames);
49+
}
3750

38-
if ($featuredPackageNames !== []) {
3951
$featuredPackages = $this->Packages
4052
->find()
4153
->contain(['Tags' => function (SelectQuery $q) {
@@ -75,4 +87,31 @@ public function index()
7587

7688
$this->set(compact('featuredPackages', 'packages', 'cakephpTags', 'phpTags'));
7789
}
90+
91+
/**
92+
* @param mixed $value
93+
* @return bool
94+
*/
95+
protected function hasActiveFilterValue(mixed $value): bool
96+
{
97+
if (is_array($value)) {
98+
foreach ($value as $item) {
99+
if ($this->hasActiveFilterValue($item)) {
100+
return true;
101+
}
102+
}
103+
104+
return false;
105+
}
106+
107+
if ($value === null) {
108+
return false;
109+
}
110+
111+
if (is_string($value)) {
112+
return trim($value) !== '';
113+
}
114+
115+
return (bool)$value;
116+
}
78117
}

templates/Packages/index.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@
7272
</div>
7373
</div>
7474
</section>
75+
76+
<div class="packages-section-divider mb-8" aria-hidden="true">
77+
<span><?= __('All packages') ?></span>
78+
</div>
7579
<?php endif; ?>
7680

7781
<div class="grid gap-6 md:grid-cols-2 xl:grid-cols-3">

tests/TestCase/Controller/PackagesControllerTest.php

Lines changed: 21 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
namespace App\Test\TestCase\Controller;
55

6+
use Cake\Core\Configure;
67
use Cake\TestSuite\IntegrationTestTrait;
78
use Cake\TestSuite\TestCase;
89

@@ -25,57 +26,47 @@ class PackagesControllerTest extends TestCase
2526
];
2627

2728
/**
28-
* Test index method
29-
*
3029
* @return void
31-
* @link \App\Controller\PackagesController::index()
3230
*/
33-
public function testIndex(): void
31+
protected function setUp(): void
3432
{
35-
$this->markTestIncomplete('Not implemented yet.');
33+
parent::setUp();
34+
Configure::write('Packages.featured', ['markstory/asset_compress']);
3635
}
3736

3837
/**
39-
* Test view method
40-
*
4138
* @return void
42-
* @link \App\Controller\PackagesController::view()
4339
*/
44-
public function testView(): void
40+
public function testIndexShowsFeaturedSliderOnFirstPageWithoutFilters(): void
4541
{
46-
$this->markTestIncomplete('Not implemented yet.');
47-
}
42+
$this->get('/?sort=downloads&direction=desc');
4843

49-
/**
50-
* Test add method
51-
*
52-
* @return void
53-
* @link \App\Controller\PackagesController::add()
54-
*/
55-
public function testAdd(): void
56-
{
57-
$this->markTestIncomplete('Not implemented yet.');
44+
$this->assertResponseOk();
45+
$this->assertResponseContains('Featured');
46+
$this->assertResponseContains('data-featured-packages-slider');
5847
}
5948

6049
/**
61-
* Test edit method
62-
*
6350
* @return void
64-
* @link \App\Controller\PackagesController::edit()
6551
*/
66-
public function testEdit(): void
52+
public function testIndexHidesFeaturedSliderOnSubsequentPages(): void
6753
{
68-
$this->markTestIncomplete('Not implemented yet.');
54+
$this->get('/?sort=downloads&direction=desc&page=2');
55+
56+
$this->assertResponseOk();
57+
$this->assertResponseNotContains('data-featured-packages-slider');
58+
$this->assertResponseNotContains('Previous featured package');
6959
}
7060

7161
/**
72-
* Test delete method
73-
*
7462
* @return void
75-
* @link \App\Controller\PackagesController::delete()
7663
*/
77-
public function testDelete(): void
64+
public function testIndexHidesFeaturedSliderWhenSearching(): void
7865
{
79-
$this->markTestIncomplete('Not implemented yet.');
66+
$this->get('/?sort=downloads&direction=desc&search=package-02');
67+
68+
$this->assertResponseOk();
69+
$this->assertResponseNotContains('data-featured-packages-slider');
70+
$this->assertResponseContains('vendor/package-02');
8071
}
8172
}

0 commit comments

Comments
 (0)