/var/www/html_us/wp-content/plugins/wp-smtp/src/Mail/Repository/ProvidersRepository.php


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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<?php

namespace SolidWP\Mail\Repository;

use 
SolidWP\Mail\Connectors\ConnectorBrevo;
use 
SolidWP\Mail\Connectors\ConnectorMailGun;
use 
SolidWP\Mail\Connectors\ConnectorPostmark;
use 
SolidWP\Mail\Connectors\ConnectorSendGrid;
use 
SolidWP\Mail\Connectors\ConnectorSES;
use 
SolidWP\Mail\Connectors\ConnectorSMTP;

/**
 * Class ProvidersRepository
 *
 * This class handles database-related tasks for managing SMTP providers within the Solid_SMTP plugin.
 * It provides CRUD operations and other database-related functionalities for SMTP providers.
 *
 * @package Solid_SMTP\Repository
 */
class ProvidersRepository {
    const 
OPTION_NAME 'solid_smtp_providers';

    
/**
     * Retrieves the active SMTP provider.
     *
     * @return ConnectorSMTP|null The active SMTP provider configuration, or null if not found.
     */
    
public function get_active_provider(): ?ConnectorSMTP {
        
$providers $this->get_all_providers();

        foreach ( 
$providers as $provider ) {
            if ( 
$provider->is_active() ) {
                return 
$provider;
            }
        }

        return 
null;
    }

    
/**
     * Saves a provider configuration.
     *
     * @param ConnectorSMTP $provider The SMTP provider configuration to save.
     *
     * @return void
     */
    
public function saveConnectorSMTP $provider ) {
        
$providers get_optionself::OPTION_NAME, [] );

        
$providers$provider->get_id() ] = $provider->to_array();

        
update_optionself::OPTION_NAME$providers );
    }

    
/**
     * Retrieves all SMTP provider configurations.
     *
     * @return ConnectorSMTP[] An array of SMTP provider configurations.
     */
    
public function get_all_providers(): array {
        
$providers get_optionself::OPTION_NAME, [] );
        
$data      = [];
        foreach ( 
$providers as $provider ) {
            
$data$provider['id'] ] = $this->factory$provider['name'], $provider );
        }

        return 
$data;
    }

    
/**
     * Retrieves all SMTP provider configurations as an array of arrays.
     *
     * @return array An array of SMTP provider configurations.
     */
    
public function get_all_providers_as_array(): array {
        
$providers $this->get_all_providers();
        
$data      = [];

        foreach ( 
$providers as $provider ) {
            
$data$provider->get_id() ] = $provider->to_array();
        }

        return 
$data;
    }

    
/**
     * Retrieves an SMTP provider configuration by its ID.
     *
     * @param string $provider_id The ID of the SMTP provider to retrieve.
     *
     * @return ConnectorSMTP|null The SMTP provider configuration, or null if not found.
     */
    
public function get_provider_by_idstring $provider_id ): ?ConnectorSMTP {
        
$providers $this->get_all_providers();

        return 
$providers$provider_id ] ?? null;
    }

    
/**
     * Sets a specific SMTP provider as active by its ID.
     *
     * @param string $provider_id The ID of the SMTP provider to set as active.
     *
     * @return void
     */
    
public function set_active_providerstring $provider_id ): void {
        
$providers $this->get_all_providers();
        foreach ( 
$providers as $provider ) {
            
$provider->set_is_active$provider_id === $provider->get_id() );
            
// though it not performance wise, but it safer.
            
$this->save$provider );
        }
    }

    
/**
     * Deletes a specific SMTP provider by its ID.
     *
     * @param string $provider_id The ID of the SMTP provider to delete.
     *
     * @return void
     */
    
public function delete_provider_by_idstring $provider_id ): void {
        
$providers $this->get_all_providers_as_array();
        if ( isset( 
$providers$provider_id ] ) ) {
            unset( 
$providers$provider_id ] );
        }
        
update_optionself::OPTION_NAME$providers );
    }

    
/**
     * Creates an instance of a specific SMTP provider based on the provided type.
     *
     * @param string $provider_type The type of SMTP provider to create.
     * @param array  $data The data of the provider.
     *
     * @return ?ConnectorSMTP An instance of the specified SMTP provider.
     */
    
public function factorystring $provider_type, array $data = [] ) {
        switch ( 
$provider_type ) {
            case 
'mailgun':
                return new 
ConnectorMailGun$data );
            case 
'brevo':
                return new 
ConnectorBrevo$data );
            case 
'sendgrid':
                return new 
ConnectorSendGrid$data );
            case 
'amazon_ses':
                return new 
ConnectorSES$data );
            case 
'postmark':
                return new 
ConnectorPostmark$data );
            case 
'other':
                return new 
ConnectorSMTP$data );
            default:
                return 
null;
        }
    }
}