public function testMergeMetada() { $firstMetadata = null; $secondMetadata = null; $mergedMetadata = MashableUtil::mergeMetadata($firstMetadata, $secondMetadata); $this->assertEquals($mergedMetadata['clauses'], array()); $this->assertEquals($mergedMetadata['structure'], null); $firstMetadata = array('clauses' => array(1 => 'testClause1'), 'structure' => '1'); $secondMetadata = null; $mergedMetadata = MashableUtil::mergeMetadata($firstMetadata, $secondMetadata); $this->assertEquals(array(1 => 'testClause1'), $mergedMetadata['clauses']); $this->assertEquals('1', $mergedMetadata['structure']); $firstMetadata = null; $secondMetadata = array('clauses' => array(1 => 'testClause1'), 'structure' => '1'); $mergedMetadata = MashableUtil::mergeMetadata($firstMetadata, $secondMetadata); $this->assertEquals($mergedMetadata['clauses'], array(1 => 'testClause1')); $this->assertEquals($mergedMetadata['structure'], '1'); $firstMetadata = array('clauses' => array(1 => 'testClause1'), 'structure' => '1'); $secondMetadata = array('clauses' => array(1 => 'testClause1ForSecondMetadata'), 'structure' => '1'); $mergedMetadata = MashableUtil::mergeMetadata($firstMetadata, $secondMetadata); $this->assertEquals(array(1 => 'testClause1', 2 => 'testClause1ForSecondMetadata'), $mergedMetadata['clauses']); $this->assertEquals('(1) and (2)', $mergedMetadata['structure']); $firstMetadata = array('clauses' => array(1 => 'testClause1', 2 => 'testClause2', 3 => 'testClause3'), 'structure' => '1 and (2 or 3)'); $secondMetadata = array('clauses' => array(1 => 'testClause1ForSecondMetadata', 2 => 'testClause2ForSecondMetadata'), 'structure' => '1 and 2'); $mergedMetadata = MashableUtil::mergeMetadata($firstMetadata, $secondMetadata, false); $this->assertEquals($mergedMetadata['clauses'], array(1 => 'testClause1', 2 => 'testClause2', 3 => 'testClause3', 4 => 'testClause1ForSecondMetadata', 5 => 'testClause2ForSecondMetadata')); $this->assertEquals($mergedMetadata['structure'], '(1 and (2 or 3)) or (4 and 5)'); $firstMetadata = array('clauses' => array(1 => 'testClause1'), 'structure' => '1'); $secondMetadata = array('clauses' => array(1 => 'testClause1ForSecondMetadata'), 'structure' => '1'); $mergedMetadata = MashableUtil::mergeMetadata($firstMetadata, $secondMetadata); $this->assertEquals(array(1 => 'testClause1', 2 => 'testClause1ForSecondMetadata'), $mergedMetadata['clauses']); $this->assertEquals('(1) and (2)', $mergedMetadata['structure']); $firstMetadata = array('clauses' => array(1 => 'testClause1'), 'structure' => '1'); $secondMetadata = array('clauses' => array(1 => 'testClause1ForSecondMetadata', 2 => 'testClause2ForSecondMetadata', 3 => 'testClause3ForSecondMetadata', 4 => 'testClause4ForSecondMetadata'), 'structure' => '((1 and 2) or (3 and 4))'); $mergedMetadata = MashableUtil::mergeMetadata($firstMetadata, $secondMetadata); $this->assertEquals(array(1 => 'testClause1', 2 => 'testClause1ForSecondMetadata', 3 => 'testClause2ForSecondMetadata', 4 => 'testClause3ForSecondMetadata', 5 => 'testClause4ForSecondMetadata'), $mergedMetadata['clauses']); $this->assertEquals('(1) and (((2 and 3) or (4 and 5)))', $mergedMetadata['structure']); }
public function getListView($option, $filteredBy = MashableInboxForm::FILTERED_BY_ALL, $searchTerm = null, $starred = false) { $modelClassName = $this->getModelClassName(); $orderBy = $this->getMachableInboxOrderByAttributeName(); $pageSize = Yii::app()->pagination->resolveActiveForCurrentUserByType('listPageSize', get_class(Yii::app()->controller->module)); $metadataByOptionAndFilter = MashableUtil::mergeMetadata($this->getMetadataFilteredByOption($option), $this->getMetadataFilteredByFilteredBy($filteredBy)); $metadata = MashableUtil::mergeMetadata($metadataByOptionAndFilter, $this->getSearchAttributeData($searchTerm)); $dataProviderClassName = 'RedBeanModelDataProvider'; if ($starred) { $dataProviderClassName = 'StarredModelDataProvider'; } $dataProvider = RedBeanModelDataProviderUtil::makeDataProvider($metadata, $modelClassName, $dataProviderClassName, $orderBy, true, $pageSize); $listViewClassName = $this->getListViewClassName(); $listView = new $listViewClassName(Yii::app()->controller->id, Yii::app()->controller->module->id, $modelClassName, $dataProvider, array()); return $listView; }