/** * Factory method creates instance of breadcrumbs collection for a given filterbox collection * * @param Tx_PtExtlist_Domain_Configuration_ConfigurationBuilder $configurationBuilder * @param Tx_PtExtlist_Domain_Model_Filter_FilterboxCollection $filterboxCollection * @return Tx_PtExtlist_Domain_Model_BreadCrumbs_BreadCrumbCollection */ public function getInstanceByFilterboxCollection(Tx_PtExtlist_Domain_Configuration_ConfigurationBuilder $configurationBuilder, Tx_PtExtlist_Domain_Model_Filter_FilterboxCollection $filterboxCollection) { if (!array_key_exists($filterboxCollection->getListIdentifier(), $this->instances) || $this->instances[$filterboxCollection->getListIdentifier()] == null) { $breadCrumbCollection = new Tx_PtExtlist_Domain_Model_BreadCrumbs_BreadCrumbCollection(); $breadCrumbCollection->injectConfigurationBuilder($configurationBuilder); $getPostVarsAdapterFactory = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager')->get('Tx_PtExtlist_Domain_StateAdapter_GetPostVarAdapterFactory'); /* @var $getPostVarsAdapterFactory Tx_PtExtlist_Domain_StateAdapter_GetPostVarAdapterFactory */ $gpVarsAdapter = $getPostVarsAdapterFactory->getInstance(); $gpVarsAdapter->injectParametersInObject($breadCrumbCollection); foreach ($filterboxCollection as $filterbox) { /* @var $filterbox Tx_PtExtlist_Domain_Model_Filter_Filterbox */ foreach ($filterbox as $filter) { /* @var $filter Tx_PtExtlist_Domain_Model_Filter_FilterInterface */ if ($filter->isActive()) { $breadcrumb = $filter->getFilterBreadCrumb(); if ($breadcrumb !== null) { // TODO at the moment, proxy filters generate a null breadcrumb. Fix this! $breadCrumbCollection->addBreadCrumb($breadcrumb); } } } } $this->instances[$filterboxCollection->getListIdentifier()] = $breadCrumbCollection; } return $this->instances[$filterboxCollection->getListIdentifier()]; }
public function testResetFilterAction() { $this->markTestIncomplete(); $breadCrumb = $this->getMock('Tx_PtExtlist_Domain_Model_BreadCrumbs_BreadCrumb', array(), array(), '', false); $filterMock = $this->getMock('Tx_PtExtlist_Domain_Model_Filter_StringFilter'); $filterMock->expects($this->any())->method('getFilterBreadCrumb')->will($this->returnValue($breadCrumb)); $filterbox = new Tx_PtExtlist_Domain_Model_Filter_Filterbox(); $filterbox->addFilter($filterMock, 'test'); $filterboxCollection = new Tx_PtExtlist_Domain_Model_Filter_FilterboxCollection(); $filterboxCollection->addFilterBox($filterbox, 'test'); $mockController = $this->getMock($this->buildAccessibleProxy('Tx_PtExtlist_Controller_BreadCrumbsController'), array('forward'), array(), '', false); $mockController->expects($this->once())->method('forward')->with('index'); $mockController->_set('configurationBuilder', $this->configurationBuilderMock); $mockController->_set('filterboxCollection', $filterboxCollection); $mockController->resetFilterAction(); }
/** * Resets all filters of filterbox * * @param string $filterboxIdentifier Identifier of filter which should be reset * @return string Rendered reset action */ public function resetAction($filterboxIdentifier) { if ($this->filterboxCollection->hasItem($filterboxIdentifier)) { $this->filterboxCollection->getFilterboxByFilterboxIdentifier($filterboxIdentifier)->reset(); } $this->resetPagers(); $this->redirect('list'); }
/** * Resets a single filter * * Here we reset a single filter within a filterbox. Make sure to give a full qualified filter identifier * which consists of filterboxIdentifier.filterIdentifier. * * @param string $fullQualifiedFilterIdentifier FilterboxIdentifier.FilterIdentifier Identifier of filter to be reseted * @return string Rendered resetFilter Action */ public function resetFilterAction($fullQualifiedFilterIdentifier) { // TODO refactor me, as we use this twice! list($filterboxIdentifier, $filterIdentifier) = explode('.', $fullQualifiedFilterIdentifier); if ($this->filterboxCollection->hasItem($filterboxIdentifier)) { $filterbox = $this->filterboxCollection->getFilterboxByFilterboxIdentifier($filterboxIdentifier); if ($filterbox->hasItem($filterIdentifier)) { $filterbox->getFilterByFilterIdentifier($filterIdentifier)->reset(); } } /** * TODO try to figure out a way how to handle this without redirect * * The problem is, that although GP-vars mapping is done automatically, * we cannot trigger any action when resetting filterboxes without using * the controller. The controller can be executed "too late", so that the filters * are not reset, if their values are requested. * * We should introduce a "global" controller that handles certain actions * before any other controller (and only once!). */ $this->redirect('show'); }
/** @test */ public function getWhereClauseFromFilterboxCollectionReturnsExpectedString() { $pagerCollectionMock = $this->getMock('Tx_PtExtlist_Domain_Model_Pager_PagerCollection', array('setItemCount'), array(), '', false, false); $dataBackend = new Tx_PtExtlist_Domain_DataBackend_MySqlDataBackend_MySqlDataBackend($this->configurationBuilder); $dataBackend->_injectPagerCollection($pagerCollectionMock); $dataBackend->_injectQueryInterpreter(new Tx_PtExtlist_Domain_DataBackend_MySqlDataBackend_MySqlInterpreter_MySqlInterpreter()); $filter1Mock = $this->getFilterMockByCriteria(new Tx_PtExtlist_Domain_QueryObject_SimpleCriteria('test', 10, '>')); $filter2Mock = $this->getFilterMockByCriteria(new Tx_PtExtlist_Domain_QueryObject_SimpleCriteria('test', 10, '<')); $filter3Mock = $this->getFilterMockByCriteria(new Tx_PtExtlist_Domain_QueryObject_SimpleCriteria('test', 20, '>')); $filter4Mock = $this->getFilterMockByCriteria(new Tx_PtExtlist_Domain_QueryObject_SimpleCriteria('test', 20, '<')); $filterbox1 = $this->getFilterboxByArrayOfFilters(array($filter1Mock, $filter2Mock)); $filterbox2 = $this->getFilterboxByArrayOfFilters(array($filter3Mock, $filter4Mock)); $filterboxCollection = new Tx_PtExtlist_Domain_Model_Filter_FilterboxCollection($this->configurationBuilder); $filterboxCollection->addItem($filterbox1); $filterboxCollection->addItem($filterbox2); $dataBackend->_injectfilterboxCollection($filterboxCollection); $whereClauseForFilterboxCollection = $dataBackend->getWhereClauseFromFilterboxes(); $this->assertTrue($whereClauseForFilterboxCollection == '((test > 10) AND (test < 10)) AND ((test > 20) AND (test < 20))', 'Where clause for filterbox collection should have been "((test > 10) AND (test < 10)) AND ((test > 20) AND (test < 20))" but was ' . $whereClauseForFilterboxCollection); }
/** @test */ public function getExcludeFiltersReturnsConfiguredExcludeFiltersForSubmittedFilterbox() { $excludeFiltersArray = array('filterbox1' => array('filter1', 'filter2')); $filterbox1ConfigurationMock = $this->getMock('Tx_PtExtlist_Domain_Configuration_Filters_FilterboxConfig', array('getExcludeFilters'), array(), '', false); $filterbox1ConfigurationMock->expects($this->any())->method('getExcludeFilters')->will($this->returnValue($excludeFiltersArray)); $submittedFilterboxMock1 = $this->getMock('Tx_PtExtlist_Domain_Model_Filter_Filterbox', array('isSubmittedFilterbox', 'getFilterboxConfiguration'), array(), '', false); $submittedFilterboxMock1->expects($this->any())->method('isSubmittedFilterbox')->will($this->returnValue(true)); $submittedFilterboxMock1->expects($this->any())->method('getFilterboxConfiguration')->will($this->returnValue($filterbox1ConfigurationMock)); $submittedFilterboxMock2 = $this->getMock('Tx_PtExtlist_Domain_Model_Filter_Filterbox', array('isSubmittedFilterbox'), array(), '', false); $submittedFilterboxMock2->expects($this->any())->method('isSubmittedFilterbox')->will($this->returnValue(false)); $filterboxCollection = new Tx_PtExtlist_Domain_Model_Filter_FilterboxCollection(); $filterboxCollection->addFilterBox($submittedFilterboxMock1, 'blubb'); $filterboxCollection->addFilterBox($submittedFilterboxMock2, 'bla'); $this->assertEquals($filterboxCollection->getExcludeFilters(), $excludeFiltersArray); }