Source of file FilterCollection.php
Size: 5,306 Bytes - Last Modified: 2013-05-11T09:51:12+02:00
/home/theseer/Downloads/Symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Query/FilterCollection.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 | <?php /* * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * This software consists of voluntary contributions made by many individuals * and is licensed under the MIT license. For more information, see * <http://www.doctrine-project.org>. */ namespace Doctrine\ORM\Query; use Doctrine\ORM\Configuration, Doctrine\ORM\EntityManager; /** * Collection class for all the query filters. * * @author Alexander <iam.asm89@gmail.com> */ class FilterCollection { /* Filter STATES */ /** * A filter object is in CLEAN state when it has no changed parameters. */ const FILTERS_STATE_CLEAN = 1; /** * A filter object is in DIRTY state when it has changed parameters. */ const FILTERS_STATE_DIRTY = 2; /** * The used Configuration. * * @var Doctrine\ORM\Configuration */ private $config; /** * The EntityManager that "owns" this FilterCollection instance. * * @var Doctrine\ORM\EntityManager */ private $em; /** * Instances of enabled filters. * * @var array */ private $enabledFilters = array(); /** * @var string The filter hash from the last time the query was parsed. */ private $filterHash; /** * @var integer $state The current state of this filter */ private $filtersState = self::FILTERS_STATE_CLEAN; /** * Constructor. * * @param EntityManager $em */ public function __construct(EntityManager $em) { $this->em = $em; $this->config = $em->getConfiguration(); } /** * Get all the enabled filters. * * @return array The enabled filters. */ public function getEnabledFilters() { return $this->enabledFilters; } /** * Enables a filter from the collection. * * @param string $name Name of the filter. * * @throws \InvalidArgumentException If the filter does not exist. * * @return SQLFilter The enabled filter. */ public function enable($name) { if (null === $filterClass = $this->config->getFilterClassName($name)) { throw new \InvalidArgumentException("Filter '" . $name . "' does not exist."); } if (!isset($this->enabledFilters[$name])) { $this->enabledFilters[$name] = new $filterClass($this->em); // Keep the enabled filters sorted for the hash ksort($this->enabledFilters); // Now the filter collection is dirty $this->filtersState = self::FILTERS_STATE_DIRTY; } return $this->enabledFilters[$name]; } /** * Disables a filter. * * @param string $name Name of the filter. * * @return SQLFilter The disabled filter. * * @throws \InvalidArgumentException If the filter does not exist. */ public function disable($name) { // Get the filter to return it $filter = $this->getFilter($name); unset($this->enabledFilters[$name]); // Now the filter collection is dirty $this->filtersState = self::FILTERS_STATE_DIRTY; return $filter; } /** * Get an enabled filter from the collection. * * @param string $name Name of the filter. * * @return SQLFilter The filter. * * @throws \InvalidArgumentException If the filter is not enabled. */ public function getFilter($name) { if (!isset($this->enabledFilters[$name])) { throw new \InvalidArgumentException("Filter '" . $name . "' is not enabled."); } return $this->enabledFilters[$name]; } /** * @return boolean True, if the filter collection is clean. */ public function isClean() { return self::FILTERS_STATE_CLEAN === $this->filtersState; } /** * Generates a string of currently enabled filters to use for the cache id. * * @return string */ public function getHash() { // If there are only clean filters, the previous hash can be returned if (self::FILTERS_STATE_CLEAN === $this->filtersState) { return $this->filterHash; } $filterHash = ''; foreach ($this->enabledFilters as $name => $filter) { $filterHash .= $name . $filter; } return $filterHash; } /** * Set the filter state to dirty. */ public function setFiltersStateDirty() { $this->filtersState = self::FILTERS_STATE_DIRTY; } } |