public function testResolveAndAddViewDefinedNestedAttributes() { Yii::app()->user->userModel = User::getByUsername('super'); $attributeIndexOrDerivedTypeAndLabels = array(); DynamicSearchUtil::resolveAndAddViewDefinedNestedAttributes(new Contact(), 'ContactsSearchView', $attributeIndexOrDerivedTypeAndLabels); $compareData = array('account___name' => 'Account - Name'); $this->assertEquals($compareData, $attributeIndexOrDerivedTypeAndLabels); //Test adding more rercursive attributes. $metadata = ContactsSearchView::getMetadata(); $tempMetadata = $metadata; $metadata['global']['definedNestedAttributes'] = array(array('account' => array('opportunities' => array('name'))), array('opportunities' => array('account' => array('name')))); ContactsSearchView::setMetadata($metadata); DynamicSearchUtil::resolveAndAddViewDefinedNestedAttributes(new Contact(), 'ContactsSearchView', $attributeIndexOrDerivedTypeAndLabels); $compareData = array('account___name' => 'Account - Name', 'account___opportunities___name' => 'Account - Opportunities - Name', 'opportunities___account___name' => 'Opportunities - Account - Name'); $this->assertEquals($compareData, $attributeIndexOrDerivedTypeAndLabels); //Reset metadata. ContactsSearchView::setMetadata($tempMetadata); }
public static function renderDynamicSearchRowContent($viewClassName, $modelClassName, $formModelClassName, $rowNumber, $attributeIndexOrDerivedType, $inputContent, $suffix = null, $renderAsAjax = false) { assert('is_string($viewClassName)'); assert('is_string($modelClassName)'); assert('is_string($formModelClassName)'); assert('is_int($rowNumber)'); assert('is_string($attributeIndexOrDerivedType) || $attributeIndexOrDerivedType == null'); assert('is_string($suffix) || $suffix == null'); assert('is_bool($renderAsAjax)'); $searchableAttributeIndicesAndDerivedTypes = DynamicSearchUtil::getSearchableAttributesAndLabels($viewClassName, $modelClassName); $ajaxOnChangeUrl = Yii::app()->createUrl("zurmo/default/dynamicSearchAttributeInput", array('viewClassName' => $viewClassName, 'modelClassName' => $modelClassName, 'formModelClassName' => $formModelClassName, 'rowNumber' => $rowNumber, 'suffix' => $suffix)); $rowView = new DynamicSearchRowView($searchableAttributeIndicesAndDerivedTypes, (int) $rowNumber, $suffix, $formModelClassName, $ajaxOnChangeUrl, $attributeIndexOrDerivedType, $inputContent); if (!$renderAsAjax) { $view = $rowView; } else { $view = new AjaxPageView($rowView); } return ZurmoHtml::tag('div', array('class' => 'dynamic-search-row'), $view->render()); }
/** * 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; }
protected function renderDynamicAdvancedSearchRows($panel, $maxCellsPerRow, $form) { assert('$form != null'); $content = $form->errorSummary($this->model); $content .= $this->renderDynamicClausesValidationHelperContent($form); $rowCount = 0; $suffix = $this->getSearchFormId(); $viewClassName = get_class($this); $modelClassName = get_class($this->model->getModel()); $formModelClassName = get_class($this->model); if ($this->model->dynamicClauses != null) { foreach ($this->model->dynamicClauses as $dynamicClause) { $attributeIndexOrDerivedType = ArrayUtil::getArrayValue($dynamicClause, 'attributeIndexOrDerivedType'); if ($attributeIndexOrDerivedType != null) { $searchAttributes = self::resolveSearchAttributeValuesForDynamicRow($dynamicClause, $attributeIndexOrDerivedType); $inputContent = DynamicSearchUtil::renderDynamicSearchAttributeInput($viewClassName, $modelClassName, $formModelClassName, (int) $rowCount, $attributeIndexOrDerivedType, $searchAttributes, $suffix); $content .= DynamicSearchUtil::renderDynamicSearchRowContent($viewClassName, $modelClassName, $formModelClassName, $rowCount, $attributeIndexOrDerivedType, $inputContent, $suffix); $rowCount++; } } } $content .= $this->renderAddExtraRowContent($rowCount); $content .= $this->renderAfterAddExtraRowContent($form); $content .= $this->renderDynamicSearchStructureContent($form); return $content; }
public function actionDynamicSearchAttributeInput($viewClassName, $modelClassName, $formModelClassName, $rowNumber, $attributeIndexOrDerivedType, $suffix = null) { if ($attributeIndexOrDerivedType == null) { Yii::app()->end(0, false); } $content = DynamicSearchUtil::renderDynamicSearchAttributeInput($viewClassName, $modelClassName, $formModelClassName, (int) $rowNumber, $attributeIndexOrDerivedType, array(), $suffix); Yii::app()->getClientScript()->setToAjaxMode(); Yii::app()->getClientScript()->render($content); echo $content; }