git-svn-id: https://plugins.svn.wordpress.org/send-email-from-admin/trunk@1275705 b8457f37-d9ea-0310-8a92-e5e31aec5664
243 lines
8.9 KiB
PHP
243 lines
8.9 KiB
PHP
<?php
|
|
/*
|
|
Plugin Name: Send Email From Admin
|
|
Plugin URI:
|
|
Description: Easily send a simple custom email with an attachment from the WordPress administration screen. Tools -> Send Email.
|
|
Version: 0.9
|
|
Author: kojak711
|
|
Domain Path: /languages
|
|
Text Domain: sefa
|
|
|
|
Send Email From Admin is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
Send Email From Admin is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with Send Email From Admin. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
|
|
# Exit if accessed directly
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
define('SEFA_PLUGIN_DIR_URL', plugin_dir_url( __FILE__ ));
|
|
|
|
/**
|
|
* Add our sub menu in the Tools menu
|
|
*
|
|
* @since 0.9
|
|
*/
|
|
function sefa_plugin_admin_menu() {
|
|
add_submenu_page( 'tools.php', 'Send Email From Admin', 'Send Email', 'manage_options', 'sefa_email', 'sefa_plugin_main' );
|
|
}
|
|
add_action( 'admin_menu', 'sefa_plugin_admin_menu' );
|
|
|
|
/**
|
|
* Load our css and js.
|
|
*
|
|
* @since 0.9
|
|
*/
|
|
function sefa_plugin_init() {
|
|
wp_enqueue_style( 'sefa_admin_css', SEFA_PLUGIN_DIR_URL . '/css/sefa.css' );
|
|
wp_enqueue_script( 'sefa_admin_js', SEFA_PLUGIN_DIR_URL . '/js/sefa.js', array('jquery'));
|
|
}
|
|
add_action( 'admin_enqueue_scripts', 'sefa_plugin_init' );
|
|
|
|
/**
|
|
* Register our text domain.
|
|
*
|
|
* @since 0.9
|
|
*/
|
|
function sefa_plugin_load_textdomain() {
|
|
load_plugin_textdomain( 'sefa', false, plugin_basename( dirname( __FILE__ ) ) . '/languages' );
|
|
}
|
|
add_action('plugins_loaded', 'sefa_plugin_load_textdomain');
|
|
|
|
/**
|
|
* Our main function to display and
|
|
* process our form
|
|
* @since 0.9
|
|
*/
|
|
function sefa_plugin_main() {
|
|
// get site info to construct 'FROM' for email
|
|
$from_name = wp_specialchars_decode( get_option('blogname'), ENT_QUOTES );
|
|
$from_email = get_bloginfo('admin_email');
|
|
|
|
// initialize
|
|
$send_mail_message = false;
|
|
|
|
if ( !empty( $_POST ) && check_admin_referer( 'sefa_send_email', 'sefa-form-nonce' ) ) {
|
|
// handle attachment
|
|
$attachment_path = '';
|
|
if ( $_FILES ) {
|
|
if ( !function_exists( 'wp_handle_upload' ) ) {
|
|
require_once( ABSPATH . 'wp-admin/includes/file.php' );
|
|
}
|
|
$uploaded_file = $_FILES['attachment'];
|
|
$upload_overrides = array( 'test_form' => false );
|
|
$attachment = wp_handle_upload( $uploaded_file, $upload_overrides );
|
|
if ( $attachment && !isset( $attachment['error'] ) ) {
|
|
// file was successfully uploaded
|
|
$attachment_path = $attachment['file'];
|
|
} else {
|
|
// echo $attachment['error'];
|
|
}
|
|
}
|
|
|
|
// get the posted form values
|
|
$sefa_recipient_emails = isset( $_POST['sefa_recipient_emails'] ) ? trim($_POST['sefa_recipient_emails']) : '';
|
|
$sefa_subject = isset( $_POST['sefa_subject'] ) ? trim($_POST['sefa_subject']) : '';
|
|
$sefa_body = isset( $_POST['sefa_body'] ) ? nl2br($_POST['sefa_body']) : '';
|
|
$sefa_group_email = isset( $_POST['sefa_group_email'] ) ? trim($_POST['sefa_group_email']) : 'no';
|
|
$recipients = explode( ',',$sefa_recipient_emails );
|
|
|
|
// initialize some vars
|
|
$errors = array();
|
|
$valid_email = true;
|
|
|
|
// simple form validation
|
|
if ( empty( $sefa_recipient_emails ) ) {
|
|
$errors[] = __( "Please enter an email recipient in the To: field.", 'sefa' );
|
|
} else {
|
|
// Loop through each email and validate it
|
|
foreach( $recipients as $recipient ) {
|
|
if ( !filter_var( trim($recipient), FILTER_VALIDATE_EMAIL ) ) {
|
|
$valid_email = false;
|
|
break;
|
|
}
|
|
}
|
|
// create appropriate error msg
|
|
if ( !$valid_email ) {
|
|
$errors[] = _n( "The To: email address appears to be invalid.", "One of the To: email addresses appears to be invalid.", count($recipients), 'sefa' );
|
|
}
|
|
}
|
|
if ( empty($sefa_subject) ) $errors[] = __( "Please enter a Subject.", 'sefa' );
|
|
if ( empty($sefa_body) ) $errors[] = __( "Please enter a Message.", 'sefa' );
|
|
|
|
// send the email if no errors were found
|
|
if ( empty($errors) ) {
|
|
$headers[] = "Content-Type: text/html; charset=\"" . get_option('blog_charset') . "\"\n";
|
|
$headers[] = 'From: ' . $from_name . ' <' . $from_email . ">\r\n";
|
|
$attachments = $attachment_path;
|
|
|
|
if ( $sefa_group_email === 'yes' ) {
|
|
if ( wp_mail( $sefa_recipient_emails, $sefa_subject, $sefa_body, $headers, $attachments ) ) {
|
|
$send_mail_message = '<div class="updated">' . __( 'Your email has been successfully sent!', 'sefa' ) . '</div>';
|
|
} else {
|
|
$send_mail_message = '<div class="error">' . __( 'There was an error sending the email.', 'sefa' ) . '</div>';
|
|
}
|
|
} else {
|
|
foreach( $recipients as $recipient ) {
|
|
if ( wp_mail( $recipient, $sefa_subject, $sefa_body, $headers, $attachments ) ) {
|
|
$send_mail_message .= '<div class="updated">' . __( 'Your email has been successfully sent to ', 'sefa' ) . esc_html($recipient) . '!</div>';
|
|
} else {
|
|
$send_mail_message .= '<div class="error">' . __( 'There was an error sending the email to ', 'sefa' ) . esc_html($recipient) . '</div>';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
?>
|
|
<div id="sefa-wrapper">
|
|
<h1><?php _e( 'Send Email From Admin', 'sefa' ); ?></h1>
|
|
<?php // print_r($_POST); ?>
|
|
<form method="POST" id="sefa-form" enctype="multipart/form-data">
|
|
<?php wp_nonce_field( 'sefa_send_email', 'sefa-form-nonce' ); ?>
|
|
<table cellpadding="0" border="0" class="form-table">
|
|
<?php
|
|
if ( !empty($errors) || $send_mail_message ) {
|
|
echo '<tr><td colspan="2" id="sefa-messages">';
|
|
if ( !empty($errors) ) {
|
|
echo '<div class="error">';
|
|
foreach ($errors as $error) {
|
|
echo "$error<br />";
|
|
}
|
|
echo "</div>\n";
|
|
}
|
|
if ( $send_mail_message ) {
|
|
echo $send_mail_message;
|
|
}
|
|
echo "</td></tr>\n";
|
|
}
|
|
?>
|
|
<tr>
|
|
<td>From:</td>
|
|
<td><input type="text" disabled value="<?php echo "$from_name <$from_email>"; ?>"><div class="note"><?php _e( 'These can be changed in Settings->General.', 'sefa' ); ?></div></td>
|
|
</tr>
|
|
<tr>
|
|
<td>To:</td>
|
|
<td><input type="email" multiple id="sefa-recipient-emails" name="sefa_recipient_emails" value="<?php echo esc_attr( sefa_plugin_issetor($sefa_recipient_emails) ); ?>"><div class="note"><?php _e( 'To send to multiple recipeints, enter each email address seperated by a comma or choose from the user list below.', 'sefa' ); ?></div>
|
|
<select id="sefa-user-list">
|
|
<option value="">-- <?php _e( 'user list', 'sefa' ); ?> --</option>
|
|
<?php
|
|
$users = get_users( 'orderby=user_email' );
|
|
foreach ( $users as $user ) {
|
|
if ( $user->first_name && $user->last_name ) {
|
|
$user_fullname = ' (' . $user->first_name . ' ' . $user->last_name . ')';
|
|
} else {
|
|
$user_fullname = '';
|
|
}
|
|
echo '<option value="' . esc_html( $user->user_email ) . '">' . esc_html( $user->user_email ) . esc_html( $user_fullname) . '</option>';
|
|
};
|
|
?>
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td>
|
|
<input type="radio" class="radio" name="sefa_group_email" value="no" id="no" checked>
|
|
<label for="no"><?php _e( 'Send each recipient an individual email', 'sefa' ); ?></label>
|
|
|
|
<input type="radio" class="radio" name="sefa_group_email" value="yes" id="yes"<?php if ( isset($sefa_group_email) && $sefa_group_email === 'yes' ) echo ' checked'; ?>>
|
|
<label for="yes"><?php _e( 'Send a group email to all recipients', 'sefa' ); ?></label>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Subject:</td>
|
|
<td><input type="text" name="sefa_subject" value="<?php echo esc_attr( sefa_plugin_issetor($sefa_subject) );?>"></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Message:</td>
|
|
<td align="left">
|
|
<?php
|
|
$settings = array( "editor_height" => "200" );
|
|
wp_editor( sefa_plugin_issetor($sefa_body), "sefa_body", $settings );
|
|
?>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Attachment:</td>
|
|
<td><input type="file" name="attachment"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2" align="right">
|
|
<input type="submit" value="<?php _e( 'Send Message', 'sefa' ); ?>" name="submit" class="button button-primary">
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</form>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Helper function for form values
|
|
*
|
|
* @since 0.9
|
|
*
|
|
* @param string $var Var name to test isset
|
|
*
|
|
* @return string $var value if isset or ''
|
|
*/
|
|
function sefa_plugin_issetor(&$var) {
|
|
return isset($var) ? $var : '';
|
|
}
|