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 save( ConnectorSMTP $provider ) { $providers = get_option( self::OPTION_NAME, [] );
$providers[ $provider->get_id() ] = $provider->to_array();
update_option( self::OPTION_NAME, $providers ); }
/** * Retrieves all SMTP provider configurations. * * @return ConnectorSMTP[] An array of SMTP provider configurations. */ public function get_all_providers(): array { $providers = get_option( self::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_id( string $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_provider( string $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_id( string $provider_id ): void { $providers = $this->get_all_providers_as_array(); if ( isset( $providers[ $provider_id ] ) ) { unset( $providers[ $provider_id ] ); } update_option( self::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 factory( string $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; } } }
|