JezK
Edit File: class-email-service.php
<?php namespace HM\BackUpWordPress; /** * Email notifications for backups * * @extends Service */ class Email_Service extends Service { /** * Human readable name for this service * @var string */ public $name = 'Email'; /** * Output the email form field * * @access public */ public function field() { ?> <tr> <th scope="row"> <label for="<?php echo esc_attr( $this->get_field_name( 'email' ) ); ?>"><?php _e( 'Email notification', 'backupwordpress' ); ?></label> </th> <td> <input type="text" id="<?php echo esc_attr( $this->get_field_name( 'email' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'email' ) ); ?>" value="<?php echo esc_attr( $this->get_field_value( 'email' ) ); ?>" placeholder="name@youremail.com" /> <p class="description"><?php printf( __( 'Receive a notification email when a backup completes. If the backup is small enough (< %s), then it will be attached to the email. Separate multiple email addresses with a comma.', 'backupwordpress' ), '<code>' . size_format( get_max_attachment_size() ) . '</code>' ); ?></p> </td> </tr> <?php } /** * Not used as we only need a field * * @see field * @return string Empty string */ public function form() { return ''; } public static function constant() { ?> <tr<?php if ( defined( 'HMBKP_ATTACHMENT_MAX_FILESIZE' ) ) { ?> class="hmbkp_active"<?php } ?>> <td><code>HMBKP_ATTACHMENT_MAX_FILESIZE</code></td> <td> <?php if ( defined( 'HMBKP_ATTACHMENT_MAX_FILESIZE' ) ) { ?> <p><?php printf( __( 'You\'ve set it to: %s', 'backupwordpress' ), '<code>' . HMBKP_ATTACHMENT_MAX_FILESIZE . '</code>' ); ?></p> <?php } ?> <p><?php printf( __( 'The maximum filesize of your backup that will be attached to your notification emails . Defaults to %s.', 'backupwordpress' ), '<code>10MB</code>' ); ?> <?php _e( 'e.g.', 'backupwordpress' ); ?> <code>define( 'HMBKP_ATTACHMENT_MAX_FILESIZE', '25MB' );</code></p> </td> </tr> <?php } /** * The sentence fragment that is output as part of the schedule sentence * * @return string */ public function display() { if ( $emails = $this->get_email_address_array() ) { $email = '<code>' . implode( '</code>, <code>', array_map( 'esc_html', $emails ) ) . '</code>'; return sprintf( __( 'Send an email notification to %s', 'backupwordpress' ), $email ); } return ''; } /** * Used to determine if the service is in use or not */ public function is_service_active() { return (bool) $this->get_email_address_array(); } /** * Validate the email and return an error if validation fails * * @param array &$new_data Array of new data, passed by reference. * @param array $old_data The data we are replacing. * * @return array|null Null on success, array of errors if validation failed. */ public function update( &$new_data, $old_data ) { $errors = array(); if ( isset( $new_data['email'] ) ) { if ( ! empty( $new_data['email'] ) ) { foreach ( explode( ',', $new_data['email'] ) as $email ) { $email = trim( $email ); if ( ! is_email( $email ) ) { $errors['email'] = sprintf( __( '%s isn\'t a valid email', 'backupwordpress' ), $email ); } } } if ( ! empty( $errors['email'] ) ) { $new_data['email'] = ''; } return $errors; } } /** * Get an array or validated email address's * @return array An array of validated email address's */ private function get_email_address_array() { $emails = array_map( 'trim', explode( ',', $this->get_field_value( 'email' ) ) ); return array_filter( array_unique( $emails ), 'is_email' ); } /** * Fire the email notification on the hmbkp_backup_complete * * @see Backup::do_action * @param string $action The action received from the backup */ public function action( $action, Backup $backup ) { if ( 'hmbkp_backup_complete' === $action && $this->get_email_address_array() ) { $file = $backup->get_backup_filepath(); $sent = false; $download = add_query_arg( 'hmbkp_download', base64_encode( $file ), HMBKP_ADMIN_URL ); $domain = parse_url( home_url(), PHP_URL_HOST ) . parse_url( home_url(), PHP_URL_PATH ); $headers = 'From: BackUpWordPress <' . apply_filters( 'hmbkp_from_email', get_bloginfo( 'admin_email' ) ) . '>' . "\r\n"; // The backup failed, send a message saying as much if ( ! file_exists( $file ) && ( $errors = array_merge( $backup->get_errors(), $backup->get_warnings() ) ) ) { $error_message = ''; foreach ( $errors as $error_set ) { $error_message .= implode( "\n - ", $error_set ); } if ( $error_message ) { $error_message = ' - ' . $error_message; } $subject = sprintf( __( 'Backup of %s Failed', 'backupwordpress' ), $domain ); $message = sprintf( __( 'BackUpWordPress was unable to backup your site %1$s.', 'backupwordpress' ) . "\n\n" . __( 'Here are the errors that we\'ve encountered:', 'backupwordpress' ) . "\n\n" . '%2$s' . "\n\n" . __( 'If the errors above look like Martian, you can find further assistance on our %3$ssupport forums%4$s ', 'backupwordpress' ) . "\n\n" . __( "Kind Regards,\nThe Apologetic BackUpWordPress Backup Emailing Robot", 'backupwordpress' ), home_url(), $error_message, '<a href="http://wordpress.org/support/plugin/backupwordpress" title="support forums" target="_blank">', '</a>' ); wp_mail( $this->get_email_address_array(), $subject, $message, $headers ); return; } $subject = sprintf( __( 'Backup of %s', 'backupwordpress' ), $domain ); // If it's larger than the max attachment size limit assume it's not going to be able to send the backup if ( @filesize( $file ) < get_max_attachment_size() ) { $message = sprintf( __( 'BackUpWordPress has completed a backup of your site %1$s.', 'backupwordpress' ) . "\n\n" . __( 'The backup file should be attached to this email.', 'backupwordpress' ) . "\n\n" . __( 'You can download the backup file by clicking the link below:', 'backupwordpress' ) . "\n\n" . '%2$s' . "\n\n" . __( "Kind Regards,\nThe Happy BackUpWordPress Backup Emailing Robot", 'backupwordpress' ), home_url(), $download ); $sent = wp_mail( $this->get_email_address_array(), $subject, $message, $headers, $file ); } // If we didn't send the email above then send just the notification if ( ! $sent ) { $message = sprintf( __( 'BackUpWordPress has completed a backup of your site %1$s.', 'backupwordpress' ) . "\n\n" . __( 'Unfortunately, the backup file was too large to attach to this email.', 'backupwordpress' ) . "\n\n" . __( 'You can download the backup file by clicking the link below:', 'backupwordpress' ) . "\n\n" . '%2$s' . "\n\n" . __( "Kind Regards,\nThe Happy BackUpWordPress Backup Emailing Robot", 'backupwordpress' ), home_url(), $download ); wp_mail( $this->get_email_address_array(), $subject, $message, $headers ); } } } public static function intercom_data() { return array(); } public static function intercom_data_html() {} } // Register the service Services::register( __FILE__, 'HM\BackUpWordPress\Email_Service' );