Passed
Push — master ( ba0f3b...d46765 )
by Paul
04:17
created
plugin/Modules/Email.php 1 patch
Indentation   +201 added lines, -201 removed lines patch added patch discarded remove patch
@@ -9,205 +9,205 @@
 block discarded – undo
9 9
 
10 10
 class Email
11 11
 {
12
-    /**
13
-     * @var array
14
-     */
15
-    public $attachments;
16
-
17
-    /**
18
-     * @var array
19
-     */
20
-    public $email;
21
-
22
-    /**
23
-     * @var array
24
-     */
25
-    public $headers;
26
-
27
-    /**
28
-     * @var string
29
-     */
30
-    public $message;
31
-
32
-    /**
33
-     * @var string
34
-     */
35
-    public $subject;
36
-
37
-    /**
38
-     * @var string|array
39
-     */
40
-    public $to;
41
-
42
-    /**
43
-     * @return Email
44
-     */
45
-    public function compose(array $email)
46
-    {
47
-        $this->normalize($email);
48
-        $this->attachments = $this->email['attachments'];
49
-        $this->headers = $this->buildHeaders();
50
-        $this->message = $this->buildHtmlMessage();
51
-        $this->subject = $this->email['subject'];
52
-        $this->to = $this->email['to'];
53
-        add_action('phpmailer_init', [$this, 'buildPlainTextMessage']);
54
-        return $this;
55
-    }
56
-
57
-    /**
58
-     * @param string $format
59
-     * @return string|null
60
-     */
61
-    public function read($format = '')
62
-    {
63
-        if ('plaintext' == $format) {
64
-            $message = $this->stripHtmlTags($this->message);
65
-            return apply_filters('site-reviews/email/message', $message, 'text', $this);
66
-        }
67
-        return $this->message;
68
-    }
69
-
70
-    /**
71
-     * @return void|bool
72
-     */
73
-    public function send()
74
-    {
75
-        if (!$this->message || !$this->subject || !$this->to) {
76
-            return;
77
-        }
78
-        add_action('wp_mail_failed', [$this, 'logMailError']);
79
-        $sent = wp_mail(
80
-            $this->to,
81
-            $this->subject,
82
-            $this->message,
83
-            $this->headers,
84
-            $this->attachments
85
-        );
86
-        remove_action('wp_mail_failed', [$this, 'logMailError']);
87
-        $this->reset();
88
-        return $sent;
89
-    }
90
-
91
-    /**
92
-     * @return void
93
-     * @action phpmailer_init
94
-     */
95
-    public function buildPlainTextMessage(PHPMailer $phpmailer)
96
-    {
97
-        if (empty($this->email)) {
98
-            return;
99
-        }
100
-        if ('text/plain' === $phpmailer->ContentType || !empty($phpmailer->AltBody)) {
101
-            return;
102
-        }
103
-        $message = $this->stripHtmlTags($phpmailer->Body);
104
-        $phpmailer->AltBody = apply_filters('site-reviews/email/message', $message, 'text', $this);
105
-    }
106
-
107
-    /**
108
-     * @return array
109
-     */
110
-    protected function buildHeaders()
111
-    {
112
-        $allowed = [
113
-            'bcc', 'cc', 'from', 'reply-to',
114
-        ];
115
-        $headers = array_intersect_key($this->email, array_flip($allowed));
116
-        $headers = array_filter($headers);
117
-        foreach ($headers as $key => $value) {
118
-            unset($headers[$key]);
119
-            $headers[] = $key.': '.$value;
120
-        }
121
-        $headers[] = 'Content-Type: text/html';
122
-        return apply_filters('site-reviews/email/headers', $headers, $this);
123
-    }
124
-
125
-    /**
126
-     * @return string
127
-     */
128
-    protected function buildHtmlMessage()
129
-    {
130
-        $template = trim(glsr(OptionManager::class)->get('settings.general.notification_message'));
131
-        if (!empty($template)) {
132
-            $message = glsr(Template::class)->interpolate(
133
-                $template, 
134
-                ['context' => $this->email['template-tags']], 
135
-                $this->email['template']
136
-            );
137
-        } elseif ($this->email['template']) {
138
-            $message = glsr(Template::class)->build('templates/'.$this->email['template'], [
139
-                'context' => $this->email['template-tags'],
140
-            ]);
141
-        }
142
-        if (!isset($message)) {
143
-            $message = $this->email['message'];
144
-        }
145
-        $message = $this->email['before'].$message.$this->email['after'];
146
-        $message = strip_shortcodes($message);
147
-        $message = wptexturize($message);
148
-        $message = wpautop($message);
149
-        $message = str_replace('<> ', '', $message);
150
-        $message = str_replace(']]>', ']]>', $message);
151
-        $message = glsr(Template::class)->build('partials/email/index', [
152
-            'context' => ['message' => $message],
153
-        ]);
154
-        return apply_filters('site-reviews/email/message', stripslashes($message), 'html', $this);
155
-    }
156
-
157
-    /**
158
-     * @param \WP_Error $error
159
-     * @return void
160
-     */
161
-    protected function logMailError($error)
162
-    {
163
-        glsr_log()->error('Email was not sent (wp_mail failed)')
164
-            ->debug($this)
165
-            ->debug($error);
166
-    }
167
-
168
-    /**
169
-     * @return void
170
-     */
171
-    protected function normalize(array $email = [])
172
-    {
173
-        $email = shortcode_atts(glsr(EmailDefaults::class)->defaults(), $email);
174
-        if (empty($email['reply-to'])) {
175
-            $email['reply-to'] = $email['from'];
176
-        }
177
-        $this->email = apply_filters('site-reviews/email/compose', $email, $this);
178
-    }
179
-
180
-    /**
181
-     * @return void
182
-     */
183
-    protected function reset()
184
-    {
185
-        $this->attachments = [];
186
-        $this->email = [];
187
-        $this->headers = [];
188
-        $this->message = null;
189
-        $this->subject = null;
190
-        $this->to = null;
191
-    }
192
-
193
-    /**
194
-     * @return string
195
-     */
196
-    protected function stripHtmlTags($string)
197
-    {
198
-        // remove invisible elements
199
-        $string = preg_replace('@<(embed|head|noembed|noscript|object|script|style)[^>]*?>.*?</\\1>@siu', '', $string);
200
-        // replace certain elements with a line-break
201
-        $string = preg_replace('@</(div|h[1-9]|p|pre|tr)@iu', "\r\n\$0", $string);
202
-        // replace other elements with a space
203
-        $string = preg_replace('@</(td|th)@iu', ' $0', $string);
204
-        // add a placeholder for plain-text bullets to list elements
205
-        $string = preg_replace('@<(li)[^>]*?>@siu', '$0-o-^-o-', $string);
206
-        // strip all remaining HTML tags
207
-        $string = wp_strip_all_tags($string);
208
-        $string = wp_specialchars_decode($string, ENT_QUOTES);
209
-        $string = preg_replace('/\v(?:[\v\h]+){2,}/', "\r\n\r\n", $string);
210
-        $string = str_replace('-o-^-o-', ' - ', $string);
211
-        return html_entity_decode($string, ENT_QUOTES, 'UTF-8');
212
-    }
12
+	/**
13
+	 * @var array
14
+	 */
15
+	public $attachments;
16
+
17
+	/**
18
+	 * @var array
19
+	 */
20
+	public $email;
21
+
22
+	/**
23
+	 * @var array
24
+	 */
25
+	public $headers;
26
+
27
+	/**
28
+	 * @var string
29
+	 */
30
+	public $message;
31
+
32
+	/**
33
+	 * @var string
34
+	 */
35
+	public $subject;
36
+
37
+	/**
38
+	 * @var string|array
39
+	 */
40
+	public $to;
41
+
42
+	/**
43
+	 * @return Email
44
+	 */
45
+	public function compose(array $email)
46
+	{
47
+		$this->normalize($email);
48
+		$this->attachments = $this->email['attachments'];
49
+		$this->headers = $this->buildHeaders();
50
+		$this->message = $this->buildHtmlMessage();
51
+		$this->subject = $this->email['subject'];
52
+		$this->to = $this->email['to'];
53
+		add_action('phpmailer_init', [$this, 'buildPlainTextMessage']);
54
+		return $this;
55
+	}
56
+
57
+	/**
58
+	 * @param string $format
59
+	 * @return string|null
60
+	 */
61
+	public function read($format = '')
62
+	{
63
+		if ('plaintext' == $format) {
64
+			$message = $this->stripHtmlTags($this->message);
65
+			return apply_filters('site-reviews/email/message', $message, 'text', $this);
66
+		}
67
+		return $this->message;
68
+	}
69
+
70
+	/**
71
+	 * @return void|bool
72
+	 */
73
+	public function send()
74
+	{
75
+		if (!$this->message || !$this->subject || !$this->to) {
76
+			return;
77
+		}
78
+		add_action('wp_mail_failed', [$this, 'logMailError']);
79
+		$sent = wp_mail(
80
+			$this->to,
81
+			$this->subject,
82
+			$this->message,
83
+			$this->headers,
84
+			$this->attachments
85
+		);
86
+		remove_action('wp_mail_failed', [$this, 'logMailError']);
87
+		$this->reset();
88
+		return $sent;
89
+	}
90
+
91
+	/**
92
+	 * @return void
93
+	 * @action phpmailer_init
94
+	 */
95
+	public function buildPlainTextMessage(PHPMailer $phpmailer)
96
+	{
97
+		if (empty($this->email)) {
98
+			return;
99
+		}
100
+		if ('text/plain' === $phpmailer->ContentType || !empty($phpmailer->AltBody)) {
101
+			return;
102
+		}
103
+		$message = $this->stripHtmlTags($phpmailer->Body);
104
+		$phpmailer->AltBody = apply_filters('site-reviews/email/message', $message, 'text', $this);
105
+	}
106
+
107
+	/**
108
+	 * @return array
109
+	 */
110
+	protected function buildHeaders()
111
+	{
112
+		$allowed = [
113
+			'bcc', 'cc', 'from', 'reply-to',
114
+		];
115
+		$headers = array_intersect_key($this->email, array_flip($allowed));
116
+		$headers = array_filter($headers);
117
+		foreach ($headers as $key => $value) {
118
+			unset($headers[$key]);
119
+			$headers[] = $key.': '.$value;
120
+		}
121
+		$headers[] = 'Content-Type: text/html';
122
+		return apply_filters('site-reviews/email/headers', $headers, $this);
123
+	}
124
+
125
+	/**
126
+	 * @return string
127
+	 */
128
+	protected function buildHtmlMessage()
129
+	{
130
+		$template = trim(glsr(OptionManager::class)->get('settings.general.notification_message'));
131
+		if (!empty($template)) {
132
+			$message = glsr(Template::class)->interpolate(
133
+				$template, 
134
+				['context' => $this->email['template-tags']], 
135
+				$this->email['template']
136
+			);
137
+		} elseif ($this->email['template']) {
138
+			$message = glsr(Template::class)->build('templates/'.$this->email['template'], [
139
+				'context' => $this->email['template-tags'],
140
+			]);
141
+		}
142
+		if (!isset($message)) {
143
+			$message = $this->email['message'];
144
+		}
145
+		$message = $this->email['before'].$message.$this->email['after'];
146
+		$message = strip_shortcodes($message);
147
+		$message = wptexturize($message);
148
+		$message = wpautop($message);
149
+		$message = str_replace('&lt;&gt; ', '', $message);
150
+		$message = str_replace(']]>', ']]&gt;', $message);
151
+		$message = glsr(Template::class)->build('partials/email/index', [
152
+			'context' => ['message' => $message],
153
+		]);
154
+		return apply_filters('site-reviews/email/message', stripslashes($message), 'html', $this);
155
+	}
156
+
157
+	/**
158
+	 * @param \WP_Error $error
159
+	 * @return void
160
+	 */
161
+	protected function logMailError($error)
162
+	{
163
+		glsr_log()->error('Email was not sent (wp_mail failed)')
164
+			->debug($this)
165
+			->debug($error);
166
+	}
167
+
168
+	/**
169
+	 * @return void
170
+	 */
171
+	protected function normalize(array $email = [])
172
+	{
173
+		$email = shortcode_atts(glsr(EmailDefaults::class)->defaults(), $email);
174
+		if (empty($email['reply-to'])) {
175
+			$email['reply-to'] = $email['from'];
176
+		}
177
+		$this->email = apply_filters('site-reviews/email/compose', $email, $this);
178
+	}
179
+
180
+	/**
181
+	 * @return void
182
+	 */
183
+	protected function reset()
184
+	{
185
+		$this->attachments = [];
186
+		$this->email = [];
187
+		$this->headers = [];
188
+		$this->message = null;
189
+		$this->subject = null;
190
+		$this->to = null;
191
+	}
192
+
193
+	/**
194
+	 * @return string
195
+	 */
196
+	protected function stripHtmlTags($string)
197
+	{
198
+		// remove invisible elements
199
+		$string = preg_replace('@<(embed|head|noembed|noscript|object|script|style)[^>]*?>.*?</\\1>@siu', '', $string);
200
+		// replace certain elements with a line-break
201
+		$string = preg_replace('@</(div|h[1-9]|p|pre|tr)@iu', "\r\n\$0", $string);
202
+		// replace other elements with a space
203
+		$string = preg_replace('@</(td|th)@iu', ' $0', $string);
204
+		// add a placeholder for plain-text bullets to list elements
205
+		$string = preg_replace('@<(li)[^>]*?>@siu', '$0-o-^-o-', $string);
206
+		// strip all remaining HTML tags
207
+		$string = wp_strip_all_tags($string);
208
+		$string = wp_specialchars_decode($string, ENT_QUOTES);
209
+		$string = preg_replace('/\v(?:[\v\h]+){2,}/', "\r\n\r\n", $string);
210
+		$string = str_replace('-o-^-o-', ' - ', $string);
211
+		return html_entity_decode($string, ENT_QUOTES, 'UTF-8');
212
+	}
213 213
 }
Please login to merge, or discard this patch.