/**
  * 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;
 }