/** * List all models that satisfy provided criteria * @param array $params * @throws ApiException * @return ApiResult */ protected function processList($params) { $modelClassName = $this->getModelName(); $searchFormClassName = static::getSearchFormClassName(); try { $filterParams = array(); if (strtolower($_SERVER['REQUEST_METHOD']) != 'post') { if (isset($params['filter']) && $params['filter'] != '') { parse_str($params['filter'], $filterParams); } } else { $filterParams = $params['data']; } $pageSize = Yii::app()->pagination->getGlobalValueByType('apiListPageSize'); if (isset($filterParams['pagination']['pageSize'])) { $pageSize = (int) $filterParams['pagination']['pageSize']; } if (isset($filterParams['pagination']['page'])) { $_GET[$modelClassName . '_page'] = (int) $filterParams['pagination']['page']; } if (isset($filterParams['sort'])) { $_GET[$modelClassName . '_sort'] = $filterParams['sort']; } if (isset($filterParams['search']) && isset($searchFormClassName)) { $_GET[$searchFormClassName] = $filterParams['search']; } if (isset($filterParams['dynamicSearch']) && isset($searchFormClassName) && !empty($filterParams['dynamicSearch']['dynamicClauses']) && !empty($filterParams['dynamicSearch']['dynamicStructure'])) { // Convert model ids into item ids, so we can perform dynamic search DynamicSearchUtil::resolveDynamicSearchClausesForModelIdsNeedingToBeItemIds($modelClassName, $filterParams['dynamicSearch']['dynamicClauses']); $_GET[$searchFormClassName]['dynamicClauses'] = $filterParams['dynamicSearch']['dynamicClauses']; $_GET[$searchFormClassName]['dynamicStructure'] = $filterParams['dynamicSearch']['dynamicStructure']; } $model = new $modelClassName(false); if (isset($searchFormClassName)) { $searchForm = new $searchFormClassName($model); } else { throw new NotSupportedException(); } $stateMetadataAdapterClassName = $this->resolveStateMetadataAdapterClassName(); $dataProvider = $this->makeRedBeanDataProviderByDataCollection($searchForm, $pageSize, $stateMetadataAdapterClassName); if (isset($filterParams['pagination']['page']) && (int) $filterParams['pagination']['page'] > 0) { $currentPage = (int) $filterParams['pagination']['page']; } else { $currentPage = 1; } $totalItems = $dataProvider->getTotalItemCount(); $data = array(); $data['totalCount'] = $totalItems; $data['currentPage'] = $currentPage; if ($totalItems > 0) { $formattedData = $dataProvider->getData(); foreach ($formattedData as $model) { $data['items'][] = static::getModelToApiDataUtilData($model); } $result = new ApiResult(ApiResponse::STATUS_SUCCESS, $data, null, null); } else { $result = new ApiResult(ApiResponse::STATUS_SUCCESS, $data, null, null); } } catch (Exception $e) { $message = $e->getMessage(); throw new ApiException($message); } return $result; }