Version Description
- 2017-11-20
- Fixed: misspled false
- Fixed: feedback form
- Fixed: Some localization strings
- Removed: deprecated function
- New: Option to input emails when resend email
- Added: explain message on email log filter
Download this release
Release Info
Developer | yehudah |
Plugin | Post SMTP Mailer/Email Log |
Version | 1.7.9 |
Comparing to | |
See all releases |
Code changes from version 1.7.8 to 1.7.9
- Postman/Postman-Configuration/PostmanRegisterConfigurationSettings.php +181 -183
- Postman/Postman-Email-Log/PostmanEmailLogController.php +14 -4
- Postman/Postman-Email-Log/PostmanEmailLogView.php +8 -2
- Postman/PostmanInputSanitizer.php +96 -96
- Postman/PostmanPluginFeedback.php +43 -19
- Postman/PostmanViewController.php +7 -8
- postman-smtp.php +2 -2
- readme.txt +11 -1
- script/feedback/feedback.js +39 -19
- script/postman_resend_email_sript.js +42 -16
Postman/Postman-Configuration/PostmanRegisterConfigurationSettings.php
CHANGED
@@ -2,212 +2,210 @@
|
|
2 |
class PostmanSettingsRegistry {
|
3 |
|
4 |
private $options;
|
5 |
-
|
6 |
public function __construct() {
|
7 |
$this->options = PostmanOptions::getInstance();
|
8 |
}
|
9 |
-
|
10 |
/**
|
11 |
* Fires on the admin_init method
|
12 |
*/
|
13 |
public function on_admin_init() {
|
14 |
-
|
15 |
-
$this->registerSettings ();
|
16 |
}
|
17 |
-
|
18 |
/**
|
19 |
* Register and add settings
|
20 |
*/
|
21 |
private function registerSettings() {
|
22 |
-
|
23 |
// only administrators should be able to trigger this
|
24 |
-
if (PostmanUtils::isAdmin
|
25 |
-
|
26 |
-
|
27 |
-
register_setting ( PostmanAdminController::SETTINGS_GROUP_NAME, PostmanOptions::POSTMAN_OPTIONS, array (
|
28 |
$sanitizer,
|
29 |
-
'sanitize'
|
30 |
) );
|
31 |
-
|
32 |
// Sanitize
|
33 |
-
add_settings_section
|
34 |
$this,
|
35 |
-
'printTransportSectionInfo'
|
36 |
), 'transport_options' );
|
37 |
-
|
38 |
-
add_settings_field
|
39 |
$this,
|
40 |
-
'transport_type_callback'
|
41 |
), 'transport_options', 'transport_section' );
|
42 |
-
|
43 |
// the Message From section
|
44 |
-
add_settings_section
|
45 |
$this,
|
46 |
-
'printMessageFromSectionInfo'
|
47 |
), PostmanAdminController::MESSAGE_FROM_OPTIONS );
|
48 |
-
|
49 |
-
add_settings_field
|
50 |
$this,
|
51 |
-
'from_email_callback'
|
52 |
), PostmanAdminController::MESSAGE_FROM_OPTIONS, PostmanAdminController::MESSAGE_FROM_SECTION );
|
53 |
-
|
54 |
-
add_settings_field
|
55 |
$this,
|
56 |
-
'prevent_from_email_override_callback'
|
57 |
), PostmanAdminController::MESSAGE_FROM_OPTIONS, PostmanAdminController::MESSAGE_FROM_SECTION );
|
58 |
-
|
59 |
-
add_settings_field
|
60 |
$this,
|
61 |
-
'sender_name_callback'
|
62 |
), PostmanAdminController::MESSAGE_FROM_OPTIONS, PostmanAdminController::MESSAGE_FROM_SECTION );
|
63 |
-
|
64 |
-
add_settings_field
|
65 |
$this,
|
66 |
-
'prevent_from_name_override_callback'
|
67 |
), PostmanAdminController::MESSAGE_FROM_OPTIONS, PostmanAdminController::MESSAGE_FROM_SECTION );
|
68 |
-
|
69 |
// the Additional Addresses section
|
70 |
-
add_settings_section
|
71 |
$this,
|
72 |
-
'printMessageSectionInfo'
|
73 |
), PostmanAdminController::MESSAGE_OPTIONS );
|
74 |
-
|
75 |
-
add_settings_field
|
76 |
$this,
|
77 |
-
'reply_to_callback'
|
78 |
), PostmanAdminController::MESSAGE_OPTIONS, PostmanAdminController::MESSAGE_SECTION );
|
79 |
-
|
80 |
-
add_settings_field
|
81 |
$this,
|
82 |
-
'to_callback'
|
83 |
), PostmanAdminController::MESSAGE_OPTIONS, PostmanAdminController::MESSAGE_SECTION );
|
84 |
-
|
85 |
-
add_settings_field
|
86 |
$this,
|
87 |
-
'cc_callback'
|
88 |
), PostmanAdminController::MESSAGE_OPTIONS, PostmanAdminController::MESSAGE_SECTION );
|
89 |
-
|
90 |
-
add_settings_field
|
91 |
$this,
|
92 |
-
'bcc_callback'
|
93 |
), PostmanAdminController::MESSAGE_OPTIONS, PostmanAdminController::MESSAGE_SECTION );
|
94 |
-
|
95 |
// the Additional Headers section
|
96 |
-
add_settings_section
|
97 |
$this,
|
98 |
-
'printAdditionalHeadersSectionInfo'
|
99 |
), PostmanAdminController::MESSAGE_HEADERS_OPTIONS );
|
100 |
-
|
101 |
-
add_settings_field
|
102 |
$this,
|
103 |
-
'headers_callback'
|
104 |
), PostmanAdminController::MESSAGE_HEADERS_OPTIONS, PostmanAdminController::MESSAGE_HEADERS_SECTION );
|
105 |
-
|
106 |
// the Email Validation section
|
107 |
-
add_settings_section
|
108 |
$this,
|
109 |
-
'printEmailValidationSectionInfo'
|
110 |
), PostmanAdminController::EMAIL_VALIDATION_OPTIONS );
|
111 |
-
|
112 |
-
add_settings_field
|
113 |
$this,
|
114 |
-
'disable_email_validation_callback'
|
115 |
), PostmanAdminController::EMAIL_VALIDATION_OPTIONS, PostmanAdminController::EMAIL_VALIDATION_SECTION );
|
116 |
-
|
117 |
// the Logging section
|
118 |
-
add_settings_section
|
119 |
$this,
|
120 |
-
'printLoggingSectionInfo'
|
121 |
), PostmanAdminController::LOGGING_OPTIONS );
|
122 |
-
|
123 |
-
add_settings_field
|
124 |
$this,
|
125 |
-
'loggingStatusInputField'
|
126 |
), PostmanAdminController::LOGGING_OPTIONS, PostmanAdminController::LOGGING_SECTION );
|
127 |
-
|
128 |
-
add_settings_field
|
129 |
$this,
|
130 |
-
'loggingMaxEntriesInputField'
|
131 |
), PostmanAdminController::LOGGING_OPTIONS, PostmanAdminController::LOGGING_SECTION );
|
132 |
-
|
133 |
-
add_settings_field
|
134 |
$this,
|
135 |
-
'transcriptSizeInputField'
|
136 |
), PostmanAdminController::LOGGING_OPTIONS, PostmanAdminController::LOGGING_SECTION );
|
137 |
-
|
138 |
// the Network section
|
139 |
-
add_settings_section
|
140 |
$this,
|
141 |
-
'printNetworkSectionInfo'
|
142 |
), PostmanAdminController::NETWORK_OPTIONS );
|
143 |
-
|
144 |
-
add_settings_field
|
145 |
$this,
|
146 |
-
'connection_timeout_callback'
|
147 |
), PostmanAdminController::NETWORK_OPTIONS, PostmanAdminController::NETWORK_SECTION );
|
148 |
-
|
149 |
-
add_settings_field
|
150 |
$this,
|
151 |
-
'read_timeout_callback'
|
152 |
), PostmanAdminController::NETWORK_OPTIONS, PostmanAdminController::NETWORK_SECTION );
|
153 |
-
|
154 |
// the Advanced section
|
155 |
-
add_settings_section
|
156 |
$this,
|
157 |
-
'printAdvancedSectionInfo'
|
158 |
), PostmanAdminController::ADVANCED_OPTIONS );
|
159 |
-
|
160 |
-
add_settings_field
|
161 |
$this,
|
162 |
-
'log_level_callback'
|
163 |
), PostmanAdminController::ADVANCED_OPTIONS, PostmanAdminController::ADVANCED_SECTION );
|
164 |
-
|
165 |
-
add_settings_field
|
166 |
$this,
|
167 |
-
'runModeCallback'
|
168 |
), PostmanAdminController::ADVANCED_OPTIONS, PostmanAdminController::ADVANCED_SECTION );
|
169 |
-
|
170 |
-
add_settings_field
|
171 |
$this,
|
172 |
-
'stealthModeCallback'
|
173 |
), PostmanAdminController::ADVANCED_OPTIONS, PostmanAdminController::ADVANCED_SECTION );
|
174 |
-
|
175 |
-
add_settings_field
|
176 |
$this,
|
177 |
-
'temporaryDirectoryCallback'
|
178 |
), PostmanAdminController::ADVANCED_OPTIONS, PostmanAdminController::ADVANCED_SECTION );
|
179 |
}
|
180 |
}
|
181 |
-
|
182 |
/**
|
183 |
* Print the Transport section info
|
184 |
*/
|
185 |
public function printTransportSectionInfo() {
|
186 |
-
print __
|
187 |
}
|
188 |
public function printLoggingSectionInfo() {
|
189 |
-
print __
|
190 |
}
|
191 |
-
|
192 |
/**
|
193 |
* Print the Section text
|
194 |
*/
|
195 |
public function printMessageFromSectionInfo() {
|
196 |
-
print sprintf
|
197 |
}
|
198 |
-
|
199 |
/**
|
200 |
* Print the Section text
|
201 |
*/
|
202 |
public function printMessageSectionInfo() {
|
203 |
-
print __
|
204 |
}
|
205 |
-
|
206 |
/**
|
207 |
* Print the Section text
|
208 |
*/
|
209 |
public function printNetworkSectionInfo() {
|
210 |
-
print __
|
211 |
}
|
212 |
/**
|
213 |
* Print the Section text
|
@@ -218,190 +216,190 @@ class PostmanSettingsRegistry {
|
|
218 |
* Print the Section text
|
219 |
*/
|
220 |
public function printAdditionalHeadersSectionInfo() {
|
221 |
-
print __
|
222 |
}
|
223 |
-
|
224 |
/**
|
225 |
* Print the Email Validation Description
|
226 |
*/
|
227 |
public function printEmailValidationSectionInfo() {
|
228 |
-
print __
|
229 |
}
|
230 |
-
|
231 |
/**
|
232 |
* Get the settings option array and print one of its values
|
233 |
*/
|
234 |
public function transport_type_callback() {
|
235 |
-
$transportType = $this->options->getTransportType
|
236 |
-
printf
|
237 |
-
foreach ( PostmanTransportRegistry::getInstance
|
238 |
-
printf
|
239 |
}
|
240 |
print '</select>';
|
241 |
}
|
242 |
-
|
243 |
/**
|
244 |
* Get the settings option array and print one of its values
|
245 |
*/
|
246 |
public function sender_name_callback() {
|
247 |
-
printf
|
248 |
}
|
249 |
-
|
250 |
/**
|
251 |
*/
|
252 |
public function prevent_from_name_override_callback() {
|
253 |
-
$enforced = $this->options->isPluginSenderNameEnforced
|
254 |
-
printf
|
255 |
}
|
256 |
-
|
257 |
/**
|
258 |
* Get the settings option array and print one of its values
|
259 |
*/
|
260 |
public function from_email_callback() {
|
261 |
-
printf
|
262 |
}
|
263 |
-
|
264 |
/**
|
265 |
* Print the Section text
|
266 |
*/
|
267 |
public function printMessageSenderSectionInfo() {
|
268 |
-
print sprintf
|
269 |
}
|
270 |
-
|
271 |
/**
|
272 |
* Get the settings option array and print one of its values
|
273 |
*/
|
274 |
public function prevent_from_email_override_callback() {
|
275 |
-
$enforced = $this->options->isPluginSenderEmailEnforced
|
276 |
-
printf
|
277 |
}
|
278 |
-
|
279 |
/**
|
280 |
* Shows the Mail Logging enable/disabled option
|
281 |
*/
|
282 |
public function loggingStatusInputField() {
|
283 |
// isMailLoggingAllowed
|
284 |
-
$disabled =
|
285 |
-
if (! $this->options->isMailLoggingAllowed
|
286 |
$disabled = 'disabled="disabled" ';
|
287 |
}
|
288 |
-
printf
|
289 |
-
printf
|
290 |
-
printf
|
291 |
-
printf
|
292 |
}
|
293 |
public function loggingMaxEntriesInputField() {
|
294 |
-
printf
|
295 |
}
|
296 |
public function transcriptSizeInputField() {
|
297 |
$inputOptionsSlug = PostmanOptions::POSTMAN_OPTIONS;
|
298 |
$inputTranscriptSlug = PostmanOptions::TRANSCRIPT_SIZE;
|
299 |
-
$inputValue = $this->options->getTranscriptSize
|
300 |
-
$inputDescription = __
|
301 |
-
printf
|
302 |
}
|
303 |
-
|
304 |
/**
|
305 |
* Get the settings option array and print one of its values
|
306 |
*/
|
307 |
public function reply_to_callback() {
|
308 |
-
printf
|
309 |
}
|
310 |
-
|
311 |
/**
|
312 |
* Get the settings option array and print one of its values
|
313 |
*/
|
314 |
public function to_callback() {
|
315 |
-
printf
|
316 |
}
|
317 |
-
|
318 |
/**
|
319 |
* Get the settings option array and print one of its values
|
320 |
*/
|
321 |
public function cc_callback() {
|
322 |
-
printf
|
323 |
}
|
324 |
-
|
325 |
/**
|
326 |
* Get the settings option array and print one of its values
|
327 |
*/
|
328 |
public function bcc_callback() {
|
329 |
-
printf
|
330 |
}
|
331 |
-
|
332 |
/**
|
333 |
* Get the settings option array and print one of its values
|
334 |
*/
|
335 |
public function headers_callback() {
|
336 |
-
printf
|
337 |
}
|
338 |
-
|
339 |
/**
|
340 |
*/
|
341 |
public function disable_email_validation_callback() {
|
342 |
-
$disabled = $this->options->isEmailValidationDisabled
|
343 |
-
printf
|
344 |
}
|
345 |
-
|
346 |
/**
|
347 |
* Get the settings option array and print one of its values
|
348 |
*/
|
349 |
public function log_level_callback() {
|
350 |
-
$inputDescription = sprintf
|
351 |
-
printf
|
352 |
-
$currentKey = $this->options->getLogLevel
|
353 |
-
$this->printSelectOption
|
354 |
-
$this->printSelectOption
|
355 |
-
$this->printSelectOption
|
356 |
-
$this->printSelectOption
|
357 |
-
$this->printSelectOption
|
358 |
-
$this->printSelectOption
|
359 |
-
printf
|
360 |
-
}
|
361 |
-
private function printSelectOption($label, $optionKey, $currentKey) {
|
362 |
$optionPattern = '<option value="%1$s" %2$s>%3$s</option>';
|
363 |
-
printf
|
364 |
}
|
365 |
public function runModeCallback() {
|
366 |
-
$inputDescription = __
|
367 |
-
printf
|
368 |
-
$currentKey = $this->options->getRunMode
|
369 |
-
$this->printSelectOption
|
370 |
-
$this->printSelectOption
|
371 |
-
$this->printSelectOption
|
372 |
-
printf
|
373 |
}
|
374 |
public function stealthModeCallback() {
|
375 |
-
printf
|
376 |
}
|
377 |
public function temporaryDirectoryCallback() {
|
378 |
-
$inputDescription = __
|
379 |
-
printf
|
380 |
-
if (PostmanState::getInstance
|
381 |
-
printf
|
382 |
} else {
|
383 |
-
printf
|
384 |
}
|
385 |
}
|
386 |
-
|
387 |
/**
|
388 |
* Get the settings option array and print one of its values
|
389 |
*/
|
390 |
public function connection_timeout_callback() {
|
391 |
-
printf
|
392 |
}
|
393 |
-
|
394 |
/**
|
395 |
* Get the settings option array and print one of its values
|
396 |
*/
|
397 |
public function read_timeout_callback() {
|
398 |
-
printf
|
399 |
}
|
400 |
-
|
401 |
/**
|
402 |
* Get the settings option array and print one of its values
|
403 |
*/
|
404 |
-
public function port_callback($args) {
|
405 |
-
printf
|
406 |
}
|
407 |
-
}
|
2 |
class PostmanSettingsRegistry {
|
3 |
|
4 |
private $options;
|
5 |
+
|
6 |
public function __construct() {
|
7 |
$this->options = PostmanOptions::getInstance();
|
8 |
}
|
9 |
+
|
10 |
/**
|
11 |
* Fires on the admin_init method
|
12 |
*/
|
13 |
public function on_admin_init() {
|
14 |
+
$this->registerSettings();
|
|
|
15 |
}
|
16 |
+
|
17 |
/**
|
18 |
* Register and add settings
|
19 |
*/
|
20 |
private function registerSettings() {
|
21 |
+
|
22 |
// only administrators should be able to trigger this
|
23 |
+
if ( PostmanUtils::isAdmin() ) {
|
24 |
+
$sanitizer = new PostmanInputSanitizer();
|
25 |
+
register_setting( PostmanAdminController::SETTINGS_GROUP_NAME, PostmanOptions::POSTMAN_OPTIONS, array(
|
|
|
26 |
$sanitizer,
|
27 |
+
'sanitize',
|
28 |
) );
|
29 |
+
|
30 |
// Sanitize
|
31 |
+
add_settings_section( 'transport_section', __( 'Transport', Postman::TEXT_DOMAIN ), array(
|
32 |
$this,
|
33 |
+
'printTransportSectionInfo',
|
34 |
), 'transport_options' );
|
35 |
+
|
36 |
+
add_settings_field( PostmanOptions::TRANSPORT_TYPE, _x( 'Type', '(i.e.) What kind is it?', Postman::TEXT_DOMAIN ), array(
|
37 |
$this,
|
38 |
+
'transport_type_callback',
|
39 |
), 'transport_options', 'transport_section' );
|
40 |
+
|
41 |
// the Message From section
|
42 |
+
add_settings_section( PostmanAdminController::MESSAGE_FROM_SECTION, _x( 'From Address', 'The Message Sender Email Address', Postman::TEXT_DOMAIN ), array(
|
43 |
$this,
|
44 |
+
'printMessageFromSectionInfo',
|
45 |
), PostmanAdminController::MESSAGE_FROM_OPTIONS );
|
46 |
+
|
47 |
+
add_settings_field( PostmanOptions::MESSAGE_SENDER_EMAIL, __( 'Email Address', Postman::TEXT_DOMAIN ), array(
|
48 |
$this,
|
49 |
+
'from_email_callback',
|
50 |
), PostmanAdminController::MESSAGE_FROM_OPTIONS, PostmanAdminController::MESSAGE_FROM_SECTION );
|
51 |
+
|
52 |
+
add_settings_field( PostmanOptions::PREVENT_MESSAGE_SENDER_EMAIL_OVERRIDE, '', array(
|
53 |
$this,
|
54 |
+
'prevent_from_email_override_callback',
|
55 |
), PostmanAdminController::MESSAGE_FROM_OPTIONS, PostmanAdminController::MESSAGE_FROM_SECTION );
|
56 |
+
|
57 |
+
add_settings_field( PostmanOptions::MESSAGE_SENDER_NAME, __( 'Name', Postman::TEXT_DOMAIN ), array(
|
58 |
$this,
|
59 |
+
'sender_name_callback',
|
60 |
), PostmanAdminController::MESSAGE_FROM_OPTIONS, PostmanAdminController::MESSAGE_FROM_SECTION );
|
61 |
+
|
62 |
+
add_settings_field( PostmanOptions::PREVENT_MESSAGE_SENDER_NAME_OVERRIDE, '', array(
|
63 |
$this,
|
64 |
+
'prevent_from_name_override_callback',
|
65 |
), PostmanAdminController::MESSAGE_FROM_OPTIONS, PostmanAdminController::MESSAGE_FROM_SECTION );
|
66 |
+
|
67 |
// the Additional Addresses section
|
68 |
+
add_settings_section( PostmanAdminController::MESSAGE_SECTION, __( 'Additional Email Addresses', Postman::TEXT_DOMAIN ), array(
|
69 |
$this,
|
70 |
+
'printMessageSectionInfo',
|
71 |
), PostmanAdminController::MESSAGE_OPTIONS );
|
72 |
+
|
73 |
+
add_settings_field( PostmanOptions::REPLY_TO, __( 'Reply-To', Postman::TEXT_DOMAIN ), array(
|
74 |
$this,
|
75 |
+
'reply_to_callback',
|
76 |
), PostmanAdminController::MESSAGE_OPTIONS, PostmanAdminController::MESSAGE_SECTION );
|
77 |
+
|
78 |
+
add_settings_field( PostmanOptions::FORCED_TO_RECIPIENTS, __( 'To Recipient(s)', Postman::TEXT_DOMAIN ), array(
|
79 |
$this,
|
80 |
+
'to_callback',
|
81 |
), PostmanAdminController::MESSAGE_OPTIONS, PostmanAdminController::MESSAGE_SECTION );
|
82 |
+
|
83 |
+
add_settings_field( PostmanOptions::FORCED_CC_RECIPIENTS, __( 'Carbon Copy Recipient(s)', Postman::TEXT_DOMAIN ), array(
|
84 |
$this,
|
85 |
+
'cc_callback',
|
86 |
), PostmanAdminController::MESSAGE_OPTIONS, PostmanAdminController::MESSAGE_SECTION );
|
87 |
+
|
88 |
+
add_settings_field( PostmanOptions::FORCED_BCC_RECIPIENTS, __( 'Blind Carbon Copy Recipient(s)', Postman::TEXT_DOMAIN ), array(
|
89 |
$this,
|
90 |
+
'bcc_callback',
|
91 |
), PostmanAdminController::MESSAGE_OPTIONS, PostmanAdminController::MESSAGE_SECTION );
|
92 |
+
|
93 |
// the Additional Headers section
|
94 |
+
add_settings_section( PostmanAdminController::MESSAGE_HEADERS_SECTION, __( 'Additional Headers', Postman::TEXT_DOMAIN ), array(
|
95 |
$this,
|
96 |
+
'printAdditionalHeadersSectionInfo',
|
97 |
), PostmanAdminController::MESSAGE_HEADERS_OPTIONS );
|
98 |
+
|
99 |
+
add_settings_field( PostmanOptions::ADDITIONAL_HEADERS, __( 'Custom Headers', Postman::TEXT_DOMAIN ), array(
|
100 |
$this,
|
101 |
+
'headers_callback',
|
102 |
), PostmanAdminController::MESSAGE_HEADERS_OPTIONS, PostmanAdminController::MESSAGE_HEADERS_SECTION );
|
103 |
+
|
104 |
// the Email Validation section
|
105 |
+
add_settings_section( PostmanAdminController::EMAIL_VALIDATION_SECTION, __( 'Validation', Postman::TEXT_DOMAIN ), array(
|
106 |
$this,
|
107 |
+
'printEmailValidationSectionInfo',
|
108 |
), PostmanAdminController::EMAIL_VALIDATION_OPTIONS );
|
109 |
+
|
110 |
+
add_settings_field( PostmanOptions::ENVELOPE_SENDER, __( 'Email Address', Postman::TEXT_DOMAIN ), array(
|
111 |
$this,
|
112 |
+
'disable_email_validation_callback',
|
113 |
), PostmanAdminController::EMAIL_VALIDATION_OPTIONS, PostmanAdminController::EMAIL_VALIDATION_SECTION );
|
114 |
+
|
115 |
// the Logging section
|
116 |
+
add_settings_section( PostmanAdminController::LOGGING_SECTION, __( 'Email Log Settings', Postman::TEXT_DOMAIN ), array(
|
117 |
$this,
|
118 |
+
'printLoggingSectionInfo',
|
119 |
), PostmanAdminController::LOGGING_OPTIONS );
|
120 |
+
|
121 |
+
add_settings_field( 'logging_status', __( 'Enable Logging', Postman::TEXT_DOMAIN ), array(
|
122 |
$this,
|
123 |
+
'loggingStatusInputField',
|
124 |
), PostmanAdminController::LOGGING_OPTIONS, PostmanAdminController::LOGGING_SECTION );
|
125 |
+
|
126 |
+
add_settings_field( 'logging_max_entries', __( 'Maximum Log Entries', Postman::TEXT_DOMAIN ), array(
|
127 |
$this,
|
128 |
+
'loggingMaxEntriesInputField',
|
129 |
), PostmanAdminController::LOGGING_OPTIONS, PostmanAdminController::LOGGING_SECTION );
|
130 |
+
|
131 |
+
add_settings_field( PostmanOptions::TRANSCRIPT_SIZE, __( 'Maximum Transcript Size', Postman::TEXT_DOMAIN ), array(
|
132 |
$this,
|
133 |
+
'transcriptSizeInputField',
|
134 |
), PostmanAdminController::LOGGING_OPTIONS, PostmanAdminController::LOGGING_SECTION );
|
135 |
+
|
136 |
// the Network section
|
137 |
+
add_settings_section( PostmanAdminController::NETWORK_SECTION, __( 'Network Settings', Postman::TEXT_DOMAIN ), array(
|
138 |
$this,
|
139 |
+
'printNetworkSectionInfo',
|
140 |
), PostmanAdminController::NETWORK_OPTIONS );
|
141 |
+
|
142 |
+
add_settings_field( 'connection_timeout', _x( 'TCP Connection Timeout (sec)', 'Configuration Input Field', Postman::TEXT_DOMAIN ), array(
|
143 |
$this,
|
144 |
+
'connection_timeout_callback',
|
145 |
), PostmanAdminController::NETWORK_OPTIONS, PostmanAdminController::NETWORK_SECTION );
|
146 |
+
|
147 |
+
add_settings_field( 'read_timeout', _x( 'TCP Read Timeout (sec)', 'Configuration Input Field', Postman::TEXT_DOMAIN ), array(
|
148 |
$this,
|
149 |
+
'read_timeout_callback',
|
150 |
), PostmanAdminController::NETWORK_OPTIONS, PostmanAdminController::NETWORK_SECTION );
|
151 |
+
|
152 |
// the Advanced section
|
153 |
+
add_settings_section( PostmanAdminController::ADVANCED_SECTION, _x( 'Miscellaneous Settings', 'Configuration Section Title', Postman::TEXT_DOMAIN ), array(
|
154 |
$this,
|
155 |
+
'printAdvancedSectionInfo',
|
156 |
), PostmanAdminController::ADVANCED_OPTIONS );
|
157 |
+
|
158 |
+
add_settings_field( PostmanOptions::LOG_LEVEL, _x( 'PHP Log Level', 'Configuration Input Field', Postman::TEXT_DOMAIN ), array(
|
159 |
$this,
|
160 |
+
'log_level_callback',
|
161 |
), PostmanAdminController::ADVANCED_OPTIONS, PostmanAdminController::ADVANCED_SECTION );
|
162 |
+
|
163 |
+
add_settings_field( PostmanOptions::RUN_MODE, _x( 'Delivery Mode', 'Configuration Input Field', Postman::TEXT_DOMAIN ), array(
|
164 |
$this,
|
165 |
+
'runModeCallback',
|
166 |
), PostmanAdminController::ADVANCED_OPTIONS, PostmanAdminController::ADVANCED_SECTION );
|
167 |
+
|
168 |
+
add_settings_field( PostmanOptions::STEALTH_MODE, _x( 'Stealth Mode', 'This mode removes the Postman X-Mailer signature from emails', Postman::TEXT_DOMAIN ), array(
|
169 |
$this,
|
170 |
+
'stealthModeCallback',
|
171 |
), PostmanAdminController::ADVANCED_OPTIONS, PostmanAdminController::ADVANCED_SECTION );
|
172 |
+
|
173 |
+
add_settings_field( PostmanOptions::TEMPORARY_DIRECTORY, __( 'Temporary Directory', Postman::TEXT_DOMAIN ), array(
|
174 |
$this,
|
175 |
+
'temporaryDirectoryCallback',
|
176 |
), PostmanAdminController::ADVANCED_OPTIONS, PostmanAdminController::ADVANCED_SECTION );
|
177 |
}
|
178 |
}
|
179 |
+
|
180 |
/**
|
181 |
* Print the Transport section info
|
182 |
*/
|
183 |
public function printTransportSectionInfo() {
|
184 |
+
print __( 'Choose SMTP or a vendor-specific API:', Postman::TEXT_DOMAIN );
|
185 |
}
|
186 |
public function printLoggingSectionInfo() {
|
187 |
+
print __( 'Configure the delivery audit log:', Postman::TEXT_DOMAIN );
|
188 |
}
|
189 |
+
|
190 |
/**
|
191 |
* Print the Section text
|
192 |
*/
|
193 |
public function printMessageFromSectionInfo() {
|
194 |
+
print sprintf( __( 'This address, like the <b>letterhead</b> printed on a letter, identifies the sender to the recipient. Change this when you are sending on behalf of someone else, for example to use Google\'s <a href="%s">Send Mail As</a> feature. Other plugins, especially Contact Forms, may override this field to be your visitor\'s address.', Postman::TEXT_DOMAIN ), 'https://support.google.com/mail/answer/22370?hl=en' );
|
195 |
}
|
196 |
+
|
197 |
/**
|
198 |
* Print the Section text
|
199 |
*/
|
200 |
public function printMessageSectionInfo() {
|
201 |
+
print __( 'Separate multiple <b>to</b>/<b>cc</b>/<b>bcc</b> recipients with commas.', Postman::TEXT_DOMAIN );
|
202 |
}
|
203 |
+
|
204 |
/**
|
205 |
* Print the Section text
|
206 |
*/
|
207 |
public function printNetworkSectionInfo() {
|
208 |
+
print __( 'Increase the timeouts if your host is intermittenly failing to send mail. Be careful, this also correlates to how long your user must wait if the mail server is unreachable.', Postman::TEXT_DOMAIN );
|
209 |
}
|
210 |
/**
|
211 |
* Print the Section text
|
216 |
* Print the Section text
|
217 |
*/
|
218 |
public function printAdditionalHeadersSectionInfo() {
|
219 |
+
print __( 'Specify custom headers (e.g. <code>X-MC-Tags: wordpress-site-A</code>), one per line. Use custom headers with caution as they can negatively affect your Spam score.', Postman::TEXT_DOMAIN );
|
220 |
}
|
221 |
+
|
222 |
/**
|
223 |
* Print the Email Validation Description
|
224 |
*/
|
225 |
public function printEmailValidationSectionInfo() {
|
226 |
+
print __( 'E-mail addresses can be validated before sending e-mail, however this may fail with some newer domains.', Postman::TEXT_DOMAIN );
|
227 |
}
|
228 |
+
|
229 |
/**
|
230 |
* Get the settings option array and print one of its values
|
231 |
*/
|
232 |
public function transport_type_callback() {
|
233 |
+
$transportType = $this->options->getTransportType();
|
234 |
+
printf( '<select id="input_%2$s" class="input_%2$s" name="%1$s[%2$s]">', PostmanOptions::POSTMAN_OPTIONS, PostmanOptions::TRANSPORT_TYPE );
|
235 |
+
foreach ( PostmanTransportRegistry::getInstance()->getTransports() as $transport ) {
|
236 |
+
printf( '<option class="input_tx_type_%1$s" value="%1$s" %3$s>%2$s</option>', $transport->getSlug(), $transport->getName(), $transportType == $transport->getSlug() ? 'selected="selected"' : '' );
|
237 |
}
|
238 |
print '</select>';
|
239 |
}
|
240 |
+
|
241 |
/**
|
242 |
* Get the settings option array and print one of its values
|
243 |
*/
|
244 |
public function sender_name_callback() {
|
245 |
+
printf( '<input type="text" id="input_sender_name" name="postman_options[sender_name]" value="%s" size="40" />', null !== $this->options->getMessageSenderName() ? esc_attr( $this->options->getMessageSenderName() ) : '' );
|
246 |
}
|
247 |
+
|
248 |
/**
|
249 |
*/
|
250 |
public function prevent_from_name_override_callback() {
|
251 |
+
$enforced = $this->options->isPluginSenderNameEnforced();
|
252 |
+
printf( '<input type="checkbox" id="input_prevent_sender_name_override" name="postman_options[prevent_sender_name_override]" %s /> %s', $enforced ? 'checked="checked"' : '', __( 'Prevent <b>plugins</b> and <b>themes</b> from changing this', Postman::TEXT_DOMAIN ) );
|
253 |
}
|
254 |
+
|
255 |
/**
|
256 |
* Get the settings option array and print one of its values
|
257 |
*/
|
258 |
public function from_email_callback() {
|
259 |
+
printf( '<input type="email" id="input_sender_email" name="postman_options[sender_email]" value="%s" size="40" class="required" placeholder="%s"/>', null !== $this->options->getMessageSenderEmail() ? esc_attr( $this->options->getMessageSenderEmail() ) : '', __( 'Required', Postman::TEXT_DOMAIN ) );
|
260 |
}
|
261 |
+
|
262 |
/**
|
263 |
* Print the Section text
|
264 |
*/
|
265 |
public function printMessageSenderSectionInfo() {
|
266 |
+
print sprintf( __( 'This address, like the <b>return address</b> printed on an envelope, identifies the account owner to the SMTP server.', Postman::TEXT_DOMAIN ), 'https://support.google.com/mail/answer/22370?hl=en' );
|
267 |
}
|
268 |
+
|
269 |
/**
|
270 |
* Get the settings option array and print one of its values
|
271 |
*/
|
272 |
public function prevent_from_email_override_callback() {
|
273 |
+
$enforced = $this->options->isPluginSenderEmailEnforced();
|
274 |
+
printf( '<input type="checkbox" id="input_prevent_sender_email_override" name="postman_options[prevent_sender_email_override]" %s /> %s', $enforced ? 'checked="checked"' : '', __( 'Prevent <b>plugins</b> and <b>themes</b> from changing this', Postman::TEXT_DOMAIN ) );
|
275 |
}
|
276 |
+
|
277 |
/**
|
278 |
* Shows the Mail Logging enable/disabled option
|
279 |
*/
|
280 |
public function loggingStatusInputField() {
|
281 |
// isMailLoggingAllowed
|
282 |
+
$disabled = '';
|
283 |
+
if ( ! $this->options->isMailLoggingAllowed() ) {
|
284 |
$disabled = 'disabled="disabled" ';
|
285 |
}
|
286 |
+
printf( '<select ' . $disabled . 'id="input_%2$s" class="input_%2$s" name="%1$s[%2$s]">', PostmanOptions::POSTMAN_OPTIONS, PostmanOptions::MAIL_LOG_ENABLED_OPTION );
|
287 |
+
printf( '<option value="%s" %s>%s</option>', PostmanOptions::MAIL_LOG_ENABLED_OPTION_YES, $this->options->isMailLoggingEnabled() ? 'selected="selected"' : '', __( 'Yes', Postman::TEXT_DOMAIN ) );
|
288 |
+
printf( '<option value="%s" %s>%s</option>', PostmanOptions::MAIL_LOG_ENABLED_OPTION_NO, ! $this->options->isMailLoggingEnabled() ? 'selected="selected"' : '', __( 'No', Postman::TEXT_DOMAIN ) );
|
289 |
+
printf( '</select>' );
|
290 |
}
|
291 |
public function loggingMaxEntriesInputField() {
|
292 |
+
printf( '<input type="text" id="input_logging_max_entries" name="postman_options[%s]" value="%s"/>', PostmanOptions::MAIL_LOG_MAX_ENTRIES, $this->options->getMailLoggingMaxEntries() );
|
293 |
}
|
294 |
public function transcriptSizeInputField() {
|
295 |
$inputOptionsSlug = PostmanOptions::POSTMAN_OPTIONS;
|
296 |
$inputTranscriptSlug = PostmanOptions::TRANSCRIPT_SIZE;
|
297 |
+
$inputValue = $this->options->getTranscriptSize();
|
298 |
+
$inputDescription = __( 'Change this value if you can\'t see the beginning of the transcript because your messages are too big.', Postman::TEXT_DOMAIN );
|
299 |
+
printf( '<input type="text" id="input%2$s" name="%1$s[%2$s]" value="%3$s"/><br/><span class="postman_input_description">%4$s</span>', $inputOptionsSlug, $inputTranscriptSlug, $inputValue, $inputDescription );
|
300 |
}
|
301 |
+
|
302 |
/**
|
303 |
* Get the settings option array and print one of its values
|
304 |
*/
|
305 |
public function reply_to_callback() {
|
306 |
+
printf( '<input type="text" id="input_reply_to" name="%s[%s]" value="%s" size="40" />', PostmanOptions::POSTMAN_OPTIONS, PostmanOptions::REPLY_TO, null !== $this->options->getReplyTo() ? esc_attr( $this->options->getReplyTo() ) : '' );
|
307 |
}
|
308 |
+
|
309 |
/**
|
310 |
* Get the settings option array and print one of its values
|
311 |
*/
|
312 |
public function to_callback() {
|
313 |
+
printf( '<input type="text" id="input_to" name="%s[%s]" value="%s" size="60" />', PostmanOptions::POSTMAN_OPTIONS, PostmanOptions::FORCED_TO_RECIPIENTS, null !== $this->options->getForcedToRecipients() ? esc_attr( $this->options->getForcedToRecipients() ) : '' );
|
314 |
}
|
315 |
+
|
316 |
/**
|
317 |
* Get the settings option array and print one of its values
|
318 |
*/
|
319 |
public function cc_callback() {
|
320 |
+
printf( '<input type="text" id="input_cc" name="%s[%s]" value="%s" size="60" />', PostmanOptions::POSTMAN_OPTIONS, PostmanOptions::FORCED_CC_RECIPIENTS, null !== $this->options->getForcedCcRecipients() ? esc_attr( $this->options->getForcedCcRecipients() ) : '' );
|
321 |
}
|
322 |
+
|
323 |
/**
|
324 |
* Get the settings option array and print one of its values
|
325 |
*/
|
326 |
public function bcc_callback() {
|
327 |
+
printf( '<input type="text" id="input_bcc" name="%s[%s]" value="%s" size="60" />', PostmanOptions::POSTMAN_OPTIONS, PostmanOptions::FORCED_BCC_RECIPIENTS, null !== $this->options->getForcedBccRecipients() ? esc_attr( $this->options->getForcedBccRecipients() ) : '' );
|
328 |
}
|
329 |
+
|
330 |
/**
|
331 |
* Get the settings option array and print one of its values
|
332 |
*/
|
333 |
public function headers_callback() {
|
334 |
+
printf( '<textarea id="input_headers" name="%s[%s]" cols="60" rows="5" >%s</textarea>', PostmanOptions::POSTMAN_OPTIONS, PostmanOptions::ADDITIONAL_HEADERS, null !== $this->options->getAdditionalHeaders() ? esc_attr( $this->options->getAdditionalHeaders() ) : '' );
|
335 |
}
|
336 |
+
|
337 |
/**
|
338 |
*/
|
339 |
public function disable_email_validation_callback() {
|
340 |
+
$disabled = $this->options->isEmailValidationDisabled();
|
341 |
+
printf( '<input type="checkbox" id="%2$s" name="%1$s[%2$s]" %3$s /> %4$s', PostmanOptions::POSTMAN_OPTIONS, PostmanOptions::DISABLE_EMAIL_VALIDAITON, $disabled ? 'checked="checked"' : '', __( 'Disable e-mail validation', Postman::TEXT_DOMAIN ) );
|
342 |
}
|
343 |
+
|
344 |
/**
|
345 |
* Get the settings option array and print one of its values
|
346 |
*/
|
347 |
public function log_level_callback() {
|
348 |
+
$inputDescription = sprintf( __( 'Log Level specifies the level of detail written to the <a target="_blank" href="%s">WordPress Debug log</a> - view the log with <a target-"_new" href="%s">Debug</a>.', Postman::TEXT_DOMAIN ), 'https://codex.wordpress.org/Debugging_in_WordPress', 'https://wordpress.org/plugins/debug/' );
|
349 |
+
printf( '<select id="input_%2$s" class="input_%2$s" name="%1$s[%2$s]">', PostmanOptions::POSTMAN_OPTIONS, PostmanOptions::LOG_LEVEL );
|
350 |
+
$currentKey = $this->options->getLogLevel();
|
351 |
+
$this->printSelectOption( __( 'Off', Postman::TEXT_DOMAIN ), PostmanLogger::OFF_INT, $currentKey );
|
352 |
+
$this->printSelectOption( __( 'Trace', Postman::TEXT_DOMAIN ), PostmanLogger::TRACE_INT, $currentKey );
|
353 |
+
$this->printSelectOption( __( 'Debug', Postman::TEXT_DOMAIN ), PostmanLogger::DEBUG_INT, $currentKey );
|
354 |
+
$this->printSelectOption( __( 'Info', Postman::TEXT_DOMAIN ), PostmanLogger::INFO_INT, $currentKey );
|
355 |
+
$this->printSelectOption( __( 'Warning', Postman::TEXT_DOMAIN ), PostmanLogger::WARN_INT, $currentKey );
|
356 |
+
$this->printSelectOption( __( 'Error', Postman::TEXT_DOMAIN ), PostmanLogger::ERROR_INT, $currentKey );
|
357 |
+
printf( '</select><br/><span class="postman_input_description">%s</span>', $inputDescription );
|
358 |
+
}
|
359 |
+
private function printSelectOption( $label, $optionKey, $currentKey ) {
|
360 |
$optionPattern = '<option value="%1$s" %2$s>%3$s</option>';
|
361 |
+
printf( $optionPattern, $optionKey, $optionKey == $currentKey ? 'selected="selected"' : '', $label );
|
362 |
}
|
363 |
public function runModeCallback() {
|
364 |
+
$inputDescription = __( 'Delivery mode offers options useful for developing or testing.', Postman::TEXT_DOMAIN );
|
365 |
+
printf( '<select id="input_%2$s" class="input_%2$s" name="%1$s[%2$s]">', PostmanOptions::POSTMAN_OPTIONS, PostmanOptions::RUN_MODE );
|
366 |
+
$currentKey = $this->options->getRunMode();
|
367 |
+
$this->printSelectOption( _x( 'Log Email and Send', 'When the server is online to the public, this is "Production" mode', Postman::TEXT_DOMAIN ), PostmanOptions::RUN_MODE_PRODUCTION, $currentKey );
|
368 |
+
$this->printSelectOption( __( 'Log Email and Delete', Postman::TEXT_DOMAIN ), PostmanOptions::RUN_MODE_LOG_ONLY, $currentKey );
|
369 |
+
$this->printSelectOption( __( 'Delete All Emails', Postman::TEXT_DOMAIN ), PostmanOptions::RUN_MODE_IGNORE, $currentKey );
|
370 |
+
printf( '</select><br/><span class="postman_input_description">%s</span>', $inputDescription );
|
371 |
}
|
372 |
public function stealthModeCallback() {
|
373 |
+
printf( '<input type="checkbox" id="input_%2$s" class="input_%2$s" name="%1$s[%2$s]" %3$s /> %4$s', PostmanOptions::POSTMAN_OPTIONS, PostmanOptions::STEALTH_MODE, $this->options->isStealthModeEnabled() ? 'checked="checked"' : '', __( 'Remove the Postman X-Header signature from messages', Postman::TEXT_DOMAIN ) );
|
374 |
}
|
375 |
public function temporaryDirectoryCallback() {
|
376 |
+
$inputDescription = __( 'Lockfiles are written here to prevent users from triggering an OAuth 2.0 token refresh at the same time.' );
|
377 |
+
printf( '<input type="text" id="input_%2$s" name="%1$s[%2$s]" value="%3$s" />', PostmanOptions::POSTMAN_OPTIONS, PostmanOptions::TEMPORARY_DIRECTORY, $this->options->getTempDirectory() );
|
378 |
+
if ( PostmanState::getInstance()->isFileLockingEnabled() ) {
|
379 |
+
printf( ' <span style="color:green">%s</span></br><span class="postman_input_description">%s</span>', __( 'Valid', Postman::TEXT_DOMAIN ), $inputDescription );
|
380 |
} else {
|
381 |
+
printf( ' <span style="color:red">%s</span></br><span class="postman_input_description">%s</span>', __( 'Invalid', Postman::TEXT_DOMAIN ), $inputDescription );
|
382 |
}
|
383 |
}
|
384 |
+
|
385 |
/**
|
386 |
* Get the settings option array and print one of its values
|
387 |
*/
|
388 |
public function connection_timeout_callback() {
|
389 |
+
printf( '<input type="text" id="input_connection_timeout" name="%s[%s]" value="%s" />', PostmanOptions::POSTMAN_OPTIONS, PostmanOptions::CONNECTION_TIMEOUT, $this->options->getConnectionTimeout() );
|
390 |
}
|
391 |
+
|
392 |
/**
|
393 |
* Get the settings option array and print one of its values
|
394 |
*/
|
395 |
public function read_timeout_callback() {
|
396 |
+
printf( '<input type="text" id="input_read_timeout" name="%s[%s]" value="%s" />', PostmanOptions::POSTMAN_OPTIONS, PostmanOptions::READ_TIMEOUT, $this->options->getReadTimeout() );
|
397 |
}
|
398 |
+
|
399 |
/**
|
400 |
* Get the settings option array and print one of its values
|
401 |
*/
|
402 |
+
public function port_callback( $args ) {
|
403 |
+
printf( '<input type="text" id="input_port" name="postman_options[port]" value="%s" %s placeholder="%s"/>', null !== $this->options->getPort() ? esc_attr( $this->options->getPort() ) : '', isset( $args ['style'] ) ? $args ['style'] : '', __( 'Required', Postman::TEXT_DOMAIN ) );
|
404 |
}
|
405 |
+
}
|
Postman/Postman-Email-Log/PostmanEmailLogController.php
CHANGED
@@ -70,13 +70,22 @@ class PostmanEmailLogController {
|
|
70 |
/**
|
71 |
*/
|
72 |
public function resendMail() {
|
|
|
|
|
73 |
// get the email address of the recipient from the HTTP Request
|
74 |
$postid = $this->getRequestParameter( 'email' );
|
75 |
if ( ! empty( $postid ) ) {
|
76 |
$post = get_post( $postid );
|
77 |
$meta_values = get_post_meta( $postid );
|
78 |
|
79 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
|
81 |
// Postman API: retrieve the result of sending this message from Postman
|
82 |
$result = apply_filters( 'postman_wp_mail_result', null );
|
@@ -288,7 +297,7 @@ class PostmanEmailLogController {
|
|
288 |
$this->logger->trace( 'created PostmanEmailLog admin menu item' );
|
289 |
/*
|
290 |
Translators where (%s) is the name of the plugin */
|
291 |
-
$pageTitle = sprintf( __( '%s Email Log', Postman::TEXT_DOMAIN ), __( '
|
292 |
$pluginName = _x( 'Email Log', 'The log of Emails that have been delivered', Postman::TEXT_DOMAIN );
|
293 |
|
294 |
$page = add_submenu_page( PostmanViewController::POSTMAN_MENU_SLUG, $pageTitle, $pluginName, 'read_private_posts', 'postman_email_log', array( $this, 'postman_render_email_page' ) );
|
@@ -338,7 +347,7 @@ class PostmanEmailLogController {
|
|
338 |
</div>
|
339 |
<h2><?php
|
340 |
/* Translators where (%s) is the name of the plugin */
|
341 |
-
echo sprintf( __( '%s Email Log', Postman::TEXT_DOMAIN ), __( '
|
342 |
|
343 |
<div
|
344 |
style="background: #ECECEC; border: 1px solid #CCC; padding: 0 10px; margin-top: 5px; border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px;">
|
@@ -374,7 +383,8 @@ class PostmanEmailLogController {
|
|
374 |
<div class="form-control">
|
375 |
<!-- <button type="submit" name="export_email_logs" class="button button-primary">Export To CSV</button> -->
|
376 |
</div>
|
377 |
-
</div>
|
|
|
378 |
</form>
|
379 |
|
380 |
<!-- Forms are NOT created automatically, so you need to wrap the table in one to use features like bulk actions -->
|
70 |
/**
|
71 |
*/
|
72 |
public function resendMail() {
|
73 |
+
check_ajax_referer( 'resend', 'security' );
|
74 |
+
|
75 |
// get the email address of the recipient from the HTTP Request
|
76 |
$postid = $this->getRequestParameter( 'email' );
|
77 |
if ( ! empty( $postid ) ) {
|
78 |
$post = get_post( $postid );
|
79 |
$meta_values = get_post_meta( $postid );
|
80 |
|
81 |
+
if ( isset( $_POST['mail_to'] ) && ! empty( $_POST['mail_to'] ) ) {
|
82 |
+
$emails = explode( ',', $_POST['mail_to'] );
|
83 |
+
$to = array_map( 'sanitize_email', $emails );
|
84 |
+
} else {
|
85 |
+
$to = $meta_values ['original_to'] [0];
|
86 |
+
}
|
87 |
+
|
88 |
+
$success = wp_mail( $to, $meta_values ['original_subject'] [0], $meta_values ['original_message'] [0], $meta_values ['original_headers'] [0] );
|
89 |
|
90 |
// Postman API: retrieve the result of sending this message from Postman
|
91 |
$result = apply_filters( 'postman_wp_mail_result', null );
|
297 |
$this->logger->trace( 'created PostmanEmailLog admin menu item' );
|
298 |
/*
|
299 |
Translators where (%s) is the name of the plugin */
|
300 |
+
$pageTitle = sprintf( __( '%s Email Log', Postman::TEXT_DOMAIN ), __( 'Post SMTP', Postman::TEXT_DOMAIN ) );
|
301 |
$pluginName = _x( 'Email Log', 'The log of Emails that have been delivered', Postman::TEXT_DOMAIN );
|
302 |
|
303 |
$page = add_submenu_page( PostmanViewController::POSTMAN_MENU_SLUG, $pageTitle, $pluginName, 'read_private_posts', 'postman_email_log', array( $this, 'postman_render_email_page' ) );
|
347 |
</div>
|
348 |
<h2><?php
|
349 |
/* Translators where (%s) is the name of the plugin */
|
350 |
+
echo sprintf( __( '%s Email Log', Postman::TEXT_DOMAIN ), __( 'Post SMTP', Postman::TEXT_DOMAIN ) )?></h2>
|
351 |
|
352 |
<div
|
353 |
style="background: #ECECEC; border: 1px solid #CCC; padding: 0 10px; margin-top: 5px; border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px;">
|
383 |
<div class="form-control">
|
384 |
<!-- <button type="submit" name="export_email_logs" class="button button-primary">Export To CSV</button> -->
|
385 |
</div>
|
386 |
+
</div>
|
387 |
+
<div class="error">Please notice: when you select a date for example 11/20/2017, behind the scene the query select <b>11/20/2017 00:00:00</b>.<br>So if you searching for an email arrived that day at any hour you need to select 11/20/2017 as the <b>From Date</b> and 11/21/2017 as the <b>To Date</b>.</div>
|
388 |
</form>
|
389 |
|
390 |
<!-- Forms are NOT created automatically, so you need to wrap the table in one to use features like bulk actions -->
|
Postman/Postman-Email-Log/PostmanEmailLogView.php
CHANGED
@@ -105,7 +105,9 @@ class PostmanEmailLogView extends WP_List_Table {
|
|
105 |
}
|
106 |
if ( ! (empty( $meta_values ['original_to'] [0] ) && empty( $meta_values ['originalHeaders'] [0] )) ) {
|
107 |
// $actions ['resend'] = sprintf ( '<a href="%s">%s</a>', $resendUrl, __ ( 'Resend', Postman::TEXT_DOMAIN ) );
|
108 |
-
$
|
|
|
|
|
109 |
} else {
|
110 |
$actions ['resend'] = sprintf( '%2$s', $resendUrl, __( 'Resend', Postman::TEXT_DOMAIN ) );
|
111 |
}
|
@@ -317,6 +319,7 @@ class PostmanEmailLogView extends WP_List_Table {
|
|
317 |
$from_date = sanitize_text_field( $_POST['from_date'] );
|
318 |
|
319 |
$args['date_query']['after'] = $from_date;
|
|
|
320 |
$args['date_query']['inclusive'] = false;
|
321 |
}
|
322 |
|
@@ -324,6 +327,7 @@ class PostmanEmailLogView extends WP_List_Table {
|
|
324 |
$to_date = sanitize_text_field( $_POST['to_date'] );
|
325 |
|
326 |
$args['date_query']['before'] = $to_date;
|
|
|
327 |
$args['date_query']['inclusive'] = true;
|
328 |
}
|
329 |
|
@@ -336,6 +340,8 @@ class PostmanEmailLogView extends WP_List_Table {
|
|
336 |
}
|
337 |
|
338 |
$posts = new WP_query( $args );
|
|
|
|
|
339 |
|
340 |
foreach ( $posts->posts as $post ) {
|
341 |
$date = $post->post_date;
|
@@ -351,7 +357,7 @@ class PostmanEmailLogView extends WP_List_Table {
|
|
351 |
'title' => esc_html( $post->post_title ),
|
352 |
// the post status must be escaped as they are displayed in the HTML output
|
353 |
'status' => ($post->post_excerpt != null ? esc_html( $post->post_excerpt ) : __( 'Sent', Postman::TEXT_DOMAIN )),
|
354 |
-
'date' => $
|
355 |
'ID' => $post->ID,
|
356 |
);
|
357 |
array_push( $data, $flattenedPost );
|
105 |
}
|
106 |
if ( ! (empty( $meta_values ['original_to'] [0] ) && empty( $meta_values ['originalHeaders'] [0] )) ) {
|
107 |
// $actions ['resend'] = sprintf ( '<a href="%s">%s</a>', $resendUrl, __ ( 'Resend', Postman::TEXT_DOMAIN ) );
|
108 |
+
$emails = maybe_unserialize( $meta_values ['original_to'] [0] );
|
109 |
+
$to = is_array( $emails ) ? implode( ',', $emails ) : $emails;
|
110 |
+
$actions ['resend'] = sprintf( '<span id="%3$s"><a class="postman-open-resend" href="#">%2$s</a></span><div style="display:none;"><input type="hidden" name="security" value="%6$s"><input type="text" name="mail_to" class="regular-text ltr" data-id="%1$s" value="%4$s"><button class="postman-resend button button-primary">%2$s</button><i style="color: black;">%5$s</i></div>', $item ['ID'], __( 'Resend', Postman::TEXT_DOMAIN ), 'resend-' . $item ['ID'], esc_attr( $to ), __( 'comma-separated for multiple emails', Postman::TEXT_DOMAIN ), wp_create_nonce( 'resend' ) );
|
111 |
} else {
|
112 |
$actions ['resend'] = sprintf( '%2$s', $resendUrl, __( 'Resend', Postman::TEXT_DOMAIN ) );
|
113 |
}
|
319 |
$from_date = sanitize_text_field( $_POST['from_date'] );
|
320 |
|
321 |
$args['date_query']['after'] = $from_date;
|
322 |
+
$args['date_query']['column'] = 'post_date';
|
323 |
$args['date_query']['inclusive'] = false;
|
324 |
}
|
325 |
|
327 |
$to_date = sanitize_text_field( $_POST['to_date'] );
|
328 |
|
329 |
$args['date_query']['before'] = $to_date;
|
330 |
+
$args['date_query']['column'] = 'post_date';
|
331 |
$args['date_query']['inclusive'] = true;
|
332 |
}
|
333 |
|
340 |
}
|
341 |
|
342 |
$posts = new WP_query( $args );
|
343 |
+
$date_format = get_option( 'date_format' );
|
344 |
+
$time_format = get_option( 'time_format' );
|
345 |
|
346 |
foreach ( $posts->posts as $post ) {
|
347 |
$date = $post->post_date;
|
357 |
'title' => esc_html( $post->post_title ),
|
358 |
// the post status must be escaped as they are displayed in the HTML output
|
359 |
'status' => ($post->post_excerpt != null ? esc_html( $post->post_excerpt ) : __( 'Sent', Postman::TEXT_DOMAIN )),
|
360 |
+
'date' => date( "$date_format $time_format", strtotime( $post->post_date ) ),
|
361 |
'ID' => $post->ID,
|
362 |
);
|
363 |
array_push( $data, $flattenedPost );
|
Postman/PostmanInputSanitizer.php
CHANGED
@@ -1,154 +1,154 @@
|
|
1 |
<?php
|
2 |
-
if (! class_exists
|
3 |
class PostmanInputSanitizer {
|
4 |
private $logger;
|
5 |
private $options;
|
6 |
const VALIDATION_SUCCESS = 'validation_success';
|
7 |
const VALIDATION_FAILED = 'validation_failed';
|
8 |
public function __construct() {
|
9 |
-
$this->logger = new PostmanLogger
|
10 |
$this->options = PostmanOptions::getInstance();
|
11 |
}
|
12 |
-
|
13 |
/**
|
14 |
* Sanitize each setting field as needed
|
15 |
*
|
16 |
* @param array $input
|
17 |
* Contains all settings fields as array keys
|
18 |
*/
|
19 |
-
public function sanitize($input) {
|
20 |
-
$this->logger->debug
|
21 |
-
|
22 |
-
$new_input = array
|
23 |
$success = true;
|
24 |
-
|
25 |
-
$this->sanitizeString
|
26 |
-
$this->sanitizeString
|
27 |
-
if (! empty
|
28 |
-
$port = absint
|
29 |
-
if ($port > 0) {
|
30 |
-
$this->sanitizeInt
|
31 |
} else {
|
32 |
-
$new_input [PostmanOptions::PORT] = $this->options->getPort
|
33 |
-
add_settings_error
|
34 |
$success = false;
|
35 |
}
|
36 |
}
|
37 |
// check the auth type AFTER the hostname because we reset the hostname if auth is bad
|
38 |
-
$this->sanitizeString
|
39 |
// the wizard doesn't set an envelope sender, so we'll default it to From Email
|
40 |
-
$new_input [PostmanOptions::ENVELOPE_SENDER] = $new_input [PostmanOptions::MESSAGE_SENDER_EMAIL];
|
41 |
-
$this->sanitizeString
|
42 |
-
$this->sanitizeString
|
43 |
-
$this->sanitizeString
|
44 |
-
$this->sanitizeString
|
45 |
-
$this->sanitizeString
|
46 |
-
$this->sanitizeString
|
47 |
-
$this->sanitizeString
|
48 |
-
$this->sanitizePassword
|
49 |
-
$this->sanitizePassword
|
50 |
-
$this->sanitizePassword
|
51 |
-
$this->sanitizeString
|
52 |
-
$this->sanitizeString
|
53 |
-
$this->sanitizeString
|
54 |
-
$this->sanitizeString
|
55 |
-
$this->sanitizeString
|
56 |
-
$this->sanitizeString
|
57 |
-
$this->sanitizeString
|
58 |
-
$this->sanitizeString
|
59 |
-
$this->sanitizeInt
|
60 |
-
$this->sanitizeInt
|
61 |
-
$this->sanitizeInt
|
62 |
-
$this->sanitizeString
|
63 |
-
$this->sanitizeLogMax
|
64 |
-
$this->sanitizeString
|
65 |
-
$this->sanitizeString
|
66 |
-
$this->sanitizeInt
|
67 |
-
$this->sanitizeString
|
68 |
-
|
69 |
-
if ($new_input [PostmanOptions::CLIENT_ID] != $this->options->getClientId
|
70 |
-
$this->logger->debug
|
71 |
// the user entered a new client id and we should destroy the stored auth token
|
72 |
-
delete_option
|
73 |
}
|
74 |
-
|
75 |
// can we create a tmp file? - this code is duplicated in ActivationHandler
|
76 |
-
PostmanUtils::deleteLockFile
|
77 |
-
$lockSuccess = PostmanUtils::createLockFile
|
78 |
// &= does not work as expected in my PHP
|
79 |
-
$lockSuccess = $lockSuccess && PostmanUtils::deleteLockFile
|
80 |
-
$this->logger->debug
|
81 |
-
PostmanState::getInstance
|
82 |
-
|
83 |
-
if ($success) {
|
84 |
-
PostmanSession::getInstance
|
85 |
} else {
|
86 |
-
PostmanSession::getInstance
|
87 |
}
|
88 |
-
|
89 |
return $new_input;
|
90 |
}
|
91 |
-
private function sanitizeString($desc, $key, $input, &$new_input) {
|
92 |
-
if (isset
|
93 |
-
$this->logSanitize
|
94 |
-
$new_input [$key] = trim
|
95 |
}
|
96 |
}
|
97 |
-
|
98 |
/**
|
99 |
* Sanitize a Basic Auth password, and base64-encode it
|
100 |
*
|
101 |
-
* @param unknown $desc
|
102 |
-
* @param unknown $key
|
103 |
-
* @param unknown $input
|
104 |
-
* @param unknown $new_input
|
105 |
*/
|
106 |
-
private function sanitizePassword($desc, $key, $input, &$new_input, $existingPassword) {
|
107 |
// WordPress calling Sanitize twice is a known issue
|
108 |
// https://core.trac.wordpress.org/ticket/21989
|
109 |
-
$action = PostmanSession::getInstance
|
110 |
// if $action is not empty, then sanitize has already run
|
111 |
-
if (! empty
|
112 |
// use the already encoded password in the $input
|
113 |
-
$new_input [$key] = $input [$key];
|
114 |
// log it
|
115 |
-
$this->logger->debug
|
116 |
-
} else if (isset
|
117 |
-
if (strlen
|
118 |
// if the password is all stars, then keep the existing password
|
119 |
-
$new_input [$key] = $existingPassword;
|
120 |
} else {
|
121 |
// otherwise the password is new, so trim it
|
122 |
-
$new_input [$key] = trim
|
123 |
}
|
124 |
// log it
|
125 |
-
$this->logSanitize
|
126 |
// base-64 scramble password
|
127 |
-
$new_input [$key] = base64_encode
|
128 |
}
|
129 |
-
$this->logger->debug
|
130 |
}
|
131 |
-
private function sanitizeLogMax($desc, $key, $input, &$new_input) {
|
132 |
-
if (isset
|
133 |
-
$value = absint
|
134 |
-
if ($value <= 0) {
|
135 |
-
$new_input [$key] = PostmanOptions::getInstance
|
136 |
-
$h = new PostmanMessageHandler
|
137 |
-
$h->addError
|
138 |
} else {
|
139 |
-
$this->logSanitize
|
140 |
-
$new_input [$key] = $value;
|
141 |
}
|
142 |
}
|
143 |
}
|
144 |
-
private function sanitizeInt($desc, $key, $input, &$new_input) {
|
145 |
-
if (isset
|
146 |
-
$this->logSanitize
|
147 |
-
$new_input [$key] = absint
|
148 |
}
|
149 |
}
|
150 |
-
private function logSanitize($desc, $value) {
|
151 |
-
$this->logger->trace
|
152 |
}
|
153 |
}
|
154 |
}
|
1 |
<?php
|
2 |
+
if ( ! class_exists( 'PostmanInputSanitizer' ) ) {
|
3 |
class PostmanInputSanitizer {
|
4 |
private $logger;
|
5 |
private $options;
|
6 |
const VALIDATION_SUCCESS = 'validation_success';
|
7 |
const VALIDATION_FAILED = 'validation_failed';
|
8 |
public function __construct() {
|
9 |
+
$this->logger = new PostmanLogger( get_class( $this ) );
|
10 |
$this->options = PostmanOptions::getInstance();
|
11 |
}
|
12 |
+
|
13 |
/**
|
14 |
* Sanitize each setting field as needed
|
15 |
*
|
16 |
* @param array $input
|
17 |
* Contains all settings fields as array keys
|
18 |
*/
|
19 |
+
public function sanitize( $input ) {
|
20 |
+
$this->logger->debug( 'Sanitizing data before storage' );
|
21 |
+
|
22 |
+
$new_input = array();
|
23 |
$success = true;
|
24 |
+
|
25 |
+
$this->sanitizeString( 'Encryption Type', PostmanOptions::SECURITY_TYPE, $input, $new_input );
|
26 |
+
$this->sanitizeString( 'Hostname', PostmanOptions::HOSTNAME, $input, $new_input );
|
27 |
+
if ( ! empty( $input [ PostmanOptions::PORT ] ) ) {
|
28 |
+
$port = absint( $input [ PostmanOptions::PORT ] );
|
29 |
+
if ( $port > 0 ) {
|
30 |
+
$this->sanitizeInt( 'Port', PostmanOptions::PORT, $input, $new_input );
|
31 |
} else {
|
32 |
+
$new_input [ PostmanOptions::PORT ] = $this->options->getPort();
|
33 |
+
add_settings_error( PostmanOptions::PORT, PostmanOptions::PORT, 'Invalid TCP Port', 'error' );
|
34 |
$success = false;
|
35 |
}
|
36 |
}
|
37 |
// check the auth type AFTER the hostname because we reset the hostname if auth is bad
|
38 |
+
$this->sanitizeString( 'From Email', PostmanOptions::MESSAGE_SENDER_EMAIL, $input, $new_input );
|
39 |
// the wizard doesn't set an envelope sender, so we'll default it to From Email
|
40 |
+
$new_input [ PostmanOptions::ENVELOPE_SENDER ] = $new_input [ PostmanOptions::MESSAGE_SENDER_EMAIL ];
|
41 |
+
$this->sanitizeString( 'Sender Email', PostmanOptions::ENVELOPE_SENDER, $input, $new_input );
|
42 |
+
$this->sanitizeString( 'Transport Type', PostmanOptions::TRANSPORT_TYPE, $input, $new_input );
|
43 |
+
$this->sanitizeString( 'Authorization Type', PostmanOptions::AUTHENTICATION_TYPE, $input, $new_input );
|
44 |
+
$this->sanitizeString( 'From Name', PostmanOptions::MESSAGE_SENDER_NAME, $input, $new_input );
|
45 |
+
$this->sanitizeString( 'Client ID', PostmanOptions::CLIENT_ID, $input, $new_input );
|
46 |
+
$this->sanitizeString( 'Client Secret', PostmanOptions::CLIENT_SECRET, $input, $new_input );
|
47 |
+
$this->sanitizeString( 'Username', PostmanOptions::BASIC_AUTH_USERNAME, $input, $new_input );
|
48 |
+
$this->sanitizePassword( 'Password', PostmanOptions::BASIC_AUTH_PASSWORD, $input, $new_input, $this->options->getPassword() );
|
49 |
+
$this->sanitizePassword( 'Mandrill API Key', PostmanOptions::MANDRILL_API_KEY, $input, $new_input, $this->options->getMandrillApiKey() );
|
50 |
+
$this->sanitizePassword( 'SendGrid API Key', PostmanOptions::SENDGRID_API_KEY, $input, $new_input, $this->options->getSendGridApiKey() );
|
51 |
+
$this->sanitizeString( 'Reply-To', PostmanOptions::REPLY_TO, $input, $new_input );
|
52 |
+
$this->sanitizeString( 'From Name Override', PostmanOptions::PREVENT_MESSAGE_SENDER_NAME_OVERRIDE, $input, $new_input );
|
53 |
+
$this->sanitizeString( 'From Email Override', PostmanOptions::PREVENT_MESSAGE_SENDER_EMAIL_OVERRIDE, $input, $new_input );
|
54 |
+
$this->sanitizeString( 'Disable Email Validation', PostmanOptions::DISABLE_EMAIL_VALIDAITON, $input, $new_input );
|
55 |
+
$this->sanitizeString( 'Forced To Recipients', PostmanOptions::FORCED_TO_RECIPIENTS, $input, $new_input );
|
56 |
+
$this->sanitizeString( 'Forced CC Recipients', PostmanOptions::FORCED_CC_RECIPIENTS, $input, $new_input );
|
57 |
+
$this->sanitizeString( 'Forced BCC Recipients', PostmanOptions::FORCED_BCC_RECIPIENTS, $input, $new_input );
|
58 |
+
$this->sanitizeString( 'Additional Headers', PostmanOptions::ADDITIONAL_HEADERS, $input, $new_input );
|
59 |
+
$this->sanitizeInt( 'Read Timeout', PostmanOptions::READ_TIMEOUT, $input, $new_input );
|
60 |
+
$this->sanitizeInt( 'Conenction Timeout', PostmanOptions::CONNECTION_TIMEOUT, $input, $new_input );
|
61 |
+
$this->sanitizeInt( 'Log Level', PostmanOptions::LOG_LEVEL, $input, $new_input );
|
62 |
+
$this->sanitizeString( 'Email Log Enabled', PostmanOptions::MAIL_LOG_ENABLED_OPTION, $input, $new_input );
|
63 |
+
$this->sanitizeLogMax( 'Email Log Max Entries', PostmanOptions::MAIL_LOG_MAX_ENTRIES, $input, $new_input );
|
64 |
+
$this->sanitizeString( 'Run Mode', PostmanOptions::RUN_MODE, $input, $new_input );
|
65 |
+
$this->sanitizeString( 'Stealth Mode', PostmanOptions::STEALTH_MODE, $input, $new_input );
|
66 |
+
$this->sanitizeInt( 'Transcript Size', PostmanOptions::TRANSCRIPT_SIZE, $input, $new_input );
|
67 |
+
$this->sanitizeString( 'Temporary Directory', PostmanOptions::TEMPORARY_DIRECTORY, $input, $new_input );
|
68 |
+
|
69 |
+
if ( $new_input [ PostmanOptions::CLIENT_ID ] != $this->options->getClientId() || $new_input [ PostmanOptions::CLIENT_SECRET ] != $this->options->getClientSecret() || $new_input [ PostmanOptions::HOSTNAME ] != $this->options->getHostname() ) {
|
70 |
+
$this->logger->debug( 'Recognized new Client ID' );
|
71 |
// the user entered a new client id and we should destroy the stored auth token
|
72 |
+
delete_option( PostmanOAuthToken::OPTIONS_NAME );
|
73 |
}
|
74 |
+
|
75 |
// can we create a tmp file? - this code is duplicated in ActivationHandler
|
76 |
+
PostmanUtils::deleteLockFile( $new_input [ PostmanOptions::TEMPORARY_DIRECTORY ] );
|
77 |
+
$lockSuccess = PostmanUtils::createLockFile( $new_input [ PostmanOptions::TEMPORARY_DIRECTORY ] );
|
78 |
// &= does not work as expected in my PHP
|
79 |
+
$lockSuccess = $lockSuccess && PostmanUtils::deleteLockFile( $new_input [ PostmanOptions::TEMPORARY_DIRECTORY ] );
|
80 |
+
$this->logger->debug( 'FileLocking=' . $lockSuccess );
|
81 |
+
PostmanState::getInstance()->setFileLockingEnabled( $lockSuccess );
|
82 |
+
|
83 |
+
if ( $success ) {
|
84 |
+
PostmanSession::getInstance()->setAction( self::VALIDATION_SUCCESS );
|
85 |
} else {
|
86 |
+
PostmanSession::getInstance()->setAction( self::VALIDATION_FAILED );
|
87 |
}
|
88 |
+
|
89 |
return $new_input;
|
90 |
}
|
91 |
+
private function sanitizeString( $desc, $key, $input, &$new_input ) {
|
92 |
+
if ( isset( $input [ $key ] ) ) {
|
93 |
+
$this->logSanitize( $desc, $input [ $key ] );
|
94 |
+
$new_input [ $key ] = trim( $input [ $key ] );
|
95 |
}
|
96 |
}
|
97 |
+
|
98 |
/**
|
99 |
* Sanitize a Basic Auth password, and base64-encode it
|
100 |
*
|
101 |
+
* @param unknown $desc
|
102 |
+
* @param unknown $key
|
103 |
+
* @param unknown $input
|
104 |
+
* @param unknown $new_input
|
105 |
*/
|
106 |
+
private function sanitizePassword( $desc, $key, $input, &$new_input, $existingPassword ) {
|
107 |
// WordPress calling Sanitize twice is a known issue
|
108 |
// https://core.trac.wordpress.org/ticket/21989
|
109 |
+
$action = PostmanSession::getInstance()->getAction();
|
110 |
// if $action is not empty, then sanitize has already run
|
111 |
+
if ( ! empty( $action ) ) {
|
112 |
// use the already encoded password in the $input
|
113 |
+
$new_input [ $key ] = $input [ $key ];
|
114 |
// log it
|
115 |
+
$this->logger->debug( 'Warning, second sanitizePassword attempt detected' );
|
116 |
+
} else if ( isset( $input [ $key ] ) ) {
|
117 |
+
if ( strlen( $input [ $key ] ) > 0 && preg_match( '/^\**$/', $input [ $key ] ) ) {
|
118 |
// if the password is all stars, then keep the existing password
|
119 |
+
$new_input [ $key ] = $existingPassword;
|
120 |
} else {
|
121 |
// otherwise the password is new, so trim it
|
122 |
+
$new_input [ $key ] = trim( $input [ $key ] );
|
123 |
}
|
124 |
// log it
|
125 |
+
$this->logSanitize( $desc, $new_input [ $key ] );
|
126 |
// base-64 scramble password
|
127 |
+
$new_input [ $key ] = base64_encode( $new_input [ $key ] );
|
128 |
}
|
129 |
+
$this->logger->debug( sprintf( 'Encoding %s as %s', $desc, $new_input [ $key ] ) );
|
130 |
}
|
131 |
+
private function sanitizeLogMax( $desc, $key, $input, &$new_input ) {
|
132 |
+
if ( isset( $input [ $key ] ) ) {
|
133 |
+
$value = absint( $input [ $key ] );
|
134 |
+
if ( $value <= 0 ) {
|
135 |
+
$new_input [ $key ] = PostmanOptions::getInstance()->getMailLoggingMaxEntries();
|
136 |
+
$h = new PostmanMessageHandler();
|
137 |
+
$h->addError( sprintf( '%s %s', __( 'Maximum Log Entries', Postman::TEXT_DOMAIN ), __( 'must be greater than 0', Postman::TEXT_DOMAIN ) ) );
|
138 |
} else {
|
139 |
+
$this->logSanitize( $desc, $input [ $key ] );
|
140 |
+
$new_input [ $key ] = $value;
|
141 |
}
|
142 |
}
|
143 |
}
|
144 |
+
private function sanitizeInt( $desc, $key, $input, &$new_input ) {
|
145 |
+
if ( isset( $input [ $key ] ) ) {
|
146 |
+
$this->logSanitize( $desc, $input [ $key ] );
|
147 |
+
$new_input [ $key ] = absint( $input [ $key ] );
|
148 |
}
|
149 |
}
|
150 |
+
private function logSanitize( $desc, $value ) {
|
151 |
+
$this->logger->trace( 'Sanitize ' . $desc . ' ' . $value );
|
152 |
}
|
153 |
}
|
154 |
}
|
Postman/PostmanPluginFeedback.php
CHANGED
@@ -4,7 +4,6 @@ class PostmanPluginFeedback {
|
|
4 |
function __construct() {
|
5 |
add_filter( 'plugin_action_links_' . plugin_basename( POST_BASE ), array( $this, 'insert_deactivate_link_id' ) );
|
6 |
add_action( 'wp_ajax_post_user_feedback', array( $this, 'post_user_feedback' ) );
|
7 |
-
|
8 |
global $pagenow;
|
9 |
if ( 'plugins.php' === $pagenow ) {
|
10 |
add_action( 'admin_enqueue_scripts', array( $this, 'load_scripts' ) );
|
@@ -15,7 +14,7 @@ class PostmanPluginFeedback {
|
|
15 |
|
16 |
function load_scripts() {
|
17 |
wp_enqueue_style( 'wp-jquery-ui-dialog' );
|
18 |
-
wp_register_script( 'post-feedback', plugins_url( 'script/feedback/feedback.js', POST_BASE ), array( 'jquery', 'jquery-ui-core', 'jquery-ui-dialog' ),
|
19 |
wp_localize_script( 'post-feedback', 'post_feedback', array( 'admin_ajax' => admin_url( 'admin-ajax.php' ) ) );
|
20 |
wp_enqueue_script( 'post-feedback' );
|
21 |
}
|
@@ -27,7 +26,7 @@ class PostmanPluginFeedback {
|
|
27 |
|
28 |
$payload = array(
|
29 |
'reason' => sanitize_text_field( $_POST['reason'] ),
|
30 |
-
'other_input' => isset( $_POST['other_input'] ) ?
|
31 |
);
|
32 |
|
33 |
if ( isset( $_POST['support'] ) ) {
|
@@ -38,6 +37,7 @@ class PostmanPluginFeedback {
|
|
38 |
|
39 |
$args = array(
|
40 |
'body' => $payload,
|
|
|
41 |
);
|
42 |
$result = wp_remote_post( 'https://postmansmtp.com/feedback', $args );
|
43 |
die( 'success' );
|
@@ -50,11 +50,11 @@ class PostmanPluginFeedback {
|
|
50 |
float: none !important;
|
51 |
}
|
52 |
|
53 |
-
#postman-feedback-dialog-
|
54 |
float: left;
|
55 |
}
|
56 |
|
57 |
-
#postman-feedback-dialog-
|
58 |
float: right;
|
59 |
}
|
60 |
|
@@ -62,11 +62,31 @@ class PostmanPluginFeedback {
|
|
62 |
font-size: 1.1em;
|
63 |
}
|
64 |
|
65 |
-
|
66 |
margin-top: 10px;
|
67 |
width: 100%;
|
68 |
height: 150px;
|
69 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
70 |
</style>
|
71 |
<?php
|
72 |
}
|
@@ -87,31 +107,32 @@ class PostmanPluginFeedback {
|
|
87 |
<form>
|
88 |
<?php wp_nonce_field(); ?>
|
89 |
<ul id="postman-deactivate-reasons">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
90 |
<li class="postman-reason postman-custom-input">
|
91 |
<label>
|
92 |
<span><input value="Found a better plugin" type="radio" name="reason" /></span>
|
93 |
<span><?php _e( 'Found a better plugin', 'postman' ); ?></span>
|
94 |
-
</label>
|
95 |
-
<div class="postman-reason-input" style="display: none;">
|
96 |
-
<textarea name="other_input"></textarea>
|
97 |
-
</div>
|
98 |
</li>
|
99 |
-
<li class="postman-reason">
|
100 |
<label>
|
101 |
-
<span><input value="The plugin didn't work" type="radio" name="reason" /></span>
|
102 |
<span><?php _e( 'The plugin didn\'t work', 'postman' ); ?></span>
|
103 |
-
</label>
|
104 |
-
</li>
|
105 |
<li class="postman-reason postman-custom-input">
|
106 |
<label>
|
107 |
<span><input value="Other Reason" type="radio" name="reason" /></span>
|
108 |
<span><?php _e( 'Other Reason', 'postman' ); ?></span>
|
109 |
</label>
|
110 |
-
<div class="postman-reason-input" style="display: none;">
|
111 |
-
<textarea name="other_input"></textarea>
|
112 |
-
</div>
|
113 |
</li>
|
114 |
-
<li class="postman-reason postman-
|
115 |
<label>
|
116 |
<span><input value="Support Ticket" type="radio" name="reason" /></span>
|
117 |
<span><?php _e( 'Open A support ticket for me', 'postman' ); ?></span>
|
@@ -121,8 +142,11 @@ class PostmanPluginFeedback {
|
|
121 |
<input type="text" name="support[title]" placeholder="The Title" required>
|
122 |
<textarea name="support[text]" placeholder="Describe the issue" required></textarea>
|
123 |
</div>
|
124 |
-
</li>
|
125 |
</ul>
|
|
|
|
|
|
|
126 |
</form>
|
127 |
</div>
|
128 |
<?php
|
4 |
function __construct() {
|
5 |
add_filter( 'plugin_action_links_' . plugin_basename( POST_BASE ), array( $this, 'insert_deactivate_link_id' ) );
|
6 |
add_action( 'wp_ajax_post_user_feedback', array( $this, 'post_user_feedback' ) );
|
|
|
7 |
global $pagenow;
|
8 |
if ( 'plugins.php' === $pagenow ) {
|
9 |
add_action( 'admin_enqueue_scripts', array( $this, 'load_scripts' ) );
|
14 |
|
15 |
function load_scripts() {
|
16 |
wp_enqueue_style( 'wp-jquery-ui-dialog' );
|
17 |
+
wp_register_script( 'post-feedback', plugins_url( 'script/feedback/feedback.js', POST_BASE ), array( 'jquery', 'jquery-ui-core', 'jquery-ui-dialog' ), false, true );
|
18 |
wp_localize_script( 'post-feedback', 'post_feedback', array( 'admin_ajax' => admin_url( 'admin-ajax.php' ) ) );
|
19 |
wp_enqueue_script( 'post-feedback' );
|
20 |
}
|
26 |
|
27 |
$payload = array(
|
28 |
'reason' => sanitize_text_field( $_POST['reason'] ),
|
29 |
+
'other_input' => isset( $_POST['other_input'] ) ? sanitize_text_field( $_POST['other_input'] ) : '',
|
30 |
);
|
31 |
|
32 |
if ( isset( $_POST['support'] ) ) {
|
37 |
|
38 |
$args = array(
|
39 |
'body' => $payload,
|
40 |
+
'timeout' => 20,
|
41 |
);
|
42 |
$result = wp_remote_post( 'https://postmansmtp.com/feedback', $args );
|
43 |
die( 'success' );
|
50 |
float: none !important;
|
51 |
}
|
52 |
|
53 |
+
#postman-feedback-dialog-go {
|
54 |
float: left;
|
55 |
}
|
56 |
|
57 |
+
#postman-feedback-dialog-skip, #postman-feedback-dialog-cancel {
|
58 |
float: right;
|
59 |
}
|
60 |
|
62 |
font-size: 1.1em;
|
63 |
}
|
64 |
|
65 |
+
.postman-reason-input textarea {
|
66 |
margin-top: 10px;
|
67 |
width: 100%;
|
68 |
height: 150px;
|
69 |
}
|
70 |
+
|
71 |
+
.postman-feedback-dialog-form .ui-icon {
|
72 |
+
display: none;
|
73 |
+
}
|
74 |
+
|
75 |
+
#postman-feedback-dialog-go.postman-ajax-progress .ui-icon {
|
76 |
+
text-indent: inherit;
|
77 |
+
display: inline-block !important;
|
78 |
+
vertical-align: middle;
|
79 |
+
animation: rotate 2s infinite linear;
|
80 |
+
}
|
81 |
+
|
82 |
+
#postman-feedback-dialog-go.postman-ajax-progress .ui-button-text {
|
83 |
+
vertical-align: middle;
|
84 |
+
}
|
85 |
+
|
86 |
+
@keyframes rotate {
|
87 |
+
0% { transform: rotate(0deg); }
|
88 |
+
100% { transform: rotate(360deg); }
|
89 |
+
}
|
90 |
</style>
|
91 |
<?php
|
92 |
}
|
107 |
<form>
|
108 |
<?php wp_nonce_field(); ?>
|
109 |
<ul id="postman-deactivate-reasons">
|
110 |
+
|
111 |
+
<li class="postman-reason">
|
112 |
+
<label>
|
113 |
+
<span><input value="bad support" type="radio" name="reason" checked/></span>
|
114 |
+
<span><?php _e( 'Bad Support', 'postman' ); ?></span>
|
115 |
+
</label>
|
116 |
+
</li>
|
117 |
<li class="postman-reason postman-custom-input">
|
118 |
<label>
|
119 |
<span><input value="Found a better plugin" type="radio" name="reason" /></span>
|
120 |
<span><?php _e( 'Found a better plugin', 'postman' ); ?></span>
|
121 |
+
</label>
|
|
|
|
|
|
|
122 |
</li>
|
123 |
+
<li class="postman-reason postman-custom-input">
|
124 |
<label>
|
125 |
+
<span><input value="<?php echo esc_attr( "The plugin didn't work" ); ?>" type="radio" name="reason" /></span>
|
126 |
<span><?php _e( 'The plugin didn\'t work', 'postman' ); ?></span>
|
127 |
+
</label>
|
128 |
+
</li>
|
129 |
<li class="postman-reason postman-custom-input">
|
130 |
<label>
|
131 |
<span><input value="Other Reason" type="radio" name="reason" /></span>
|
132 |
<span><?php _e( 'Other Reason', 'postman' ); ?></span>
|
133 |
</label>
|
|
|
|
|
|
|
134 |
</li>
|
135 |
+
<li class="postman-reason postman-support-input">
|
136 |
<label>
|
137 |
<span><input value="Support Ticket" type="radio" name="reason" /></span>
|
138 |
<span><?php _e( 'Open A support ticket for me', 'postman' ); ?></span>
|
142 |
<input type="text" name="support[title]" placeholder="The Title" required>
|
143 |
<textarea name="support[text]" placeholder="Describe the issue" required></textarea>
|
144 |
</div>
|
145 |
+
</li>
|
146 |
</ul>
|
147 |
+
<div class="postman-reason-input" style="display: none;">
|
148 |
+
<input type="text" class="regular-text" name="other_input" placeholder="Do you mind help and give more detailes?">
|
149 |
+
</div>
|
150 |
</form>
|
151 |
</div>
|
152 |
<?php
|
Postman/PostmanViewController.php
CHANGED
@@ -49,8 +49,8 @@ if ( ! class_exists( 'PostmanViewController' ) ) {
|
|
49 |
*/
|
50 |
public function generateDefaultContent() {
|
51 |
// This page will be under "Settings"
|
52 |
-
$pageTitle = sprintf( __( '%s Setup', Postman::TEXT_DOMAIN ), __( '
|
53 |
-
$pluginName = __( '
|
54 |
$uniqueId = self::POSTMAN_MENU_SLUG;
|
55 |
$pageOptions = array(
|
56 |
$this,
|
@@ -72,7 +72,7 @@ if ( ! class_exists( 'PostmanViewController' ) ) {
|
|
72 |
* Register the Email Test screen
|
73 |
*/
|
74 |
public function addPurgeDataSubmenu() {
|
75 |
-
$page = add_submenu_page( null, sprintf( __( '%s Setup', Postman::TEXT_DOMAIN ), __( '
|
76 |
$this,
|
77 |
'outputPurgeDataContent',
|
78 |
) );
|
@@ -182,7 +182,7 @@ if ( ! class_exists( 'PostmanViewController' ) ) {
|
|
182 |
* @param string $slug
|
183 |
*/
|
184 |
public static function outputChildPageHeader( $title, $slug = '' ) {
|
185 |
-
printf( '<h2>%s</h2>', sprintf( __( '%s Setup', Postman::TEXT_DOMAIN ), __( '
|
186 |
printf( '<div id="postman-main-menu" class="welcome-panel %s">', $slug );
|
187 |
print '<div class="welcome-panel-content">';
|
188 |
print '<div class="welcome-panel-column-container">';
|
@@ -253,15 +253,14 @@ if ( ! class_exists( 'PostmanViewController' ) ) {
|
|
253 |
/**
|
254 |
*/
|
255 |
private function displayTopNavigation() {
|
256 |
-
|
257 |
-
printf( '<h2>%s</h2>', sprintf( __( '%s Setup', Postman::TEXT_DOMAIN ), __( 'Postman SMTP', Postman::TEXT_DOMAIN ) ) );
|
258 |
print '<div id="postman-main-menu" class="welcome-panel">';
|
259 |
print '<div class="welcome-panel-content">';
|
260 |
print '<div class="welcome-panel-column-container">';
|
261 |
print '<div class="welcome-panel-column">';
|
262 |
printf( '<h4>%s</h4>', __( 'Configuration', Postman::TEXT_DOMAIN ) );
|
263 |
printf( '<a class="button button-primary button-hero" href="%s">%s</a>', $this->getPageUrl( PostmanConfigurationController::CONFIGURATION_WIZARD_SLUG ), __( 'Start the Wizard', Postman::TEXT_DOMAIN ) );
|
264 |
-
printf( '<p class=""
|
265 |
print '</div>';
|
266 |
print '<div class="welcome-panel-column">';
|
267 |
printf( '<h4>%s</h4>', _x( 'Actions', 'Main Menu', Postman::TEXT_DOMAIN ) );
|
@@ -295,7 +294,7 @@ if ( ! class_exists( 'PostmanViewController' ) ) {
|
|
295 |
printf( '<li><a href="%s" class="welcome-icon run-port-test">%s</a></li>', $this->getPageUrl( PostmanConnectivityTestController::PORT_TEST_SLUG ), __( 'Connectivity Test', Postman::TEXT_DOMAIN ) );
|
296 |
printf( '<li><a href="%s" class="welcome-icon run-port-test">%s</a></li>', $this->getPageUrl( PostmanDiagnosticTestController::DIAGNOSTICS_SLUG ), __( 'Diagnostic Test', Postman::TEXT_DOMAIN ) );
|
297 |
printf( '<li><a href="https://postmansmtp.com/forums/" class="welcome-icon postman_support">%s</a></li>', __( 'Online Support', Postman::TEXT_DOMAIN ) );
|
298 |
-
printf( '<li><img class="align-middle" src="' . plugins_url( 'style/images/new.gif', dirname( __DIR__ ) . '/postman-smtp.php' ) . '"><a class="align-middle" href="https://postmansmtp.com/category/guides/" class="welcome-icon postman_guides">%s</a></li>', __( 'Guides', Postman::TEXT_DOMAIN ) );
|
299 |
print '</ul></div></div></div></div>';
|
300 |
}
|
301 |
}
|
49 |
*/
|
50 |
public function generateDefaultContent() {
|
51 |
// This page will be under "Settings"
|
52 |
+
$pageTitle = sprintf( __( '%s Setup', Postman::TEXT_DOMAIN ), __( 'Post SMTP', Postman::TEXT_DOMAIN ) );
|
53 |
+
$pluginName = __( 'Post SMTP', Postman::TEXT_DOMAIN );
|
54 |
$uniqueId = self::POSTMAN_MENU_SLUG;
|
55 |
$pageOptions = array(
|
56 |
$this,
|
72 |
* Register the Email Test screen
|
73 |
*/
|
74 |
public function addPurgeDataSubmenu() {
|
75 |
+
$page = add_submenu_page( null, sprintf( __( '%s Setup', Postman::TEXT_DOMAIN ), __( 'Post SMTP', Postman::TEXT_DOMAIN ) ), __( 'Post SMTP', Postman::TEXT_DOMAIN ), Postman::MANAGE_POSTMAN_CAPABILITY_NAME, PostmanAdminController::MANAGE_OPTIONS_PAGE_SLUG, array(
|
76 |
$this,
|
77 |
'outputPurgeDataContent',
|
78 |
) );
|
182 |
* @param string $slug
|
183 |
*/
|
184 |
public static function outputChildPageHeader( $title, $slug = '' ) {
|
185 |
+
printf( '<h2>%s</h2>', sprintf( __( '%s Setup', Postman::TEXT_DOMAIN ), __( 'Post SMTP', Postman::TEXT_DOMAIN ) ) );
|
186 |
printf( '<div id="postman-main-menu" class="welcome-panel %s">', $slug );
|
187 |
print '<div class="welcome-panel-content">';
|
188 |
print '<div class="welcome-panel-column-container">';
|
253 |
/**
|
254 |
*/
|
255 |
private function displayTopNavigation() {
|
256 |
+
printf( '<h2>%s</h2>', sprintf( __( '%s Setup', Postman::TEXT_DOMAIN ), __( 'Post SMTP', Postman::TEXT_DOMAIN ) ) );
|
|
|
257 |
print '<div id="postman-main-menu" class="welcome-panel">';
|
258 |
print '<div class="welcome-panel-content">';
|
259 |
print '<div class="welcome-panel-column-container">';
|
260 |
print '<div class="welcome-panel-column">';
|
261 |
printf( '<h4>%s</h4>', __( 'Configuration', Postman::TEXT_DOMAIN ) );
|
262 |
printf( '<a class="button button-primary button-hero" href="%s">%s</a>', $this->getPageUrl( PostmanConfigurationController::CONFIGURATION_WIZARD_SLUG ), __( 'Start the Wizard', Postman::TEXT_DOMAIN ) );
|
263 |
+
printf( '<p class="">%s <a href="%s" class="configure_manually">%s</a></p>', __( 'or', Postman::TEXT_DOMAIN ), $this->getPageUrl( PostmanConfigurationController::CONFIGURATION_SLUG ), __( 'Show All Settings', Postman::TEXT_DOMAIN ) );
|
264 |
print '</div>';
|
265 |
print '<div class="welcome-panel-column">';
|
266 |
printf( '<h4>%s</h4>', _x( 'Actions', 'Main Menu', Postman::TEXT_DOMAIN ) );
|
294 |
printf( '<li><a href="%s" class="welcome-icon run-port-test">%s</a></li>', $this->getPageUrl( PostmanConnectivityTestController::PORT_TEST_SLUG ), __( 'Connectivity Test', Postman::TEXT_DOMAIN ) );
|
295 |
printf( '<li><a href="%s" class="welcome-icon run-port-test">%s</a></li>', $this->getPageUrl( PostmanDiagnosticTestController::DIAGNOSTICS_SLUG ), __( 'Diagnostic Test', Postman::TEXT_DOMAIN ) );
|
296 |
printf( '<li><a href="https://postmansmtp.com/forums/" class="welcome-icon postman_support">%s</a></li>', __( 'Online Support', Postman::TEXT_DOMAIN ) );
|
297 |
+
printf( '<li><img class="align-middle" src="' . plugins_url( 'style/images/new.gif', dirname( __DIR__ ) . '/postman-smtp.php' ) . '"><a target="blank" class="align-middle" href="https://postmansmtp.com/category/guides/" class="welcome-icon postman_guides">%s</a></li>', __( 'Guides', Postman::TEXT_DOMAIN ) );
|
298 |
print '</ul></div></div></div></div>';
|
299 |
}
|
300 |
}
|
postman-smtp.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Plugin Name: Post SMTP
|
5 |
* Plugin URI: https://wordpress.org/plugins/post-smtp/
|
6 |
* Description: Email not reliable? Post SMTP is the first and only WordPress SMTP plugin to implement OAuth 2.0 for Gmail, Hotmail and Yahoo Mail. Setup is a breeze with the Configuration Wizard and integrated Port Tester. Enjoy worry-free delivery even if your password changes!
|
7 |
-
* Version: 1.7.
|
8 |
* Author: Jason Hendriks, Yehuda Hassine
|
9 |
* Text Domain: post-smtp
|
10 |
* Author URI: https://postmansmtp.com
|
@@ -71,5 +71,5 @@ function post_start( $startingMemory ) {
|
|
71 |
*/
|
72 |
function post_setupPostman() {
|
73 |
require_once 'Postman/Postman.php';
|
74 |
-
$kevinCostner = new Postman( __FILE__, '1.7.
|
75 |
}
|
4 |
* Plugin Name: Post SMTP
|
5 |
* Plugin URI: https://wordpress.org/plugins/post-smtp/
|
6 |
* Description: Email not reliable? Post SMTP is the first and only WordPress SMTP plugin to implement OAuth 2.0 for Gmail, Hotmail and Yahoo Mail. Setup is a breeze with the Configuration Wizard and integrated Port Tester. Enjoy worry-free delivery even if your password changes!
|
7 |
+
* Version: 1.7.9
|
8 |
* Author: Jason Hendriks, Yehuda Hassine
|
9 |
* Text Domain: post-smtp
|
10 |
* Author URI: https://postmansmtp.com
|
71 |
*/
|
72 |
function post_setupPostman() {
|
73 |
require_once 'Postman/Postman.php';
|
74 |
+
$kevinCostner = new Postman( __FILE__, '1.7.9' );
|
75 |
}
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: yehudah, jasonhendriks
|
|
3 |
Tags: postman smtp, postman, smtp, email, mail, mailer, email log, oauth2, gmail, google apps, hotmail, yahoo, mandrill api, sendgrid api, elastic email
|
4 |
Requires at least: 3.9
|
5 |
Tested up to: 4.9
|
6 |
-
Stable tag: 1.7.
|
7 |
License: GPLv2 or later
|
8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
9 |
|
@@ -277,10 +277,20 @@ To avoid being flagged as spam, you need to prove your email isn't forged. On a
|
|
277 |
1. Emai Log screen
|
278 |
1. Connectivity Test utility screen
|
279 |
1. Diagnostic Information screen
|
|
|
280 |
|
281 |
|
282 |
|
283 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
284 |
= 1.7.8 - 2017-11-17
|
285 |
* = Menu Items grouping =
|
286 |
* Fixed: IP detection error in some web hosts
|
3 |
Tags: postman smtp, postman, smtp, email, mail, mailer, email log, oauth2, gmail, google apps, hotmail, yahoo, mandrill api, sendgrid api, elastic email
|
4 |
Requires at least: 3.9
|
5 |
Tested up to: 4.9
|
6 |
+
Stable tag: 1.7.9
|
7 |
License: GPLv2 or later
|
8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
9 |
|
277 |
1. Emai Log screen
|
278 |
1. Connectivity Test utility screen
|
279 |
1. Diagnostic Information screen
|
280 |
+
1. Email Log Filter
|
281 |
|
282 |
|
283 |
|
284 |
== Changelog ==
|
285 |
+
|
286 |
+
= 1.7.9 - 2017-11-20
|
287 |
+
* Fixed: misspled false
|
288 |
+
* Fixed: feedback form
|
289 |
+
* Fixed: Some localization strings
|
290 |
+
* Removed: deprecated function
|
291 |
+
* New: Option to input emails when resend email
|
292 |
+
* Added: explain message on email log filter
|
293 |
+
|
294 |
= 1.7.8 - 2017-11-17
|
295 |
* = Menu Items grouping =
|
296 |
* Fixed: IP detection error in some web hosts
|
script/feedback/feedback.js
CHANGED
@@ -13,24 +13,17 @@ jQuery(document).ready(function($) {
|
|
13 |
minWidth: 400,
|
14 |
minHeight: 300,
|
15 |
modal: true,
|
16 |
-
buttons: {
|
17 |
-
'skip' : {
|
18 |
-
text: 'Skip',
|
19 |
-
id: 'postman-feedback-dialog-skip',
|
20 |
-
click: function() {
|
21 |
-
$( this ).dialog( "close" );
|
22 |
-
|
23 |
-
location.href = deactivateLink;
|
24 |
-
}
|
25 |
-
},
|
26 |
'go' : {
|
27 |
text: 'Continue',
|
|
|
28 |
id: 'postman-feedback-dialog-go',
|
29 |
class: 'button',
|
30 |
click: function() {
|
31 |
-
$( this ).dialog( "close" );
|
32 |
|
33 |
-
|
|
|
|
|
34 |
result = {};
|
35 |
|
36 |
$.each( form, function() {
|
@@ -41,13 +34,26 @@ jQuery(document).ready(function($) {
|
|
41 |
if ( ! jQuery.isEmptyObject( result ) ) {
|
42 |
result.action = 'post_user_feedback';
|
43 |
|
44 |
-
|
45 |
-
|
46 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
}
|
48 |
|
49 |
-
|
50 |
-
location.href = deactivateLink;
|
51 |
},
|
52 |
},
|
53 |
'cancel' : {
|
@@ -57,7 +63,16 @@ jQuery(document).ready(function($) {
|
|
57 |
click: function() {
|
58 |
$( this ).dialog( "close" );
|
59 |
}
|
60 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
}
|
62 |
});
|
63 |
|
@@ -65,8 +80,13 @@ jQuery(document).ready(function($) {
|
|
65 |
$( '.postman-reason-input' ).hide();
|
66 |
|
67 |
if ( $( this ).hasClass( 'postman-custom-input' ) ) {
|
68 |
-
$(
|
69 |
}
|
|
|
|
|
|
|
|
|
|
|
70 |
});
|
71 |
|
72 |
});
|
13 |
minWidth: 400,
|
14 |
minHeight: 300,
|
15 |
modal: true,
|
16 |
+
buttons: {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
'go' : {
|
18 |
text: 'Continue',
|
19 |
+
icons: { primary: "dashicons dashicons-update" },
|
20 |
id: 'postman-feedback-dialog-go',
|
21 |
class: 'button',
|
22 |
click: function() {
|
|
|
23 |
|
24 |
+
var dialog = $(this),
|
25 |
+
go = $('#postman-feedback-dialog-go'),
|
26 |
+
form = dialog.find( 'form' ).serializeArray(),
|
27 |
result = {};
|
28 |
|
29 |
$.each( form, function() {
|
34 |
if ( ! jQuery.isEmptyObject( result ) ) {
|
35 |
result.action = 'post_user_feedback';
|
36 |
|
37 |
+
$.ajax({
|
38 |
+
url: post_feedback.admin_ajax,
|
39 |
+
type: 'POST',
|
40 |
+
data: result,
|
41 |
+
error: function(){},
|
42 |
+
success: function(msg){},
|
43 |
+
beforeSend: function() {
|
44 |
+
go.addClass('postman-ajax-progress');
|
45 |
+
},
|
46 |
+
complete: function() {
|
47 |
+
go.removeClass('postman-ajax-progress');
|
48 |
+
|
49 |
+
dialog.dialog( "close" );
|
50 |
+
location.href = deactivateLink;
|
51 |
+
}
|
52 |
+
});
|
53 |
+
|
54 |
}
|
55 |
|
56 |
+
|
|
|
57 |
},
|
58 |
},
|
59 |
'cancel' : {
|
63 |
click: function() {
|
64 |
$( this ).dialog( "close" );
|
65 |
}
|
66 |
+
},
|
67 |
+
'skip' : {
|
68 |
+
text: 'Skip',
|
69 |
+
id: 'postman-feedback-dialog-skip',
|
70 |
+
click: function() {
|
71 |
+
$( this ).dialog( "close" );
|
72 |
+
|
73 |
+
location.href = deactivateLink;
|
74 |
+
}
|
75 |
+
},
|
76 |
}
|
77 |
});
|
78 |
|
80 |
$( '.postman-reason-input' ).hide();
|
81 |
|
82 |
if ( $( this ).hasClass( 'postman-custom-input' ) ) {
|
83 |
+
$( '#postman-deactivate-reasons' ).next( '.postman-reason-input' ).show();
|
84 |
}
|
85 |
+
|
86 |
+
if ( $( this ).hasClass( 'postman-support-input' ) ) {
|
87 |
+
console.log($(this));
|
88 |
+
$( this ).find( '.postman-reason-input' ).show();
|
89 |
+
}
|
90 |
});
|
91 |
|
92 |
});
|
script/postman_resend_email_sript.js
CHANGED
@@ -1,17 +1,43 @@
|
|
1 |
-
function
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
jQuery.post(ajaxurl, data, function(response) {
|
8 |
-
if (response.success) {
|
9 |
-
alert(response.data.message);
|
10 |
-
// jQuery('span#resend-' + emailId).text(postman_js_resend_label);
|
11 |
-
} else {
|
12 |
-
alert(sprintf(postman_js_email_not_resent, response.data.message));
|
13 |
-
}
|
14 |
-
}).fail(function(response) {
|
15 |
-
ajaxFailed(response);
|
16 |
});
|
17 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery(document).ready(function($) {
|
2 |
+
$('.postman-open-resend').on('click', function(e) {
|
3 |
+
e.preventDefault();
|
4 |
+
|
5 |
+
$(this).parent().next('div').fadeToggle();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
});
|
7 |
+
|
8 |
+
$('.postman-resend').on('click', function(e) {
|
9 |
+
e.preventDefault();
|
10 |
+
|
11 |
+
var parent = $(this).closest('div'),
|
12 |
+
mailField = $(this).prev('input'),
|
13 |
+
emailId = mailField.data('id'),
|
14 |
+
mail_to = mailField.val(),
|
15 |
+
security = parent.find('input[name="security"]').val();
|
16 |
+
|
17 |
+
|
18 |
+
postman_resend_email(emailId, mail_to, security);
|
19 |
+
|
20 |
+
});
|
21 |
+
|
22 |
+
function postman_resend_email(emailId, mail_to, security ) {
|
23 |
+
var data = {
|
24 |
+
'action' : 'postman_resend_mail',
|
25 |
+
'email' : emailId,
|
26 |
+
'mail_to' : mail_to,
|
27 |
+
'security' : security
|
28 |
+
};
|
29 |
+
|
30 |
+
jQuery.post(ajaxurl, data, function(response) {
|
31 |
+
if (response.success) {
|
32 |
+
alert(response.data.message);
|
33 |
+
// jQuery('span#resend-' + emailId).text(postman_js_resend_label);
|
34 |
+
} else {
|
35 |
+
alert(sprintf(postman_js_email_not_resent, response.data.message));
|
36 |
+
}
|
37 |
+
}).fail(function(response) {
|
38 |
+
ajaxFailed(response);
|
39 |
+
});
|
40 |
+
}
|
41 |
+
|
42 |
+
})
|
43 |
+
|