1 <?php
2 3 4 5 6 7 8 9 10
11
12
13 if ( !defined( 'ABSPATH' ) ) exit;
14
15 16 17 18 19 20 21
22 function edd_get_email_templates() {
23 $templates = array(
24 'default' => __( 'Default Template', 'edd' ),
25 'none' => __( 'No template, plain text only', 'edd' )
26 );
27
28 return apply_filters( 'edd_email_templates', $templates );
29 }
30
31 32 33 34 35 36 37 38 39 40 41
42 function edd_email_template_tags( $message, $payment_data, $payment_id ) {
43 global $edd_options;
44
45 $has_tags = ( strpos($message, '{' ) !== false );
46 if ( ! $has_tags ) return $message;
47
48 $user_info = maybe_unserialize( $payment_data['user_info'] );
49
50 $fullname = '';
51 if ( isset( $user_info['id'] ) && $user_info['id'] > 0 && isset( $user_info['first_name'] ) ) {
52 $user_data = get_userdata( $user_info['id'] );
53 $name = $user_info['first_name'];
54 $fullname = $user_info['first_name'] . ' ' . $user_info['last_name'];
55 $username = $user_data->user_login;
56 } elseif ( isset( $user_info['first_name'] ) ) {
57 $name = $user_info['first_name'];
58 $fullname = $user_info['first_name'] . ' ' . $user_info['last_name'];
59 $username = $user_info['first_name'];
60 } else {
61 $name = $user_info['email'];
62 $username = $user_info['email'];
63 }
64
65 $file_urls = '';
66 $download_list = '<ul>';
67 $downloads = edd_get_payment_meta_downloads( $payment_id );
68
69 if ( $downloads ) {
70 $show_names = apply_filters( 'edd_email_show_names', true );
71
72 foreach ( $downloads as $download ) {
73 $id = isset( $payment_data['cart_details'] ) ? $download['id'] : $download;
74
75 if ( $show_names ) {
76 $download_list .= '<li>' . apply_filters( 'edd_email_receipt_download_title', get_the_title( $id ), $id ) . '<br/>';
77 $download_list .= '<ul>';
78 }
79
80 $price_id = isset( $download['options']['price_id'] ) ? $download['options']['price_id'] : null;
81
82 $files = edd_get_download_files( $id, $price_id );
83
84 if ( $files ) {
85 foreach ( $files as $filekey => $file ) {
86 $download_list .= '<li>';
87 $file_url = edd_get_download_file_url( $payment_data['key'], $payment_data['email'], $filekey, $id, $price_id );
88 $download_list .= '<a href="' . esc_url( $file_url ) . '">' . $file['name'] . '</a>';
89
90 $download_list .= '</li>';
91
92 $file_urls .= esc_html( $file_url ) . '<br/>';
93 }
94 }
95
96 if ( $show_names ) {
97 $download_list .= '</ul>';
98 }
99
100 if ( '' != edd_get_product_notes( $id ) )
101 $download_list .= ' — <small>' . edd_get_product_notes( $id ) . '</small>';
102
103 if ( $show_names ) {
104 $download_list .= '</li>';
105 }
106 }
107 }
108 $download_list .= '</ul>';
109
110 $subtotal = isset( $payment_data['subtotal'] ) ? $payment_data['subtotal'] : $payment_data['amount'];
111 $subtotal = edd_currency_filter( edd_format_amount( $subtotal ) );
112 $tax = isset( $payment_data['tax'] ) ? $payment_data['tax'] : 0;
113 $tax = edd_currency_filter( edd_format_amount( $tax ) );
114 $price = edd_currency_filter( edd_format_amount( $payment_data['amount'] ) );
115 $gateway = edd_get_gateway_checkout_label( get_post_meta( $payment_id, '_edd_payment_gateway', true ) );
116 $receipt_id = $payment_data['key'];
117
118 $message = str_replace( '{name}', $name, $message );
119 $message = str_replace( '{fullname}', $fullname, $message );
120 $message = str_replace( '{username}', $username, $message );
121 $message = str_replace( '{download_list}', $download_list, $message );
122 $message = str_replace( '{file_urls}', $file_urls, $message );
123 $message = str_replace( '{date}', date_i18n( get_option( 'date_format' ), strtotime( $payment_data['date'] ) ), $message );
124 $message = str_replace( '{sitename}', get_bloginfo( 'name' ), $message );
125 $message = str_replace( '{subtotal}', $subtotal, $message );
126 $message = str_replace( '{tax}', $tax, $message );
127 $message = str_replace( '{price}', $price, $message );
128 $message = str_replace( '{payment_method}', $gateway, $message );
129 $message = str_replace( '{receipt_id}', $receipt_id, $message );
130 $message = str_replace( '{payment_id}', $payment_id, $message );
131 $message = str_replace( '{receipt_link}', sprintf( __( '%1$sView it in your browser.%2$s', 'edd' ), '<a href="' . add_query_arg( array ( 'purchase_key' => $receipt_id, 'edd_action' => 'view_receipt' ), home_url() ) . '">', '</a>' ), $message );
132
133 $message = apply_filters( 'edd_email_template_tags', $message, $payment_data, $payment_id );
134
135 return $message;
136 }
137
138 139 140 141 142 143 144 145
146 function edd_email_preview_templage_tags( $message ) {
147 global $edd_options;
148
149 $download_list = '<ul>';
150 $download_list .= '<li>' . __( 'Sample Product Title', 'edd' ) . '<br />';
151 $download_list .= '<ul>';
152 $download_list .= '<li>';
153 $download_list .= '<a href="#">' . __( 'Sample Download File Name', 'edd' ) . '</a> - <small>' . __( 'Optional notes about this download.', 'edd' ) . '</small>';
154 $download_list .= '</li>';
155 $download_list .= '</ul></li>';
156 $download_list .= '</ul>';
157
158 $file_urls = esc_html( trailingslashit( get_site_url() ) . 'test.zip?test=key&key=123' );
159
160 $price = edd_currency_filter( edd_format_amount( 10.50 ) );
161
162 $gateway = 'PayPal';
163
164 $receipt_id = strtolower( md5( uniqid() ) );
165
166 $notes = __( 'These are some sample notes added to a product.', 'edd' );
167
168 $tax = edd_currency_filter( edd_format_amount( 1.00 ) );
169
170 $sub_total = edd_currency_filter( edd_format_amount( 9.50 ) );
171
172 $payment_id = rand(1, 100);
173
174 $message = str_replace( '{download_list}', $download_list, $message );
175 $message = str_replace( '{file_urls}', $file_urls, $message );
176 $message = str_replace( '{name}', 'John', $message );
177 $message = str_replace( '{fullname}', 'John Doe', $message );
178 $message = str_replace( '{username}', 'john-doe', $message );
179 $message = str_replace( '{date}', date( get_option( 'date_format' ), time() ), $message );
180 $message = str_replace( '{subtotal}', $sub_total, $message );
181 $message = str_replace( '{tax}', $tax, $message );
182 $message = str_replace( '{price}', $price, $message );
183 $message = str_replace( '{receipt_id}', $receipt_id, $message );
184 $message = str_replace( '{payment_method}', $gateway, $message );
185 $message = str_replace( '{sitename}', get_bloginfo( 'name' ), $message );
186 $message = str_replace( '{product_notes}', $notes, $message );
187 $message = str_replace( '{payment_id}', $payment_id, $message );
188 $message = str_replace( '{receipt_link}', sprintf( __( '%1$sView it in your browser.%2$s', 'edd' ), '<a href="' . add_query_arg( array ( 'purchase_key' => $receipt_id, 'edd_action' => 'view_receipt' ), home_url() ) . '">', '</a>' ), $message );
189
190 return wpautop( $message );
191 }
192
193 194 195 196 197 198 199
200 function edd_email_default_formatting( $message ) {
201 return wpautop( $message );
202 }
203 add_filter( 'edd_purchase_receipt', 'edd_email_default_formatting' );
204
205 206 207 208 209 210 211
212 function edd_email_template_preview() {
213 global $edd_options;
214
215 $default_email_body = __( "Dear", "edd" ) . " {name},\n\n";
216 $default_email_body .= __( "Thank you for your purchase. Please click on the link(s) below to download your files.", "edd" ) . "\n\n";
217 $default_email_body .= "{download_list}\n\n";
218 $default_email_body .= "{sitename}";
219
220 $email_body = isset( $edd_options['purchase_receipt'] ) ? $edd_options['purchase_receipt'] : $default_email_body;
221 ob_start();
222 ?>
223 <a href="#email-preview" id="open-email-preview" class="button-secondary" title="<?php _e( 'Purchase Receipt Preview', 'edd' ); ?> "><?php _e( 'Preview Purchase Receipt', 'edd' ); ?></a>
224 <a href="<?php echo wp_nonce_url( add_query_arg( array( 'edd_action' => 'send_test_email' ) ), 'edd-test-email' ); ?>" title="<?php _e( 'This will send a demo purchase receipt to the emails listed below.', 'edd' ); ?>" class="button-secondary"><?php _e( 'Send Test Email', 'edd' ); ?></a>
225
226 <div id="email-preview-wrap" style="display:none;">
227 <div id="email-preview">
228 <?php echo edd_apply_email_template( $email_body, null, null ); ?>
229 </div>
230 </div>
231 <?php
232 echo ob_get_clean();
233 }
234 add_action( 'edd_email_settings', 'edd_email_template_preview' );
235
236 237 238 239 240 241 242
243 function edd_get_email_body_header() {
244 ob_start();
245 ?>
246 <html>
247 <head>
248 <style type="text/css">
249 </head>
250 <body>
251 <?php
252 do_action( 'edd_email_body_header' );
253 return ob_get_clean();
254 }
255
256 257 258 259 260 261 262 263
264 function edd_get_email_body_content( $payment_id = 0, $payment_data = array() ) {
265 global $edd_options;
266
267 $default_email_body = __( "Dear", "edd" ) . " {name},\n\n";
268 $default_email_body .= __( "Thank you for your purchase. Please click on the link(s) below to download your files.", "edd" ) . "\n\n";
269 $default_email_body .= "{download_list}\n\n";
270 $default_email_body .= "{sitename}";
271
272 $email = isset( $edd_options['purchase_receipt'] ) ? $edd_options['purchase_receipt'] : $default_email_body;
273
274 $email_body = edd_email_template_tags( $email, $payment_data, $payment_id );
275
276 return apply_filters( 'edd_purchase_receipt', $email_body, $payment_id, $payment_data );
277 }
278
279 280 281 282 283 284
285 function edd_get_email_body_footer() {
286 ob_start();
287 do_action( 'edd_email_body_footer' );
288 ?>
289 </body>
290 </html>
291 <?php
292 return ob_get_clean();
293 }
294
295 296 297 298 299 300 301 302 303
304 function edd_apply_email_template( $body, $payment_id, $payment_data ) {
305 global $edd_options;
306
307 $template_name = isset( $edd_options['email_template'] ) ? $edd_options['email_template'] : 'default';
308 $template_name = apply_filters( 'edd_email_template', $template_name, $payment_id );
309
310 if ( $template_name == 'none' ) {
311 if ( is_admin() )
312 $body = edd_email_preview_templage_tags( $body );
313
314 return $body;
315 }
316
317 ob_start();
318
319 do_action( 'edd_email_template_' . $template_name );
320
321 $template = ob_get_clean();
322
323 if ( is_admin() )
324 $body = edd_email_preview_templage_tags( $body );
325
326 $body = apply_filters( 'edd_purchase_receipt_' . $template_name, $body );
327
328 $email = str_replace( '{email}', $body, $template );
329
330 return $email;
331 }
332 add_filter( 'edd_purchase_receipt', 'edd_apply_email_template', 20, 3 );
333
334 335 336 337 338 339
340 function edd_default_email_template() {
341 echo '<div style="width: 550px; border: 1px solid #ccc; background: #f0f0f0; padding: 8px 10px; margin: 0 auto;">';
342 echo '<div id="edd-email-content" style="background: #fff; border: 1px solid #ccc; padding: 10px;">';
343 echo '{email}';
344 echo '</div>';
345 echo '</div>';
346 }
347 add_action( 'edd_email_template_default', 'edd_default_email_template' );
348
349 350 351 352 353 354 355
356 function edd_default_email_styling( $email_body ) {
357 $first_p = strpos( $email_body, '<p>' );
358 $email_body = substr_replace( $email_body, '<p style="margin-top:0;">', $first_p, 3 );
359 $email_body = str_replace( '<ul>', '<ul style="margin:0 0 10px 0; padding: 0;">', $email_body );
360 $email_body = str_replace( '<li>', '<li style="display:block;margin:0 0 4px 0;">', $email_body );
361
362 return $email_body;
363 }
364 add_filter( 'edd_purchase_receipt_default', 'edd_default_email_styling' );
365
366 367 368 369 370 371 372 373 374 375
376 function edd_render_receipt_in_browser() {
377 if ( ! isset( $_GET['purchase_key'] ) )
378 wp_die( __( 'Missing purchase key.', 'edd' ), __( 'Error', 'edd' ) );
379
380 $key = urlencode( $_GET['purchase_key'] );
381
382 ob_start();
383 ?>
384 <!DOCTYPE html>
385 <html lang="en">
386 <title><?php _e( 'Receipt', 'edd' ); ?></title>
387 <meta charset="utf-8" />
388 <?php wp_head(); ?>
389 </html>
390 <body class="<?php echo apply_filters('edd_receipt_page_body_class', 'edd_receipt_page' ); ?>">
391 <div id="edd_receipt_wrapper">
392 <?php do_action( 'edd_render_receipt_in_browser_before' ); ?>
393 <?php echo do_shortcode('[edd_receipt purchase_key='. $key .']'); ?>
394 <?php do_action( 'edd_render_receipt_in_browser_after' ); ?>
395 </div>
396 <?php wp_footer(); ?>
397 </body>
398 <?php
399 echo ob_get_clean();
400 die();
401 }
402 add_action( 'edd_view_receipt', 'edd_render_receipt_in_browser' );