Source of file AssetCollectionFilterIterator.php
Size: 2,367 Bytes - Last Modified: 2013-06-02T00:13:43+02:00
/home/theseer/Downloads/Symfony/vendor/kriswallsmith/assetic/src/Assetic/Asset/Iterator/AssetCollectionFilterIterator.php
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 | <?php /* * This file is part of the Assetic package, an OpenSky project. * * (c) 2010-2013 OpenSky Project Inc * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Assetic\Asset\Iterator; /** * Asset collection filter iterator. * * The filter iterator is responsible for de-duplication of leaf assets based * on both strict equality and source URL. * * @author Kris Wallsmith <kris.wallsmith@gmail.com> */ class AssetCollectionFilterIterator extends \RecursiveFilterIterator { private $visited; private $sources; /** * Constructor. * * @param AssetCollectionIterator $iterator The inner iterator * @param array $visited An array of visited asset objects * @param array $sources An array of visited source strings */ public function __construct(AssetCollectionIterator $iterator, array $visited = array(), array $sources = array()) { parent::__construct($iterator); $this->visited = $visited; $this->sources = $sources; } /** * Determines whether the current asset is a duplicate. * * De-duplication is performed based on either strict equality or by * matching sources. * * @return Boolean Returns true if we have not seen this asset yet */ public function accept() { $asset = $this->getInnerIterator()->current(true); $duplicate = false; // check strict equality if (in_array($asset, $this->visited, true)) { $duplicate = true; } else { $this->visited[] = $asset; } // check source $sourceRoot = $asset->getSourceRoot(); $sourcePath = $asset->getSourcePath(); if ($sourceRoot && $sourcePath) { $source = $sourceRoot.'/'.$sourcePath; if (in_array($source, $this->sources)) { $duplicate = true; } else { $this->sources[] = $source; } } return !$duplicate; } /** * Passes visited objects and source URLs to the child iterator. */ public function getChildren() { return new self($this->getInnerIterator()->getChildren(), $this->visited, $this->sources); } } |