MOON
Server: Apache
System: Linux nserver.cafsindia.com 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: cafsindia (1002)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: /home/cafsindia/help.cafsindia.com/vendor/uvdesk/core-framework/SwiftMailer/SwiftMailer.php
<?php

namespace Webkul\UVDesk\CoreFrameworkBundle\SwiftMailer;

use Symfony\Component\Yaml\Yaml;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Webkul\UVDesk\CoreFrameworkBundle\Utils\SwiftMailer\Configuration as MailerConfigurations;

class SwiftMailer
{
    const PATH_TO_CONFIG = '/config/packages/swiftmailer.yaml';
    const SWIFTMAILER_TEMPLATE = __DIR__ . "/../Templates/SwiftMailer/configurations.php";
    const SWIFTMAILER_NULL_TEMPLATE = __DIR__ . "/../Templates/SwiftMailer/null-configurations.php";

	protected $container;

    public function __construct(ContainerInterface $container)
    {
        $this->container = $container;
    }

    private function getPathToConfigurationFile()
    {
        return $this->container->get('kernel')->getProjectDir() . self::PATH_TO_CONFIG;
    }

    public function createConfiguration($transport, $id = null)
    {
        switch ($transport) {
            case 'smtp':
                $configuration = new MailerConfigurations\SMTP($id);
                break;
            case 'gmail':
                $configuration = new MailerConfigurations\Gmail($id);
                break;
            case 'yahoo':
                $configuration = new MailerConfigurations\Yahoo($id);
                break;
            default:
                break;
        }

        return $configuration ?? null;
    }

    public function parseSwiftMailerConfigurations() 
    {
        $configurations = [];
        $pathToFile = $this->getPathToConfigurationFile();

        if (file_exists($pathToFile)) {
            $parsedConfigurations = Yaml::parse(file_get_contents($pathToFile));

            if (!empty($parsedConfigurations['swiftmailer'])) {
                if (empty($parsedConfigurations['swiftmailer']['mailers']) && !empty($parsedConfigurations['swiftmailer']['transport'])) {
                    // Only one single mailer is defined
                    $configurations[] = $this->resolveTransportConfigurations($parsedConfigurations['swiftmailer']);
                } else if (!empty($parsedConfigurations['swiftmailer']['mailers'])) {
                    // Multiple mailers defined
                    foreach ($parsedConfigurations['swiftmailer']['mailers'] as $mailer_id => $mailer_configurations) {
                        $configuration = null;

                        switch ($mailer_configurations['transport'] ?? '') {
                            case 'smtp':
                                if ('smtp.mail.yahoo.com' == $mailer_configurations['host']) {
                                    $configuration = new MailerConfigurations\Yahoo($mailer_id);
                                } else {
                                    $configuration = new MailerConfigurations\SMTP($mailer_id);
                                }
                                
                                $configuration->resolveTransportConfigurations($mailer_configurations);

                                $configurations[] = $configuration;
                                break;
                            case 'gmail':
                                $configuration = new MailerConfigurations\Gmail($mailer_id);
                                $configuration->resolveTransportConfigurations($mailer_configurations);

                                $configurations[] = $configuration;
                                break;
                            default:
                                break;
                        }
                    }
                }
            }
        }

        return $configurations;
    }

    public function writeSwiftMailerConfigurations(array $configurations = [], array $defaults = [])
    {
        if (empty($configurations) && empty($defaults)) {
            $stream = require self::SWIFTMAILER_NULL_TEMPLATE;

            // Write to configs.
            file_put_contents($this->getPathToConfigurationFile(), $stream);
            return;
        }
        
        $references = [];
        $configurationStream = '';
        $use_defaults = count($configurations) <= 1 ? true : false;

        // Iteratively build up mailers config.
        foreach ($configurations as $configuration) {
            if (in_array($configuration->getId(), $references)) {
                throw new \Exception('SwiftMailer configuration already exist with same id.');
            }

            $references[] = $configuration->getId();
            $configurationStream .= $configuration->getWritableConfigurations();
        }

        // Default_mailer configuration
        // @TODO: Needs to be improved. We shouldn't just randomly set the first mailer as the default mailer.
        $stream = require self::SWIFTMAILER_TEMPLATE;

        if (!empty($references[0])) {
            $stream = strtr($stream, [
                '[[ DEFAULT_MAILER ]]' => $references[0],
            ]);
        }

        // Prepare the complete swiftmailer configuration file
        $stream = strtr($stream, [
            '[[ CONFIGURATIONS ]]' => $configurationStream,
        ]);

        file_put_contents($this->getPathToConfigurationFile(), $stream);
    }
}