GX-Bug #55066 » RestAPIProductLimitFix.patch
src/GXMainComponents/Services/Core/Product/ProductReadService.inc.php (revision ) | ||
---|---|---|
91 | 91 |
*/ |
92 | 92 |
public function getProductList(LanguageCode $languageCode, |
93 | 93 |
IdType $categoryId = null, |
94 |
IdType $customerStatusLimit = null) |
|
94 |
IdType $customerStatusLimit = null, |
|
95 |
IntType $offset = null, |
|
96 |
IntType $limit = null) |
|
95 | 97 |
{ |
96 | 98 |
$conditions = array(); |
97 | 99 |
|
... | ... | |
108 | 110 |
} |
109 | 111 |
else |
110 | 112 |
{ |
111 |
$collection = $productListProvider->getAll(); |
|
113 |
$collection = $productListProvider->getAll($offset, $limit);
|
|
112 | 114 |
} |
113 | 115 | |
114 | 116 |
return $collection; |
... | ... | |
204 | 206 |
public function findUrlRewritesByRewriteUrl(NonEmptyStringType $rewriteUrl) |
205 | 207 |
{ |
206 | 208 |
return $this->urlRewriteStorage->findByRewriteUrl($rewriteUrl); |
209 |
} |
|
210 | ||
211 |
/** |
|
212 |
* Get the total count of all products |
|
213 |
* |
|
214 |
* @return int |
|
215 |
*/ |
|
216 |
public function getProductListCount(LanguageCode $languageCode) |
|
217 |
{ |
|
218 | ||
219 |
$productListProvider = $this->listProviderFactory->createProductListProvider($languageCode); |
|
220 | ||
221 |
return $productListProvider->getProductListCount(); |
|
207 | 222 |
} |
208 | 223 |
} |
src/GXMainComponents/Services/Core/Product/Providers/Interfaces/ProductListProviderInterface.inc.php (revision ) | ||
---|---|---|
34 | 34 |
* |
35 | 35 |
* @return ProductListItemCollection |
36 | 36 |
*/ |
37 |
public function getAll(); |
|
37 |
public function getAll(IntType $offset, IntType $limit);
|
|
38 | 38 |
} |
src/GXMainComponents/Services/Core/Product/Providers/ProductListProvider.inc.php (revision ) | ||
---|---|---|
212 | 212 |
* |
213 | 213 |
* @return ProductListItemCollection |
214 | 214 |
*/ |
215 |
public function getAll() |
|
215 |
public function getAll(IntType $offset = null, IntType $limit = null)
|
|
216 | 216 |
{ |
217 | 217 |
// Build select part of query. |
218 | 218 |
$this->db->select('products.*, products_description.*') |
... | ... | |
220 | 220 |
->join('languages', 'languages.languages_id = products_description.language_id', 'inner') |
221 | 221 |
->where('products_description.products_id = products.products_id') |
222 | 222 |
->where('languages.code', $this->languageCode->asString()); |
223 |
|
|
223 | ||
224 | 224 |
$this->_applyExtraConditions(); |
225 |
|
|
225 | ||
226 |
$this->_setLimit($offset, $limit); |
|
227 |
//var_dump($this->db->get_compiled_select()); |
|
228 |
//die(); |
|
229 | ||
226 | 230 |
$result = $this->db->get()->result_array(); |
227 | 231 |
|
228 | 232 |
return $this->_prepareCollection($result); |
233 |
} |
|
234 | ||
235 |
protected function _setLimit(IntType $offset = null, IntType $limit = null) |
|
236 |
{ |
|
237 |
if($offset !== null && $limit !== null) |
|
238 |
{ |
|
239 |
$offset = $offset->asInt(); |
|
240 |
$limit = $limit->asInt(); |
|
241 |
$this->db->limit($limit, $offset); |
|
242 |
} |
|
243 |
} |
|
244 | ||
245 |
public function getProductListCount() |
|
246 |
{ |
|
247 |
$rows = $this->db->count_all('products'); |
|
248 | ||
249 |
return $rows; |
|
229 | 250 |
} |
230 | 251 |
} |
src/GXMainComponents/Controllers/Api/v2/ProductsApiV2Controller.inc.php (revision ) | ||
---|---|---|
473 | 473 |
return; |
474 | 474 |
} |
475 | 475 | |
476 |
$page = $this->api->request->get('page'); |
|
477 |
$perPage = $this->api->request->get('per_page') |
|
478 |
!= null ? new IntType($this->api->request->get('per_page')) : new IntType(self::DEFAULT_PAGE_ITEMS); |
|
479 |
$startIndex = $page !== null ? new IntType($page * $perPage->asInt() - $perPage->asInt()) : null; |
|
480 | ||
476 | 481 |
if($this->uri[1] && is_numeric($this->uri[1])) // Get Single Record |
477 | 482 |
{ |
478 | 483 |
try |
479 | 484 |
{ |
480 | 485 |
$products = array($this->productReadService->getProductById(new IdType($this->uri[1]))); |
486 |
$productCount = 1; |
|
481 | 487 |
} |
482 | 488 |
catch(UnexpectedValueException $e) |
483 | 489 |
{ |
... | ... | |
490 | 496 | |
491 | 497 |
$languageCode = new LanguageCode(new NonEmptyStringType($langParameter)); |
492 | 498 | |
493 |
$products = $this->productReadService->getProductList($languageCode)->getArray(); |
|
499 |
$products = $this->productReadService->getProductList($languageCode,null, null, $startIndex, $perPage)->getArray(); |
|
500 |
$productCount = $this->productReadService->getProductListCount($languageCode); |
|
501 | ||
494 | 502 |
} |
495 | 503 | |
496 | 504 |
$response = array(); |
... | ... | |
515 | 523 |
} |
516 | 524 | |
517 | 525 |
$this->_sortResponse($response); |
518 |
$this->_paginateResponse($response); |
|
526 |
$this->_paginateResponse($response,$productCount);
|
|
519 | 527 |
$this->_minimizeResponse($response); |
520 | 528 |
$this->_linkResponse($response); |
521 | 529 |