getRepository()->getAllByPage ( new PagingInfo($page, $per_page), $filter, $order ); } /** * @param callable $getFilterRules * @param callable $getFilterValidatorRules * @param callable $getOrderRules * @param callable $applyExtraFilters * @param callable $serializerType * @param callable|null $defaultOrderRules * @param callable|null $defaultPageSize * @param callable|null $queryCallable * @param array $serializerParams * @return mixed */ public function _getAll ( callable $getFilterRules, callable $getFilterValidatorRules, callable $getOrderRules, callable $applyExtraFilters, callable $serializerType, callable $defaultOrderRules = null, callable $defaultPageSize = null, callable $queryCallable = null, array $serializerParams = [] ) { $values = Input::all(); $rules = [ 'page' => 'integer|min:1', 'per_page' => sprintf('required_with:page|integer|min:%s|max:%s', PagingConstants::MinPageSize, PagingConstants::MaxPageSize), ]; try { $validation = Validator::make($values, $rules); if ($validation->fails()) { $ex = new ValidationException(); throw $ex->setMessages($validation->messages()->toArray()); } // default values $page = 1; $per_page = is_null($defaultPageSize) ? PagingConstants::DefaultPageSize : call_user_func($defaultPageSize); if (Input::has('page')) { $page = intval(Input::get('page')); } if (Input::has('per_page')) { $per_page = intval(Input::get('per_page')); } $filter = null; if (Input::has('filter')) { $filter = FilterParser::parse(Input::get('filter'), call_user_func($getFilterRules)); } if (is_null($filter)) $filter = new Filter(); $filter_validator_rules = call_user_func($getFilterValidatorRules); if (count($filter_validator_rules)) { $filter->validate($filter_validator_rules); } $order = null; if (Input::has('order')) { $order = OrderParser::parse(Input::get('order'), call_user_func($getOrderRules)); } else { if (!is_null($defaultOrderRules)) { $order = call_user_func($defaultOrderRules); } } if (!is_null($queryCallable)) $data = call_user_func($queryCallable, $page, $per_page, $filter, $order, $applyExtraFilters); else $data = $this->defaultQuery ( $page, $per_page, $filter, $order, $applyExtraFilters ); $fields = Request::input('fields', ''); $relations = Request::input('relations', ''); $relations = !empty($relations) ? explode(',', $relations) : []; $fields = !empty($fields) ? explode(',', $fields) : []; return $this->ok ( $data->toArray ( Request::input('expand', ''), $fields, $relations, $serializerParams, call_user_func($serializerType) ) ); } catch (ValidationException $ex) { Log::warning($ex); return $this->error412($ex->getMessages()); } catch (EntityNotFoundException $ex) { Log::warning($ex); return $this->error404(array('message' => $ex->getMessage())); } catch (\HTTP401UnauthorizedException $ex) { Log::warning($ex); return $this->error401(); } catch(HTTP403ForbiddenException $ex){ Log::warning($ex); return $this->error403(); } catch (Exception $ex) { Log::error($ex); return $this->error500($ex); } } /** * @param callable $getFilterRules * @param callable $getFilterValidatorRules * @param callable $getOrderRules * @param callable $applyExtraFilters * @param callable $serializerType * @param callable $getFormatters * @param callable $getColumns * @param string $file_prefix * @param array $serializerParams * @param callable|null $queryCallable * @return mixed */ public function _getAllCSV ( callable $getFilterRules, callable $getFilterValidatorRules, callable $getOrderRules, callable $applyExtraFilters, callable $serializerType, callable $getFormatters, callable $getColumns, string $file_prefix = 'file-', array $serializerParams = [], callable $queryCallable = null ) { $values = Input::all(); $rules = [ 'page' => 'integer|min:1', 'per_page' => sprintf('required_with:page|integer|min:%s|max:%s', PagingConstants::MinPageSize, PagingConstants::MaxPageSize), ]; try { $validation = Validator::make($values, $rules); if ($validation->fails()) { $ex = new ValidationException(); throw $ex->setMessages($validation->messages()->toArray()); } // default values $page = 1; $per_page = PHP_INT_MAX; if (Input::has('page')) { $page = intval(Input::get('page')); $per_page = intval(Input::get('per_page')); } if (Input::has('per_page')) { $per_page = intval(Input::get('per_page')); } $filter = null; if (Input::has('filter')) { $filter = FilterParser::parse(Input::get('filter'), call_user_func($getFilterRules)); } if (is_null($filter)) $filter = new Filter(); $filter_validator_rules = call_user_func($getFilterValidatorRules); if (count($filter_validator_rules)) { $filter->validate($filter_validator_rules); } $order = null; if (Input::has('order')) { $order = OrderParser::parse(Input::get('order'), call_user_func($getOrderRules)); } if (!is_null($queryCallable)) $data = call_user_func($queryCallable, $page, $per_page, $filter, $order, $applyExtraFilters); else $data = $this->defaultQuery ( $page, $per_page, $filter, $order, $applyExtraFilters ); $filename = $file_prefix . date('Ymd'); $fields = Request::input('fields', ''); $relations = Request::input('relations', ''); $relations = !empty($relations) ? explode(',', $relations) : []; $fields = !empty($fields) ? explode(',', $fields) : []; $list = $data->toArray ( Request::input('expand', ''), $fields, $relations, $serializerParams, call_user_func($serializerType) ); return $this->export ( 'csv', $filename, $list['data'], call_user_func($getFormatters), call_user_func($getColumns) ); } catch (ValidationException $ex) { Log::warning($ex); return $this->error412($ex->getMessages()); } catch (EntityNotFoundException $ex) { Log::warning($ex); return $this->error404(array('message' => $ex->getMessage())); } catch (\HTTP401UnauthorizedException $ex) { Log::warning($ex); return $this->error401(); } catch (Exception $ex) { Log::error($ex); return $this->error500($ex); } } }