Synchronized support of FilterCollection with ODM by adding missing method.
This commit is contained in:
parent
eea8572238
commit
d4814dec42
@ -104,11 +104,13 @@ class FilterCollection
|
|||||||
*/
|
*/
|
||||||
public function enable($name)
|
public function enable($name)
|
||||||
{
|
{
|
||||||
if (null === $filterClass = $this->config->getFilterClassName($name)) {
|
if ( ! $this->has($name)) {
|
||||||
throw new \InvalidArgumentException("Filter '" . $name . "' does not exist.");
|
throw new \InvalidArgumentException("Filter '" . $name . "' does not exist.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset($this->enabledFilters[$name])) {
|
if ( ! $this->isEnabled($name)) {
|
||||||
|
$filterClass = $this->config->getFilterClassName($name);
|
||||||
|
|
||||||
$this->enabledFilters[$name] = new $filterClass($this->em);
|
$this->enabledFilters[$name] = new $filterClass($this->em);
|
||||||
|
|
||||||
// Keep the enabled filters sorted for the hash
|
// Keep the enabled filters sorted for the hash
|
||||||
@ -154,13 +156,25 @@ class FilterCollection
|
|||||||
*/
|
*/
|
||||||
public function getFilter($name)
|
public function getFilter($name)
|
||||||
{
|
{
|
||||||
if (!isset($this->enabledFilters[$name])) {
|
if ( ! $this->isEnabled($name)) {
|
||||||
throw new \InvalidArgumentException("Filter '" . $name . "' is not enabled.");
|
throw new \InvalidArgumentException("Filter '" . $name . "' is not enabled.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->enabledFilters[$name];
|
return $this->enabledFilters[$name];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether filter with given name is defined.
|
||||||
|
*
|
||||||
|
* @param string $name Name of the filter.
|
||||||
|
*
|
||||||
|
* @return bool true if the filter exists, false if not.
|
||||||
|
*/
|
||||||
|
public function has($name)
|
||||||
|
{
|
||||||
|
return null !== $this->config->getFilterClassName($name);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if a filter is enabled.
|
* Checks if a filter is enabled.
|
||||||
*
|
*
|
||||||
@ -194,6 +208,7 @@ class FilterCollection
|
|||||||
}
|
}
|
||||||
|
|
||||||
$filterHash = '';
|
$filterHash = '';
|
||||||
|
|
||||||
foreach ($this->enabledFilters as $name => $filter) {
|
foreach ($this->enabledFilters as $name => $filter) {
|
||||||
$filterHash .= $name . $filter;
|
$filterHash .= $name . $filter;
|
||||||
}
|
}
|
||||||
|
95
tests/Doctrine/Tests/ORM/Query/FilterCollectionTest.php
Normal file
95
tests/Doctrine/Tests/ORM/Query/FilterCollectionTest.php
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Doctrine\Tests\ORM\Query;
|
||||||
|
|
||||||
|
require_once __DIR__ . '/../../TestInit.php';
|
||||||
|
|
||||||
|
use Doctrine\ORM\Mapping\ClassMetaData,
|
||||||
|
Doctrine\ORM\Query\Filter\SQLFilter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test case for FilterCollection
|
||||||
|
*
|
||||||
|
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
|
||||||
|
*/
|
||||||
|
class FilterCollectionTest extends \Doctrine\Tests\OrmTestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var \Doctrine\ORM\EntityManager
|
||||||
|
*/
|
||||||
|
private $em;
|
||||||
|
|
||||||
|
protected function setUp()
|
||||||
|
{
|
||||||
|
$this->em = $this->_getTestEntityManager();
|
||||||
|
|
||||||
|
$this->em->getConfiguration()->addFilter('testFilter', 'Doctrine\Tests\ORM\Query\MyFilter');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEnable()
|
||||||
|
{
|
||||||
|
$filterCollection = $this->em->getFilters();
|
||||||
|
|
||||||
|
$this->assertCount(0, $filterCollection->getEnabledFilters());
|
||||||
|
|
||||||
|
$filterCollection->enable('testFilter');
|
||||||
|
|
||||||
|
$enabledFilters = $filterCollection->getEnabledFilters();
|
||||||
|
|
||||||
|
$this->assertCount(1, $enabledFilters);
|
||||||
|
$this->assertContainsOnly('Doctrine\Tests\ORM\Query\MyFilter', $enabledFilters);
|
||||||
|
|
||||||
|
$filterCollection->disable('testFilter');
|
||||||
|
$this->assertCount(0, $filterCollection->getEnabledFilters());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHasFilter()
|
||||||
|
{
|
||||||
|
$filterCollection = $this->em->getFilters();
|
||||||
|
|
||||||
|
$this->assertTrue($filterCollection->has('testFilter'));
|
||||||
|
$this->assertFalse($filterCollection->has('fakeFilter'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @depends testEnable
|
||||||
|
*/
|
||||||
|
public function testIsEnabled()
|
||||||
|
{
|
||||||
|
$filterCollection = $this->em->getFilters();
|
||||||
|
|
||||||
|
$this->assertFalse($filterCollection->isEnabled('testFilter'));
|
||||||
|
|
||||||
|
$filterCollection->enable('testFilter');
|
||||||
|
|
||||||
|
$this->assertTrue($filterCollection->isEnabled('testFilter'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public function testGetFilterInvalidArgument()
|
||||||
|
{
|
||||||
|
$filterCollection = $this->em->getFilters();
|
||||||
|
|
||||||
|
$filterCollection->getFilter('testFilter');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetFilter()
|
||||||
|
{
|
||||||
|
$filterCollection = $this->em->getFilters();
|
||||||
|
|
||||||
|
$filterCollection->enable('testFilter');
|
||||||
|
|
||||||
|
$this->assertInstanceOf('Doctrine\Tests\ORM\Query\MyFilter', $filterCollection->getFilter('testFilter'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyFilter extends SQLFilter
|
||||||
|
{
|
||||||
|
public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias)
|
||||||
|
{
|
||||||
|
// getParameter applies quoting automatically
|
||||||
|
return $targetTableAlias . '.id = ' . $this->getParameter('id');
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user