2012-09-17 00:53:17 +00:00
< ? php
2013-02-20 17:14:46 +00:00
if ( ! defined ( 'ABSPATH' ) ) exit ; // Exit if accessed directly
2012-09-17 00:53:17 +00:00
/**
2013-02-20 17:14:46 +00:00
* Abstract Email Class
2012-09-17 00:53:17 +00:00
*
* WooCommerce Email Class which is extended by specific email template classes to add emails to WooCommerce
*
* @ class WC_Email
2012-12-03 19:19:58 +00:00
* @ version 2.0 . 0
2013-02-20 17:14:46 +00:00
* @ package WooCommerce / Abstracts
2012-09-17 00:53:17 +00:00
* @ author WooThemes
2013-02-20 17:14:46 +00:00
* @ category Abstract Class
2012-09-17 00:53:17 +00:00
* @ extends WC_Settings_API
*/
2012-12-31 18:25:09 +00:00
abstract class WC_Email extends WC_Settings_API {
2012-09-17 00:53:17 +00:00
/** @var string Payment method ID. */
var $id ;
/** @var string Payment method title. */
var $title ;
2013-11-04 10:29:20 +00:00
/** @var string 'yes' if the method is enabled. */
2012-09-17 00:53:17 +00:00
var $enabled ;
/** @var string Description for the gateway. */
var $description ;
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/** @var string plain text template path */
var $template_plain ;
2012-11-27 16:22:47 +00:00
/** @var string html template path */
2012-09-17 00:53:17 +00:00
var $template_html ;
2012-11-27 16:22:47 +00:00
/** @var string template path */
2012-09-17 00:53:17 +00:00
var $template_base ;
2012-11-27 16:22:47 +00:00
/** @var string recipients for the email */
2012-09-17 00:53:17 +00:00
var $recipient ;
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/** @var string heading for the email content */
var $heading ;
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/** @var string subject for the email */
var $subject ;
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/** @var object this email is for, for example a customer, product, or email */
var $object ;
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/** @var array strings to find in subjects/headings */
var $find ;
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/** @var array strings to replace in subjects/headings */
var $replace ;
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/** @var string For multipart emails */
var $mime_boundary ;
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/** @var string For multipart emails */
var $mime_boundary_header ;
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/** @var bool true when email is being sent */
var $sending ;
2012-12-13 09:52:20 +00:00
/**
* List of preg * regular expression patterns to search for ,
* used in conjunction with $replace .
* https :// raw . github . com / ushahidi / wp - silcc / master / class . html2text . inc
*
* @ var array $search
* @ access public
* @ see $replace
*/
var $plain_search = array (
" / \r / " , // Non-legal carriage return
'/&(nbsp|#160);/i' , // Non-breaking space
'/&(quot|rdquo|ldquo|#8220|#8221|#147|#148);/i' ,
// Double quotes
'/&(apos|rsquo|lsquo|#8216|#8217);/i' , // Single quotes
'/>/i' , // Greater-than
'/</i' , // Less-than
2014-02-14 15:37:25 +00:00
'/&/i' , // Ampersand
'/&/i' , // Ampersand
'/&/i' , // Ampersand
2012-12-13 09:52:20 +00:00
'/&(copy|#169);/i' , // Copyright
'/&(trade|#8482|#153);/i' , // Trademark
'/&(reg|#174);/i' , // Registered
'/&(mdash|#151|#8212);/i' , // mdash
'/&(ndash|minus|#8211|#8722);/i' , // ndash
'/&(bull|#149|#8226);/i' , // Bullet
'/&(pound|#163);/i' , // Pound sign
'/&(euro|#8364);/i' , // Euro sign
2014-01-07 20:14:35 +00:00
'/$/' , // Dollar sign
2012-12-13 09:52:20 +00:00
'/&[^&;]+;/i' , // Unknown/unhandled entities
'/[ ]{2,}/' // Runs of spaces, post-handling
);
/**
* List of pattern replacements corresponding to patterns searched .
*
* @ var array $replace
* @ access public
* @ see $search
*/
var $plain_replace = array (
'' , // Non-legal carriage return
' ' , // Non-breaking space
'"' , // Double quotes
" ' " , // Single quotes
'>' ,
'<' ,
'&' ,
2014-02-14 15:37:25 +00:00
'&' ,
'&' ,
2012-12-13 09:52:20 +00:00
'(c)' ,
'(tm)' ,
'(R)' ,
'--' ,
'-' ,
'*' ,
'£' ,
'EUR' , // Euro sign. € ?
2014-01-06 07:39:41 +00:00
'$' , // Dollar sign
2012-12-13 09:52:20 +00:00
'' , // Unknown/unhandled entities
' ' // Runs of spaces, post-handling
);
2012-09-17 00:53:17 +00:00
/**
* Constructor
*
* @ access public
*/
function __construct () {
// Init settings
2013-01-10 15:17:33 +00:00
$this -> init_form_fields ();
2012-09-17 00:53:17 +00:00
$this -> init_settings ();
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
// Save settings hook
2012-12-15 11:53:32 +00:00
add_action ( 'woocommerce_update_options_email_' . $this -> id , array ( $this , 'process_admin_options' ) );
2012-09-17 00:53:17 +00:00
2013-02-27 10:10:36 +00:00
// Default template base if not declared in child constructor
2013-11-24 10:24:12 +00:00
if ( is_null ( $this -> template_base ) ) {
2013-11-25 14:01:32 +00:00
$this -> template_base = WC () -> plugin_path () . '/templates/' ;
2013-11-24 10:24:12 +00:00
}
2013-02-21 09:23:32 +00:00
2012-09-17 00:53:17 +00:00
// Settings
2013-04-04 16:21:03 +00:00
$this -> heading = $this -> get_option ( 'heading' , $this -> heading );
$this -> subject = $this -> get_option ( 'subject' , $this -> subject );
2012-12-31 12:07:43 +00:00
$this -> email_type = $this -> get_option ( 'email_type' );
$this -> enabled = $this -> get_option ( 'enabled' );
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
// Find/replace
2014-05-30 09:42:47 +00:00
$this -> find [ 'blogname' ] = '{blogname}' ;
$this -> find [ 'site-title' ] = '{site_title}' ;
$this -> replace [ 'blogname' ] = $this -> get_blogname ();
$this -> replace [ 'site-title' ] = $this -> get_blogname ();
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
// For multipart messages
2012-12-15 11:53:32 +00:00
add_filter ( 'phpmailer_init' , array ( $this , 'handle_multipart' ) );
2013-08-20 22:11:43 +00:00
// For default inline styles
add_filter ( 'woocommerce_email_style_inline_tags' , array ( $this , 'style_inline_tags' ) );
add_filter ( 'woocommerce_email_style_inline_h1_tag' , array ( $this , 'style_inline_h1_tag' ) );
add_filter ( 'woocommerce_email_style_inline_h2_tag' , array ( $this , 'style_inline_h2_tag' ) );
add_filter ( 'woocommerce_email_style_inline_h3_tag' , array ( $this , 'style_inline_h3_tag' ) );
add_filter ( 'woocommerce_email_style_inline_a_tag' , array ( $this , 'style_inline_a_tag' ) );
add_filter ( 'woocommerce_email_style_inline_img_tag' , array ( $this , 'style_inline_img_tag' ) );
2012-09-17 00:53:17 +00:00
}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/**
* handle_multipart function .
2012-11-27 16:22:47 +00:00
*
2012-09-17 00:53:17 +00:00
* @ access public
2013-11-28 12:54:19 +00:00
* @ param PHPMailer $mailer
* @ return PHPMailer
2012-09-17 00:53:17 +00:00
*/
function handle_multipart ( $mailer ) {
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
if ( $this -> sending && $this -> get_email_type () == 'multipart' ) {
2012-12-13 09:52:20 +00:00
$mailer -> AltBody = wordwrap ( preg_replace ( $this -> plain_search , $this -> plain_replace , strip_tags ( $this -> get_content_plain () ) ) );
//$mailer->AltBody = wordwrap( html_entity_decode( strip_tags( $this->get_content_plain() ) ), 70 );
2012-09-17 00:53:17 +00:00
$this -> sending = false ;
}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
return $mailer ;
}
/**
* format_string function .
2012-11-27 16:22:47 +00:00
*
2012-09-17 00:53:17 +00:00
* @ access public
* @ param mixed $string
* @ return string
*/
2012-11-27 16:22:47 +00:00
function format_string ( $string ) {
2012-09-17 00:53:17 +00:00
return str_replace ( $this -> find , $this -> replace , $string );
}
/**
* get_subject function .
2012-11-27 16:22:47 +00:00
*
2012-09-17 00:53:17 +00:00
* @ access public
* @ return string
*/
function get_subject () {
return apply_filters ( 'woocommerce_email_subject_' . $this -> id , $this -> format_string ( $this -> subject ), $this -> object );
}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/**
* get_heading function .
2012-11-27 16:22:47 +00:00
*
2012-09-17 00:53:17 +00:00
* @ access public
* @ return string
*/
function get_heading () {
return apply_filters ( 'woocommerce_email_heading_' . $this -> id , $this -> format_string ( $this -> heading ), $this -> object );
}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/**
* get_recipient function .
2012-11-27 16:22:47 +00:00
*
2012-09-17 00:53:17 +00:00
* @ access public
* @ return string
*/
function get_recipient () {
return apply_filters ( 'woocommerce_email_recipient_' . $this -> id , $this -> recipient , $this -> object );
}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/**
* get_headers function .
2012-11-27 16:22:47 +00:00
*
2012-09-17 00:53:17 +00:00
* @ access public
* @ return string
*/
function get_headers () {
return apply_filters ( 'woocommerce_email_headers' , " Content-Type: " . $this -> get_content_type () . " \r \n " , $this -> id , $this -> object );
}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/**
* get_attachments function .
2012-11-27 16:22:47 +00:00
*
2012-09-17 00:53:17 +00:00
* @ access public
2014-01-20 15:33:33 +00:00
* @ return array
2012-09-17 00:53:17 +00:00
*/
function get_attachments () {
2014-01-20 15:33:33 +00:00
return apply_filters ( 'woocommerce_email_attachments' , array (), $this -> id , $this -> object );
2012-09-17 00:53:17 +00:00
}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/**
* get_type function .
2012-11-27 16:22:47 +00:00
*
2012-09-17 00:53:17 +00:00
* @ access public
* @ return string
*/
function get_email_type () {
return $this -> email_type ? $this -> email_type : 'plain' ;
}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/**
* get_content_type function .
2012-11-27 16:22:47 +00:00
*
2012-09-17 00:53:17 +00:00
* @ access public
2013-11-28 12:54:19 +00:00
* @ return string
2012-09-17 00:53:17 +00:00
*/
function get_content_type () {
switch ( $this -> get_email_type () ) {
case " html " :
return 'text/html' ;
case " multipart " :
return 'multipart/alternative' ;
default :
return 'text/plain' ;
}
}
2012-11-27 16:22:47 +00:00
2013-04-04 16:21:03 +00:00
/**
2013-11-28 17:59:09 +00:00
* Proxy to parent ' s get_option and attempt to localize the result using gettext .
* @ access public
* @ param string $key
* @ param mixed $empty_value
* @ return string
*/
2013-04-12 08:32:55 +00:00
function get_option ( $key , $empty_value = null ) {
return __ ( parent :: get_option ( $key , $empty_value ) );
2013-04-04 16:21:03 +00:00
}
2012-09-17 00:53:17 +00:00
/**
* Checks if this email is enabled and will be sent .
*
* @ access public
* @ return bool
*/
function is_enabled () {
2013-02-27 10:10:36 +00:00
$enabled = $this -> enabled == " yes " ? true : false ;
return apply_filters ( 'woocommerce_email_enabled_' . $this -> id , $enabled , $this -> object );
2012-09-17 00:53:17 +00:00
}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/**
* get_blogname function .
2012-11-27 16:22:47 +00:00
*
2012-09-17 00:53:17 +00:00
* @ access public
2013-11-27 18:20:31 +00:00
* @ return string
2012-09-17 00:53:17 +00:00
*/
function get_blogname () {
return wp_specialchars_decode ( get_option ( 'blogname' ), ENT_QUOTES );
}
/**
* get_content function .
2012-11-27 16:22:47 +00:00
*
2012-09-17 00:53:17 +00:00
* @ access public
* @ return string
*/
function get_content () {
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
$this -> sending = true ;
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
if ( $this -> get_email_type () == 'plain' ) {
2012-12-13 09:52:20 +00:00
$email_content = preg_replace ( $this -> plain_search , $this -> plain_replace , strip_tags ( $this -> get_content_plain () ) );
2012-09-17 00:53:17 +00:00
} else {
2012-11-14 17:44:58 +00:00
$email_content = $this -> style_inline ( $this -> get_content_html () );
2012-09-17 00:53:17 +00:00
}
2014-01-03 14:12:59 +00:00
return wordwrap ( $email_content , 70 );
2012-09-17 00:53:17 +00:00
}
2012-11-27 16:22:47 +00:00
2013-08-20 22:11:43 +00:00
/**
* style_inline_tags function .
*
* @ access public
2013-11-28 17:59:09 +00:00
* @ param array $tags
2013-08-20 22:11:43 +00:00
* @ return array
*/
function style_inline_tags ( $tags ) {
return array_unique ( array_merge ( $tags , array ( 'h1' , 'h2' , 'h3' , 'a' , 'img' ) ) );
}
/**
* style_inline_h1_tag function .
* @ access public
2013-11-28 17:59:09 +00:00
* @ param array $styles
2013-08-20 22:11:43 +00:00
* @ return array
*/
function style_inline_h1_tag ( $styles ) {
$styles [ 'color' ] = get_option ( 'woocommerce_email_text_color' );
$styles [ 'display' ] = 'block' ;
$styles [ 'font-family' ] = 'Arial' ;
$styles [ 'font-size' ] = '34px' ;
$styles [ 'font-weight' ] = 'bold' ;
$styles [ 'margin-top' ] = '10px' ;
$styles [ 'margin-right' ] = '0' ;
$styles [ 'margin-bottom' ] = '10px' ;
$styles [ 'margin-left' ] = '0' ;
$styles [ 'text-align' ] = 'left' ;
$styles [ 'line-height' ] = '150%' ;
return $styles ;
}
/**
* style_inline_h2_tag function .
* @ access public
2013-11-28 17:59:09 +00:00
* @ param array $styles
2013-08-20 22:11:43 +00:00
* @ return array
*/
function style_inline_h2_tag ( $styles ) {
$styles [ 'color' ] = get_option ( 'woocommerce_email_text_color' );
$styles [ 'display' ] = 'block' ;
$styles [ 'font-family' ] = 'Arial' ;
$styles [ 'font-size' ] = '30px' ;
$styles [ 'font-weight' ] = 'bold' ;
$styles [ 'margin-top' ] = '10px' ;
$styles [ 'margin-right' ] = '0' ;
$styles [ 'margin-bottom' ] = '10px' ;
$styles [ 'margin-left' ] = '0' ;
$styles [ 'text-align' ] = 'left' ;
$styles [ 'line-height' ] = '150%' ;
return $styles ;
}
/**
* style_inline_h3_tag function .
*
* @ access public
2013-11-28 17:59:09 +00:00
* @ param array $styles
2013-08-20 22:11:43 +00:00
* @ return array
*/
function style_inline_h3_tag ( $styles ) {
$styles [ 'color' ] = get_option ( 'woocommerce_email_text_color' );
$styles [ 'display' ] = 'block' ;
$styles [ 'font-family' ] = 'Arial' ;
$styles [ 'font-size' ] = '26px' ;
$styles [ 'font-weight' ] = 'bold' ;
$styles [ 'margin-top' ] = '10px' ;
$styles [ 'margin-right' ] = '0' ;
$styles [ 'margin-bottom' ] = '10px' ;
$styles [ 'margin-left' ] = '0' ;
$styles [ 'text-align' ] = 'left' ;
$styles [ 'line-height' ] = '150%' ;
return $styles ;
}
2013-11-28 17:59:09 +00:00
/**
* @ param array $styles
* @ return array
*/
2013-08-20 22:11:43 +00:00
function style_inline_a_tag ( $styles ) {
$styles [ 'color' ] = get_option ( 'woocommerce_email_text_color' );
$styles [ 'font-weight' ] = 'normal' ;
$styles [ 'text-decoration' ] = 'underline' ;
return $styles ;
}
/**
* style_inline_img_tag function .
*
* @ access public
2013-11-28 17:59:09 +00:00
* @ param array $styles
2013-08-20 22:11:43 +00:00
* @ return array
*/
function style_inline_img_tag ( $styles ) {
$styles [ 'display' ] = 'inline' ;
$styles [ 'border' ] = 'none' ;
$styles [ 'font-size' ] = '14px' ;
$styles [ 'font-weight' ] = 'bold' ;
$styles [ 'height' ] = 'auto' ;
$styles [ 'line-height' ] = '100%' ;
$styles [ 'outline' ] = 'none' ;
$styles [ 'text-decoration' ] = 'none' ;
$styles [ 'text-transform' ] = 'capitalize' ;
return $styles ;
}
/**
* get_style_inline_tags function .
*
* @ access public
* @ return array
*/
function get_style_inline_tags () {
return apply_filters ( 'woocommerce_email_style_inline_tags' , array () );
}
/**
* get_style_inline_for_tag function .
*
* @ access public
2013-11-28 17:59:09 +00:00
* @ param string $tag
2013-08-20 22:11:43 +00:00
* @ return string
*/
function get_style_inline_for_tag ( $tag ) {
$styles = apply_filters ( 'woocommerce_email_style_inline_' . $tag . '_tag' , array () );
$css = array ();
foreach ( $styles as $property => $value ) {
$css [] = $property . ':' . $value ;
}
return implode ( '; ' , $css );
}
2012-11-14 17:44:58 +00:00
/**
* Apply inline styles to dynamic content .
2012-11-27 16:22:47 +00:00
*
2012-11-14 17:44:58 +00:00
* @ access public
* @ param mixed $content
2013-11-27 18:20:31 +00:00
* @ return string
2012-11-14 17:44:58 +00:00
*/
function style_inline ( $content ) {
2013-11-24 10:24:12 +00:00
if ( ! class_exists ( 'DOMDocument' ) ) {
2012-11-14 17:44:58 +00:00
return $content ;
2013-11-24 10:24:12 +00:00
}
2012-11-27 16:22:47 +00:00
2012-11-14 17:44:58 +00:00
$dom = new DOMDocument ();
2013-09-14 03:42:03 +00:00
libxml_use_internal_errors ( true );
@ $dom -> loadHTML ( $content );
libxml_clear_errors ();
2012-11-27 16:22:47 +00:00
2013-08-20 22:11:43 +00:00
foreach ( $this -> get_style_inline_tags () as $tag ) {
$nodes = $dom -> getElementsByTagName ( $tag );
2012-11-27 16:22:47 +00:00
2013-08-20 22:11:43 +00:00
foreach ( $nodes as $node ) {
2013-11-24 10:24:12 +00:00
if ( ! $node -> hasAttribute ( 'style' ) ) {
2013-08-20 22:11:43 +00:00
$node -> setAttribute ( 'style' , $this -> get_style_inline_for_tag ( $tag ) );
2013-11-24 10:24:12 +00:00
}
2013-08-20 22:11:43 +00:00
}
}
2012-11-27 16:22:47 +00:00
2012-11-14 17:44:58 +00:00
$content = $dom -> saveHTML ();
2012-11-27 16:22:47 +00:00
2012-11-14 17:44:58 +00:00
return $content ;
}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/**
* get_content_plain function .
2012-11-27 16:22:47 +00:00
*
2012-09-17 00:53:17 +00:00
* @ access public
2013-11-27 18:20:31 +00:00
* @ return string
2012-09-17 00:53:17 +00:00
*/
function get_content_plain () {}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/**
* get_content_html function .
2012-11-27 16:22:47 +00:00
*
2012-09-17 00:53:17 +00:00
* @ access public
2013-11-27 18:20:31 +00:00
* @ return string
2012-09-17 00:53:17 +00:00
*/
function get_content_html () {}
/**
* Get from name for email .
*
* @ access public
* @ return string
*/
function get_from_name () {
2013-09-04 12:24:01 +00:00
return wp_specialchars_decode ( esc_html ( get_option ( 'woocommerce_email_from_name' ) ), ENT_QUOTES );
2012-09-17 00:53:17 +00:00
}
/**
* Get from email address .
*
* @ access public
* @ return string
*/
function get_from_address () {
2012-10-18 10:33:47 +00:00
return sanitize_email ( get_option ( 'woocommerce_email_from_address' ) );
2012-09-17 00:53:17 +00:00
}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/**
* Send the email .
*
* @ access public
* @ param mixed $to
* @ param mixed $subject
* @ param mixed $message
* @ param string $headers
* @ param string $attachments
2014-03-23 17:09:01 +00:00
* @ return bool
2012-09-17 00:53:17 +00:00
*/
function send ( $to , $subject , $message , $headers , $attachments ) {
2012-12-15 11:53:32 +00:00
add_filter ( 'wp_mail_from' , array ( $this , 'get_from_address' ) );
add_filter ( 'wp_mail_from_name' , array ( $this , 'get_from_name' ) );
add_filter ( 'wp_mail_content_type' , array ( $this , 'get_content_type' ) );
2012-11-27 16:22:47 +00:00
2014-03-23 17:09:01 +00:00
$return = wp_mail ( $to , $subject , $message , $headers , $attachments );
2012-09-17 00:53:17 +00:00
2012-12-15 11:53:32 +00:00
remove_filter ( 'wp_mail_from' , array ( $this , 'get_from_address' ) );
remove_filter ( 'wp_mail_from_name' , array ( $this , 'get_from_name' ) );
remove_filter ( 'wp_mail_content_type' , array ( $this , 'get_content_type' ) );
2014-03-23 17:09:01 +00:00
return $return ;
2012-09-17 00:53:17 +00:00
}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/**
* Initialise Settings Form Fields - these are generic email options most will use .
*
* @ access public
* @ return void
*/
function init_form_fields () {
$this -> form_fields = array (
'enabled' => array (
'title' => __ ( 'Enable/Disable' , 'woocommerce' ),
'type' => 'checkbox' ,
'label' => __ ( 'Enable this email notification' , 'woocommerce' ),
'default' => 'yes'
),
'subject' => array (
'title' => __ ( 'Email subject' , 'woocommerce' ),
'type' => 'text' ,
'description' => sprintf ( __ ( 'Defaults to <code>%s</code>' , 'woocommerce' ), $this -> subject ),
'placeholder' => '' ,
'default' => ''
),
'heading' => array (
'title' => __ ( 'Email heading' , 'woocommerce' ),
'type' => 'text' ,
'description' => sprintf ( __ ( 'Defaults to <code>%s</code>' , 'woocommerce' ), $this -> heading ),
'placeholder' => '' ,
'default' => ''
),
'email_type' => array (
'title' => __ ( 'Email type' , 'woocommerce' ),
'type' => 'select' ,
'description' => __ ( 'Choose which format of email to send.' , 'woocommerce' ),
'default' => 'html' ,
'class' => 'email_type' ,
'options' => array (
'plain' => __ ( 'Plain text' , 'woocommerce' ),
'html' => __ ( 'HTML' , 'woocommerce' ),
'multipart' => __ ( 'Multipart' , 'woocommerce' ),
)
)
);
}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/**
* Admin Panel Options Processing
* - Saves the options to the DB
*
* @ since 1.0 . 0
* @ access public
* @ return bool
*/
public function process_admin_options () {
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
// Save regular options
parent :: process_admin_options ();
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
// Save templates
if ( ! empty ( $_POST [ 'template_html_code' ] ) && ! empty ( $this -> template_html ) ) {
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
$saved = false ;
$file = get_stylesheet_directory () . '/woocommerce/' . $this -> template_html ;
$code = stripslashes ( $_POST [ 'template_html_code' ] );
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
if ( is_writeable ( $file ) ) {
$f = fopen ( $file , 'w+' );
if ( $f !== FALSE ) {
fwrite ( $f , $code );
fclose ( $f );
$saved = true ;
}
}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
if ( ! $saved ) {
$redirect = add_query_arg ( 'wc_error' , urlencode ( __ ( 'Could not write to template file.' , 'woocommerce' ) ) );
wp_redirect ( $redirect );
exit ;
2012-11-27 16:22:47 +00:00
}
2012-09-17 00:53:17 +00:00
}
if ( ! empty ( $_POST [ 'template_plain_code' ] ) && ! empty ( $this -> template_plain ) ) {
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
$saved = false ;
$file = get_stylesheet_directory () . '/woocommerce/' . $this -> template_plain ;
$code = stripslashes ( $_POST [ 'template_plain_code' ] );
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
if ( is_writeable ( $file ) ) {
$f = fopen ( $file , 'w+' );
if ( $f !== FALSE ) {
fwrite ( $f , $code );
fclose ( $f );
$saved = true ;
}
}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
if ( ! $saved ) {
$redirect = add_query_arg ( 'wc_error' , __ ( 'Could not write to template file.' , 'woocommerce' ) );
wp_redirect ( $redirect );
exit ;
2012-11-27 16:22:47 +00:00
}
2012-09-17 00:53:17 +00:00
}
}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
/**
* Admin Options
*
* Setup the gateway settings screen .
* Override this in your gateway .
*
* @ since 1.0 . 0
* @ access public
* @ return void
*/
2012-11-27 16:22:47 +00:00
function admin_options () {
2012-09-17 00:53:17 +00:00
// Handle any actions
if ( ! empty ( $this -> template_html ) || ! empty ( $this -> template_plain ) ) {
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
if ( ! empty ( $_GET [ 'move_template' ] ) && ( $template = esc_attr ( basename ( $_GET [ 'move_template' ] ) ) ) ) {
if ( ! empty ( $this -> $template ) ) {
if ( wp_mkdir_p ( dirname ( get_stylesheet_directory () . '/woocommerce/' . $this -> $template ) ) && ! file_exists ( get_stylesheet_directory () . '/woocommerce/' . $this -> $template ) ) {
2013-10-26 10:32:38 +00:00
// Locate template file
2013-10-29 18:16:12 +00:00
$core_file = $this -> template_base . $this -> $template ;
$template_file = apply_filters ( 'woocommerce_locate_core_template' , $core_file , $this -> $template , $this -> template_base );
2013-10-26 10:32:38 +00:00
// Copy template file
copy ( $template_file , get_stylesheet_directory () . '/woocommerce/' . $this -> $template );
2012-09-17 00:53:17 +00:00
echo '<div class="updated fade"><p>' . __ ( 'Template file copied to theme.' , 'woocommerce' ) . '</p></div>' ;
}
}
}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
if ( ! empty ( $_GET [ 'delete_template' ] ) && ( $template = esc_attr ( basename ( $_GET [ 'delete_template' ] ) ) ) ) {
if ( ! empty ( $this -> $template ) ) {
if ( file_exists ( get_stylesheet_directory () . '/woocommerce/' . $this -> $template ) ) {
unlink ( get_stylesheet_directory () . '/woocommerce/' . $this -> $template );
echo '<div class="updated fade"><p>' . __ ( 'Template file deleted from theme.' , 'woocommerce' ) . '</p></div>' ;
}
}
}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
}
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
?>
< h3 >< ? php echo ( ! empty ( $this -> title ) ) ? $this -> title : __ ( 'Settings' , 'woocommerce' ) ; ?> </h3>
< ? php echo ( ! empty ( $this -> description ) ) ? wpautop ( $this -> description ) : '' ; ?>
< table class = " form-table " >
< ? php $this -> generate_settings_html (); ?>
</ table >
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
< ? php if ( ! empty ( $this -> template_html ) || ! empty ( $this -> template_plain ) ) { ?>
< div id = " template " >
< ? php
2012-11-27 16:22:47 +00:00
$templates = array (
'template_html' => __ ( 'HTML template' , 'woocommerce' ),
'template_plain' => __ ( 'Plain text template' , 'woocommerce' )
2012-09-17 00:53:17 +00:00
);
foreach ( $templates as $template => $title ) :
2013-11-24 10:24:12 +00:00
if ( empty ( $this -> $template ) ) {
2012-09-17 00:53:17 +00:00
continue ;
2013-11-24 10:24:12 +00:00
}
2012-11-27 16:22:47 +00:00
2013-10-26 10:32:38 +00:00
$local_file = get_stylesheet_directory () . '/woocommerce/' . $this -> $template ;
$core_file = $this -> template_base . $this -> $template ;
2013-10-29 18:16:12 +00:00
$template_file = apply_filters ( 'woocommerce_locate_core_template' , $core_file , $this -> $template , $this -> template_base );
2012-09-17 00:53:17 +00:00
?>
< div class = " template <?php echo $template ; ?> " >
2012-11-27 16:22:47 +00:00
2012-10-17 12:46:35 +00:00
< h4 >< ? php echo wp_kses_post ( $title ); ?> </h4>
2012-11-27 16:22:47 +00:00
2013-11-24 10:24:12 +00:00
< ? php if ( file_exists ( $local_file ) ) { ?>
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
< p >
< a href = " # " class = " button toggle_editor " ></ a >
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
< ? php if ( is_writable ( $local_file ) ) : ?>
< a href = " <?php echo remove_query_arg( array( 'move_template', 'saved' ), add_query_arg( 'delete_template', $template ) ); ?> " class = " delete_template button " >< ? php _e ( 'Delete template file' , 'woocommerce' ); ?> </a>
< ? php endif ; ?>
< ? php printf ( __ ( 'This template has been overridden by your theme and can be found in: <code>%s</code>.' , 'woocommerce' ), 'yourtheme/woocommerce/' . $this -> $template ); ?>
</ p >
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
< div class = " editor " style = " display:none " >
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
< textarea class = " code " cols = " 25 " rows = " 20 " < ? php if ( ! is_writable ( $local_file ) ) : ?> readonly="readonly" disabled="disabled"<?php else : ?>data-name="<?php echo $template . '_code'; ?>"<?php endif; ?>><?php echo file_get_contents( $local_file ); ?></textarea>
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
</ div >
2012-11-27 16:22:47 +00:00
2013-11-24 10:24:12 +00:00
< ? php } elseif ( file_exists ( $template_file ) ) { ?>
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
< p >
< a href = " # " class = " button toggle_editor " ></ a >
2012-11-27 16:22:47 +00:00
2013-11-24 10:24:12 +00:00
< ? php if ( ( is_dir ( get_stylesheet_directory () . '/woocommerce/emails/' ) && is_writable ( get_stylesheet_directory () . '/woocommerce/emails/' ) ) || is_writable ( get_stylesheet_directory () ) ) { ?>
2012-09-17 00:53:17 +00:00
< a href = " <?php echo remove_query_arg( array( 'delete_template', 'saved' ), add_query_arg( 'move_template', $template ) ); ?> " class = " button " >< ? php _e ( 'Copy file to theme' , 'woocommerce' ); ?> </a>
2013-11-24 10:24:12 +00:00
< ? php } ?>
2012-09-17 00:53:17 +00:00
2013-10-26 10:32:38 +00:00
< ? php printf ( __ ( 'To override and edit this email template copy <code>%s</code> to your theme folder: <code>%s</code>.' , 'woocommerce' ), plugin_basename ( $template_file ) , 'yourtheme/woocommerce/' . $this -> $template ); ?>
2012-09-17 00:53:17 +00:00
</ p >
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
< div class = " editor " style = " display:none " >
2012-11-27 16:22:47 +00:00
2013-10-26 10:32:38 +00:00
< textarea class = " code " readonly = " readonly " disabled = " disabled " cols = " 25 " rows = " 20 " >< ? php echo file_get_contents ( $template_file ); ?> </textarea>
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
</ div >
2012-11-27 16:22:47 +00:00
2013-11-24 10:24:12 +00:00
< ? php } else { ?>
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
< p >< ? php _e ( 'File was not found.' , 'woocommerce' ); ?> </p>
2012-11-27 16:22:47 +00:00
2013-11-24 10:24:12 +00:00
< ? php } ?>
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
</ div >
< ? php
endforeach ;
?>
</ div >
< ? php
2013-09-12 13:41:02 +00:00
wc_enqueue_js ( "
2012-09-17 00:53:17 +00:00
jQuery ( 'select.email_type' ) . change ( function (){
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
var val = jQuery ( this ) . val ();
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
jQuery ( '.template_plain, .template_html' ) . show ();
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
if ( val != 'multipart' && val != 'html' )
jQuery ( '.template_html' ) . hide ();
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
if ( val != 'multipart' && val != 'plain' )
jQuery ( '.template_plain' ) . hide ();
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
}) . change ();
2012-11-27 16:22:47 +00:00
2013-05-06 13:17:04 +00:00
var view = '" . esc_js( __( ' View template ', ' woocommerce ' ) ) . "' ;
var hide = '" . esc_js( __( ' Hide template ', ' woocommerce ' ) ) . "' ;
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
jQuery ( 'a.toggle_editor' ) . text ( view ) . toggle ( function () {
jQuery ( this ) . text ( hide ) . closest ( '.template' ) . find ( '.editor' ) . slideToggle ();
return false ;
}, function () {
jQuery ( this ) . text ( view ) . closest ( '.template' ) . find ( '.editor' ) . slideToggle ();
return false ;
} );
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
jQuery ( 'a.delete_template' ) . click ( function (){
2013-05-06 13:17:04 +00:00
var answer = confirm ( '" . esc_js( __( ' Are you sure you want to delete this template file ? ', ' woocommerce ' ) ) . "' );
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
if ( answer )
return true ;
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
return false ;
});
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
jQuery ( '.editor textarea' ) . change ( function (){
var name = jQuery ( this ) . attr ( 'data-name' );
2012-11-27 16:22:47 +00:00
2012-09-17 00:53:17 +00:00
if ( name )
jQuery ( this ) . attr ( 'name' , name );
});
" );
}
}
2013-02-21 00:39:38 +00:00
}