Seditio Source
Root |
./othercms/croogo-4.0.7/vendor/cakephp/debug_kit/src/Mailer/PreviewResult.php
<?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\Mailer;

use
Cake\Mailer\Mailer;
use
ReflectionClass;

/**
 * Represents the result of a preview for a given mailer
 */
class PreviewResult extends AbstractResult
{

   
/**
     * Processes the mailer to extract the headers and parts
     *
     * @param Mailer $mailer The mailer instance to execute and extract the email data from
     * @param string $method The method to execute in the mailer
     */
   
public function __construct(Mailer $mailer, $method)
    {
       
$this->processMailer(clone $mailer, $method);
       
$mailer->reset();
    }

   
/**
     * Executes the mailer and extracts the relevant information from the generated email
     *
     * @param Mailer $mailer The mailer instance to execute and extract the email data from
     * @param string $method The method to execute in the mailer
     * @return void
     */
   
protected function processMailer(Mailer $mailer, $method)
    {
       
$reflection = new ReflectionClass($mailer);
       
$prop = $reflection->getProperty('_email');
       
$prop->setAccessible(true);
       
$email = $prop->getValue($mailer);

        if (!
$email->viewBuilder()->getTemplate()) {
           
$email->viewBuilder()->setTemplate($method);
        }

       
$render = (new ReflectionClass($email))
            ->
getMethod('_renderTemplates')
            ->
getClosure($email);

       
$this->parts = $render('');

       
$extra = ['from', 'sender', 'replyTo', 'readReceipt', 'returnPath', 'to', 'cc', 'subject'];
       
$this->headers = array_filter($email->getHeaders($extra));
    }
}