diff --git a/includes/admin/assets/css/um-admin-settings.css b/includes/admin/assets/css/um-admin-settings.css index f26d9a8a..113d921d 100644 --- a/includes/admin/assets/css/um-admin-settings.css +++ b/includes/admin/assets/css/um-admin-settings.css @@ -240,14 +240,6 @@ th.column-email.column-primary { } */ -.email_template_wrapper .reset_email_template { - display: none; -} - -.email_template_wrapper.in_theme .reset_email_template { - display: block; -} - .um_setting_ajax_button_response.complete { color:darkgreen; font-style: italic; diff --git a/includes/admin/assets/js/um-admin-settings.js b/includes/admin/assets/js/um-admin-settings.js index 654c92a9..27533528 100644 --- a/includes/admin/assets/js/um-admin-settings.js +++ b/includes/admin/assets/js/um-admin-settings.js @@ -1,42 +1,4 @@ jQuery( document ).ready( function() { - /** - * Email templates - */ - /*jQuery( 'body' ).on( 'click', '.copy_email_template', function() { - var obj = jQuery(this); - - jQuery.ajax({ - url: php_data.copy_email_template, - type: 'POST', - data: { email_key : obj.parents('.email_template_wrapper').data('key') }, - success: function(data){ - obj.parents('.email_template_wrapper').addClass('in_theme'); - }, - error: function(data){ - alert('Something went wrong'); - } - }); - });*/ - - jQuery( 'body' ).on( 'click', '.reset_email_template', function() { - var obj = jQuery(this); - - jQuery.ajax({ - url: php_data.delete_email_template, - type: 'POST', - data: { email_key : obj.parents('.email_template_wrapper').data('key') }, - success: function(data){ - obj.parents('.email_template_wrapper').removeClass('in_theme'); - }, - error: function(data){ - alert('Something went wrong'); - } - }); - }); - - - - /** * Licenses */ diff --git a/includes/admin/core/class-admin-enqueue.php b/includes/admin/core/class-admin-enqueue.php index f88469e7..b4ff56c6 100644 --- a/includes/admin/core/class-admin-enqueue.php +++ b/includes/admin/core/class-admin-enqueue.php @@ -156,7 +156,6 @@ if ( ! class_exists( 'um\admin\core\Admin_Enqueue' ) ) { wp_enqueue_script( 'um_admin_settings' ); $localize_data = array( - 'delete_email_template' => UM()->get_ajax_route( 'um\core\Mail', 'delete_email_template' ), 'onbeforeunload_text' => __( 'Are sure, maybe some settings not saved', 'ultimate-member' ), 'texts' => array( 'remove' => __( 'Remove', 'ultimate-member' ), diff --git a/includes/admin/core/class-admin-forms.php b/includes/admin/core/class-admin-forms.php index 6b6fb523..23765394 100644 --- a/includes/admin/core/class-admin-forms.php +++ b/includes/admin/core/class-admin-forms.php @@ -1040,11 +1040,6 @@ if ( ! class_exists( 'um\admin\core\Admin_Forms' ) ) { ob_start(); ?>
- - config()->email_notifications; - if ( empty( $email_key ) || empty( $emails[$email_key] ) ) + if ( empty( $email_key ) || empty( $emails[ $email_key ] ) ) { return $section; + } $in_theme = UM()->mail()->template_in_theme( $email_key ); @@ -1722,7 +1723,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) { array( 'id' => 'um_email_template', 'type' => 'hidden', - 'value' => $email_key, + 'value' => $email_key, ), array( 'id' => $email_key . '_on', @@ -2535,10 +2536,7 @@ Use Only Cookies: mail()->get_template_file( 'theme', $template ); - $in_theme = UM()->mail()->template_in_theme( $template ); - if ( ! $in_theme ) { - UM()->mail()->copy_email_template( $template ); - } + UM()->mail()->copy_email_template( $template ); $fp = fopen( $theme_template_path, "w" ); $result = fputs( $fp, $content ); diff --git a/includes/admin/core/packages/2.0-beta1/email_templates.php b/includes/admin/core/packages/2.0-beta1/email_templates.php index d30a3182..ba09c9d4 100644 --- a/includes/admin/core/packages/2.0-beta1/email_templates.php +++ b/includes/admin/core/packages/2.0-beta1/email_templates.php @@ -1,53 +1,241 @@ mail()->get_template_filename( $template_name ); + $ext = ! $html ? '.php' : '.html'; + + $blog_id = ''; + if ( ! $html ) { + $blog_id = UM()->mail()->get_blog_id(); + } + + // check if there is template at theme folder + $template = locate_template( array( + trailingslashit( 'ultimate-member/email' . $blog_id ) . $template_name_file . $ext + ) ); + // Return what we found. + return ! $template ? false : true; +} + + +/** + * Method returns expected path for template + * + * @access public + * @param string $location + * @param string $template_name + * @param bool $html + * @return string + */ +function um_upgrade20beta1_get_template_file( $location, $template_name, $html = false ) { + $template_path = ''; + $template_name_file = UM()->mail()->get_template_filename( $template_name ); + $ext = ! $html ? '.php' : '.html'; + switch( $location ) { + case 'theme': + + $blog_id = ''; + if ( ! $html ) { + $blog_id = UM()->mail()->get_blog_id(); + } + + $template_path = trailingslashit( get_stylesheet_directory() . '/ultimate-member/email' . $blog_id ). $template_name_file . $ext; + break; + case 'plugin': + $path = ! empty( UM()->mail()->path_by_slug[ $template_name ] ) ? UM()->mail()->path_by_slug[ $template_name ] : um_path . 'templates/email'; + $template_path = trailingslashit( $path ) . $template_name . $ext; + break; + } + return $template_path; +} + + +/** + * Ajax copy template to the theme + * + * @param string $template + * @return bool + */ +function um_upgrade20beta1_copy_email_template( $template ) { + $in_theme = um_upgrade20beta1_template_in_theme( $template ); + if ( $in_theme ) { + return false; + } + $plugin_template_path = um_upgrade20beta1_get_template_file( 'plugin', $template ); + $theme_template_path = um_upgrade20beta1_get_template_file( 'theme', $template ); + $temp_path = str_replace( trailingslashit( get_stylesheet_directory() ), '', $theme_template_path ); + $temp_path = str_replace( '/', DIRECTORY_SEPARATOR, $temp_path ); + $folders = explode( DIRECTORY_SEPARATOR, $temp_path ); + $folders = array_splice( $folders, 0, count( $folders ) - 1 ); + $cur_folder = ''; + $theme_dir = trailingslashit( get_stylesheet_directory() ); + foreach ( $folders as $folder ) { + $prev_dir = $cur_folder; + $cur_folder .= $folder . DIRECTORY_SEPARATOR; + if ( ! is_dir( $theme_dir . $cur_folder ) && wp_is_writable( $theme_dir . $prev_dir ) ) { + mkdir( $theme_dir . $cur_folder, 0777 ); + } + } + if ( file_exists( $plugin_template_path ) && copy( $plugin_template_path, $theme_template_path ) ) { + return true; + } else { + return false; + } +} + + +/** + * Insert email template content to file + * + * @param string $path Filepath + * @param string $content Email template content + */ +function um_upgrade20beta1_insert_content( $path, $content ) { + $fp = @fopen( $path, "w" ); + @fputs( $fp, $content ); + @fclose( $fp ); +} + + /** * Transferring email templates to new logic */ -$templates_in_theme = 0; +function um_upgrade20beta1_email_templates_process() { + $templates_in_theme = 0; + $emails = UM()->config()->email_notifications; + foreach ( $emails as $email_key => $value ) { + + $in_theme = um_upgrade20beta1_template_in_theme( $email_key, true ); + $theme_template_path = um_upgrade20beta1_get_template_file( 'theme', $email_key ); + + if ( ! $in_theme ) { + //there isn't HTML email template's file in theme, get from option + //this value is correct for each multisite's subsites + $setting_value = UM()->options()->get( $email_key ); + + $html_email = UM()->options()->get( 'email_html' ); + if ( $html_email ) { + + if ( ! um_upgrade20beta1_copy_email_template( $email_key ) ) { + + um_upgrade20beta1_insert_content( $theme_template_path, $setting_value ); + + } else { + + $templates_in_theme++; + + } + } else { + + um_upgrade20beta1_insert_content( $theme_template_path, $setting_value ); + + } + + } else { + //there is HTML email template in a theme's folder + $theme_template_path_html = um_upgrade20beta1_get_template_file( 'theme', $email_key, true ); + + $setting_value = preg_replace( '/<\/body>|<\/head>||<\/html>||/' , '', file_get_contents( $theme_template_path_html ) ); + + if ( file_exists( $theme_template_path_html ) ) { + + if ( copy( $theme_template_path_html, $theme_template_path ) ) { + + um_upgrade20beta1_insert_content( $theme_template_path, $setting_value ); + + $templates_in_theme++; + + } + + } + + } + } + + $email_html = ( $templates_in_theme > 0 ) ? true : false; + UM()->options()->update( 'email_html', $email_html ); +} + + +if ( is_multisite() ) { + $start_blog_id = get_current_blog_id(); + + $blog_ids = get_sites( array( + 'fields' => 'ids', + ) ); + + foreach ( $blog_ids as $blog_id ) { + switch_to_blog( $blog_id ); + um_upgrade20beta1_email_templates_process(); + } + + restore_current_blog(); +} else { + um_upgrade20beta1_email_templates_process(); +} + + +/** + * Transferring email templates to new logic + */ +/*$templates_in_theme = 0; $emails = UM()->config()->email_notifications; foreach ( $emails as $email_key => $value ) { - $in_theme = UM()->mail()->template_in_theme( $email_key, true ); - $theme_template_path = UM()->mail()->get_template_file( 'theme', $email_key ); + $in_theme = um_upgrade20beta1_template_in_theme( $email_key, true ); + $theme_template_path = um_upgrade20beta1_get_template_file( 'theme', $email_key ); if ( ! $in_theme ) { + //there isn't HTML email template's file in theme, get from option + //this value is correct for each multisite's subsites + $setting_value = UM()->options()->get( $email_key ); + $html_email = UM()->options()->get( 'email_html' ); - if ( $html_email ) { - if ( ! UM()->mail()->copy_email_template( $email_key ) ) { - $setting_value = UM()->options()->get( $email_key ); - $fp = fopen( $theme_template_path, "w" ); - $result = fputs( $fp, $setting_value ); - fclose( $fp ); + if ( ! um_upgrade20beta1_copy_email_template( $email_key ) ) { + + um_upgrade20beta1_insert_content( $theme_template_path, $setting_value ); + } else { + $templates_in_theme++; + } } else { - $setting_value = UM()->options()->get( $email_key ); - $fp = @fopen( $theme_template_path, "w" ); - $result = @fputs( $fp, $setting_value ); - fclose( $fp ); + um_upgrade20beta1_insert_content( $theme_template_path, $setting_value ); + } + } else { - $theme_template_path_html = UM()->mail()->get_template_file( 'theme', $email_key, true ); + //there is HTML email template in a theme's folder + $theme_template_path_html = um_upgrade20beta1_get_template_file( 'theme', $email_key, true ); $setting_value = preg_replace( '/<\/body>|<\/head>||<\/html>||/' , '', file_get_contents( $theme_template_path_html ) ); if ( file_exists( $theme_template_path_html ) ) { + if ( copy( $theme_template_path_html, $theme_template_path ) ) { - $fp = fopen( $theme_template_path, "w" ); - $result = fputs( $fp, $setting_value ); - fclose( $fp ); + + um_upgrade20beta1_insert_content( $theme_template_path, $setting_value ); $templates_in_theme++; + } + } + } } -if ( $templates_in_theme > 0 ) { - UM()->options()->update( 'email_html', true ); -} else { - UM()->options()->update( 'email_html', false ); -} \ No newline at end of file +$email_html = ( $templates_in_theme > 0 ) ? true : false; +UM()->options()->update( 'email_html', $email_html );*/ \ No newline at end of file diff --git a/includes/core/class-mail.php b/includes/core/class-mail.php index e355594e..a4e71542 100644 --- a/includes/core/class-mail.php +++ b/includes/core/class-mail.php @@ -36,6 +36,23 @@ if ( ! class_exists( 'um\core\Mail' ) ) { } + /** + * Mandrill compatibility + * + * @param $nl2br + * @param string $message + * @return bool + */ + function mandrill_nl2br( $nl2br, $message = '' ) { + // text emails + if ( ! UM()->options()->get( 'email_html' ) ) { + $nl2br = true; + } + + return $nl2br; + } + + /** * Init paths for email notifications */ @@ -66,72 +83,73 @@ if ( ! class_exists( 'um\core\Mail' ) ) { /** - * Mandrill compatibility + * Check blog ID on multisite, return '' if single site * - * @param $nl2br - * @param string $message - * @return bool + * @return string */ - function mandrill_nl2br( $nl2br, $message = '' ) { - // text emails - if ( ! UM()->options()->get( 'email_html' ) ) { - $nl2br = true; + function get_blog_id() { + $blog_id = ''; + if ( is_multisite() ) { + $blog_id = '/' . get_current_blog_id(); } - return $nl2br; + return $blog_id; } /** - * Send Email function + * Locate a template and return the path for inclusion. * - * @param string $email - * @param null $template - * @param array $args + * @access public + * @param string $template_name + * @return string */ - function send( $email, $template, $args = array() ) { + function locate_template( $template_name ) { + // check if there is template at theme folder + $blog_id = $this->get_blog_id(); - if ( ! is_email( $email ) ) return; - if ( UM()->options()->get( $template . '_on' ) != 1 ) return; + //get template file from current blog ID folder + $template = locate_template( array( + trailingslashit( 'ultimate-member/email' . $blog_id ) . $template_name . '.php' + ) ); - $this->attachments = null; - $this->headers = 'From: '. UM()->options()->get('mail_from') .' <'. UM()->options()->get('mail_from_addr') .'>' . "\r\n"; + //if there isn't template at theme folder for current blog ID get template file from theme folder + if ( is_multisite() && ! $template ) { + $template = locate_template( array( + trailingslashit( 'ultimate-member/email' ) . $template_name . '.php' + ) ); + } + //if there isn't template at theme folder get template file from plugin dir + if ( ! $template ) { + $path = ! empty( $this->path_by_slug[ $template_name ] ) ? $this->path_by_slug[ $template_name ] : um_path . 'templates/email'; + $template = trailingslashit( $path ) . $template_name . '.php'; + } + + // Return what we found. /** * UM hook * * @type filter - * @title um_email_send_subject - * @description Change email notification subject + * @title um_locate_email_template + * @description Change email notification template path * @input_vars - * [{"var":"$subject","type":"string","desc":"Subject"}, - * {"var":"$key","type":"string","desc":"Template Key"}] + * [{"var":"$template","type":"string","desc":"Template Path"}, + * {"var":"$template_name","type":"string","desc":"Template Name"}] * @change_log * ["Since: 2.0"] * @usage - * + * * @example * */ - $subject = apply_filters( 'um_email_send_subject', UM()->options()->get( $template . '_sub' ), $template ); - $this->subject = um_convert_tags( $subject , $args ); - - $this->message = $this->prepare_template( $template, $args ); - - if ( UM()->options()->get( 'email_html' ) ) { - $this->headers .= "Content-Type: text/html\r\n"; - } else { - $this->headers .= "Content-Type: text/plain\r\n"; - } - - // Send mail - wp_mail( $email, $this->subject, $this->message, $this->headers, $this->attachments ); + return apply_filters( 'um_locate_email_template', $template, $template_name ); } @@ -313,7 +331,7 @@ if ( ! class_exists( 'um\core\Mail' ) ) { > - get_email_template( $slug, $args ); ?> + get_email_template( $slug, $args ); ?> @@ -358,58 +376,55 @@ if ( ! class_exists( 'um\core\Mail' ) ) { /** - * Locate a template and return the path for inclusion. + * Send Email function * - * @access public - * @param string $template_name - * @return string + * @param string $email + * @param null $template + * @param array $args */ - function locate_template( $template_name ) { - // check if there is template at theme folder - $blog_id = $this->get_blog_id(); + function send( $email, $template, $args = array() ) { - //get template file from current blog ID folder - $template = locate_template( array( - trailingslashit( 'ultimate-member/email' . $blog_id ) . $template_name . '.php' - ) ); + if ( ! is_email( $email ) ) return; + if ( UM()->options()->get( $template . '_on' ) != 1 ) return; - //if there isn't template at theme folder for current blog ID get template file from theme folder - if ( is_multisite() && ! $template ) { - $template = locate_template( array( - trailingslashit( 'ultimate-member/email' ) . $template_name . '.php' - ) ); - } + $this->attachments = null; + $this->headers = 'From: '. UM()->options()->get('mail_from') .' <'. UM()->options()->get('mail_from_addr') .'>' . "\r\n"; - //if there isn't template at theme folder get template file from plugin dir - if ( ! $template ) { - $path = ! empty( $this->path_by_slug[ $template_name ] ) ? $this->path_by_slug[ $template_name ] : um_path . 'templates/email'; - $template = trailingslashit( $path ) . $template_name . '.php'; - } - - // Return what we found. /** * UM hook * * @type filter - * @title um_locate_email_template - * @description Change email notification template path + * @title um_email_send_subject + * @description Change email notification subject * @input_vars - * [{"var":"$template","type":"string","desc":"Template Path"}, - * {"var":"$template_name","type":"string","desc":"Template Name"}] + * [{"var":"$subject","type":"string","desc":"Subject"}, + * {"var":"$key","type":"string","desc":"Template Key"}] * @change_log * ["Since: 2.0"] * @usage - * + * * @example * */ - return apply_filters( 'um_locate_email_template', $template, $template_name ); + $subject = apply_filters( 'um_email_send_subject', UM()->options()->get( $template . '_sub' ), $template ); + $this->subject = um_convert_tags( $subject , $args ); + + $this->message = $this->prepare_template( $template, $args ); + + if ( UM()->options()->get( 'email_html' ) ) { + $this->headers .= "Content-Type: text/html\r\n"; + } else { + $this->headers .= "Content-Type: text/plain\r\n"; + } + + // Send mail + wp_mail( $email, $this->subject, $this->message, $this->headers, $this->attachments ); } @@ -449,72 +464,47 @@ if ( ! class_exists( 'um\core\Mail' ) ) { * * @access public * @param string $template_name - * @param bool $html * @return string */ - function template_in_theme( $template_name, $html = false ) { + function template_in_theme( $template_name ) { $template_name_file = $this->get_template_filename( $template_name ); - $ext = ! $html ? '.php' : '.html'; $blog_id = $this->get_blog_id(); // check if there is template at theme blog ID folder $template = locate_template( array( - trailingslashit( 'ultimate-member/email' . $blog_id ) . $template_name_file . $ext + trailingslashit( 'ultimate-member/email' . $blog_id ) . $template_name_file . '.php' ) ); - //if there isn't template at theme folder for current blog ID get template file from theme folder - if ( is_multisite() && ! $template ) { - $template = locate_template( array( - trailingslashit( 'ultimate-member/email' ) . $template_name_file . $ext - ) ); - } - // Return what we found. return ! $template ? false : true; } - /** - * Check blog ID on multisite, return '' if single site - * - * @return string - */ - function get_blog_id() { - $blog_id = ''; - if ( is_multisite() ) { - $blog_id = '/' . get_current_blog_id(); - } - - return $blog_id; - } - - /** * Method returns expected path for template * * @access public + * * @param string $location * @param string $template_name - * @param bool $html + * * @return string */ - function get_template_file( $location, $template_name, $html = false ) { + function get_template_file( $location, $template_name ) { $template_path = ''; $template_name_file = $this->get_template_filename( $template_name ); - $ext = ! $html ? '.php' : '.html'; - switch( $location ) { case 'theme': //save email template in blog ID folder if we use multisite $blog_id = $this->get_blog_id(); - $template_path = trailingslashit( get_stylesheet_directory() . '/ultimate-member/email' . $blog_id ). $template_name_file . $ext; + $template_path = trailingslashit( get_stylesheet_directory() . '/ultimate-member/email' . $blog_id ). $template_name_file . '.php'; break; case 'plugin': $path = ! empty( $this->path_by_slug[ $template_name ] ) ? $this->path_by_slug[ $template_name ] : um_path . 'templates/email'; - $template_path = trailingslashit( $path ) . $template_name . $ext; + $template_path = trailingslashit( $path ) . $template_name . '.php'; break; } @@ -525,10 +515,10 @@ if ( ! class_exists( 'um\core\Mail' ) ) { /** * Ajax copy template to the theme * - * @param bool $template + * @param string $template * @return bool */ - function copy_email_template( $template = false ) { + function copy_email_template( $template ) { $in_theme = $this->template_in_theme( $template ); if ( $in_theme ) { @@ -559,28 +549,5 @@ if ( ! class_exists( 'um\core\Mail' ) ) { return false; } } - - - /** - * Delete Email Notification Template - * - * @deprecated since 2.0.17 - */ - function delete_email_template() { - $template = $_POST['email_key']; - - $in_theme = $this->template_in_theme( $template ); - if ( ! $in_theme ) { - wp_send_json_error( new \WP_Error( 'template_in_theme', __( 'Template does not exists in theme', 'ultimate-member' ) ) ); - } - - $theme_template_path = $this->get_template_file( 'theme', $template ); - - if ( unlink( $theme_template_path ) ) { - wp_send_json_success(); - } else { - wp_send_json_error( new \WP_Error( 'template_not_exists', __( 'Can not remove template from theme', 'ultimate-member' ) ) ); - } - } } } \ No newline at end of file