Completed
Push — master ( ab502e...07a33d )
by Zaahid
06:14
created

AddressHeader   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 96
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 7
Bugs 1 Features 0
Metric Value
wmc 12
c 7
b 1
f 0
lcom 1
cbo 3
dl 0
loc 96
ccs 27
cts 27
cp 1
rs 10

6 Methods

Rating   Name   Duplication   Size   Complexity  
A getConsumer() 0 4 1
A setParseHeaderValue() 0 12 4
A getAddresses() 0 4 1
A getGroups() 0 4 1
A hasAddress() 0 9 3
A getPersonName() 0 7 2
1
<?php
2
/**
3
 * This file is part of the ZBateson\MailMimeParser project.
4
 *
5
 * @license http://opensource.org/licenses/bsd-license.php BSD
6
 */
7
namespace ZBateson\MailMimeParser\Header;
8
9
use ZBateson\MailMimeParser\Header\Consumer\AbstractConsumer;
10
use ZBateson\MailMimeParser\Header\Consumer\ConsumerService;
11
use ZBateson\MailMimeParser\Header\Part\AddressPart;
12
use ZBateson\MailMimeParser\Header\Part\AddressGroupPart;
13
14
/**
15
 * Reads an address list header using the AddressBaseConsumer.
16
 * 
17
 * An address list may consist of one or more addresses and address groups.
18
 * Each address separated by a comma, and each group separated by a semi-colon.
19
 * 
20
 * For full specifications, see https://www.ietf.org/rfc/rfc2822.txt
21
 *
22
 * @author Zaahid Bateson
23
 */
24
class AddressHeader extends AbstractHeader
25
{
26
    /**
27
     * @var \ZBateson\MailMimeParser\Header\Part\AddressPart[] array of
28
     * addresses 
29
     */
30
    protected $addresses = [];
31
    
32
    /**
33
     * @var \ZBateson\MailMimeParser\Header\Part\AddressGroupPart[] array of
34
     * address groups
35
     */
36
    protected $groups = [];
37
    
38
    /**
39
     * Returns an AddressBaseConsumer.
40
     * 
41
     * @param ConsumerService $consumerService
42
     * @return \ZBateson\MailMimeParser\Header\Consumer\AbstractConsumer
43
     */
44 11
    protected function getConsumer(ConsumerService $consumerService)
45
    {
46 11
        return $consumerService->getAddressBaseConsumer();
47
    }
48
    
49
    /**
50
     * Overridden to extract all addresses into addresses array.
51
     * 
52
     * @param AbstractConsumer $consumer
53
     */
54 11
    protected function setParseHeaderValue(AbstractConsumer $consumer)
55
    {
56 11
        parent::setParseHeaderValue($consumer);
57 11
        foreach ($this->parts as $part) {
58 10
            if ($part instanceof AddressPart) {
59 9
                $this->addresses[] = $part;
60 10
            } elseif ($part instanceof AddressGroupPart) {
61 4
                $this->addresses = array_merge($this->addresses, $part->getAddresses());
62 4
                $this->groups[] = $part;
63 4
            }
64 11
        }
65 11
    }
66
    
67
    /**
68
     * Returns all address parts in the header including all addresses that are
69
     * in groups.
70
     * 
71
     * @return \ZBateson\MailMimeParser\Header\Part\AddressPart[]
72
     */
73 1
    public function getAddresses()
74
    {
75 1
        return $this->addresses;
76
    }
77
    
78
    /**
79
     * Returns all group parts in the header.
80
     * 
81
     * @return \ZBateson\MailMimeParser\Header\Part\AddressGroupPart[]
82
     */
83 1
    public function getGroups()
84
    {
85 1
        return $this->groups;
86
    }
87
    
88
    /**
89
     * Returns true if an address exists with the passed email address.
90
     * 
91
     * Comparison is done case insensitively.
92
     * 
93
     * @param string $email
94
     * @return boolean
95
     */
96 1
    public function hasAddress($email)
97
    {
98 1
        foreach ($this->addresses as $addr) {
99 1
            if (strcasecmp($addr->getEmail(), $email) === 0) {
100 1
                return true;
101
            }
102 1
        }
103 1
        return false;
104
    }
105
    
106
    /**
107
     * Returns the name associated with the first email address (or group) to
108
     * complement getValue()
109
     * 
110
     * @return string
111
     */
112 3
    public function getPersonName()
113
    {
114 3
        if (!empty($this->parts)) {
115 2
            return $this->parts[0]->getName();
116
        }
117 1
        return null;
118
    }
119
}
120