Completed
Push — master ( e8c2d6...8f74cc )
by Rudie
01:32
created

IMAPMessageContent   A

Complexity

Total Complexity 18

Size/Duplication

Total Lines 101
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 2

Importance

Changes 0
Metric Value
wmc 18
lcom 2
cbo 2
dl 0
loc 101
rs 10
c 0
b 0
f 0

10 Methods

Rating   Name   Duplication   Size   Complexity  
parts() 0 1 ?
A allParts() 0 15 3
A part() 0 4 1
A parameters() 0 16 4
A parameter() 0 5 2
A subtypeParts() 0 10 2
A subtypePart() 0 5 2
A subtypeContent() 0 7 2
A text() 0 3 1
A html() 0 3 1
1
<?php
2
3
namespace rdx\imap;
4
5
abstract class IMAPMessageContent implements IMAPMessagePartInterface {
6
7
	/** @var object */
8
	protected $structure;
9
10
	/** @var IMAPMessagePart[] */
11
	protected $parts = [];
12
13
	/** @var array */
14
	protected $parameters = [];
15
16
	/** @return IMAPMessagePartInterface[] */
17
	abstract public function parts();
18
19
	/** @return IMAPMessagePartInterface[] */
20
	public function allParts() {
21
		$parts = [];
22
		$iterate = function( IMAPMessagePartInterface $message ) use (&$iterate, &$parts) {
23
			foreach ( $message->parts() as $part ) {
24
				$parts[] = $part;
25
26
				if ( count($part->parts()) ) {
27
					$iterate($part);
28
				}
29
			}
30
		};
31
32
		$iterate($this);
33
		return $parts;
34
	}
35
36
	/** @return IMAPMessagePartInterface */
37
	public function part( $index ) {
38
		$parts = $this->parts();
39
		return @$parts[$index];
40
	}
41
42
	/** @return array */
43
	public function parameters() {
44
		if ( empty($this->parameters) ) {
45
			$structure = $this->structure();
46
47
			$this->parameters['bytes'] = @$structure->bytes;
48
49
			foreach ( (array) @$structure->parameters as $param ) {
50
				$this->parameters[ strtolower($param->attribute) ] = $param->value;
51
			}
52
			foreach ( (array) @$structure->dparameters as $param ) {
53
				$this->parameters[ strtolower($param->attribute) ] = $param->value;
54
			}
55
		}
56
57
		return $this->parameters;
58
	}
59
60
	/** @return mixed */
61
	public function parameter( $name ) {
62
		$parameters = $this->parameters();
63
		$structure = $this->structure();
64
		return @$parameters[ strtolower($name) ] ?: @$structure->$name;
65
	}
66
67
	/** @return IMAPMessagePartInterface[] */
68
	public function subtypeParts( $subtypes, $recursive ) {
69
		$subtypes = (array) $subtypes;
70
71
		$parts = $recursive ? $this->allParts() : $this->parts();
72
		array_unshift($parts, $this);
73
74
		return array_values(array_filter($parts, function(IMAPMessagePartInterface $part) use ($subtypes) {
75
			return in_array($part->subtype(), $subtypes);
76
		}));
77
	}
78
79
	/** @return IMAPMessagePartInterface */
80
	public function subtypePart( $subtypes, $recursive ) {
81
		if ( count($parts = $this->subtypeParts($subtypes, $recursive)) ) {
82
			return $parts[0];
83
		}
84
	}
85
86
	/** @return string */
87
	public function subtypeContent( $subtypes, $recursive ) {
88
		if ( $part = $this->subtypePart($subtypes, $recursive) ) {
89
			return $part->content();
90
		}
91
92
		return '';
93
	}
94
95
	/** @return string */
96
	public function text( $recursive = false ) {
97
		return $this->subtypeContent($this->mailbox()->getTextSubtypes(), $recursive);
98
	}
99
100
	/** @return string */
101
	public function html( $recursive = false ) {
102
		return $this->subtypeContent($this->mailbox()->getHtmlSubtypes(), $recursive);
103
	}
104
105
}
106