Skip to content

Commit 14bf8ac

Browse files
author
Nikita Rybalov
committed
Merge pull request #39 in PSDK/ext-catalog from bugfix-nrybalov-ext-calatog-empty-list-of-ext-PPP-29340 to master
* commit 'fdc25dc7965fb091995691db36404a47a685a0a9': BUGFIX PPP-29340 Method that calculates categories with top packages has been changed
2 parents 8cae5e8 + fdc25dc commit 14bf8ac

File tree

1 file changed

+31
-7
lines changed

1 file changed

+31
-7
lines changed

src/plib/library/Extension/Catalog.php

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ class Catalog
2020
const TYPE_PACKAGES = 'packages';
2121
const TYPE_CATEGORIES = 'categories';
2222
const GOD_EXTENSIONS = ['catalog'];
23+
const TOP_PACKAGES_AMOUNT = 3;
2324

2425
/** @var self */
2526
private static $_instance;
@@ -81,24 +82,47 @@ public function getDetails($uuid)
8182
{
8283
$packages = $this->getFetcher()->getPackages(self::TYPE_PACKAGES, "/{$uuid}");
8384

84-
return reset($packages);
85+
return is_array($packages) && count($packages) ? reset($packages) : [];
8586
}
8687

8788
/**
8889
* @return array
8990
*/
9091
public function getCategories()
9192
{
93+
$packages = $this->getAvailable();
94+
95+
$topPackages = [];
96+
foreach ($packages as $package) {
97+
foreach ($package['categories'] as $category) {
98+
if (array_key_exists($category->code, $topPackages)
99+
&& count($topPackages[$category->code]) >= self::TOP_PACKAGES_AMOUNT
100+
) {
101+
continue;
102+
}
103+
$topPackages[$category->code][] = (object) [
104+
'uuid' => $package['uuid'],
105+
'code' => $package['code'],
106+
'name' => $package['name'],
107+
'icon' => $package['icons']['64x64'],
108+
];
109+
}
110+
}
111+
92112
$version = \pm_ProductInfo::getVersion();
93-
$categories = $this->getFetcher()->getFeedContent(self::TYPE_CATEGORIES, "?with-top-packages&version={$version}");
113+
$categories = $this->getFetcher()->getFeedContent(self::TYPE_CATEGORIES, "?version={$version}");
94114
$categories = json_decode($categories);
95115
$categories = $categories ?: [];
96116

97-
foreach ($categories as $category) {
98-
$category->top_packages = array_values(FilterHelper::filterBlacklisted($category->top_packages));
117+
foreach ($categories as $key => $category) {
118+
if (array_key_exists($category->code, $topPackages)) {
119+
$category->top_packages = $topPackages[$category->code];
120+
} else {
121+
unset($categories[$key]);
122+
}
99123
}
100124

101-
return $categories;
125+
return array_values($categories);
102126
}
103127

104128
/**
@@ -108,11 +132,11 @@ public function getCategories()
108132
public function getDetailsByCode($code)
109133
{
110134
$packages = $this->getFetcher()->getPackages(self::TYPE_PACKAGES);
111-
$packagesByCode = array_filter($packages, function ($package) use ($code) {
135+
$packages = array_filter($packages, function ($package) use ($code) {
112136
return $code === $package['code'];
113137
});
114138

115-
return reset($packagesByCode);
139+
return is_array($packages) && count($packages) ? reset($packages) : [];
116140
}
117141

118142
/**

0 commit comments

Comments
 (0)