Configure SMTP - Version 3.0

Version Description

  • Re-implementation by extending C2C_Plugin_016, which among other things adds support for:
    • Reset of options to default values
    • Better sanitization of input values
    • Offload of core/basic functionality to generic plugin framework
    • Additional hooks for various stages/places of plugin operation
    • Easier localization support
  • Add error checking and reporting when attempting to send test e-mail
  • Don't configure the mailer to use SMTP if no host is provided
  • Fix localization support
  • Store plugin instance in global variable, $c2c_configure_smtp, to allow for external manipulation
  • Rename class from 'ConfigureSMTP' to 'c2c_ConfigureSMTP'
  • Remove docs from top of plugin file (all that and more are in readme.txt)
  • Note compatibility with WP 3.0+
  • Minor tweaks to code formatting (spacing)
  • Add Upgrade Notice section to readme.txt
  • Add PHPDoc documentation
  • Add package info to top of file
  • Update copyright date
  • Remove trailing whitespace
  • Update screenshot
  • Update .pot file
Download this release

Release Info

Developer coffee2code
Plugin Icon wp plugin Configure SMTP
Version 3.0
Comparing to
See all releases

Code changes from version 2.7 to 3.0

Files changed (5) hide show
  1. c2c-plugin.php +770 -0
  2. configure-smtp.php +189 -308
  3. configure-smtp.pot +137 -74
  4. readme.txt +36 -3
  5. screenshot-1.png +0 -0
c2c-plugin.php ADDED
@@ -0,0 +1,770 @@
1
+ <?php
2
+ /**
3
+ * @package C2C_Plugins
4
+ * @author Scott Reilly
5
+ * @version 016
6
+ */
7
+ /*
8
+ Basis for other plugins
9
+
10
+ Compatible with WordPress 2.8+, 2.9+, 3.0+.
11
+
12
+ =>> Read the accompanying readme.txt file for more information. Also, visit the plugin's homepage
13
+ =>> for more information and the latest updates
14
+
15
+ Installation:
16
+
17
+ */
18
+
19
+ /*
20
+ Copyright (c) 2010 by Scott Reilly (aka coffee2code)
21
+
22
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
23
+ files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,
24
+ modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
25
+ Software is furnished to do so, subject to the following conditions:
26
+
27
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
28
+
29
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
30
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
31
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
32
+ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33
+ */
34
+
35
+ if ( !class_exists( 'C2C_Plugin_016' ) ) :
36
+
37
+ class C2C_Plugin_016 {
38
+ var $plugin_css_version = '006';
39
+ var $options = array();
40
+ var $option_names = array();
41
+ var $required_config = array( 'menu_name', 'name' );
42
+ var $saved_settings = false;
43
+ var $saved_settings_msg = '';
44
+
45
+ /**
46
+ * Handles installation tasks, such as ensuring plugin options are instantiated and saved to options table.
47
+ *
48
+ * @param string $version Version of the plugin.
49
+ * @param string $id_base A unique base ID for the plugin (generally a lower-case, dash-separated version of plugin name).
50
+ * @param string $author_prefix Short (2-3 char) identifier for plugin author.
51
+ * @param string $file The __FILE__ value for the sub-class.
52
+ * @param array $plugin_options (optional) Array specifying further customization of plugin configuration.
53
+ * @return void
54
+ */
55
+ function C2C_Plugin_016( $version, $id_base, $author_prefix, $file, $plugin_options = array() ) {
56
+ global $pagenow;
57
+ $id_base = sanitize_title( $id_base );
58
+ if ( !file_exists( $file ) )
59
+ die( sprintf( __( 'Invalid file specified for C2C_Plugin: %s', $this->textdomain ), $file ) );
60
+
61
+ $u_id_base = str_replace( '-', '_', $id_base );
62
+ $author_prefix .= '_';
63
+ $defaults = array(
64
+ 'admin_options_name' => $author_prefix . $u_id_base, // The setting under which all plugin settings are stored under (as array)
65
+ 'config' => array(), // Default configuration
66
+ 'disable_contextual_help' => false, // Prevent overriding of the contextual help?
67
+ 'disable_update_check' => false, // Prevent WP from checking for updates to this plugin?
68
+ 'hook_prefix' => $u_id_base . '_', // Prefix for all hooks
69
+ 'form_name' => $u_id_base, // Name for the <form>
70
+ 'menu_name' => '', // Specify this via plugin
71
+ 'name' => '', // Full, localized version of the plugin name
72
+ 'nonce_field' => 'update-' . $u_id_base, // Nonce field value
73
+ 'settings_page' => 'options-general', // The type of the settings page.
74
+ 'show_admin' => true, // Should admin be shown? Only applies if admin is enabled
75
+ 'textdomain' => $id_base, // Textdomain for localization
76
+ 'textdomain_subdir' => 'lang' // Subdirectory, relative to plugin's root, to hold localization files
77
+ );
78
+ $settings = wp_parse_args( $plugin_options, $defaults );
79
+
80
+ foreach ( array_keys( $defaults ) as $key )
81
+ $this->$key = $settings[$key];
82
+
83
+ $this->author_prefix = $author_prefix;
84
+ $this->id_base = $id_base;
85
+ $this->options_page = ''; // This will be set when the options is created
86
+ $this->plugin_basename = plugin_basename( $file );
87
+ $this->plugin_file = $file;
88
+ $this->plugin_path = plugins_url( '', $file );
89
+ $this->u_id_base = $u_id_base; // Underscored version of id_base
90
+ $this->version = $version;
91
+
92
+ add_action( 'init', array( &$this, 'init' ) );
93
+ $plugin_file = implode( '/', array_slice( explode( '/', $this->plugin_basename ), -2 ) );
94
+ add_action( 'activate_' . $plugin_file, array( &$this, 'install' ) );
95
+ add_action( 'deactivate_' . $plugin_file, array( &$this, 'deactivate' ) );
96
+ register_uninstall_hook( $this->plugin_file, array( &$this, 'uninstall' ) );
97
+
98
+ add_action( 'admin_init', array( &$this, 'init_options' ) );
99
+
100
+ if ( basename( $pagenow, '.php' ) == $this->settings_page )
101
+ add_action( 'admin_head', array( &$this, 'add_c2c_admin_css' ) );
102
+ }
103
+
104
+ /**
105
+ * Handles installation tasks, such as ensuring plugin options are instantiated and saved to options table.
106
+ *
107
+ * This can be overridden.
108
+ *
109
+ * @return void
110
+ */
111
+ function install() {
112
+ $this->options = $this->get_options();
113
+ update_option( $this->admin_options_name, $this->options );
114
+ }
115
+
116
+ /**
117
+ * Handles uninstallation tasks, such as deleting plugin options.
118
+ *
119
+ * This can be overridden.
120
+ *
121
+ * @return void
122
+ */
123
+ function uninstall() {
124
+ delete_option( $this->admin_options_name );
125
+ }
126
+
127
+ /**
128
+ * Handles deactivation tasks
129
+ *
130
+ * This should be overridden.
131
+ *
132
+ * @return void
133
+ */
134
+ function deactivate() { }
135
+
136
+ /**
137
+ * Handles actions to be hooked to 'init' action, such as loading text domain and loading plugin config data array.
138
+ *
139
+ * @return void
140
+ */
141
+ function init() {
142
+ global $c2c_plugin_max_css_version;
143
+ if ( !isset( $c2c_plugin_max_css_version ) || ( $c2c_plugin_max_css_version < $this->plugin_css_version ) )
144
+ $c2c_plugin_max_css_version = $this->plugin_css_version;
145
+ $this->load_textdomain();
146
+ $this->load_config();
147
+ $this->verify_config();
148
+
149
+ if ( $this->disable_update_check )
150
+ add_filter( 'http_request_args', array( &$this, 'disable_update_check' ), 5, 2 );
151
+
152
+ if ( $this->show_admin && $this->settings_page && !empty( $this->config ) && current_user_can( 'manage_options' ) ) {
153
+ add_action( 'admin_menu', array( &$this, 'admin_menu' ) );
154
+ if ( !$this->disable_contextual_help ) {
155
+ add_action( 'contextual_help', array( &$this, 'contextual_help' ), 10, 3 );
156
+ if ( $this->is_plugin_admin_page() )
157
+ add_thickbox();
158
+ }
159
+ }
160
+
161
+ $this->register_filters();
162
+ }
163
+
164
+ /**
165
+ * Prevents this plugin from being included when WordPress phones home
166
+ * to check for plugin updates.
167
+ *
168
+ * @param array $r Response array
169
+ * @param string $url URL for the update check
170
+ * @return array The response array with this plugin removed, if present
171
+ */
172
+ function disable_update_check( $r, $url ) {
173
+ if ( 0 !== strpos( $url, 'http://api.wordpress.org/plugins/update-check' ) )
174
+ return $r; // Not a plugin update request. Bail immediately.
175
+ $plugins = unserialize( $r['body']['plugins'] );
176
+ unset( $plugins->plugins[ plugin_basename( __FILE__ ) ] );
177
+ unset( $plugins->active[ array_search( plugin_basename( __FILE__ ), $plugins->active ) ] );
178
+ $r['body']['plugins'] = serialize( $plugins );
179
+ return $r;
180
+ }
181
+
182
+ /**
183
+ * Initializes options
184
+ *
185
+ * @return void
186
+ */
187
+ function init_options() {
188
+ register_setting( $this->admin_options_name, $this->admin_options_name, array( &$this, 'sanitize_inputs' ) );
189
+ add_settings_section( 'default', '', array( &$this, 'draw_default_section' ), $this->plugin_file );
190
+ add_filter( 'whitelist_options', array( &$this, 'whitelist_options' ) );
191
+ foreach ( $this->get_option_names( false ) as $opt )
192
+ add_settings_field( $opt, $this->get_option_label( $opt ), array( &$this, 'display_option' ), $this->plugin_file, 'default', $opt );
193
+ }
194
+
195
+ /**
196
+ * Whitelist the plugin's option(s)
197
+ *
198
+ * @param array $options Array of options
199
+ * @return array The whitelist-amended $options array
200
+ */
201
+ function whitelist_options( $options ) {
202
+ $added = array( $this->admin_options_name => array( $this->admin_options_name ) );
203
+ $options = add_option_whitelist( $added, $options );
204
+ return $options;
205
+ }
206
+
207
+ /**
208
+ * Special output for the default section. Can be overridden if desired.
209
+ *
210
+ * @return void
211
+ */
212
+ function draw_default_section() { }
213
+
214
+ /**
215
+ * Gets the label for a given option
216
+ *
217
+ * @param string $opt The option
218
+ * @return string The label for the option
219
+ */
220
+ function get_option_label( $opt ) {
221
+ return isset( $this->config[$opt]['label'] ) ? $this->config[$opt]['label'] : '';
222
+ }
223
+
224
+ /**
225
+ * Resets plugin options
226
+ *
227
+ * @return array
228
+ */
229
+ function reset_options() {
230
+ $options = $this->get_options( false );
231
+ return $options;
232
+ }
233
+
234
+ /**
235
+ * Sanitize user inputs prior to saving
236
+ */
237
+ function sanitize_inputs( $inputs ) {
238
+ do_action( $this->get_hook( 'before_save_options' ), $this );
239
+ if ( isset( $_POST['Reset'] ) ) {
240
+ $options = $this->reset_options();
241
+ add_settings_error( 'general', 'settings_reset', __( 'Settings reset.', $this->textdomain ), 'updated' );
242
+ } else {
243
+ // Start with the existing options, then start overwriting their potential override value. (This prevents
244
+ // unscrupulous addition of fields by the user)
245
+ $options = $this->get_options();
246
+ $option_names = $this->get_option_names();
247
+ foreach ( $option_names as $opt ) {
248
+ if ( !isset( $inputs[$opt] ) ) {
249
+ if ( $this->config[$opt]['input'] == 'checkbox' )
250
+ $options[$opt] = '';
251
+ elseif ( ( $this->config[$opt]['required'] === true ) ) {
252
+ $msg = sprintf( __( 'A value is required for: "%s"', $this->textdomain ), $this->config[$opt]['label'] );
253
+ add_settings_error( 'general', 'setting_required', $msg, 'error' );
254
+ }
255
+ }
256
+ else {
257
+ $val = $inputs[$opt];
258
+ $error = false;
259
+ if ( empty( $val ) && ( $this->config[$opt]['required'] === true ) ) {
260
+ $msg = sprintf( __( 'A value is required for: "%s"', $this->textdomain ), $this->config[$opt]['label'] );
261
+ $error = true;
262
+ } else {
263
+ $input = $this->config[$opt]['input'];
264
+ switch ( $this->config[$opt]['datatype'] ) {
265
+ case 'checkbox':
266
+ break;
267
+ case 'int':
268
+ if ( !empty( $val ) && ( !is_numeric( $val ) || ( intval( $val ) != round( $val ) ) ) ) {
269
+ $msg = sprintf( __( 'Expected integer value for: %s', $this->textdomain ), $this->config[$opt]['label'] );
270
+ $error = true;
271
+ $val = '';
272
+ }
273
+ break;
274
+ case 'array':
275
+ if ( empty( $val ) )
276
+ $val = array();
277
+ elseif ( $input == 'text' )
278
+ $val = explode( ',', str_replace( array( ', ', ' ', ',' ), ',', $val ) );
279
+ else
280
+ $val = array_map( 'trim', explode( "\n", trim( $val ) ) );
281
+ break;
282
+ case 'hash':
283
+ if ( !empty( $val ) && $input != 'select' ) {
284
+ $new_values = array();
285
+ foreach ( explode( "\n", $val ) AS $line ) {
286
+ list( $shortcut, $text ) = array_map( 'trim', explode( "=>", $line, 2 ) );
287
+ if ( !empty( $shortcut ) )
288
+ $new_values[str_replace( '\\', '', $shortcut )] = str_replace( '\\', '', $text );
289
+ }
290
+ $val = $new_values;
291
+ }
292
+ break;
293
+ }
294
+ }
295
+ if ( $error )
296
+ add_settings_error( 'general', 'setting_not_int', $msg, 'error' );
297
+ $options[$opt] = $val;
298
+ }
299
+ }
300
+ $options = apply_filters( $this->get_hook( 'before_update_option' ), $options, $this );
301
+ }
302
+ return $options;
303
+ }
304
+
305
+ /**
306
+ * Initializes the plugin's configuration and localizable text variables.
307
+ *
308
+ * @return void
309
+ */
310
+ function load_config() {
311
+ die( 'Function load_config() must be overridden in sub-class.' );
312
+ }
313
+
314
+ /**
315
+ * Verify that the necessary configuration files were set in the inheriting class.
316
+ *
317
+ * @return void
318
+ */
319
+ function verify_config() {
320
+ // Ensure required configuration options have been configured via the sub-class. Die if any aren't.
321
+ foreach ( $this->required_config as $config ) {
322
+ if ( empty( $this->$config ) )
323
+ die( "The plugin configuration option '$config' must be supplied." );
324
+ }
325
+ // Set/change configuration options based on sub-class changes.
326
+ if ( empty( $this->config ) )
327
+ $this->show_admin = false;
328
+ else {
329
+ // Initialize any option attributes that weren't specified by the plugin
330
+ foreach ( $this->get_option_names( true ) as $opt ) {
331
+ foreach ( array( 'datatype', 'default', 'help', 'input', 'input_attributes', 'label', 'no_wrap', 'options', 'output' ) as $attrib ) {
332
+ if ( !isset( $this->config[$opt][$attrib] ) )
333
+ $this->config[$opt][$attrib] = '';
334
+ }
335
+ $this->config[$opt]['allow_html'] = false;
336
+ $this->config[$opt]['class'] = array();
337
+ }
338
+ }
339
+ }
340
+
341
+ /**
342
+ * Loads the localization textdomain for the plugin.
343
+ *
344
+ * @return void
345
+ */
346
+ function load_textdomain() {
347
+ $subdir = empty( $this->textdomain_subdir ) ? '' : '/'.$this->textdomain_subdir;
348
+ load_plugin_textdomain( $this->textdomain, false, basename( dirname( $this->plugin_file ) ) . $subdir );
349
+ }
350
+
351
+ /**
352
+ * Registers filters.
353
+ * NOTE: This occurs during the 'init' filter, so you can't use this to hook anything that happens earlier
354
+ *
355
+ * @return void
356
+ */
357
+ function register_filters() {
358
+ // This should be overridden in order to define filters.
359
+ }
360
+
361
+ /**
362
+ * Outputs simple contextual help text, comprising solely of a thickboxed link to the plugin's hosted readme.txt file.
363
+ *
364
+ * NOTE: If overriding this in a sub-class, before sure to include the
365
+ * check at the beginning of the function to ensure it shows up on its
366
+ * own settings admin page.
367
+ *
368
+ * @param string $contextual_help The default contextual help
369
+ * @param int $screen_id The screen ID
370
+ * @param object $screen The screen object (only supplied in WP 3.0)
371
+ * @return void (Text is echoed)
372
+ */
373
+ function contextual_help( $contextual_help, $screen_id, $screen = null ) {
374
+ if ( $screen_id != $this->options_page )
375
+ return $contextual_help;
376
+
377
+ $help_url = admin_url( "plugin-install.php?tab=plugin-information&amp;plugin={$this->id_base}&amp;TB_iframe=true&amp;width=640&amp;height=656" );
378
+
379
+ echo '<p class="more-help">';
380
+ echo '<a title="' . esc_attr( sprintf( __( 'More information about %1$s %2$s', $this->textdomain ), $this->name, $this->version ) ) .
381
+ '" class="thickbox" href="' . $help_url . '">' . __( 'Click for more help on this plugin', $this->textdomain ) . '</a>' .
382
+ __( ' (especially check out the "Other Notes" tab, if present)', $this->textdomain );
383
+ echo ".</p>\n";
384
+ return;
385
+ }
386
+
387
+ /**
388
+ * Outputs CSS into admin head of the plugin's settings page
389
+ *
390
+ * @return void
391
+ */
392
+ function add_c2c_admin_css() {
393
+ global $c2c_plugin_max_css_version, $c2c_plugin_css_was_output;
394
+ if ( ( $c2c_plugin_max_css_version != $this->plugin_css_version ) || ( isset( $c2c_plugin_css_was_output ) && $c2c_plugin_css_was_output ) )
395
+ return;
396
+ $c2c_plugin_css_was_output = true;
397
+ $logo = plugins_url( 'c2c_minilogo.png', $this->plugin_file );
398
+ /**
399
+ * Remember to increment the plugin_css_version variable if changing the CSS
400
+ */
401
+ echo <<<CSS
402
+ <style type="text/css">
403
+ .long-text {width:95% !important;}
404
+ #c2c {
405
+ text-align:center;
406
+ color:#888;
407
+ background-color:#ffffef;
408
+ padding:5px 0 0;
409
+ margin-top:12px;
410
+ border-style:solid;
411
+ border-color:#dadada;
412
+ border-width:1px 0;
413
+ }
414
+ #c2c div {
415
+ margin:0 auto;
416
+ padding:5px 40px 0 0;
417
+ width:45%;
418
+ min-height:40px;
419
+ background:url('$logo') no-repeat top right;
420
+ }
421
+ #c2c span {
422
+ display:block;
423
+ font-size:x-small;
424
+ }
425
+ .form-table {margin-bottom:20px;}
426
+ .c2c-plugin-list {margin-left:2em;}
427
+ .c2c-plugin-list li {list-style:disc outside;}
428
+ .wrap {margin-bottom:30px !important;}
429
+ .c2c-form input[type="checkbox"] {width:1.5em;}
430
+ .c2c-form .hr, .c2c-hr {border-bottom:1px solid #ccc;padding:0 2px;margin-bottom:6px;}
431
+ .c2c-input-help {color:#777;font-size:x-small;}
432
+ .c2c-fieldset {border:1px solid #ccc; padding:2px 8px;}
433
+ .c2c-textarea, .c2c-inline_textarea {width:95%;font-family:"Courier New", Courier, mono;}
434
+ .c2c-nowrap {
435
+ white-space:nowrap;overflow:scroll;overflow-y:hidden;overflow-x:scroll;overflow:-moz-scrollbars-horizontal
436
+ }
437
+ .see-help {font-size:x-small;font-style:italic;}
438
+ .more-help {display:block;margin-top:8px;}
439
+ </style>
440
+
441
+ CSS;
442
+ }
443
+
444
+ /**
445
+ * Registers the admin options page and the Settings link.
446
+ *
447
+ * @return void
448
+ */
449
+ function admin_menu() {
450
+ add_filter( 'plugin_action_links_' . $this->plugin_basename, array( &$this, 'plugin_action_links' ) );
451
+ switch ( $this->settings_page ) {
452
+ case 'options-general' :
453
+ $func_root = 'options';
454
+ break;
455
+ case 'themes' :
456
+ $func_root = 'theme';
457
+ break;
458
+ default :
459
+ $func_root = $this->settings_page;
460
+ }
461
+ $menu_func = 'add_' . $func_root . '_page';
462
+ if ( function_exists( $menu_func ) )
463
+ $this->options_page = call_user_func( $menu_func, $this->name, $this->menu_name, 'manage_options', $this->plugin_basename, array( &$this, 'options_page' ) );
464
+ }
465
+
466
+ /**
467
+ * Adds a 'Settings' link to the plugin action links.
468
+ *
469
+ * @param int $limit The default limit value for the current posts query.
470
+ * @return array Links associated with a plugin on the admin Plugins page
471
+ */
472
+ function plugin_action_links( $action_links ) {
473
+ $settings_link = '<a href="' . $this->settings_page . '.php?page='.$this->plugin_basename.'">' . __( 'Settings', $this->textdomain ) . '</a>';
474
+ array_unshift( $action_links, $settings_link );
475
+ return $action_links;
476
+ }
477
+
478
+ /**
479
+ * See if the setting is pertinent to this version of WP
480
+ *
481
+ * @since 013
482
+ *
483
+ * @param string $opt The option name
484
+ * @return bool If the option is valid for this version of WP
485
+ */
486
+ function is_option_valid( $opt ) {
487
+ global $wp_version;
488
+ $valid = true;
489
+ $ver_operators = array( 'wpgt' => '>', 'wpgte' => '>=', 'wplt' => '<', 'wplte' => '<=' );
490
+ foreach ( $ver_operators as $ver_check => $ver_op ) {
491
+ if ( isset( $this->config[$opt][$ver_check] )
492
+ && !empty( $this->config[$opt][$ver_check] )
493
+ && !version_compare( $wp_version, $this->config[$opt][$ver_check], $ver_op ) ) {
494
+ $valid = false;
495
+ break;
496
+ }
497
+ }
498
+ return $valid;
499
+ }
500
+
501
+ /**
502
+ * Returns the list of option names.
503
+ *
504
+ * @param bool $include_non_options (optional) Should non-options be included? Default is false.
505
+ * @return array Array of option names.
506
+ */
507
+ function get_option_names( $include_non_options = false ) {
508
+ if ( !$include_non_options && !empty( $this->option_names ) )
509
+ return $this->option_names;
510
+ if ( $include_non_options )
511
+ return array_keys( $this->config );
512
+ $this->option_names = array();
513
+ foreach ( array_keys( $this->config ) as $opt ) {
514
+ if ( isset( $this->config[$opt]['input'] ) && $this->config[$opt]['input'] != '' && $this->config[$opt]['input'] != 'none' && $this->is_option_valid( $opt ) )
515
+ $this->option_names[] = $opt;
516
+ }
517
+ return $this->option_names;
518
+ }
519
+
520
+ /**
521
+ * Returns either the buffered array of all options for the plugin, or
522
+ * obtains the options and buffers the value.
523
+ *
524
+ * @param bool $with_current_values (optional) Should the currently saved values be returned? If false, then the plugin's defaults are returned. Default is true.
525
+ * @return array The options array for the plugin (which is also stored in $this->options if !$with_options).
526
+ */
527
+ function get_options( $with_current_values = true ) {
528
+ if ( $with_current_values && !empty( $this->options ) )
529
+ return $this->options;
530
+ // Derive options from the config
531
+ $options = array();
532
+ $option_names = $this->get_option_names( !$with_current_values );
533
+ foreach ( $option_names as $opt )
534
+ $options[$opt] = $this->config[$opt]['default'];
535
+ if ( !$with_current_values )
536
+ return $options;
537
+ $this->options = wp_parse_args( get_option( $this->admin_options_name ), $options );
538
+ // Un-escape fields
539
+ foreach ( $option_names as $opt ) {
540
+ if ( $this->config[$opt]['allow_html'] == true ) {
541
+ if ( is_array( $this->options[$opt] ) ) {
542
+ foreach ( $this->options[$opt] as $key => $val ) {
543
+ $new_key = wp_specialchars_decode( $key, ENT_QUOTES );
544
+ $new_val = wp_specialchars_decode( $val, ENT_QUOTES );
545
+ $this->options[$opt][$new_key] = $new_val;
546
+ if ( $key != $new_key )
547
+ unset( $this->options[$opt][$key] );
548
+ }
549
+ } else {
550
+ $this->options[$opt] = wp_specialchars_decode( $this->options[$opt], ENT_QUOTES );
551
+ }
552
+ }
553
+ }
554
+ return apply_filters( $this->get_hook( 'options' ), $this->options );
555
+ }
556
+
557
+ /**
558
+ * Gets the name to use for a form's <input type="hidden" name="XXX" value="1" />
559
+ *
560
+ * @param string $prefix A prefix string, unique to the form
561
+ * @return string The name
562
+ */
563
+ function get_form_submit_name( $prefix ) {
564
+ return $prefix . '_' . $this->u_id_base;
565
+ }
566
+
567
+ /**
568
+ * Returns the URL for a plugin's form to use for its action attribute
569
+ *
570
+ * @return string The action URL
571
+ */
572
+ function form_action_url() {
573
+ return $_SERVER['PHP_SELF'] . '?page=' . $this->plugin_basename;
574
+ }
575
+
576
+ /**
577
+ * Checks if the plugin's settings page has been submitted.
578
+ *
579
+ * @param string $prefix The prefix for the form's unique submit hidden input field
580
+ * @return bool True if the plugin's settings have been submitted for saving, else false.
581
+ */
582
+ function is_submitting_form( $prefix ) {
583
+ return ( isset( $_POST['option_page'] ) && ( $_POST['option_page'] == $this->admin_options_name ) );
584
+ }
585
+
586
+ /**
587
+ * Checks if the current page is the plugin's settings page.
588
+ *
589
+ * @return bool True if on the plugin's settings page, else false.
590
+ */
591
+ function is_plugin_admin_page() {
592
+ global $pagenow;
593
+ return ( basename( $pagenow, '.php' ) == $this->settings_page && isset( $_REQUEST['page'] ) && $_REQUEST['page'] == $this->plugin_basename );
594
+ }
595
+
596
+ /**
597
+ * Outputs the markup for an option's form field (and surrounding markup)
598
+ *
599
+ * @param string $opt The name/key of the option.
600
+ * @return void
601
+ */
602
+ function display_option( $opt ) {
603
+ do_action( $this->get_hook( 'pre_display_option' ), $opt );
604
+
605
+ $options = $this->get_options();
606
+
607
+ foreach ( array( 'datatype', 'input' ) as $attrib )
608
+ $attrib = isset( $this->config[$opt][$attrib] ) ? $this->config[$opt][$attrib] : '';
609
+
610
+ if ( $input == '' || $input == 'none' )
611
+ return;
612
+ elseif ( $input == 'custom' ) {
613
+ do_action( $this->get_hook( 'custom_display_option' ), $opt );
614
+ return;
615
+ }
616
+ $value = isset( $options[$opt] ) ? $options[$opt] : '';
617
+ $popt = $this->admin_options_name . "[$opt]";
618
+ if ( $input == 'multiselect' ) {
619
+ // Do nothing since it needs the values as an array
620
+ $popt .= '[]';
621
+ } elseif ( $datatype == 'array' ) {
622
+ if ( !is_array( $value ) )
623
+ $value = '';
624
+ else {
625
+ if ( $input == 'textarea' || $input == 'inline_textarea' )
626
+ $value = implode( "\n", $value );
627
+ else
628
+ $value = implode( ', ', $value );
629
+ }
630
+ } elseif ( $datatype == 'hash' && $input != 'select' ) {
631
+ if ( !is_array( $value ) )
632
+ $value = '';
633
+ else {
634
+ $new_value = '';
635
+ foreach ( $value AS $shortcut => $replacement )
636
+ $new_value .= "$shortcut => $replacement\n";
637
+ $value = $new_value;
638
+ }
639
+ }
640
+ $attributes = $this->config[$opt]['input_attributes'];
641
+ $this->config[$opt]['class'][] = 'c2c-' . $input;
642
+ if ( ( 'textarea' == $input || 'inline_textarea' == $input ) && $this->config[$opt]['no_wrap'] ) {
643
+ $this->config[$opt]['class'][] = 'c2c-nowrap';
644
+ $attributes .= ' wrap="off"'; // Unfortunately CSS is not enough
645
+ }
646
+ elseif ( in_array( $input, array( 'text', 'long_text', 'short_text' ) ) ) {
647
+ $this->config[$opt]['class'][] = ( ( $input == 'short_text' ) ? 'small-text' : 'regular-text' );
648
+ if ( $input == 'long_text' )
649
+ $this->config[$opt]['class'][] = ' long-text';
650
+ }
651
+ $class = implode( ' ', $this->config[$opt]['class'] );
652
+ $attribs = "name='$popt' id='$opt' class='$class' $attributes";
653
+ if ( $input == '' ) {
654
+ // Change of implementation prevents this from being possible (since this function only gets called for registered settings)
655
+ // if ( !empty( $this->config[$opt]['output'] ) )
656
+ // echo $this->config[$opt]['output'] . "\n";
657
+ // else
658
+ // echo '<div class="hr">&nbsp;</div>' . "\n";
659
+ } elseif ( $input == 'textarea' || $input == 'inline_textarea' ) {
660
+ if ( $input == 'textarea' )
661
+ echo "</td><tr><td colspan='2'>";
662
+ echo "<textarea $attribs>$value</textarea>\n";
663
+ } elseif ( $input == 'select' ) {
664
+ echo "<select $attribs>";
665
+ if ( $this->config[$opt]['datatype'] == 'hash' ) {
666
+ foreach ( (array) $this->config[$opt]['options'] as $sopt => $sval )
667
+ echo "<option value='$sopt' " . selected( $value, $sopt, false ) . ">$sval</option>\n";
668
+ } else {
669
+ foreach ( (array) $this->config[$opt]['options'] as $sopt )
670
+ echo "<option value='$sopt' " . selected( $value, $sopt, false ) . ">$sopt</option>\n";
671
+ }
672
+ echo "</select>";
673
+ } elseif ( $input == 'multiselect' ) {
674
+ echo '<fieldset class="c2c-fieldset">' . "\n";
675
+ foreach ( (array) $this->config[$opt]['options'] as $sopt )
676
+ echo "<input type='checkbox' $attribs value='$sopt' " . checked( in_array( $sopt, $value ), true, false ) . ">$sopt</input><br />\n";
677
+ echo '</fieldset>';
678
+ } elseif ( $input == 'checkbox' ) {
679
+ echo "<input type='$input' $attribs value='1' " . checked( $value, 1, false ) . " />\n";
680
+ } else {
681
+ echo "<input type='text' $attribs value='" . esc_attr( $value ) . "' />\n";
682
+ }
683
+ if ( $help = apply_filters( $this->get_hook( 'option_help'), $this->config[$opt]['help'], $opt ) )
684
+ echo "<br /><span class='c2c-input-help'>$help</span>\n";
685
+
686
+ do_action( $this->get_hook( 'post_display_option' ), $opt );
687
+ }
688
+
689
+ /**
690
+ * Outputs the descriptive text (and h2 heading) for the options page.
691
+ *
692
+ * Intended to be overridden by sub-class.
693
+ *
694
+ * @param string $localized_heading_text (optional) Localized page heading text.
695
+ * @return void
696
+ */
697
+ function options_page_description( $localized_heading_text = '' ) {
698
+ if ( empty( $localized_heading_text ) )
699
+ $localized_heading_text = $this->name;
700
+ if ( $localized_heading_text )
701
+ echo '<h2>' . $localized_heading_text . "</h2>\n";
702
+ if ( !$this->disable_contextual_help )
703
+ echo '<p class="see-help">' . __( 'See the "Help" link to the top-right of the page for more help.', $this->textdomain ) . "</p>\n";
704
+ }
705
+
706
+ /**
707
+ * Outputs the options page for the plugin, and saves user updates to the
708
+ * options.
709
+ *
710
+ * @return void
711
+ */
712
+ function options_page() {
713
+ $options = $this->get_options();
714
+
715
+ if ( $this->saved_settings )
716
+ echo "<div id='message' class='updated fade'><p><strong>" . $this->saved_settings_msg . '</strong></p></div>';
717
+
718
+ $logo = plugins_url( basename( $_GET['page'], '.php' ) . '/c2c_minilogo.png' );
719
+
720
+ echo "<div class='wrap'>\n";
721
+ echo "<div class='icon32' style='width:44px;'><img src='$logo' alt='" . esc_attr__( 'A plugin by coffee2code', $this->textdomain ) . "' /><br /></div>\n";
722
+
723
+ $this->options_page_description();
724
+
725
+ do_action( $this->get_hook( 'before_settings_form' ), $this );
726
+
727
+ echo "<form action='options.php' method='post' class='c2c-form'>\n";
728
+
729
+ settings_fields( $this->admin_options_name );
730
+ do_settings_sections( $this->plugin_file );
731
+
732
+ echo '<input type="submit" name="Submit" class="button-primary" value="' . esc_attr__( 'Save Changes', $this->textdomain ) . '" />' . "\n";
733
+ echo '<input type="submit" name="Reset" class="button" value="' . esc_attr__( 'Reset Settings', $this->textdomain ) . '" />' . "\n";
734
+ echo '</form>' . "\n";
735
+
736
+ do_action( $this->get_hook( 'after_settings_form' ), $this );
737
+
738
+ echo '<div id="c2c" class="wrap"><div>' . "\n";
739
+ $c2c = '<a href="http://coffee2code.com" title="coffee2code.com">' . __( 'Scott Reilly, aka coffee2code', $this->textdomain ) . '</a>';
740
+ echo sprintf( __( 'This plugin brought to you by %s.', $this->textdomain ), $c2c );
741
+ echo '<span><a href="http://coffee2code.com/donate" title="' . esc_attr__( 'Please consider a donation', $this->textdomain ) . '">' .
742
+ __( 'Did you find this plugin useful?', $this->textdomain ) . '</a></span>';
743
+ echo '</div></div>' . "\n";
744
+ }
745
+
746
+ /**
747
+ * Returns the full plugin-specific name for a hook.
748
+ *
749
+ * @param string $hook The name of a hook, to be made plugin-specific.
750
+ * @return string The plugin-specific version of the hook name.
751
+ */
752
+ function get_hook( $hook ) {
753
+ return $this->hook_prefix . '_' . $hook;
754
+ }
755
+
756
+ /**
757
+ * Returns the URL for the plugin's readme.txt file on wordpress.org/extend/plugins
758
+ *
759
+ * @since 005
760
+ *
761
+ * @return string The URL
762
+ */
763
+ function readme_url() {
764
+ return 'http://wordpress.org/extend/plugins/' . $this->id_base . '/tags/' . $this->version . '/readme.txt';
765
+ }
766
+ } // end class
767
+
768
+ endif; // end if !class_exists()
769
+
770
+ ?>
configure-smtp.php CHANGED
@@ -1,57 +1,32 @@
1
<?php
2
/*
3
Plugin Name: Configure SMTP
4
- Version: 2.7
5
- Plugin URI: http://coffee2code.com/wp-plugins/configure-smtp
6
Author: Scott Reilly
7
Author URI: http://coffee2code.com
8
Description: Configure SMTP mailing in WordPress, including support for sending e-mail via SSL/TLS (such as GMail).
9
10
- This plugin is the renamed, rewritten, and updated version of the wpPHPMailer plugin.
11
12
- Use this plugin to customize the SMTP mailing system used by default by WordPress to handle *outgoing* e-mails.
13
- It offers you the ability to specify:
14
-
15
- * SMTP host name
16
- * SMTP port number
17
- * If SMTPAuth (authentication) should be used.
18
- * SMTP username
19
- * SMTP password
20
- * If the SMTP connection needs to occur over ssl or tls
21
-
22
- In addition, you can instead indicate that you wish to use GMail to handle outgoing e-mail, in which case the above
23
- settings are automatically configured to values appropriate for GMail, though you'll need to specify your GMail
24
- e-mail (included the "@gmail.com") and password.
25
-
26
- Regardless of whether SMTP is enabled or configured, the plugin provides you the ability to define the name and
27
- email of the 'From:' field for all outgoing e-mails.
28
-
29
- A simple test button is also available that allows you to send a test e-mail to yourself to check if sending
30
- e-mail has been properly configured for your blog.
31
-
32
- Compatible with WordPress 2.8+, 2.9+.
33
-
34
- =>> Read the accompanying readme.txt file for more information. Also, visit the plugin's homepage
35
- =>> for more information and the latest updates
36
-
37
- Installation:
38
-
39
- 1. Download the file http://coffee2code.com/wp-plugins/configure-smtp.zip and unzip it into your
40
- /wp-content/plugins/ directory (or install via the built-in WordPress plugin installer).
41
- 2. Activate the plugin through the 'Plugins' admin menu in WordPress.
42
- 3. Click the plugin's 'Settings' link next to its 'Deactivate' link (still on the Plugins page), or click on the
43
- Settings -> SMTP link, to go to the plugin's admin settings page. Optionally customize the settings (to configure it
44
- if the defaults aren't valid for your situation).
45
- 4. (optional) Use the built-in test to see if your blog can properly send out e-mails.
46
47
*/
48
49
/*
50
Copyright (c) 2004-2010 by Scott Reilly (aka coffee2code)
51
52
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
53
- files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,
54
- modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
55
Software is furnished to do so, subject to the following conditions:
56
57
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
@@ -62,85 +37,112 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRA
62
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
63
*/
64
65
- if ( !class_exists('ConfigureSMTP') ) :
66
67
- class ConfigureSMTP {
68
- var $admin_options_name = 'c2c_configure_smtp';
69
- var $nonce_field = 'update-configure_smtp';
70
- var $textdomain = 'configure-smtp';
71
- var $show_admin = true; // Change this to false if you don't want the plugin's admin page shown.
72
- var $plugin_name = '';
73
- var $short_name = '';
74
- var $plugin_basename = '';
75
- var $config = array();
76
var $gmail_config = array(
77
'host' => 'smtp.gmail.com',
78
'port' => '465',
79
'smtp_auth' => true,
80
'smtp_secure' => 'ssl'
81
);
82
- var $options = array(); // Don't use this directly
83
84
- function ConfigureSMTP() {
85
- global $pagenow;
86
- $this->plugin_name = __('Configure SMTP', $this->textdomain);
87
- $this->short_name = __('SMTP', $this->textdomain);
88
- $this->plugin_basename = plugin_basename(__FILE__);
89
$this->config = array(
90
- // input can be 'checkbox', 'short_text', 'text', 'textarea', 'inline_textarea', 'select', 'hidden', 'password', or 'none'
91
- // an input type of 'select' must then have an 'options' value (an array) specified
92
- // datatype can be 'array' or 'hash'
93
- // can also specify input_attributes
94
- 'use_gmail' => array('input' => 'checkbox', 'default' => false,
95
- 'label' => __('Send e-mail via GMail?', $this->textdomain),
96
- 'help' => __('Clicking this will override many of the settings defined below. You will need to input your GMail username and password below.', $this->textdomain),
97
- 'input_attributes' => 'onclick="return configure_gmail();"'),
98
- 'host' => array('input' => 'text', 'default' => 'localhost',
99
- 'label' => __('SMTP host', $this->textdomain),
100
- 'help' => __('If "localhost" doesn\'t work for you, check with your host for the SMTP hostname.', $this->textdomain)),
101
- 'port' => array('input' => 'short_text', 'default' => 25,
102
- 'label' => __('SMTP port', $this->textdomain),
103
- 'help' => __('This is generally 25.', $this->textdomain)),
104
- 'smtp_secure' => array('input' => 'select', 'default' => 'None',
105
- 'label' => __('Secure connection prefix', $this->textdomain),
106
- 'options' => array('', 'ssl', 'tls'),
107
- 'help' => __('Sets connection prefix for secure connections (prefix method must be supported by your PHP install and your SMTP host)', $this->textdomain)),
108
- 'smtp_auth' => array('input' => 'checkbox', 'default' => false,
109
- 'label' => __('Use SMTPAuth?', $this->textdomain),
110
- 'help' => __('If checked, you must provide the SMTP username and password below', $this->textdomain)),
111
- 'smtp_user' => array('input' => 'text', 'default' => '',
112
- 'label' => __('SMTP username', $this->textdomain),
113
- 'help' => ''),
114
- 'smtp_pass' => array('input' => 'password', 'default' => '',
115
- 'label' => __('SMTP password', $this->textdomain),
116
- 'help' => ''),
117
- 'wordwrap' => array('input' => 'short_text', 'default' => '',
118
- 'label' => __('Wordwrap length', $this->textdomain),
119
- 'help' => __('Sets word wrapping on the body of the message to a given number of characters.', $this->textdomain)),
120
- 'from_email' => array('input' => 'text', 'default' => '',
121
- 'label' => __('Sender e-mail', $this->textdomain),
122
- 'help' => __('Sets the From email address for all outgoing messages. Leave blank to use the WordPress default. This value will be used even if you don\'t enable SMTP. NOTE: This may not take effect depending on your mail server and settings, especially if using SMTPAuth (such as for GMail).', $this->textdomain)),
123
- 'from_name' => array('input' => 'text', 'default' => '',
124
- 'label' => __('Sender name', $this->textdomain),
125
- 'help' => __('Sets the From name for all outgoing messages. Leave blank to use the WordPress default. This value will be used even if you don\'t enable SMTP.', $this->textdomain))
126
);
127
128
- add_action('activate_' . str_replace(trailingslashit(WP_PLUGIN_DIR), '', __FILE__), array(&$this, 'install'));
129
if ( 'options-general.php' == $pagenow )
130
- add_action('admin_footer', array(&$this, 'add_js'));
131
- add_action('admin_menu', array(&$this, 'admin_menu'));
132
- add_action('phpmailer_init', array(&$this, 'phpmailer_init'));
133
- add_action('wp_mail_from', array(&$this, 'wp_mail_from'));
134
- add_action('wp_mail_from_name', array(&$this, 'wp_mail_from_name'));
135
}
136
137
- function install() {
138
- $this->options = $this->get_options();
139
- update_option($this->admin_options_name, $this->options);
140
}
141
142
function add_js() {
143
- $alert = __('Be sure to specify your GMail email address (with the @gmail.com) as the SMTP username, and your GMail password as the SMTP password.', $this->textdomain);
144
echo <<<JS
145
<script type="text/javascript">
146
function configure_gmail() {
@@ -161,21 +163,83 @@ class ConfigureSMTP {
161
JS;
162
}
163
164
- function admin_menu() {
165
- if ( $this->show_admin && current_user_can('manage_options') ) {
166
- add_filter( 'plugin_action_links_' . $this->plugin_basename, array(&$this, 'plugin_action_links') );
167
- add_options_page($this->plugin_name, $this->short_name, 'manage_options', $this->plugin_basename, array(&$this, 'options_page'));
168
}
169
}
170
171
- function plugin_action_links( $action_links ) {
172
- $settings_link = '<a href="options-general.php?page='.$this->plugin_basename.'">' . __('Settings', $this->textdomain) . '</a>';
173
- array_unshift( $action_links, $settings_link );
174
- return $action_links;
175
}
176
177
function phpmailer_init( $phpmailer ) {
178
$options = $this->get_options();
179
$phpmailer->IsSMTP();
180
$phpmailer->Host = $options['host'];
181
$phpmailer->Port = $options['port'] ? $options['port'] : 25;
@@ -188,9 +252,14 @@ JS;
188
$phpmailer->SMTPSecure = $options['smtp_secure'];
189
if ( $options['wordwrap'] > 0 )
190
$phpmailer->WordWrap = $options['wordwrap'];
191
- return $phpmailer;
192
}
193
194
function wp_mail_from( $from ) {
195
$options = $this->get_options();
196
if ( $options['from_email'] )
@@ -198,211 +267,23 @@ JS;
198
return $from;
199
}
200
201
function wp_mail_from_name( $from_name ) {
202
$options = $this->get_options();
203
if ( $options['from_name'] )
204
- $from_name = htmlspecialchars_decode($options['from_name']);
205
return $from_name;
206
}
207
208
- function get_options() {
209
- if ( !empty($this->options) ) return $this->options;
210
- // Derive options from the config
211
- $options = array();
212
- foreach (array_keys($this->config) as $opt) {
213
- $options[$opt] = $this->config[$opt]['default'];
214
- }
215
- $existing_options = get_option($this->admin_options_name);
216
- if ( !empty($existing_options) ) {
217
- foreach ($existing_options as $key => $value)
218
- $options[$key] = $value;
219
- }
220
- $this->options = $options;
221
- return $options;
222
- }
223
224
- function options_page() {
225
- $options = $this->get_options();
226
- // See if user has submitted form
227
- if ( isset($_POST['submitted']) ) {
228
- check_admin_referer($this->nonce_field);
229
-
230
- foreach (array_keys($options) AS $opt) {
231
- $options[$opt] = htmlspecialchars(stripslashes($_POST[$opt]));
232
- $input = $this->config[$opt]['input'];
233
- if ( ($input == 'checkbox') && !$options[$opt] )
234
- $options[$opt] = 0;
235
- if ( $this->config[$opt]['datatype'] == 'array' ) {
236
- if ( $input == 'text' )
237
- $options[$opt] = explode(',', str_replace(array(', ', ' ', ','), ',', $options[$opt]));
238
- else
239
- $options[$opt] = array_map('trim', explode("\n", trim($options[$opt])));
240
- }
241
- elseif ( $this->config[$opt]['datatype'] == 'hash' ) {
242
- if ( !empty($options[$opt]) ) {
243
- $new_values = array();
244
- foreach (explode("\n", $options[$opt]) AS $line) {
245
- list($shortcut, $text) = array_map('trim', explode("=>", $line, 2));
246
- if ( !empty($shortcut) ) $new_values[str_replace('\\', '', $shortcut)] = str_replace('\\', '', $text);
247
- }
248
- $options[$opt] = $new_values;
249
- }
250
- }
251
- }
252
- // If GMail is to be used, those settings take precendence
253
- if ( $options['use_gmail'] )
254
- $options = wp_parse_args($this->gmail_config, $options);
255
-
256
- // Remember to put all the other options into the array or they'll get lost!
257
- update_option($this->admin_options_name, $options);
258
- $this->options = $options;
259
- echo "<div id='message' class='updated fade'><p><strong>" . __('Settings saved', $this->textdomain) . '</strong></p></div>';
260
- }
261
- elseif ( isset($_POST['submit_test_email']) ) {
262
- check_admin_referer($this->nonce_field);
263
- $user = wp_get_current_user();
264
- $email = $user->user_email;
265
- $timestamp = current_time('mysql');
266
-
267
- $message = sprintf(__('Hi, this is the %s plugin e-mailing you a test message from your WordPress blog.', $this->textdomain), $this->plugin_name);
268
- $message .= "\n\n";
269
- $message .= sprintf(__('This message was sent with this time-stamp: %s', $this->textdomain), $timestamp);
270
- $message .= "\n\n";
271
- $message .= __('Congratulations! Your blog is properly configured to send e-mail.', $this->textdomain);
272
- wp_mail($email, __('Test message from your WordPress blog', $this->textdomain), $message);
273
- echo '<div class="updated"><p>' . __('Test e-mail sent.', $this->textdomain) . '</p>';
274
- echo '<p>' . sprintf(__('The body of the e-mail includes this time-stamp: %s.', $this->textdomain), $timestamp) . '</p></div>';
275
- }
276
-
277
- $action_url = $_SERVER['PHP_SELF'] . '?page=' . $this->plugin_basename;
278
- $logo = plugins_url(basename($_GET['page'], '.php') . '/c2c_minilogo.png');
279
-
280
- echo "<div class='wrap'><div class='icon32' style='width:44px;'><img src='$logo' alt='" . esc_attr__('A plugin by coffee2code', $this->textdomain) . "' /><br /></div>";
281
- echo '<h2>' . __('Configure SMTP Settings', $this->textdomain) . '</h2>';
282
- $str = '<a href="#test">' . __('test', $this->textdomain) . '</a>';
283
- echo '<p>' . sprintf(__('After you\'ve configured your SMTP settings, use the %s to send a test message to yourself.', $this->textdomain), $str) . '</p>';
284
- echo "<form name='configure_smtp' action='$action_url' method='post'>";
285
- wp_nonce_field($this->nonce_field);
286
- echo '<table width="100%" cellspacing="2" cellpadding="5" class="optiontable editform form-table">';
287
- foreach (array_keys($options) as $opt) {
288
- $input = $this->config[$opt]['input'];
289
- if ($input == 'none') continue;
290
- $label = $this->config[$opt]['label'];
291
- $value = $options[$opt];
292
- if ($input == 'checkbox') {
293
- $checked = ($value == 1) ? 'checked=checked ' : '';
294
- $value = 1;
295
- } else {
296
- $checked = '';
297
- };
298
- if ($this->config[$opt]['datatype'] == 'array') {
299
- if ($input == 'textarea' || $input == 'inline_textarea')
300
- $value = implode("\n", $value);
301
- else
302
- $value = implode(', ', $value);
303
- } elseif ($this->config[$opt]['datatype'] == 'hash') {
304
- $new_value = '';
305
- foreach ($value AS $shortcut => $replacement) {
306
- $new_value .= "$shortcut => $replacement\n";
307
- }
308
- $value = $new_value;
309
- }
310
- echo "<tr valign='top'>";
311
- if ($input == 'textarea') {
312
- echo "<td colspan='2'>";
313
- if ($label) echo "<strong>$label</strong><br />";
314
- echo "<textarea name='$opt' id='$opt' {$this->config[$opt]['input_attributes']}>" . $value . '</textarea>';
315
- } else {
316
- echo "<th scope='row'>$label</th><td>";
317
- if ($input == "inline_textarea")
318
- echo "<textarea name='$opt' id='$opt' {$this->config[$opt]['input_attributes']}>" . $value . '</textarea>';
319
- elseif ($input == 'select') {
320
- echo "<select name='$opt' id='$opt'>";
321
- foreach ($this->config[$opt]['options'] as $sopt) {
322
- $selected = $value == $sopt ? " selected='selected'" : '';
323
- echo "<option value='$sopt'$selected>$sopt</option>";
324
- }
325
- echo "</select>";
326
- } else {
327
- $tclass = ($input == 'short_text') ? 'small-text' : 'regular-text';
328
- if ($input == 'short_text') $input = 'text';
329
- echo "<input name='$opt' type='$input' id='$opt' value='$value' class='$tclass' $checked {$this->config[$opt]['input_attributes']} />";
330
- }
331
- }
332
- if ($this->config[$opt]['help']) {
333
- echo "<br /><span style='color:#777; font-size:x-small;'>";
334
- echo $this->config[$opt]['help'];
335
- echo "</span>";
336
- }
337
- echo "</td></tr>";
338
- }
339
- $txt = __('Save Changes', $this->textdomain);
340
- echo <<<END
341
- </table>
342
- <input type="hidden" name="submitted" value="1" />
343
- <div class="submit"><input type="submit" name="Submit" class="button-primary" value="{$txt}" /></div>
344
- </form>
345
- </div>
346
- END;
347
- echo <<<END
348
- <style type="text/css">
349
- #c2c {
350
- text-align:center;
351
- color:#888;
352
- background-color:#ffffef;
353
- padding:5px 0 0;
354
- margin-top:12px;
355
- border-style:solid;
356
- border-color:#dadada;
357
- border-width:1px 0;
358
- }
359
- #c2c div {
360
- margin:0 auto;
361
- padding:5px 40px 0 0;
362
- width:45%;
363
- min-height:40px;
364
- background:url('$logo') no-repeat top right;
365
- }
366
- #c2c span {
367
- display:block;
368
- font-size:x-small;
369
- }
370
- </style>
371
- <div id='c2c' class='wrap'>
372
- <div>
373
- END;
374
- $c2c = '<a href="http://coffee2code.com" title="coffee2code.com">' . __('Scott Reilly, aka coffee2code', $this->textdomain) . '</a>';
375
- echo sprintf(__('This plugin brought to you by %s.', $this->textdomain), $c2c);
376
- echo '<span><a href="http://coffee2code.com/donate" title="' . esc_attr__('Please consider a donation', $this->textdomain) . '">' .
377
- __('Did you find this plugin useful?', $this->textdomain) . '</a></span>';
378
- echo '</div></div>';
379
-
380
- $user = wp_get_current_user();
381
- $email = $user->user_email;
382
- echo '<div class="wrap"><h2><a name="test"></a>' . __('Send A Test', $this->textdomain) . "</h2>\n";
383
- echo '<p>' . __('Click the button below to send a test email to yourself to see if things are working. Be sure to save any changes you made to the form above before sending the test e-mail. Bear in mind it may take a few minutes for the e-mail to wind its way through the internet.', $this->textdomain) . "</p>\n";
384
- echo '<p>' . sprintf(__('This e-mail will be sent to your e-mail address, %s.', $this->textdomain), $email) . "</p>\n";
385
- echo "<form name='configure_smtp' action='$action_url' method='post'>\n";
386
- wp_nonce_field($this->nonce_field);
387
- echo '<input type="hidden" name="submit_test_email" value="1" />';
388
- echo '<div class="submit"><input type="submit" name="Submit" value="' . esc_attr__('Send test e-mail', $this->textdomain) . '" /></div>';
389
- echo '</form></div>';
390
- }
391
-
392
- } // end ConfigureSMTP
393
394
endif; // end if !class_exists()
395
396
- // This function was introduced in PHP5. Backcomp via http://php.net/manual/en/function.htmlspecialchars-decode.php
397
- if ( !function_exists('htmlspecialchars_decode') ) {
398
- function htmlspecialchars_decode( $string, $quote_style = ENT_COMPAT ) {
399
- $translation = array_flip(get_html_translation_table(HTML_SPECIALCHARS, $quote_style));
400
- if ( $quote_style === ENT_QUOTES ) { $translation['&#039;'] = '\''; }
401
- return strtr($string, $translation);
402
- }
403
- }
404
-
405
- if ( class_exists('ConfigureSMTP') )
406
- new ConfigureSMTP();
407
-
408
?>
1
<?php
2
+ /**
3
+ * @package Configure_SMTP
4
+ * @author Scott Reilly
5
+ * @version 3.0
6
+ */
7
/*
8
Plugin Name: Configure SMTP
9
+ Version: 3.0
10
+ Plugin URI: http://coffee2code.com/wp-plugins/configure-smtp/
11
Author: Scott Reilly
12
Author URI: http://coffee2code.com
13
+ Text Domain: configure-smtp
14
Description: Configure SMTP mailing in WordPress, including support for sending e-mail via SSL/TLS (such as GMail).
15
16
+ Compatible with WordPress 2.8+, 2.9+, 3.0+.
17
18
+ =>> Read the accompanying readme.txt file for instructions and documentation.
19
+ =>> Also, visit the plugin's homepage for additional information and updates.
20
+ =>> Or visit: http://wordpress.org/extend/plugins/configure-smtp/
21
22
*/
23
24
/*
25
Copyright (c) 2004-2010 by Scott Reilly (aka coffee2code)
26
27
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
28
+ files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,
29
+ modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
30
Software is furnished to do so, subject to the following conditions:
31
32
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
37
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
38
*/
39
40
+ if ( !class_exists( 'c2c_ConfigureSMTP' ) ) :
41
+
42
+ require_once( 'c2c-plugin.php' );
43
+
44
+ class c2c_ConfigureSMTP extends C2C_Plugin_016 {
45
46
var $gmail_config = array(
47
'host' => 'smtp.gmail.com',
48
'port' => '465',
49
'smtp_auth' => true,
50
'smtp_secure' => 'ssl'
51
);
52
53
+ /**
54
+ * Constructor
55
+ *
56
+ * @return void
57
+ */
58
+ function c2c_ConfigureSMTP() {
59
+ $this->C2C_Plugin_016( '3.0', 'configure-smtp', 'c2c', __FILE__, array() );
60
+ }
61
+
62
+ /**
63
+ * Initializes the plugin's configuration and localizable text variables.
64
+ *
65
+ * @return void
66
+ */
67
+ function load_config() {
68
+ $this->name = __( 'Configure SMTP', $this->textdomain );
69
+ $this->menu_name = __( 'SMTP', $this->textdomain );
70
+
71
$this->config = array(
72
+ 'use_gmail' => array( 'input' => 'checkbox', 'default' => false,
73
+ 'label' => __( 'Send e-mail via GMail?', $this->textdomain ),
74
+ 'help' => __( 'Clicking this will override many of the settings defined below. You will need to input your GMail username and password below.', $this->textdomain ),
75
+ 'input_attributes' => 'onclick="return configure_gmail();"' ),
76
+ 'host' => array( 'input' => 'text', 'default' => 'localhost', 'require' => true,
77
+ 'label' => __( 'SMTP host', $this->textdomain ),
78
+ 'help' => __( 'If "localhost" doesn\'t work for you, check with your host for the SMTP hostname.', $this->textdomain ) ),
79
+ 'port' => array( 'input' => 'short_text', 'default' => 25, 'datatype' => 'int', 'required' => true,
80
+ 'label' => __( 'SMTP port', $this->textdomain ),
81
+ 'help' => __( 'This is generally 25.', $this->textdomain ) ),
82
+ 'smtp_secure' => array( 'input' => 'select', 'default' => 'None',
83
+ 'label' => __( 'Secure connection prefix', $this->textdomain ),
84
+ 'options' => array( '', 'ssl', 'tls' ),
85
+ 'help' => __( 'Sets connection prefix for secure connections (prefix method must be supported by your PHP install and your SMTP host)', $this->textdomain ) ),
86
+ 'smtp_auth' => array( 'input' => 'checkbox', 'default' => false,
87
+ 'label' => __( 'Use SMTPAuth?', $this->textdomain ),
88
+ 'help' => __( 'If checked, you must provide the SMTP username and password below', $this->textdomain ) ),
89
+ 'smtp_user' => array( 'input' => 'text', 'default' => '',
90
+ 'label' => __( 'SMTP username', $this->textdomain ),
91
+ 'help' => '' ),
92
+ 'smtp_pass' => array( 'input' => 'password', 'default' => '',
93
+ 'label' => __( 'SMTP password', $this->textdomain ),
94
+ 'help' => '' ),
95
+ 'wordwrap' => array( 'input' => 'short_text', 'default' => '',
96
+ 'label' => __( 'Wordwrap length', $this->textdomain ),
97
+ 'help' => __( 'Sets word wrapping on the body of the message to a given number of characters.', $this->textdomain ) ),
98
+ 'hr' => array(),
99
+ 'from_email' => array( 'input' => 'text', 'default' => '',
100
+ 'label' => __( 'Sender e-mail', $this->textdomain ),
101
+ 'help' => __( 'Sets the From e-mail address for all outgoing messages. Leave blank to use the WordPress default. This value will be used even if you don\'t enable SMTP. NOTE: This may not take effect depending on your mail server and settings, especially if using SMTPAuth (such as for GMail).', $this->textdomain ) ),
102
+ 'from_name' => array( 'input' => 'text', 'default' => '',
103
+ 'label' => __( 'Sender name', $this->textdomain ),
104
+ 'help' => __( 'Sets the From name for all outgoing messages. Leave blank to use the WordPress default. This value will be used even if you don\'t enable SMTP.', $this->textdomain ) )
105
);
106
+ }
107
108
+ /**
109
+ * Override the plugin framework's register_filters() to actually actions against filters.
110
+ *
111
+ * @return void
112
+ */
113
+ function register_filters() {
114
+ global $pagenow;
115
if ( 'options-general.php' == $pagenow )
116
+ add_action( 'admin_print_footer_scripts', array( &$this, 'add_js' ) );
117
+ add_action( 'admin_init', array( &$this, 'maybe_send_test' ) );
118
+ add_action( 'phpmailer_init', array( &$this, 'phpmailer_init' ) );
119
+ add_action( 'wp_mail_from', array( &$this, 'wp_mail_from' ) );
120
+ add_action( 'wp_mail_from_name', array( &$this, 'wp_mail_from_name' ) );
121
+ add_action( $this->get_hook( 'after_settings_form' ), array( &$this, 'send_test_form' ) );
122
+ add_filter( $this->get_hook( 'before_update_option' ), array( &$this, 'maybe_gmail_override' ) );
123
}
124
125
+ /**
126
+ * Outputs the text above the setting form
127
+ *
128
+ * @return void (Text will be echoed.)
129
+ */
130
+ function options_page_description() {
131
+ $options = $this->get_options();
132
+ parent::options_page_description( __( 'Configure SMTP Settings', $this->textdomain ) );
133
+ $str = '<a href="#test">' . __( 'test', $this->textdomain ) . '</a>';
134
+ if ( empty( $options['host'] ) )
135
+ echo '<div class="error"><p>' . __( 'SMTP mailing is currently <strong>NOT ENABLED</strong> because no SMTP host has been specified.' ) . '</p></div>';
136
+ echo '<p>' . sprintf( __( 'After you have configured your SMTP settings, use the %s to send a test message to yourself.', $this->textdomain ), $str ) . '</p>';
137
}
138
139
+ /**
140
+ * Outputs JavaScript
141
+ *
142
+ * @return void (Text is echoed.)
143
+ */
144
function add_js() {
145
+ $alert = __( 'Be sure to specify your GMail email address (with the @gmail.com) as the SMTP username, and your GMail password as the SMTP password.', $this->textdomain );
146
echo <<<JS
147
<script type="text/javascript">
148
function configure_gmail() {
163
JS;
164
}
165
166
+ /**
167
+ * If the 'Use GMail' option is checked, the GMail settings will override whatever the user may have provided
168
+ *
169
+ * @param array $options The options array prior to saving
170
+ * @return array The options array with GMail settings taking precedence, if relevant
171
+ */
172
+ function maybe_gmail_override( $options ) {
173
+ // If GMail is to be used, those settings take precendence
174
+ if ( $options['use_gmail'] )
175
+ $options = wp_parse_args( $this->gmail_config, $options );
176
+ return $options;
177
+ }
178
+
179
+ /**
180
+ * Sends test e-mail if form was submitted requesting to do so.
181
+ *
182
+ */
183
+ function maybe_send_test() {
184
+ if ( isset( $_POST[$this->get_form_submit_name( 'submit_test_email' )] ) ) {
185
+ check_admin_referer( $this->nonce_field );
186
+ $user = wp_get_current_user();
187
+ $email = $user->user_email;
188
+ $timestamp = current_time( 'mysql' );
189
+ $message = sprintf( __( 'Hi, this is the %s plugin e-mailing you a test message from your WordPress blog.', $this->textdomain ), $this->name );
190
+ $message .= "\n\n";
191
+ $message .= sprintf( __( 'This message was sent with this time-stamp: %s', $this->textdomain ), $timestamp );
192
+ $message .= "\n\n";
193
+ $message .= __( 'Congratulations! Your blog is properly configured to send e-mail.', $this->textdomain );
194
+ wp_mail( $email, __( 'Test message from your WordPress blog', $this->textdomain ), $message );
195
+
196
+ // Check success
197
+ global $phpmailer;
198
+ if ( $phpmailer->ErrorInfo != "" ) {
199
+ echo '<div class="error"><p>' . __( 'An error was encountered while trying to send the test e-mail.' ) . '</p>';
200
+ echo '<blockquote style="font-weight:bold;">';
201
+ echo '<p>' . $phpmailer->ErrorInfo . '</p>';
202
+ echo '<p>' . $phpmailer->smtp->error['error'] . '<br />' . $phpmailer->smtp->error['errstr'] . '</p>';
203
+ echo '</blockquote>';
204
+ echo '</div>';
205
+ } else {
206
+ echo '<div class="updated"><p>' . __( 'Test e-mail sent.', $this->textdomain ) . '</p>';
207
+ echo '<p>' . sprintf( __( 'The body of the e-mail includes this time-stamp: %s.', $this->textdomain ), $timestamp ) . '</p></div>';
208
+ }
209
}
210
}
211
212
+ /*
213
+ * Outputs form to send test e-mail.
214
+ *
215
+ * @return void (Text will be echoed.)
216
+ */
217
+ function send_test_form() {
218
+ $user = wp_get_current_user();
219
+ $email = $user->user_email;
220
+ $action_url = $this->form_action_url();
221
+ echo '<div class="wrap"><h2><a name="test"></a>' . __( 'Send A Test', $this->textdomain ) . "</h2>\n";
222
+ echo '<p>' . __( 'Click the button below to send a test email to yourself to see if things are working. Be sure to save any changes you made to the form above before sending the test e-mail. Bear in mind it may take a few minutes for the e-mail to wind its way through the internet.', $this->textdomain ) . "</p>\n";
223
+ echo '<p>' . sprintf( __( 'This e-mail will be sent to your e-mail address, %s.', $this->textdomain ), $email ) . "</p>\n";
224
+ echo '<p><em>You must save any changes to the form above before attempting to send a test e-mail.</em></p>';
225
+ echo "<form name='configure_smtp' action='$action_url' method='post'>\n";
226
+ wp_nonce_field( $this->nonce_field );
227
+ echo '<input type="hidden" name="' . $this->get_form_submit_name( 'submit_test_email' ) .'" value="1" />';
228
+ echo '<div class="submit"><input type="submit" name="Submit" value="' . esc_attr__( 'Send test e-mail', $this->textdomain ) . '" /></div>';
229
+ echo '</form></div>';
230
}
231
232
+ /**
233
+ * Configures PHPMailer object during its initialization stage
234
+ *
235
+ * @param object $phpmailer PHPMailer object
236
+ * @return void
237
+ */
238
function phpmailer_init( $phpmailer ) {
239
$options = $this->get_options();
240
+ // Don't configure for SMTP if no host is provided.
241
+ if ( empty( $options['host'] ) )
242
+ return;
243
$phpmailer->IsSMTP();
244
$phpmailer->Host = $options['host'];
245
$phpmailer->Port = $options['port'] ? $options['port'] : 25;
252
$phpmailer->SMTPSecure = $options['smtp_secure'];
253
if ( $options['wordwrap'] > 0 )
254
$phpmailer->WordWrap = $options['wordwrap'];
255
}
256
257
+ /**
258
+ * Configures the "From:" e-mail address for outgoing e-mails
259
+ *
260
+ * @param string $from The "from" e-mail address used by WordPress by default
261
+ * @return string The potentially new "from" e-mail address, if overridden via the plugin's settings.
262
+ */
263
function wp_mail_from( $from ) {
264
$options = $this->get_options();
265
if ( $options['from_email'] )
267
return $from;
268
}
269
270
+ /**
271
+ * Configures the "From:" name for outgoing e-mails
272
+ *
273
+ * @param string $from The "from" name used by WordPress by default
274
+ * @return string The potentially new "from" name, if overridden via the plugin's settings.
275
+ */
276
function wp_mail_from_name( $from_name ) {
277
$options = $this->get_options();
278
if ( $options['from_name'] )
279
+ $from_name = wp_specialchars_decode( $options['from_name'], ENT_QUOTES );
280
return $from_name;
281
}
282
283
+ } // end c2c_ConfigureSMTP
284
285
+ $GLOBALS['c2c_configure_smtp'] = new c2c_ConfigureSMTP();
286
287
endif; // end if !class_exists()
288
289
?>
configure-smtp.pot CHANGED
@@ -1,188 +1,251 @@
1
- # Translation of the WordPress plugin Configure SMTP 2.7 by Scott Reilly.
2
- # Copyright (C) 2009 Scott Reilly
3
# This file is distributed under the same license as the Configure SMTP package.
4
- # FIRST AUTHOR <EMAIL@ADDRESS>, 2009.
5
#
6
#, fuzzy
7
msgid ""
8
msgstr ""
9
- "Project-Id-Version: Configure SMTP 2.7\n"
10
"Report-Msgid-Bugs-To: http://wordpress.org/tag/configure-smtp\n"
11
- "POT-Creation-Date: 2009-12-31 10:09-0600\n"
12
- "PO-Revision-Date: 2009-MO-DA HO:MI+ZONE\n"
13
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
"Language-Team: LANGUAGE <LL@li.org>\n"
15
"MIME-Version: 1.0\n"
16
"Content-Type: text/plain; charset=utf-8\n"
17
"Content-Transfer-Encoding: 8bit\n"
18
19
- #. #-#-#-#-# configure-smtp.pot (Configure SMTP 2.7) #-#-#-#-#
20
- #. Plugin Name of an extension
21
- #: configure-smtp.php:86
22
msgid "Configure SMTP"
23
msgstr ""
24
25
- #: configure-smtp.php:87
26
msgid "SMTP"
27
msgstr ""
28
29
- #: configure-smtp.php:95
30
msgid "Send e-mail via GMail?"
31
msgstr ""
32
33
- #: configure-smtp.php:96
34
msgid ""
35
"Clicking this will override many of the settings defined below. You will "
36
"need to input your GMail username and password below."
37
msgstr ""
38
39
- #: configure-smtp.php:99
40
msgid "SMTP host"
41
msgstr ""
42
43
- #: configure-smtp.php:100
44
msgid ""
45
"If \"localhost\" doesn't work for you, check with your host for the SMTP "
46
"hostname."
47
msgstr ""
48
49
- #: configure-smtp.php:102
50
msgid "SMTP port"
51
msgstr ""
52
53
- #: configure-smtp.php:103
54
msgid "This is generally 25."
55
msgstr ""
56
57
- #: configure-smtp.php:105
58
msgid "Secure connection prefix"
59
msgstr ""
60
61
- #: configure-smtp.php:107
62
msgid ""
63
"Sets connection prefix for secure connections (prefix method must be "
64
"supported by your PHP install and your SMTP host)"
65
msgstr ""
66
67
- #: configure-smtp.php:109
68
msgid "Use SMTPAuth?"
69
msgstr ""
70
71
- #: configure-smtp.php:110
72
msgid "If checked, you must provide the SMTP username and password below"
73
msgstr ""
74
75
- #: configure-smtp.php:112
76
msgid "SMTP username"
77
msgstr ""
78
79
- #: configure-smtp.php:115
80
msgid "SMTP password"
81
msgstr ""
82
83
- #: configure-smtp.php:118
84
msgid "Wordwrap length"
85
msgstr ""
86
87
- #: configure-smtp.php:119
88
msgid ""
89
"Sets word wrapping on the body of the message to a given number of "
90
"characters."
91
msgstr ""
92
93
- #: configure-smtp.php:121
94
msgid "Sender e-mail"
95
msgstr ""
96
97
- #: configure-smtp.php:122
98
msgid ""
99
- "Sets the From email address for all outgoing messages. Leave blank to use "
100
"the WordPress default. This value will be used even if you don't enable "
101
"SMTP. NOTE: This may not take effect depending on your mail server and "
102
"settings, especially if using SMTPAuth (such as for GMail)."
103
msgstr ""
104
105
- #: configure-smtp.php:124
106
msgid "Sender name"
107
msgstr ""
108
109
- #: configure-smtp.php:125
110
msgid ""
111
"Sets the From name for all outgoing messages. Leave blank to use the "
112
"WordPress default. This value will be used even if you don't enable SMTP."
113
msgstr ""
114
115
- #: configure-smtp.php:143
116
msgid ""
117
- "Be sure to specify your GMail email address (with the @gmail.com) as the "
118
- "SMTP username, and your GMail password as the SMTP password."
119
msgstr ""
120
121
- #: configure-smtp.php:172
122
- msgid "Settings"
123
msgstr ""
124
125
- #: configure-smtp.php:259
126
- msgid "Settings saved"
127
msgstr ""
128
129
- #: configure-smtp.php:267
130
#, php-format
131
msgid ""
132
"Hi, this is the %s plugin e-mailing you a test message from your WordPress "
133
"blog."
134
msgstr ""
135
136
- #: configure-smtp.php:269
137
#, php-format
138
msgid "This message was sent with this time-stamp: %s"
139
msgstr ""
140
141
- #: configure-smtp.php:271
142
msgid "Congratulations! Your blog is properly configured to send e-mail."
143
msgstr ""
144
145
- #: configure-smtp.php:272
146
msgid "Test message from your WordPress blog"
147
msgstr ""
148
149
- #: configure-smtp.php:273
150
- msgid "Test e-mail sent."
151
- msgstr ""
152
-
153
- #: configure-smtp.php:274
154
- #, php-format
155
- msgid "The body of the e-mail includes this time-stamp: %s."
156
- msgstr ""
157
-
158
- #: configure-smtp.php:280
159
- msgid "A plugin by coffee2code"
160
- msgstr ""
161
-
162
- #: configure-smtp.php:281
163
- msgid "Configure SMTP Settings"
164
msgstr ""
165
166
- #: configure-smtp.php:282
167
- msgid "test"
168
msgstr ""
169
170
- #: configure-smtp.php:283
171
#, php-format
172
- msgid ""
173
- "After you've configured your SMTP settings, use the %s to send a test "
174
- "message to yourself."
175
- msgstr ""
176
-
177
- #: configure-smtp.php:339
178
- msgid "Save Changes"
179
msgstr ""
180
181
- #: configure-smtp.php:382
182
msgid "Send A Test"
183
msgstr ""
184
185
- #: configure-smtp.php:383
186
msgid ""
187
"Click the button below to send a test email to yourself to see if things are "
188
"working. Be sure to save any changes you made to the form above before "
@@ -190,29 +253,29 @@ msgid ""
190
"mail to wind its way through the internet."
191
msgstr ""
192
193
- #: configure-smtp.php:384
194
#, php-format
195
msgid "This e-mail will be sent to your e-mail address, %s."
196
msgstr ""
197
198
- #: configure-smtp.php:388
199
msgid "Send test e-mail"
200
msgstr ""
201
202
- #. Plugin URI of an extension
203
- msgid "http://coffee2code.com/wp-plugins/configure-smtp"
204
msgstr ""
205
206
- #. Description of an extension
207
msgid ""
208
"Configure SMTP mailing in WordPress, including support for sending e-mail "
209
"via SSL/TLS (such as GMail)."
210
msgstr ""
211
212
- #. Author of an extension
213
msgid "Scott Reilly"
214
msgstr ""
215
216
- #. Author URI of an extension
217
msgid "http://coffee2code.com"
218
msgstr ""
1
+ # Translation of the WordPress plugin Configure SMTP 3.0 by Scott Reilly.
2
+ # Copyright (C) 2010 Scott Reilly
3
# This file is distributed under the same license as the Configure SMTP package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
5
#
6
#, fuzzy
7
msgid ""
8
msgstr ""
9
+ "Project-Id-Version: Configure SMTP 3.0\n"
10
"Report-Msgid-Bugs-To: http://wordpress.org/tag/configure-smtp\n"
11
+ "POT-Creation-Date: 2010-09-28 11:43-0400\n"
12
+ "PO-Revision-Date: 2010-MO-DA HO:MI+ZONE\n"
13
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
"Language-Team: LANGUAGE <LL@li.org>\n"
15
"MIME-Version: 1.0\n"
16
"Content-Type: text/plain; charset=utf-8\n"
17
"Content-Transfer-Encoding: 8bit\n"
18
19
+ #: c2c-plugin.php:59
20
+ #, php-format
21
+ msgid "Invalid file specified for C2C_Plugin: %s"
22
+ msgstr ""
23
+
24
+ #: c2c-plugin.php:241
25
+ msgid "Settings reset."
26
+ msgstr ""
27
+
28
+ #: c2c-plugin.php:252 c2c-plugin.php:260
29
+ #, php-format
30
+ msgid "A value is required for: \"%s\""
31
+ msgstr ""
32
+
33
+ #: c2c-plugin.php:269
34
+ #, php-format
35
+ msgid "Expected integer value for: %s"
36
+ msgstr ""
37
+
38
+ #: c2c-plugin.php:380
39
+ #, php-format
40
+ msgid "More information about %1$s %2$s"
41
+ msgstr ""
42
+
43
+ #: c2c-plugin.php:381
44
+ msgid "Click for more help on this plugin"
45
+ msgstr ""
46
+
47
+ #: c2c-plugin.php:382
48
+ msgid " (especially check out the \"Other Notes\" tab, if present)"
49
+ msgstr ""
50
+
51
+ #: c2c-plugin.php:473
52
+ msgid "Settings"
53
+ msgstr ""
54
+
55
+ #: c2c-plugin.php:703
56
+ msgid "See the \"Help\" link to the top-right of the page for more help."
57
+ msgstr ""
58
+
59
+ #: c2c-plugin.php:721
60
+ msgid "A plugin by coffee2code"
61
+ msgstr ""
62
+
63
+ #: c2c-plugin.php:732
64
+ msgid "Save Changes"
65
+ msgstr ""
66
+
67
+ #: c2c-plugin.php:733
68
+ msgid "Reset Settings"
69
+ msgstr ""
70
+
71
+ #: c2c-plugin.php:739
72
+ msgid "Scott Reilly, aka coffee2code"
73
+ msgstr ""
74
+
75
+ #: c2c-plugin.php:740
76
+ #, php-format
77
+ msgid "This plugin brought to you by %s."
78
+ msgstr ""
79
+
80
+ #: c2c-plugin.php:741
81
+ msgid "Please consider a donation"
82
+ msgstr ""
83
+
84
+ #: c2c-plugin.php:742
85
+ msgid "Did you find this plugin useful?"
86
+ msgstr ""
87
+
88
+ #. #-#-#-#-# configure-smtp.pot (Configure SMTP 3.0) #-#-#-#-#
89
+ #. Plugin Name of the plugin/theme
90
+ #: configure-smtp.php:68
91
msgid "Configure SMTP"
92
msgstr ""
93
94
+ #: configure-smtp.php:69
95
msgid "SMTP"
96
msgstr ""
97
98
+ #: configure-smtp.php:73
99
msgid "Send e-mail via GMail?"
100
msgstr ""
101
102
+ #: configure-smtp.php:74
103
msgid ""
104
"Clicking this will override many of the settings defined below. You will "
105
"need to input your GMail username and password below."
106
msgstr ""
107
108
+ #: configure-smtp.php:77
109
msgid "SMTP host"
110
msgstr ""
111
112
+ #: configure-smtp.php:78
113
msgid ""
114
"If \"localhost\" doesn't work for you, check with your host for the SMTP "
115
"hostname."
116
msgstr ""
117
118
+ #: configure-smtp.php:80
119
msgid "SMTP port"
120
msgstr ""
121
122
+ #: configure-smtp.php:81
123
msgid "This is generally 25."
124
msgstr ""
125
126
+ #: configure-smtp.php:83
127
msgid "Secure connection prefix"
128
msgstr ""
129
130
+ #: configure-smtp.php:85
131
msgid ""
132
"Sets connection prefix for secure connections (prefix method must be "
133
"supported by your PHP install and your SMTP host)"
134
msgstr ""
135
136
+ #: configure-smtp.php:87
137
msgid "Use SMTPAuth?"
138
msgstr ""
139
140
+ #: configure-smtp.php:88
141
msgid "If checked, you must provide the SMTP username and password below"
142
msgstr ""
143
144
+ #: configure-smtp.php:90
145
msgid "SMTP username"
146
msgstr ""
147
148
+ #: configure-smtp.php:93
149
msgid "SMTP password"
150
msgstr ""
151
152
+ #: configure-smtp.php:96
153
msgid "Wordwrap length"
154
msgstr ""
155
156
+ #: configure-smtp.php:97
157
msgid ""
158
"Sets word wrapping on the body of the message to a given number of "
159
"characters."
160
msgstr ""
161
162
+ #: configure-smtp.php:100
163
msgid "Sender e-mail"
164
msgstr ""
165
166
+ #: configure-smtp.php:101
167
msgid ""
168
+ "Sets the From e-mail address for all outgoing messages. Leave blank to use "
169
"the WordPress default. This value will be used even if you don't enable "
170
"SMTP. NOTE: This may not take effect depending on your mail server and "
171
"settings, especially if using SMTPAuth (such as for GMail)."
172
msgstr ""
173
174
+ #: configure-smtp.php:103
175
msgid "Sender name"
176
msgstr ""
177
178
+ #: configure-smtp.php:104
179
msgid ""
180
"Sets the From name for all outgoing messages. Leave blank to use the "
181
"WordPress default. This value will be used even if you don't enable SMTP."
182
msgstr ""
183
184
+ #: configure-smtp.php:132
185
+ msgid "Configure SMTP Settings"
186
+ msgstr ""
187
+
188
+ #: configure-smtp.php:133
189
+ msgid "test"
190
+ msgstr ""
191
+
192
+ #: configure-smtp.php:135
193
msgid ""
194
+ "SMTP mailing is currently <strong>NOT ENABLED</strong> because no SMTP host "
195
+ "has been specified."
196
msgstr ""
197
198
+ #: configure-smtp.php:136
199
+ #, php-format
200
+ msgid ""
201
+ "After you have configured your SMTP settings, use the %s to send a test "
202
+ "message to yourself."
203
msgstr ""
204
205
+ #: configure-smtp.php:145
206
+ msgid ""
207
+ "Be sure to specify your GMail email address (with the @gmail.com) as the "
208
+ "SMTP username, and your GMail password as the SMTP password."
209
msgstr ""
210
211
+ #: configure-smtp.php:189
212
#, php-format
213
msgid ""
214
"Hi, this is the %s plugin e-mailing you a test message from your WordPress "
215
"blog."
216
msgstr ""
217
218
+ #: configure-smtp.php:191
219
#, php-format
220
msgid "This message was sent with this time-stamp: %s"
221
msgstr ""
222
223
+ #: configure-smtp.php:193
224
msgid "Congratulations! Your blog is properly configured to send e-mail."
225
msgstr ""
226
227
+ #: configure-smtp.php:194
228
msgid "Test message from your WordPress blog"
229
msgstr ""
230
231
+ #: configure-smtp.php:199
232
+ msgid "An error was encountered while trying to send the test e-mail."
233
msgstr ""
234
235
+ #: configure-smtp.php:206
236
+ msgid "Test e-mail sent."
237
msgstr ""
238
239
+ #: configure-smtp.php:207
240
#, php-format
241
+ msgid "The body of the e-mail includes this time-stamp: %s."
242
msgstr ""
243
244
+ #: configure-smtp.php:221
245
msgid "Send A Test"
246
msgstr ""
247
248
+ #: configure-smtp.php:222
249
msgid ""
250
"Click the button below to send a test email to yourself to see if things are "
251
"working. Be sure to save any changes you made to the form above before "
253
"mail to wind its way through the internet."
254
msgstr ""
255
256
+ #: configure-smtp.php:223
257
#, php-format
258
msgid "This e-mail will be sent to your e-mail address, %s."
259
msgstr ""
260
261
+ #: configure-smtp.php:228
262
msgid "Send test e-mail"
263
msgstr ""
264
265
+ #. Plugin URI of the plugin/theme
266
+ msgid "http://coffee2code.com/wp-plugins/configure-smtp/"
267
msgstr ""
268
269
+ #. Description of the plugin/theme
270
msgid ""
271
"Configure SMTP mailing in WordPress, including support for sending e-mail "
272
"via SSL/TLS (such as GMail)."
273
msgstr ""
274
275
+ #. Author of the plugin/theme
276
msgid "Scott Reilly"
277
msgstr ""
278
279
+ #. Author URI of the plugin/theme
280
msgid "http://coffee2code.com"
281
msgstr ""
readme.txt CHANGED
@@ -3,12 +3,13 @@ Contributors: coffee2code
3
Donate link: http://coffee2code.com/donate
4
Tags: email, smtp, gmail, sendmail, wp_mail, phpmailer, outgoing mail, tls, ssl, security, privacy, wp-phpmailer, coffee2code
5
Requires at least: 2.8
6
- Tested up to: 2.9.1
7
- Stable tag: 2.7
8
- Version: 2.7
9
10
Configure SMTP mailing in WordPress, including support for sending e-mail via SSL/TLS (such as GMail).
11
12
== Description ==
13
14
Configure SMTP mailing in WordPress, including support for sending e-mail via SSL/TLS (such as GMail).
@@ -30,6 +31,7 @@ Regardless of whether SMTP is enabled, the plugin provides you the ability to de
30
31
A simple test button is also available that allows you to send a test e-mail to yourself to check if sending e-mail has been properly configured for your blog.
32
33
== Installation ==
34
35
1. Unzip `configure-smtp.zip` inside the `/wp-content/plugins/` directory (or install via the built-in WordPress plugin installer)
@@ -37,6 +39,7 @@ A simple test button is also available that allows you to send a test e-mail to
37
1. Click the plugin's `Settings` link next to its `Deactivate` link (still on the Plugins page), or click on the `Settings` -> `SMTP` link, to go to the plugin's admin settings page. Optionally customize the settings (to configure it if the defaults aren't valid for your situation).
38
1. (optional) Use the built-in test to see if your blog can properly send out e-mails.
39
40
== Frequently Asked Questions ==
41
42
= I am already able to receive e-mail sent by my blog, so would I have any use or need for this plugin? =
@@ -51,12 +54,37 @@ Check out the settings for your local e-mail program. More than likely that is
51
52
If your settings worked, you should receive the test e-mail at the e-mail address associated with your WordPress blog user account. That e-mail contains a time-stamp which was reported to you by the plugin when the e-mail was sent. If you are trying out various setting values, be sure to record what your settings were and what the time-stamp was when sending with those settings.
53
54
== Screenshots ==
55
56
1. A screenshot of the plugin's admin settings page.
57
58
== Changelog ==
59
60
= 2.7 =
61
* Fix to prevent HTML entities from appearing in the From name value in outgoing e-mails
62
* Added full support for localization
@@ -100,3 +128,8 @@ If your settings worked, you should receive the test e-mail at the e-mail addres
100
= pre-2.0 =
101
* Earlier versions of this plugin existed as my wpPHPMailer plugin, which due to the inclusion of PHPMailer within WordPress's core and necessary changes to the plugin warranted a rebranding/renaming.
102
3
Donate link: http://coffee2code.com/donate
4
Tags: email, smtp, gmail, sendmail, wp_mail, phpmailer, outgoing mail, tls, ssl, security, privacy, wp-phpmailer, coffee2code
5
Requires at least: 2.8
6
+ Tested up to: 3.0.1
7
+ Stable tag: 3.0
8
+ Version: 3.0
9
10
Configure SMTP mailing in WordPress, including support for sending e-mail via SSL/TLS (such as GMail).
11
12
+
13
== Description ==
14
15
Configure SMTP mailing in WordPress, including support for sending e-mail via SSL/TLS (such as GMail).
31
32
A simple test button is also available that allows you to send a test e-mail to yourself to check if sending e-mail has been properly configured for your blog.
33
34
+
35
== Installation ==
36
37
1. Unzip `configure-smtp.zip` inside the `/wp-content/plugins/` directory (or install via the built-in WordPress plugin installer)
39
1. Click the plugin's `Settings` link next to its `Deactivate` link (still on the Plugins page), or click on the `Settings` -> `SMTP` link, to go to the plugin's admin settings page. Optionally customize the settings (to configure it if the defaults aren't valid for your situation).
40
1. (optional) Use the built-in test to see if your blog can properly send out e-mails.
41
42
+
43
== Frequently Asked Questions ==
44
45
= I am already able to receive e-mail sent by my blog, so would I have any use or need for this plugin? =
54
55
If your settings worked, you should receive the test e-mail at the e-mail address associated with your WordPress blog user account. That e-mail contains a time-stamp which was reported to you by the plugin when the e-mail was sent. If you are trying out various setting values, be sure to record what your settings were and what the time-stamp was when sending with those settings.
56
57
+
58
== Screenshots ==
59
60
1. A screenshot of the plugin's admin settings page.
61
62
+
63
== Changelog ==
64
65
+ = 3.0 =
66
+ * Re-implementation by extending C2C_Plugin_016, which among other things adds support for:
67
+ * Reset of options to default values
68
+ * Better sanitization of input values
69
+ * Offload of core/basic functionality to generic plugin framework
70
+ * Additional hooks for various stages/places of plugin operation
71
+ * Easier localization support
72
+ * Add error checking and reporting when attempting to send test e-mail
73
+ * Don't configure the mailer to use SMTP if no host is provided
74
+ * Fix localization support
75
+ * Store plugin instance in global variable, $c2c_configure_smtp, to allow for external manipulation
76
+ * Rename class from 'ConfigureSMTP' to 'c2c_ConfigureSMTP'
77
+ * Remove docs from top of plugin file (all that and more are in readme.txt)
78
+ * Note compatibility with WP 3.0+
79
+ * Minor tweaks to code formatting (spacing)
80
+ * Add Upgrade Notice section to readme.txt
81
+ * Add PHPDoc documentation
82
+ * Add package info to top of file
83
+ * Update copyright date
84
+ * Remove trailing whitespace
85
+ * Update screenshot
86
+ * Update .pot file
87
+
88
= 2.7 =
89
* Fix to prevent HTML entities from appearing in the From name value in outgoing e-mails
90
* Added full support for localization
128
= pre-2.0 =
129
* Earlier versions of this plugin existed as my wpPHPMailer plugin, which due to the inclusion of PHPMailer within WordPress's core and necessary changes to the plugin warranted a rebranding/renaming.
130
131
+
132
+ == Upgrade Notice ==
133
+
134
+ = 3.0 =
135
+ Recommended update! This release includes a major re-implementation, bug fixes, localization support, and more.
screenshot-1.png CHANGED
Binary file