@@ -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