source: sandbox/newExpressoMail/newExpressoMail/Assetic/Asset/Iterator/AssetCollectionFilterIterator.php @ 7265

Revision 7265, 2.3 KB checked in by gustavo, 12 years ago (diff)

Ticket #0000 - Criado novo modulo para o desenvolvimento do novo ExpressoMail?

  • Property svn:executable set to *
Line 
1<?php
2
3/*
4 * This file is part of the Assetic package, an OpenSky project.
5 *
6 * (c) 2010-2012 OpenSky Project Inc
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Assetic\Asset\Iterator;
13
14/**
15 * Asset collection filter iterator.
16 *
17 * The filter iterator is responsible for de-duplication of leaf assets based
18 * on both strict equality and source URL.
19 *
20 * @author Kris Wallsmith <kris.wallsmith@gmail.com>
21 */
22class AssetCollectionFilterIterator extends \RecursiveFilterIterator
23{
24    private $visited;
25    private $sources;
26
27    /**
28     * Constructor.
29     *
30     * @param AssetCollectionIterator $iterator The inner iterator
31     * @param array                   $visited  An array of visited asset objects
32     * @param array                   $sources  An array of visited source strings
33     */
34    public function __construct(AssetCollectionIterator $iterator, array $visited = array(), array $sources = array())
35    {
36        parent::__construct($iterator);
37
38        $this->visited = $visited;
39        $this->sources = $sources;
40    }
41
42    /**
43     * Determines whether the current asset is a duplicate.
44     *
45     * De-duplication is performed based on either strict equality or by
46     * matching sources.
47     *
48     * @return Boolean Returns true if we have not seen this asset yet
49     */
50    public function accept()
51    {
52        $asset = $this->getInnerIterator()->current(true);
53        $duplicate = false;
54
55        // check strict equality
56        if (in_array($asset, $this->visited, true)) {
57            $duplicate = true;
58        } else {
59            $this->visited[] = $asset;
60        }
61
62        // check source
63        $sourceRoot = $asset->getSourceRoot();
64        $sourcePath = $asset->getSourcePath();
65        if ($sourceRoot && $sourcePath) {
66            $source = $sourceRoot.'/'.$sourcePath;
67            if (in_array($source, $this->sources)) {
68                $duplicate = true;
69            } else {
70                $this->sources[] = $source;
71            }
72        }
73
74        return !$duplicate;
75    }
76
77    /**
78     * Passes visited objects and source URLs to the child iterator.
79     */
80    public function getChildren()
81    {
82        return new self($this->getInnerIterator()->getChildren(), $this->visited, $this->sources);
83    }
84}
Note: See TracBrowser for help on using the repository browser.