protected static function createTwigLoader(Settings $settings) { if (!$settings->has('template_paths')) { throw new RuntimeError('Missing "template_paths" settings with template lookup locations.'); } $template_paths = (array) $settings->get('template_paths', []); $loader = new FilesystemLoader($template_paths); if ($settings->has('allowed_template_extensions')) { $loader->setAllowedExtensions((array) $settings->get('allowed_template_extensions')); } if (!$settings->has('cache_scope')) { $loader->setScope(spl_object_hash($loader)); // unique scope for each new loader instance } else { $loader->setScope($settings->get('cache_scope', FilesystemLoader::SCOPE_DEFAULT)); } return $loader; }
/** * Returns the value for the given key. * * @param mixed $key key to get value of * @param mixed $default value to return if key doesn't exist * * @return mixed value for that key or default given */ public function get($key, $default = null) { return $this->settings->get($key, $default); }
/** * Returns a string representation of the guard. * * @return string */ public function __toString() { return ' if ' . $this->options->get('expression'); }
/** * Create Swift_Message instance from the given MailInterface instance. * * @param MailInterface $message instance to create Swift_Message from * @param string $mailer_config_name name of the mailer config to get settings from * * @return Swift_Message instance * * @throws MessageConfigurationException in case of misconfigured message * @throws InvalidArgumentException in case of unknown mailer name from config */ public function createSwiftMessage(MailInterface $message, $mailer_config_name = null) { $settings = $this->getMailerSettings($mailer_config_name); $message_defaults = new Settings((array) $settings->get('address_defaults', [])); $message_overrides = new Settings((array) $settings->get('address_overrides', [])); Swift_Preferences::getInstance()->setCharset($settings->get('charset', 'utf-8')); $mail = Swift_Message::newInstance(); $mail->setSubject($message->getSubject($settings->get('default_subject'))); $from = $message_overrides->get('from', $message->getFrom($message_defaults->get('from'))); if (!empty($from)) { $mail->setFrom($from); } $sender = $message_overrides->get('sender', $message->getSender($message_defaults->get('sender'))); if (!empty($sender)) { $mail->setSender($sender); } // sender is mandatory if multiple from addresses are set if (is_array($from) && count($from) > 1 && empty($sender)) { throw new MessageConfigurationException('A single "sender" email address must be specified when multiple "from" email addresses are set.'); } // we need at least a sender or a from to be honest citizens if (empty($from) && empty($sender)) { throw new MessageConfigurationException('Either "from" or "sender" must be set with a valid email address on a message.' . 'Usually "from" is considered to be mandatory with the "sender" being optional ' . 'to distinguish between writers of an email and its actual sender.'); } $reply_to = $message_overrides->get('reply_to', $message->getReplyTo($message_defaults->get('reply_to'))); if (!empty($reply_to)) { $mail->setReplyTo($reply_to); } $return_path = $message_overrides->get('return_path', $message->getReturnPath($message_defaults->get('return_path'))); if (!empty($return_path)) { // Swift only wants a string as email on the return path (despite the behaviour on other address fields) if (is_array($return_path)) { $return_path = array_keys($return_path); $return_path = array_shift($return_path); } $mail->setReturnPath($return_path); } $date = $message->getDate($message_defaults->get('date')); if ($settings->has('default_date')) { $date = strtotime($settings->get('default_date')); } if (!empty($date) && is_int($date)) { $mail->setDate($date); } $to = $message_overrides->get('to', $message->getTo($message_defaults->get('to'))); if (!empty($to)) { $mail->setTo($to); } $cc = $message_overrides->get('cc', $message->getCc($message_defaults->get('cc'))); if (!empty($cc)) { $mail->setCc($cc); } $bcc = $message_overrides->get('bcc', $message->getBcc($message_defaults->get('bcc'))); if (!empty($bcc)) { $mail->setBcc($bcc); } $body_html = $message->getBodyHtml($message_defaults->get('default_body_html')); if (!empty($body_html)) { $mail->addPart($body_html, "text/html"); } $body_text = $message->getBodyText($message_defaults->get('default_body_text')); if (!empty($body_text)) { $mail->addPart($body_text, "text/plain"); } $attachments = $message->getAttachments(); if (!empty($attachments)) { foreach ($attachments as $attachment) { if (!is_array($attachment)) { continue; } $mail->attach($this->createSwiftAttachment($attachment)); } } // if to, cc or bcc are set we have to override them if a setting is set $override_all_recipients = $settings->get('override_all_recipients', false); if (false !== $override_all_recipients && !empty($override_all_recipients)) { if (!empty($to)) { $to = $override_all_recipients; // for later validation $mail->setTo($to); } if (!empty($cc)) { $cc = $override_all_recipients; // for later validation $mail->setCc($cc); } if (!empty($bcc)) { $bcc = $override_all_recipients; // for later validation $mail->setBcc($bcc); } } // we won't send mails without recipients if (empty($to) && empty($cc) && empty($bcc)) { throw new MessageConfigurationException('No recipients are set for this email. Set "to", "cc" and/or "bcc" email addresses on the message.'); } // do not allow too long text lines if ($settings->has('max_line_length')) { $mail->setMaxLineLength((int) $settings->get('max_line_length', 78)); } // add X-Priority header if ($settings->has('priority')) { $mail->setPriority((int) $settings->get('priority', 3)); } // request read receipts if necessary if ($settings->has('read_receipt_to')) { $mail->setReadReceiptTo($settings->get('read_receipt_to')); } return $mail; }