EmailHeaderParser   A
last analyzed

Complexity

Total Complexity 18

Size/Duplication

Total Lines 114
Duplicated Lines 0 %

Test Coverage

Coverage 97.83%

Importance

Changes 1
Bugs 1 Features 0
Metric Value
eloc 44
c 1
b 1
f 0
dl 0
loc 114
ccs 45
cts 46
cp 0.9783
rs 10
wmc 18

4 Methods

Rating   Name   Duplication   Size   Complexity  
A parse_headers() 0 2 1
A join_headers() 0 24 6
A parse_header_line() 0 11 3
B parse() 0 34 8
1
<?php namespace EmailLog\Util;
2
3
/**
4
 * Email Header Parser.
5
 *
6
 * @author Sudar
7
 */
8 1
defined( 'ABSPATH' ) || exit; // Exit if accessed directly
9
10
/**
11
 * Class Email Header Parser.
12
 *
13
 * @since 1.0
14
 */
15
class EmailHeaderParser {
16
17
	/**
18
	 * Join email headers.
19
	 *
20
	 * @since 1.0
21
	 *
22
	 * @param array $data Headers to be joined.
23
	 *
24
	 * @return string Joined headers.
25
	 */
26 3
	public function join_headers( $data ) {
27 3
		$headers = '';
28
29 3
		if ( ! empty( $data['from'] ) ) {
30 2
			$headers .= 'From: ' . $data['from'] . "\r\n";
31
		}
32
33 3
		if ( ! empty( $data['cc'] ) ) {
34 1
			$headers .= 'CC: ' . $data['cc'] . "\r\n";
35
		}
36
37 3
		if ( ! empty( $data['bcc'] ) ) {
38 1
			$headers .= 'BCC: ' . $data['bcc'] . "\r\n";
39
		}
40
41 3
		if ( ! empty( $data['reply_to'] ) ) {
42 2
			$headers .= 'Reply-to: ' . $data['reply_to'] . "\r\n";
43
		}
44
45 3
		if ( ! empty( $data['content_type'] ) ) {
46 1
			$headers .= 'Content-type: ' . $data['content_type'] . "\r\n";
47
		}
48
49 3
		return $headers;
50
	}
51
52
	/**
53
	 * Return parsed headers.
54
	 *
55
	 * @param string $headers Headers to parse.
56
	 *
57
	 * @return array Parsed Headers.
58
	 */
59 4
	public function parse_headers( $headers ) {
60 4
		return $this->parse( $headers );
61
	}
62
63
	/**
64
	 * Parse Headers.
65
	 *
66
	 * @access private
67
	 *
68
	 * @param string $headers Headers to be parsed.
69
	 *
70
	 * @return array Parsed headers.
71
	 */
72 4
	private function parse( $headers ) {
73 4
		$data        = array();
74 4
		$arr_headers = explode( "\n", $headers );
75
76 4
		foreach ( $arr_headers as $header ) {
77 4
			$split_header = explode( ':', $header );
78 4
			$value        = $this->parse_header_line( $split_header );
79
80 4
			if ( trim( $value ) != '' ) {
81 3
				switch ( strtolower( $split_header[0] ) ) {
82 3
					case 'from':
83 2
						$data['from'] = $value;
84 2
						break;
85
86 3
					case 'cc':
87 3
						$data['cc'] = $value;
88 3
						break;
89
90 3
					case 'bcc':
91 3
						$data['bcc'] = $value;
92 3
						break;
93
94 3
					case 'reply-to':
95 2
						$data['reply_to'] = $value;
96 2
						break;
97
98 3
					case 'content-type':
99 3
						$data['content_type'] = $value;
100 3
						break;
101
				}
102
			}
103
		}
104
105 4
		return $data;
106
	}
107
108
	/**
109
	 * Parse individual header line.
110
	 *
111
	 * @since  1.0
112
	 * @access private
113
	 *
114
	 * @param array $header Header line to be parsed.
115
	 *
116
	 * @return string Parsed value.
117
	 */
118 4
	private function parse_header_line( $header ) {
119 4
		$value = '';
120 4
		if ( 2 == count( $header ) ) {
121 3
			if ( is_array( $header[1] ) ) {
122
				$value = trim( implode( ',', array_map( 'trim', $header[1] ) ) );
123
			} else {
124 3
				$value = trim( $header[1] );
125
			}
126
		}
127
128 4
		return $value;
129
	}
130
}
131