Вход Регистрация
Файл: gapps/vendor/cartalyst/support/src/Mailer.php
Строк: 409
<?php

/**
 * Part of the Support package.
 *
 * NOTICE OF LICENSE
 *
 * Licensed under the 3-clause BSD License.
 *
 * This source file is subject to the 3-clause BSD License that is
 * bundled with this package in the LICENSE file.
 *
 * @package    Support
 * @version    2.0.1
 * @author     Cartalyst LLC
 * @license    BSD License (3-clause)
 * @copyright  (c) 2011-2017, Cartalyst LLC
 * @link       http://cartalyst.com
 */

namespace CartalystSupport;

use 
IlluminateConfigRepository as IlluminateConfig;
use 
IlluminateContractsMailMailer as IlluminateMailer;

class 
Mailer
{
    
/**
     * The email subject.
     *
     * @var string
     */
    
protected $subject null;

    
/**
     * The email from address.
     *
     * @var array
     */
    
protected $from = [];

    
/**
     * The email recipients.
     *
     * @var array
     */
    
protected $recipients = [];

    
/**
     * The email view.
     *
     * @var string
     */
    
protected $view;

    
/**
     * The email view data.
     *
     * @var array
     */
    
protected $data = [];

    
/**
     * The email attachments.
     *
     * @var array
     */
    
protected $attachments = [];

    
/**
     * The email data attachments.
     *
     * @var array
     */
    
protected $dataAttachments = [];

    
/**
     * The Illuminate mailer instance.
     *
     * @var IlluminateContractsMailMailer
     */
    
protected $mailer;

    
/**
     * The Illuminate config repository instance.
     *
     * @var IlluminateConfigRepository
     */
    
protected $config;

    
/**
     * Constructor.
     *
     * @param  IlluminateContractsMailMailer  $mailer
     * @param  IlluminateConfigRepository  $config
     * @return void
     */
    
public function __construct(IlluminateMailer $mailerIlluminateConfig $config)
    {
        
$this->mailer $mailer;

        
$this->config $config;
    }

    
/**
     * Returns the Illuminate mailer instance.
     *
     * @return IlluminateContractsMailMailer
     */
    
public function getMailer()
    {
        return 
$this->mailer;
    }

    
/**
     * Sets the Illuminate mailer instance.
     *
     * @param  IlluminateContractsMailMailer  $mailer
     * @return $this
     */
    
public function setMailer(IlluminateMailer $mailer)
    {
        
$this->mailer $mailer;

        return 
$this;
    }

    
/**
     * Returns the Illuminate config repository instance.
     *
     * @return IlluminateConfigRepository
     */
    
public function getConfig()
    {
        return 
$this->config;
    }

    
/**
     * Sets the Illuminate config repository instance.
     *
     * @param  IlluminateConfigRepository  $config
     * @return $this
     */
    
public function setConfig(IlluminateConfig $config)
    {
        
$this->config $config;

        return 
$this;
    }

    
/**
     * Returns the from name.
     *
     * @return array
     */
    
public function getFromName()
    {
        return 
array_get($this->from'name'null);
    }

    
/**
     * Sets the from name.
     *
     * @param  string  $from
     * @return $this
     */
    
public function setFromName($from)
    {
        
$this->from['name'] = $from;

        return 
$this;
    }

    
/**
     * Returns the from address.
     *
     * @return array
     */
    
public function getFromAddress()
    {
        return 
array_get($this->from'address'null);
    }

    
/**
     * Sets the from address.
     *
     * @param  string  $from
     * @return $this
     */
    
public function setFromAddress($from)
    {
        
$this->from['address'] = $from;

        return 
$this;
    }

    
/**
     * Returns the email subject.
     *
     * @return string
     */
    
public function getSubject()
    {
        return 
$this->subject;
    }

    
/**
     * Sets the email subject.
     *
     * @param  string  $subject
     * @return $this
     */
    
public function setSubject($subject)
    {
        
$this->subject $subject;

        return 
$this;
    }

    
/**
     * Returns all the email recipients.
     *
     * @param  string  $type
     * @return array
     */
    
public function getRecipients($type null)
    {
        return 
array_get($this->recipients$typenull);
    }

    
/**
     * Sets multiple recipients by type.
     *
     * @param  string  $type
     * @param  array  $recipients
     * @return $this
     */
    
public function setRecipients($type, array $recipients = [])
    {
        foreach (
$recipients as $key => $recipient) {
            
$this->setRecipient(
                
$type,
                
array_get($recipient'email'),
                
array_get($recipient'name')
            );
        }

        return 
$this;
    }

    
/**
     * Sets multiple "To" recipients.
     *
     * @param  array  $recipients
     * @return $this
     */
    
public function setTo(array $recipients = [])
    {
        return 
$this->setRecipients('to'$recipients);
    }

    
/**
     * Sets a single "To" recipient.
     *
     * @param  string  $email
     * @param  string  $name
     * @return $this
     */
    
public function addTo($email$name)
    {
        return 
$this->setRecipient('to'$email$name);
    }

    
/**
     * Sets multiple "Cc" recipients.
     *
     * @param  array  $recipients
     * @return $this
     */
    
public function setCc(array $recipients = [])
    {
        return 
$this->setRecipients('cc'$recipients);
    }

    
/**
     * Sets a single "Cc" recipient.
     *
     * @param  string  $email
     * @param  string  $name
     * @return $this
     */
    
public function addCc($email$name)
    {
        return 
$this->setRecipient('cc'$email$name);
    }

    
/**
     * Sets multiple "Bcc" recipients.
     *
     * @param  array  $recipients
     * @return $this
     */
    
public function setBcc(array $recipients = [])
    {
        return 
$this->setRecipients('bcc'$recipients);
    }

    
/**
     * Sets a single "Bcc" recipient.
     *
     * @param  string  $email
     * @param  string  $name
     * @return $this
     */
    
public function addBcc($email$name)
    {
        return 
$this->setRecipient('bcc'$email$name);
    }

    
/**
     * Sets multiple "replyTo" recipients.
     *
     * @param  array  $recipients
     * @return $this
     */
    
public function setReplyTo(array $recipients = [])
    {
        return 
$this->setRecipients('replyTo'$recipients);
    }

    
/**
     * Sets a single "replyTo" recipient.
     *
     * @param  string  $email
     * @param  string  $name
     * @return $this
     */
    
public function addReplyTo($email$name)
    {
        return 
$this->setRecipient('replyTo'$email$name);
    }

    
/**
     * Sets the email view and view data.
     *
     * @param  string  $view
     * @param  array  $data
     * @return $this
     */
    
public function setView($view, array $data = [])
    {
        
$this->view $view;

        
$this->data $data;

        return 
$this;
    }

    
/**
     * Returns all the attachments.
     *
     * @return array
     */
    
public function getAttachments()
    {
        return 
$this->attachments;
    }

    
/**
     * Sets multiple attachments.
     *
     * @param  array  $attachments
     * @return $this
     */
    
public function setAttachments(array $attachments = [])
    {
        
$this->attachments array_merge($this->attachments$attachments);

        return 
$this;
    }

    
/**
     * Sets a single attachment.
     *
     * @param  string  $attachment
     * @return $this
     */
    
public function addAttachment($attachment)
    {
        
$this->attachments[] = $attachment;

        return 
$this;
    }

    
/**
     * Returns all the data attachments.
     *
     * @return array
     */
    
public function getDataAttachments()
    {
        return 
$this->dataAttachments;
    }

    
/**
     * Sets multiple data attachments.
     *
     * @param  array  $attachments
     * @return $this
     */
    
public function setDataAttachments(array $attachments = [])
    {
        
$this->dataAttachments array_merge($this->dataAttachments$attachments);

        return 
$this;
    }

    
/**
     * Sets a single data attachment.
     *
     * @param  string  $attachment
     * @return $this
     */
    
public function addDataAttachment($attachment)
    {
        
$this->dataAttachments[] = $attachment;

        return 
$this;
    }

    
/**
     * Sends the email.
     *
     * @return int
     */
    
public function send()
    {
        return 
$this->mailer->send($this->view$this->data$this->prepareCallback());
    }

    
/**
     * Queue a new e-mail message for sending.
     *
     * @param  string  $queue
     * @return int
     */
    
public function queue($queue null)
    {
        return 
$this->mailer->queue($this->view$this->data$this->prepareCallback(), $queue);
    }

    
/**
     * Queue a new e-mail message for sending on the given queue.
     *
     * @param  string  $queue
     * @return int
     */
    
public function queueOn($queue)
    {
        return 
$this->mailer->queueOn($queue$this->view$this->data$this->prepareCallback());
    }

    
/**
     * Queue a new e-mail message for sending after (n) seconds.
     *
     * @param  int  $delay
     * @return int
     */
    
public function later($delay)
    {
        return 
$this->mailer->later($delay$this->view$this->data$this->prepareCallback());
    }

    
/**
     * Prepares the email callback.
     *
     * @return Closure
     */
    
protected function prepareCallback()
    {
        return function (
$mail) {
            
$mail->subject($this->subject);

            
$mail->from(
                
array_get($this->from'address'$this->config->get('mail.from.address')),
                
array_get($this->from'name'$this->config->get('mail.from.name'))
            );

            foreach (
$this->recipients as $type => $recipients) {
                foreach (
$recipients as $recipient) {
                    
$mail->{$type}($recipient['email'], $recipient['name']);
                }
            }

            foreach (
$this->attachments as $attachment) {
                
$options = [];

                if (
is_array($attachment)) {
                    list(
$attachment$options) = $attachment;
                }

                
$mail->attach($attachment$options);
            }

            foreach (
$this->dataAttachments as $name => $data) {
                
$options = [];

                if (
is_array($data)) {
                    list(
$data$options) = $data;
                }

                
$mail->attachData($data$name$options);
            }
        };
    }

    
/**
     * Sets a single recipient by type.
     *
     * @param  string  $type
     * @param  string  $email
     * @param  string  $name
     * @return $this
     */
    
protected function setRecipient($type$email$name)
    {
        
$this->recipients[$type][$email] = compact('email''name');

        return 
$this;
    }
}
Онлайн: 1
Реклама