protected function getSearchAttributes()
 {
     $form = $this->getConfigurationForm();
     return MarketingListMembersUtil::makeSearchAttributeData($this->modelId, $form->filteredBySubscriptionType, $form->filteredBySearchTerm);
 }
 public function testMakeSearchAttributeData()
 {
     $marketingListId = 1;
     $filterBySubscriptionType = null;
     $filterBySearchTerm = null;
     $searchAttributeData1 = MarketingListMembersUtil::makeSearchAttributeData($marketingListId, $filterBySubscriptionType, $filterBySearchTerm);
     $this->assertCount(1, $searchAttributeData1);
     $this->assertArrayHasKey(0, $searchAttributeData1);
     $this->assertArrayHasKey('MarketingListMember', $searchAttributeData1[0]);
     $this->assertArrayHasKey('clauses', $searchAttributeData1[0]['MarketingListMember']);
     $this->assertArrayHasKey('structure', $searchAttributeData1[0]['MarketingListMember']);
     $this->assertEquals(1, $searchAttributeData1[0]['MarketingListMember']['structure']);
     $clauses1 = $searchAttributeData1[0]['MarketingListMember']['clauses'];
     $this->assertCount(1, $clauses1);
     $this->assertArrayHasKey(1, $clauses1);
     $this->assertCount(4, $clauses1[1]);
     $this->assertArrayHasKey('attributeName', $clauses1[1]);
     $this->assertEquals('marketingList', $clauses1[1]['attributeName']);
     $this->assertArrayHasKey('relatedAttributeName', $clauses1[1]);
     $this->assertEquals('id', $clauses1[1]['relatedAttributeName']);
     $this->assertArrayHasKey('operatorType', $clauses1[1]);
     $this->assertEquals('equals', $clauses1[1]['operatorType']);
     $this->assertArrayHasKey('value', $clauses1[1]);
     $this->assertEquals($marketingListId, $clauses1[1]['value']);
     $filterBySubscriptionType = MarketingListMembersConfigurationForm::FILTERED_USER_ALL;
     $searchAttributeData2 = MarketingListMembersUtil::makeSearchAttributeData($marketingListId, $filterBySubscriptionType, $filterBySearchTerm);
     $this->assertEquals($searchAttributeData1, $searchAttributeData2);
     $filterBySubscriptionType = MarketingListMembersConfigurationForm::FILTER_USER_SUBSCRIBERS;
     $searchAttributeData3 = MarketingListMembersUtil::makeSearchAttributeData($marketingListId, $filterBySubscriptionType, $filterBySearchTerm);
     $this->assertCount(1, $searchAttributeData3);
     $this->assertArrayHasKey(0, $searchAttributeData3);
     $this->assertArrayHasKey('MarketingListMember', $searchAttributeData3[0]);
     $this->assertArrayHasKey('clauses', $searchAttributeData3[0]['MarketingListMember']);
     $this->assertArrayHasKey('structure', $searchAttributeData3[0]['MarketingListMember']);
     $this->assertEquals('(1 and 2)', $searchAttributeData3[0]['MarketingListMember']['structure']);
     $clauses3 = $searchAttributeData3[0]['MarketingListMember']['clauses'];
     $this->assertCount(2, $clauses3);
     $this->assertArrayHasKey(2, $clauses3);
     $this->assertCount(3, $clauses3[2]);
     $this->assertArrayHasKey('attributeName', $clauses3[2]);
     $this->assertEquals('unsubscribed', $clauses3[2]['attributeName']);
     $this->assertArrayHasKey('operatorType', $clauses3[2]);
     $this->assertEquals('equals', $clauses3[2]['operatorType']);
     $this->assertArrayHasKey('value', $clauses3[2]);
     $this->assertEquals(0, $clauses3[2]['value']);
     $filterBySubscriptionType = MarketingListMembersConfigurationForm::FILTER_USER_UNSUBSCRIBERS;
     $searchAttributeData4 = MarketingListMembersUtil::makeSearchAttributeData($marketingListId, $filterBySubscriptionType, $filterBySearchTerm);
     $this->assertEquals(1, $searchAttributeData4[0]['MarketingListMember']['clauses'][2]['value']);
     $filterBySearchTerm = 'ja';
     $searchAttributeData5 = MarketingListMembersUtil::makeSearchAttributeData($marketingListId, $filterBySubscriptionType, $filterBySearchTerm);
     $this->assertCount(1, $searchAttributeData5);
     $this->assertArrayHasKey(0, $searchAttributeData5);
     $this->assertArrayHasKey('MarketingListMember', $searchAttributeData5[0]);
     $this->assertArrayHasKey('clauses', $searchAttributeData5[0]['MarketingListMember']);
     $this->assertArrayHasKey('structure', $searchAttributeData5[0]['MarketingListMember']);
     $this->assertEquals('(1 and 2) and (3 or 4 or 5 or 6)', $searchAttributeData5[0]['MarketingListMember']['structure']);
     $clauses5 = $searchAttributeData5[0]['MarketingListMember']['clauses'];
     $this->assertCount(6, $clauses5);
     $this->assertArrayHasKey(3, $clauses5);
     $this->assertCount(4, $clauses5[3]);
     $this->assertArrayHasKey('attributeName', $clauses5[3]);
     $this->assertEquals('contact', $clauses5[3]['attributeName']);
     $this->assertArrayHasKey('relatedAttributeName', $clauses5[3]);
     $this->assertEquals('firstName', $clauses5[3]['relatedAttributeName']);
     $this->assertArrayHasKey('operatorType', $clauses5[3]);
     $this->assertEquals('startsWith', $clauses5[3]['operatorType']);
     $this->assertArrayHasKey('value', $clauses5[3]);
     $this->assertEquals($filterBySearchTerm, $clauses5[3]['value']);
     $this->assertArrayHasKey(4, $clauses5);
     $this->assertCount(4, $clauses5[4]);
     $this->assertArrayHasKey('attributeName', $clauses5[4]);
     $this->assertEquals('contact', $clauses5[4]['attributeName']);
     $this->assertArrayHasKey('relatedAttributeName', $clauses5[4]);
     $this->assertEquals('lastName', $clauses5[4]['relatedAttributeName']);
     $this->assertArrayHasKey('operatorType', $clauses5[4]);
     $this->assertEquals('startsWith', $clauses5[4]['operatorType']);
     $this->assertArrayHasKey('value', $clauses5[4]);
     $this->assertEquals($filterBySearchTerm, $clauses5[4]['value']);
     $this->assertArrayHasKey(5, $clauses5);
     $this->assertCount(2, $clauses5[5]);
     $this->assertArrayHasKey('attributeName', $clauses5[5]);
     $this->assertEquals('contact', $clauses5[5]['attributeName']);
     $this->assertArrayHasKey('relatedModelData', $clauses5[5]);
     $this->assertCount(4, $clauses5[5]['relatedModelData']);
     $this->assertArrayHasKey('attributeName', $clauses5[5]['relatedModelData']);
     $this->assertEquals('primaryEmail', $clauses5[5]['relatedModelData']['attributeName']);
     $this->assertArrayHasKey('relatedAttributeName', $clauses5[5]['relatedModelData']);
     $this->assertEquals('emailAddress', $clauses5[5]['relatedModelData']['relatedAttributeName']);
     $this->assertArrayHasKey('operatorType', $clauses5[5]['relatedModelData']);
     $this->assertEquals('startsWith', $clauses5[5]['relatedModelData']['operatorType']);
     $this->assertArrayHasKey('value', $clauses5[5]['relatedModelData']);
     $this->assertEquals($filterBySearchTerm, $clauses5[5]['relatedModelData']['value']);
     $this->assertArrayHasKey(6, $clauses5);
     $this->assertCount(2, $clauses5[6]);
     $this->assertArrayHasKey('attributeName', $clauses5[6]);
     $this->assertEquals('contact', $clauses5[6]['attributeName']);
     $this->assertArrayHasKey('relatedModelData', $clauses5[6]);
     $this->assertCount(4, $clauses5[6]['relatedModelData']);
     $this->assertArrayHasKey('attributeName', $clauses5[6]['relatedModelData']);
     $this->assertEquals('secondaryEmail', $clauses5[6]['relatedModelData']['attributeName']);
     $this->assertArrayHasKey('relatedAttributeName', $clauses5[6]['relatedModelData']);
     $this->assertEquals('emailAddress', $clauses5[6]['relatedModelData']['relatedAttributeName']);
     $this->assertArrayHasKey('operatorType', $clauses5[6]['relatedModelData']);
     $this->assertEquals('startsWith', $clauses5[6]['relatedModelData']['operatorType']);
     $this->assertArrayHasKey('value', $clauses5[6]['relatedModelData']);
     $this->assertEquals($filterBySearchTerm, $clauses5[6]['relatedModelData']['value']);
 }
 protected function makeDataProvider($uniquePageId, $form)
 {
     assert('is_string($uniquePageId)');
     assert('$form instanceOf MarketingListMembersConfigurationForm');
     $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType('subListPageSize');
     $searchAttributes = MarketingListMembersUtil::makeSearchAttributeData($this->modelId, $form->filteredBySubscriptionType, $form->filteredBySearchTerm);
     $sortAttributes = MarketingListMembersUtil::makeSortAttributeData();
     return new RedBeanModelsDataProvider($uniquePageId, $sortAttributes, true, $searchAttributes, array('pagination' => array('pageSize' => $pageSize)));
 }