public function getDynamicSearchAttributes() { $searchArray = SearchUtil::getDynamicSearchAttributesFromGetArray(get_class($this->model)); if (!empty($searchArray)) { return $searchArray; } elseif ($this->model->dynamicClauses != null) { $searchArray = $this->model->dynamicClauses; return SearchUtil::getSearchAttributesFromSearchArray($searchArray); } else { return array(); } }
public function getSanitizedDynamicSearchAttributes() { $searchArray = SearchUtil::getDynamicSearchAttributesFromGetArray(get_class($this->model)); if (!empty($searchArray)) { return SearchUtil::sanitizeDynamicSearchAttributesByDesignerTypeForSavingModel($this->model, $searchArray); } elseif ($this->model->dynamicClauses != null) { $searchArray = $this->model->dynamicClauses; return SearchUtil::getSearchAttributesFromSearchArray($searchArray); } else { return array(); } }
/** * Checks if the empty values are properly converted to null when nested */ public function testGetSearchAttributesFromSearchArrayWithRecursiveNullResolution() { $searchArray = array('a' => 'apple', 'b' => array('relatedModelData' => true, 'bMember' => ''), 'c' => array('relatedModelData' => true, 'd' => array('relatedModelData' => true, 'dMember' => ''))); $testArray = array('a' => 'apple', 'b' => array('relatedModelData' => true, 'bMember' => null), 'c' => array('relatedModelData' => true, 'd' => array('relatedModelData' => true, 'dMember' => null))); $newArray = SearchUtil::getSearchAttributesFromSearchArray($searchArray); $this->assertEquals($testArray, $newArray); }
/** * @param string $getArrayName */ public static function getDynamicSearchAttributesFromGetArray($getArrayName) { assert('is_string($getArrayName)'); if (!empty($_GET[$getArrayName]) && isset($_GET[$getArrayName][DynamicSearchForm::DYNAMIC_NAME])) { $dynamicSearchAttributes = SearchUtil::getSearchAttributesFromSearchArray($_GET[$getArrayName][DynamicSearchForm::DYNAMIC_NAME]); if (isset($dynamicSearchAttributes[DynamicSearchForm::DYNAMIC_STRUCTURE_NAME])) { unset($dynamicSearchAttributes[DynamicSearchForm::DYNAMIC_STRUCTURE_NAME]); } foreach ($dynamicSearchAttributes as $key => $data) { if (is_string($data) && $data == 'undefined' || $data == null) { unset($dynamicSearchAttributes[$key]); } } return $dynamicSearchAttributes; } }
/** * @depends testSetAndGetMultiSelectDropDownAttribute */ public function testSearchForMultiSelectDropDownAttributePlacedForAccountsModule() { //Test that the multiple select attribute can query properly for search. $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; //Create an account to test searching multiple fields on for search. $account = new Account(); $this->assertEquals(1, $account->testHobbiesCstm->values->count()); $account->name = 'my test account'; $account->owner = Yii::app()->user->userModel; $customFieldValue2 = new CustomFieldValue(); $customFieldValue2->value = 'Reading'; $account->testHobbiesCstm->values->add($customFieldValue2); $this->assertTrue($account->save()); $accountId = $account->id; $account = Account::getById($accountId); $this->assertEquals(2, $account->testHobbiesCstm->values->count()); $this->assertContains('Writing', $account->testHobbiesCstm->values); $this->assertContains('Reading', $account->testHobbiesCstm->values); //Create a second account with different hobbies $account = new Account(); //Remove the default value of 'Writing'; $account->testHobbiesCstm->values->removeByIndex(0); $account->name = 'my test account2'; $account->owner = Yii::app()->user->userModel; $customFieldValue1 = new CustomFieldValue(); $customFieldValue1->value = 'Singing'; $account->testHobbiesCstm->values->add($customFieldValue1); $customFieldValue2 = new CustomFieldValue(); $customFieldValue2->value = 'Surfing'; $account->testHobbiesCstm->values->add($customFieldValue2); $this->assertTrue($account->save()); $accountId = $account->id; $account = Account::getById($accountId); $this->assertEquals(2, $account->testHobbiesCstm->values->count()); $this->assertContains('Singing', $account->testHobbiesCstm->values); $this->assertContains('Surfing', $account->testHobbiesCstm->values); //Searching with a custom field that is not blank should not produce an errors. $searchPostData = array('name' => 'my test account', 'officePhone' => '', 'testHobbies' => array('values' => array(0 => '')), 'officeFax' => ''); $modifiedSearchPostData = SearchUtil::getSearchAttributesFromSearchArray($searchPostData); $this->assertEquals(array('name' => 'my test account', 'officePhone' => null, 'officeFax' => null), $modifiedSearchPostData); $account = new Account(false); $searchForm = new AccountsSearchForm($account); $metadataAdapter = new SearchDataProviderMetadataAdapter($searchForm, $super->id, $modifiedSearchPostData); $searchAttributeData = $metadataAdapter->getAdaptedMetadata(); //Make sure the search params are empty $compareClauses = array(1 => array('attributeName' => 'name', 'operatorType' => 'startsWith', 'value' => 'my test account')); $compareStructure = '1'; $this->assertEquals($compareClauses, $searchAttributeData['clauses']); $this->assertEquals($compareStructure, $searchAttributeData['structure']); //Run search and make sure the data returned matches how many total accounts are available. $dataProvider = new RedBeanModelDataProvider('Account', null, false, $searchAttributeData); $data = $dataProvider->getData(); $this->assertEquals(2, count($data)); }
protected function resolveAndSanitizeDynamicSearchAttributesByPostData($postData, DynamicSearchForm $searchForm) { if (isset($postData['dynamicClauses'])) { $dynamicSearchAttributes = SearchUtil::getSearchAttributesFromSearchArray($postData['dynamicClauses']); $sanitizedDynamicSearchAttributes = SearchUtil::sanitizeDynamicSearchAttributesByDesignerTypeForSavingModel($searchForm, $dynamicSearchAttributes); $postData['dynamicClauses'] = $sanitizedDynamicSearchAttributes; } return $postData; }