Test Failed
Push — 2.0 ( 9e8731...0b4092 )
by Zaahid
03:06
created

ParserMessageFactory   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 111
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 34
c 1
b 0
f 0
dl 0
loc 111
rs 10
wmc 6

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getIParser() 0 8 3
A prependMessageParserFactory() 0 3 1
A __construct() 0 17 1
A newInstance() 0 21 1
1
<?php
2
3
/**
4
 * This file is part of the ZBateson\MailMimeParser project.
5
 *
6
 * @license http://opensource.org/licenses/bsd-license.php BSD
7
 */
8
9
namespace ZBateson\MailMimeParser\Parser\Proxy;
10
11
use ZBateson\MailMimeParser\Message;
12
use ZBateson\MailMimeParser\Message\PartHeaderContainer;
13
use ZBateson\MailMimeParser\Message\Factory\PartHeaderContainerFactory;
14
use ZBateson\MailMimeParser\Message\Helper\MultipartHelper;
15
use ZBateson\MailMimeParser\Message\Helper\PrivacyHelper;
16
use ZBateson\MailMimeParser\Parser\IParserFactory;
17
use ZBateson\MailMimeParser\Parser\MimeParserFactory;
18
use ZBateson\MailMimeParser\Parser\NonMimeParserFactory;
19
use ZBateson\MailMimeParser\Parser\Part\ParserPartChildrenContainerFactory;
20
use ZBateson\MailMimeParser\Parser\Part\ParserPartStreamContainerFactory;
21
use ZBateson\MailMimeParser\Parser\PartBuilder;
22
use ZBateson\MailMimeParser\Stream\StreamFactory;
23
use Psr\Http\Message\StreamInterface;
24
25
/**
26
 * Responsible for creating proxied IMessage instances.
27
 *
28
 * @author Zaahid Bateson
29
 */
30
class ParserMessageFactory
31
{
32
    /**
33
     * @var StreamFactory the StreamFactory instance
34
     */
35
    protected $streamFactory;
36
37
    /**
38
     * @var PartHeaderContainerFactory
39
     */
40
    protected $partHeaderContainerFactory;
41
42
    /**
43
     * @var ParserPartStreamContainerFactory
44
     */
45
    protected $parserPartStreamContainerFactory;
46
47
    /**
48
     * @var ParserPartChildrenContainerFactory
49
     */
50
    protected $parserPartChildrenContainerFactory;
51
52
    /**
53
     * @var IParserFactory[]
54
     */
55
    protected $parserFactories;
56
57
    /**
58
     * @var MultipartHelper
59
     */
60
    private $multipartHelper;
61
62
    /**
63
     * @var PrivacyHelper
64
     */
65
    private $privacyHelper;
66
67
    public function __construct(
68
        StreamFactory $sdf,
69
        PartHeaderContainerFactory $phcf,
70
        ParserPartStreamContainerFactory $pscf,
71
        ParserPartChildrenContainerFactory $ppccf,
72
        MimeParserFactory $mpf,
73
        NonMimeParserFactory $nmpf,
74
        MultipartHelper $multipartHelper,
75
        PrivacyHelper $privacyHelper
76
    ) {
77
        $this->streamFactory = $sdf;
78
        $this->partHeaderContainerFactory = $phcf;
79
        $this->parserPartStreamContainerFactory = $pscf;
80
        $this->parserPartChildrenContainerFactory = $ppccf;
81
        $this->parserFactories = [ $mpf, $nmpf ];
82
        $this->multipartHelper = $multipartHelper;
83
        $this->privacyHelper = $privacyHelper;
84
    }
85
86
    /**
87
     * Adds an IParserFactory at the highest priority (up front).
88
     *
89
     * @param IParserFactory $pf
90
     */
91
    public function prependMessageParserFactory(IParserFactory $pf)
92
    {
93
        array_unshift($this->parserFactories, $pf);
94
    }
95
96
    /**
97
     * Loops through registered IParserFactories and returns a parser that can
98
     * parse a part for the passed headers.
99
     *
100
     * @param PartHeaderContainer $container
101
     * @return IParser
0 ignored issues
show
Bug introduced by
The type ZBateson\MailMimeParser\Parser\Proxy\IParser was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
102
     */
103
    protected function getIParser(PartHeaderContainer $container)
104
    {
105
        foreach ($this->parserFactories as $pf) {
106
            if ($pf->canParse($container)) {
107
                return $pf->newInstance();
108
            }
109
        }
110
        return null;
111
    }
112
113
    /**
114
     * Constructs a new IMessage object and returns it
115
     *
116
     * @param PartBuilder $partBuilder
117
     * @param PartHeaderContainer $headerContainer
118
     * @return ParserMimePartProxy
119
     */
120
    public function newInstance(PartBuilder $partBuilder, PartHeaderContainer $headerContainer)
121
    {
122
        // changes to headers by the user can't affect parsing which could come
123
        // after a change to headers is made by the user on the Part
124
        $copied = $this->partHeaderContainerFactory->newInstance($headerContainer);
125
        $parserProxy = new ParserMimePartProxy($copied, $partBuilder, $this->getIParser($headerContainer));
126
        $streamContainer = $this->parserPartStreamContainerFactory->newInstance($parserProxy);
127
        $childrenContainer = $this->parserPartChildrenContainerFactory->newInstance($parserProxy);
128
129
        $message = new Message(
130
            $streamContainer,
131
            $headerContainer,
132
            $childrenContainer,
133
            $this->multipartHelper,
134
            $this->privacyHelper
135
        );
136
        $parserProxy->setPart($message);
137
138
        $streamContainer->setStream($this->streamFactory->newMessagePartStream($message));
139
        $message->attach($streamContainer);
140
        return $parserProxy;
141
    }
142
143
}
144