private function getGridShowContent($searchFieldConfig, $showFieldArr, $infoType, $productId, $filterColumn, $whereStr, $isAllBasicField = false) { $pageSize = CommonService::getPageSize(); $viewColumnArr = SearchService::getViewColumnArr($searchFieldConfig, $showFieldArr, $infoType, $productId, $filterColumn); $totalNum = SqlService::getTotalFoundNum($infoType, $productId, $whereStr, $isAllBasicField); $sql = SqlService::getRawDataSql($searchFieldConfig, $infoType, $productId, $this->getSqlSelectFieldArr($infoType, $showFieldArr), $whereStr, $isAllBasicField); $dataProvider = new CSqlDataProvider($sql, array('totalItemCount' => $totalNum, 'sort' => array('defaultOrder' => array('id' => true), 'multiSort' => true, 'attributes' => array_merge($showFieldArr, array(Info::MARK))), 'pagination' => array('pageSize' => $pageSize))); $sortArr = $dataProvider->getSort()->getDirections(); Yii::app()->user->setState($productId . '_' . $infoType . '_sortArr', $sortArr); $preNextSessionSql = SqlService::getPreNextSql($searchFieldConfig, $infoType, $productId, $whereStr, Yii::app()->user->getState($productId . '_' . $infoType . '_sortArr', $isAllBasicField)); Yii::app()->user->setState($productId . '_' . $infoType . '_prenextsql', $preNextSessionSql); return array('viewColumnArr' => $viewColumnArr, 'dataProvider' => $dataProvider, 'totalNum' => $totalNum); }
/** * check if show field is legal * * @author youzhao.zxw<*****@*****.**> * @param string $infoType bug,case or result * @param array $searchRowArr search condition * @param int $productId product id * @param array $showFieldArr show field array * @param array $orderArr order array * @param string $filterSql filter sql * @param int $pageSize page size * @param int $currentPageSize current page size * @return array export date result */ public static function getExportData($infoType, $searchRowArr, $productId = null, $showFieldArr = null, $orderArr = null, $filterSql = null, $pageSize = null, $currentPage = null) { $resultInfo = array(); if (!empty($productId)) { $accessIdArr = Yii::app()->user->getState('visit_product_id'); if (!in_array($productId, $accessIdArr)) { $resultInfo['status'] = CommonService::$ApiResult['FAIL']; $resultInfo['detail'] = Yii::t('Product', 'No access right to this product'); return $resultInfo; } } $searchFieldConfig = SearchService::getSearchableFields($infoType, $productId); $checkSearchRowResult = self::checkSearchRowField($searchFieldConfig, $searchRowArr); if ('' != $checkSearchRowResult) { $resultInfo['status'] = CommonService::$ApiResult['FAIL']; $resultInfo['detail'] = $checkSearchRowResult; return $resultInfo; } if (!empty($showFieldArr)) { $showFieldCheckResult = self::checkShowField($searchFieldConfig, $showFieldArr); if ('' != $showFieldCheckResult) { $resultInfo['status'] = CommonService::$ApiResult['FAIL']; $resultInfo['detail'] = $showFieldCheckResult; return $resultInfo; } } $getSqlResult = SqlService::baseGetGroupQueryStr($searchFieldConfig, $infoType, $searchRowArr); if (CommonService::$ApiResult['FAIL'] == $getSqlResult['status']) { $resultInfo = $getSqlResult; return $resultInfo; } $whereStr = $getSqlResult['detail']; if (!empty($filterSql)) { $whereStr .= ' and ' . $filterSql; } if (empty($showFieldArr)) { $showFieldArr = array_keys($searchFieldConfig); $showFieldArr = array_diff($showFieldArr, array(Info::MARK)); } $allRelatedFieldArr = array(); foreach ($searchRowArr as $searchRowTmp) { $allRelatedFieldArr[] = $searchRowTmp['field']; } $isAllBasicField = SearchService::isAllBasicField(SearchService::getBasicFieldArr($infoType), array_merge($showFieldArr, $allRelatedFieldArr)); $sql = SqlService::getRawDataSql($searchFieldConfig, $infoType, $productId, $showFieldArr, $whereStr, $isAllBasicField); $totalNum = SqlService::getTotalFoundNum($infoType, $productId, $whereStr, $isAllBasicField); if (empty($pageSize)) { $pageSize = $totalNum; } if ($pageSize > 5000) { $resultInfo['status'] = CommonService::$ApiResult['FAIL']; $resultInfo['detail'] = 'items can not exceed 5000'; return $resultInfo; } if (!isset($currentPage)) { $currentPage = 1; } else { if (0 == $currentPage) { $resultInfo['status'] = CommonService::$ApiResult['FAIL']; $resultInfo['detail'] = 'page should start from 1'; return $resultInfo; } $maxPage = ceil($totalNum / $pageSize); if ($currentPage > $maxPage && 0 != $maxPage) { $resultInfo['status'] = CommonService::$ApiResult['FAIL']; $resultInfo['detail'] = 'current page [' . $currentPage . '] is greater than the max page [' . $maxPage . ']'; return $resultInfo; } } if (empty($orderArr)) { $orderArr = array('{{bug_info_view}}.id' => true); } $dataProvider = new CSqlDataProvider($sql, array('totalItemCount' => $totalNum, 'sort' => array('defaultOrder' => $orderArr, 'attributes' => array_keys($searchFieldConfig)), 'pagination' => array('pageSize' => $pageSize, 'currentPage' => $currentPage - 1))); $rawData = $dataProvider->getData(); $rawData = SqlService::handleRawData($rawData, $infoType, $searchFieldConfig, $showFieldArr, $productId); $rawData = self::getExportComment($infoType, $rawData, $productId); $resultInfo['status'] = CommonService::$ApiResult['SUCCESS']; $resultInfo['detail'] = $rawData; return $resultInfo; }