Skip to content

Commit d41cc92

Browse files
committed
more improvements
1 parent 6ad008e commit d41cc92

17 files changed

Lines changed: 2553 additions & 2517 deletions

File tree

composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
"homepage": "https://cakephp.org",
77
"require": {
88
"php": ">=8.1",
9-
"cakephp/cakephp": "5.2.*",
10-
"cakephp/migrations": "^4.0.0",
9+
"cakephp/cakephp": "5.3.*",
10+
"cakephp/migrations": "^5.0.0",
1111
"cakephp/plugin-installer": "^2.0",
1212
"dereuromark/cakephp-tags": "^2.2",
1313
"friendsofcake/search": "^7.5",

composer.lock

Lines changed: 2306 additions & 2408 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/Migrations/20250921094317_Initial.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public function change(): void
2121
->addColumn('repo_url', 'string')
2222
->addColumn('downloads', 'integer')
2323
->addColumn('stars', 'integer')
24+
->addColumn('latest_stable_version', 'string', ['null' => true])
2425
->create();
2526
}
2627
}
3.3 KB
Binary file not shown.

config/form-templates.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@
55
* Custom templates for pagination elements.
66
*/
77
return [
8-
'button' => '<button class="bg-red-800 hover:cursor-pointer p-2 text-white rounded-sm"{{attrs}}>{{text}}</button>',
8+
'button' => '<button class="bg-cake-red hover:cursor-pointer p-2 text-white rounded-sm"{{attrs}}>{{text}}</button>',
99
'checkbox' => '<input class="justify-self-start" type="checkbox" name="{{name}}" value="{{value}}"{{attrs}}>',
1010
'checkboxWrapper' => '<div class="col-span-2 col-start-2 flex gap-2">{{label}}</div>',
11-
'error' => '<div class="col-start-2 col-end-4 text-red-700" id="{{id}}">{{content}}</div>',
11+
'error' => '<div class="col-start-2 col-end-4 text-cake-red" id="{{id}}">{{content}}</div>',
1212
'input' => '<input class="col-span-2 border h-full border-slate-500 rounded-sm max-w-md min-w-4 p-2" type="{{type}}" name="{{name}}"{{attrs}}>',
1313
'inputContainer' => '<div class="group gap-2">{{content}}</div>',
14-
'inputContainerError' => '<div class="group gap-2 text-red-700">{{content}}{{error}}</div>',
15-
'label' => "<label class=\"group-has-[input:required]:after:content-['_*'] group-has-[input:required]:after:text-red-700\" {{attrs}}>{{text}}</label>",
14+
'inputContainerError' => '<div class="group gap-2 text-cake-red">{{content}}{{error}}</div>',
15+
'label' => "<label class=\"block group-has-[input:required]:after:content-['_*'] group-has-[input:required]:after:text-cake-red\" {{attrs}}>{{text}}</label>",
1616
// Not actually a nested label.
17-
'nestingLabel' => "{{hidden}}<label class=\"group-has-[input:required]:after:content-['_*'] group-has-[input:required]:after:text-red-700\" {{attrs}}>{{text}}</label>{{input}}",
17+
'nestingLabel' => "{{hidden}}<label class=\"group-has-[input:required]:after:content-['_*'] group-has-[input:required]:after:text-cake-red\" {{attrs}}>{{text}}</label>{{input}}",
1818
'textarea' => '<textarea class="border border-slate-500 col-span-2 rounded-sm max-w-md min-w-4 p-1" name="{{name}}"{{attrs}}>{{value}}</textarea>',
1919
'select' => '<select class="border border-slate-500 col-span-2 rounded-sm max-w-md min-w-4 p-1" name="{{name}}"{{attrs}}>{{content}}</select>',
2020
'selectMultiple' => '<select class="border border-slate-500 col-span-2 rounded-sm max-w-md min-w-50 p-1" name="{{name}}[]" multiple="multiple"{{attrs}}>{{content}}</select>',

config/paginator-templates.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,20 @@
55
* Custom templates for pagination elements.
66
*/
77
return [
8-
'nextActive' => '<li class=""><a class="hover:text-red-800" rel="next" href="{{url}}">{{text}}</a></li>',
8+
'nextActive' => '<li class=""><a class="hover:text-cake-red" rel="next" href="{{url}}">{{text}}</a></li>',
99
'nextDisabled' => '<li class="next text-gray-400"><a>{{text}}</a></li>',
10-
'prevActive' => '<li class="hover:text-red-800"><a rel="prev" href="{{url}}">{{text}}</a></li>',
10+
'prevActive' => '<li class="hover:text-cake-red"><a rel="prev" href="{{url}}">{{text}}</a></li>',
1111
'prevDisabled' => '<li class="prev text-gray-400"><a>{{text}}</a></li>',
1212
'counterRange' => '{{start}} - {{end}} of {{count}}',
1313
'counterPages' => '{{page}} of {{pages}}',
14-
'first' => '<li class="first"><a class="hover:text-red-800" href="{{url}}">{{text}}</a></li>',
15-
'last' => '<li class="last"><a class="hover:text-red-800" href="{{url}}">{{text}}</a></li>',
16-
'number' => '<li><a class="hover:text-red-800" href="{{url}}">{{text}}</a></li>',
17-
'current' => '<li class="active"><a class="text-red-600 hover:text-red-800" href="">{{text}}</a></li>',
14+
'first' => '<li class="first"><a class="hover:text-cake-red" href="{{url}}">{{text}}</a></li>',
15+
'last' => '<li class="last"><a class="hover:text-cake-red" href="{{url}}">{{text}}</a></li>',
16+
'number' => '<li><a class="hover:text-cake-red" href="{{url}}">{{text}}</a></li>',
17+
'current' => '<li class="active"><a class="text-cake-red hover:text-red-800" href="">{{text}}</a></li>',
1818
'ellipsis' => '<li class="ellipsis">&hellip;</li>',
1919
'sort' => '<a class="hover:text-red-800" href="{{url}}">{{text}}</a>',
20-
'sortAsc' => "<a class=\"whitespace-nowrap text-red-700 after:text-red-700 after:content-['_']\" href=\"{{url}}\">{{text}}</a>",
21-
'sortDesc' => "<a class=\"whitespace-nowrap text-red-700 after:text-red-700 after:content-['_']\" href=\"{{url}}\">{{text}}</a>",
20+
'sortAsc' => "<a class=\"whitespace-nowrap text-red-700 after:text-red-700 after:content-['_']\" href=\"{{url}}\">{{text}}</a>",
21+
'sortDesc' => "<a class=\"whitespace-nowrap text-red-700 after:text-red-700 after:content-['_']\" href=\"{{url}}\">{{text}}</a>",
2222
'sortAscLocked' => '<a class="asc locked" href="{{url}}">{{text}}</a>',
2323
'sortDescLocked' => '<a class="desc locked" href="{{url}}">{{text}}</a>',
2424
];

reset_db.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/bin/sh
2+
3+
rm tmp/cakephp.db
4+
bin/cake migrations migrate
5+
bin/cake migrations migrate -p Tags

resources/css/style.css

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383

8484
@theme {
8585
--font-raleway: "Raleway", sans-serif;
86+
--color-cake-red: #d33c44;
8687
}
8788

8889
/* Styling for default app homepage */
@@ -116,10 +117,15 @@
116117
}
117118

118119
.problem:before {
119-
color: #d33d44;
120+
color: #d33c44;
120121
content: "\0057";
121122
}
122123

123124
.ss-main {
124125
height: 100%;
126+
--ss-primary-color: #d33c44;
127+
}
128+
129+
[data-is-php-filter] + .ss-main {
130+
--ss-primary-color: var(--color-blue-500);
125131
}

src/Command/SyncPackagesCommand.php

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ public function execute(Arguments $args, ConsoleIo $io)
7070
foreach ($data as $package) {
7171
$data = $this->getDataForPackage($package);
7272

73+
if ($data['is_abandoned']) {
74+
continue;
75+
}
76+
7377
$entity = $packagesTable->find()->where(['package' => $package])->first();
7478
if (!$entity) {
7579
$entity = $packagesTable->newEmptyEntity();
@@ -98,10 +102,10 @@ private function getDataForPackage(string $packageName): array
98102
$meta = [];
99103
// Check each version
100104
foreach ($versions as $versionMeta) {
101-
// $phpRequire = $versionMeta->getRequire()['php'] ?? null;
102-
// if ($phpRequire) {
103-
// $meta = $this->checkPHPVersion($meta, $phpRequire);
104-
// }
105+
$phpRequire = $versionMeta->getRequire()['php'] ?? null;
106+
if ($phpRequire) {
107+
$meta = $this->checkPHPVersion($meta, $phpRequire);
108+
}
105109

106110
$cakephpRequire = $versionMeta->getRequire()['cakephp/cakephp'] ?? null;
107111
if ($cakephpRequire) {
@@ -133,13 +137,21 @@ private function getDataForPackage(string $packageName): array
133137
}
134138
}
135139

140+
$stableVersions = array_filter($versions, fn($v) => preg_match('/^v?\d+\.\d+\.\d+$/', $v->getVersion()));
141+
usort($stableVersions, function ($a, $b) {
142+
return version_compare($a->getVersion(), $b->getVersion());
143+
});
144+
$latestStable = end($stableVersions);
145+
136146
$data = [
137147
'package' => $packageName,
138148
'description' => $metaDetails->getDescription(),
139149
'repo_url' => $metaDetails->getRepository(),
140150
'downloads' => $metaDetails->getDownloads()->getTotal(),
141151
'stars' => $metaDetails->getGithubStars(),
142152
'tag_list' => $meta,
153+
'latest_stable_version' => $latestStable ? $latestStable->getVersion() : null,
154+
'is_abandoned' => $metaDetails->isAbandoned(),
143155
];
144156

145157
return $data;
@@ -153,6 +165,7 @@ private function getDataForPackage(string $packageName): array
153165
private function checkPHPVersion(array $meta, string $packageConstraint): array
154166
{
155167
$phpVersions = [
168+
'8.5.0' => 'PHP: 8.5',
156169
'8.4.0' => 'PHP: 8.4',
157170
'8.3.0' => 'PHP: 8.3',
158171
'8.2.0' => 'PHP: 8.2',

src/Controller/PackagesController.php

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
namespace App\Controller;
55

6+
use Cake\ORM\Query\SelectQuery;
7+
68
/**
79
* Packages Controller
810
*
@@ -17,13 +19,31 @@ class PackagesController extends AppController
1719
*/
1820
public function index()
1921
{
22+
// Add default sort if no sort is provided
23+
$queryParams = $this->request->getQueryParams();
24+
if (empty($queryParams['sort'])) {
25+
$this->request = $this->request->withQueryParams(array_merge(
26+
$queryParams,
27+
['sort' => 'downloads', 'direction' => 'desc'],
28+
));
29+
}
30+
2031
$query = $this->Packages
2132
->find('search', search: $this->request->getQueryParams())
22-
->contain(['Tags']);
23-
$packages = $this->paginate($query);
33+
->contain(['Tags' => function (SelectQuery $q) {
34+
return $q->orderByDesc('Tags.label');
35+
}]);
36+
$packages = $this->paginate($query, ['limit' => 21]);
2437

25-
$tags = $this->Packages->Tags->find('list', ...['keyField' => 'slug']);
38+
$cakephpTags = $this->Packages->Tags->find('list', keyField: 'slug')
39+
->where(['slug LIKE' => 'cakephp-%'])
40+
->orderByAsc('label')
41+
->toArray();
42+
$phpTags = $this->Packages->Tags->find('list', keyField: 'slug')
43+
->where(['slug LIKE' => 'php-%'])
44+
->orderByAsc('label')
45+
->toArray();
2646

27-
$this->set(compact('packages', 'tags'));
47+
$this->set(compact('packages', 'cakephpTags', 'phpTags'));
2848
}
2949
}

0 commit comments

Comments
 (0)