MailPanel.php
2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php
/**
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://cakephp.org CakePHP(tm) Project
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
namespace DebugKit\Panel;
use ArrayObject;
use Cake\Core\App;
use Cake\Mailer\TransportFactory;
use DebugKit\DebugPanel;
use DebugKit\Mailer\Transport\DebugKitTransport;
use ReflectionClass;
/**
* Provides debug information on the Emails sent during the request
*/
class MailPanel extends DebugPanel
{
/**
* The list of emails produced during the request
*
* @var ArrayObject
*/
protected $emailLog;
/**
* Initialize hook - configures the email transport.
*
* @return void
*/
public function initialize()
{
$reflection = new ReflectionClass(TransportFactory::class);
$property = $reflection->getProperty('_config');
$property->setAccessible(true);
$configs = $property->getValue();
$log = $this->emailLog = new ArrayObject;
foreach ($configs as $name => &$transport) {
if (is_object($transport)) {
$configs[$name] = new DebugKitTransport(['debugKitLog' => $log], $transport);
continue;
}
$className = App::className($transport['className'], 'Mailer/Transport', 'Transport');
if (!$className) {
continue;
}
$transport['originalClassName'] = $transport['className'];
$transport['className'] = 'DebugKit.DebugKit';
$transport['debugKitLog'] = $log;
}
$property->setValue($configs);
}
/**
* Get the data this panel wants to store.
*
* @return array
*/
public function data()
{
return [
'emails' => isset($this->emailLog) ? $this->emailLog->getArrayCopy() : []
];
}
/**
* Get summary data from the queries run.
*
* @return string
*/
public function summary()
{
if (empty($this->emailLog)) {
return '';
}
return (string)count($this->emailLog);
}
}