woocommerce/plugins/woocommerce-admin/src/ReportCSVEmail.php

153 lines
3.5 KiB
PHP
Raw Normal View History

<?php
/**
* Handles emailing users CSV Export download links.
*
* @package WooCommerce/Export
*/
namespace Automattic\WooCommerce\Admin;
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Include dependencies.
*/
if ( ! class_exists( 'WC_Email', false ) ) {
include_once WC_ABSPATH . 'includes/emails/class-wc-email.php';
}
/**
* ReportCSVEmail Class.
*/
class ReportCSVEmail extends \WC_Email {
/**
* Constructor.
*/
public function __construct() {
$this->id = 'admin_report_export_download';
$this->template_base = dirname( __DIR__ ) . '/includes/emails/';
$this->template_html = 'html-admin-report-export-download.php';
$this->template_plain = 'plain-admin-report-export-download.php';
$this->report_labels = array(
'revenue' => __( 'Revenue', 'woocommerce-admin' ),
'orders' => __( 'Orders', 'woocommerce-admin' ),
'products' => __( 'Products', 'woocommerce-admin' ),
'categories' => __( 'Categories', 'woocommerce-admin' ),
'coupons' => __( 'Coupons', 'woocommerce-admin' ),
'taxes' => __( 'Taxes', 'woocommerce-admin' ),
'downloads' => __( 'Downloads', 'woocommerce-admin' ),
'stock' => __( 'Stock', 'woocommerce-admin' ),
'customers' => __( 'Customers', 'woocommerce-admin' ),
);
// Call parent constructor.
parent::__construct();
}
/**
* This email has no user-facing settings.
*/
public function init_form_fields() {}
/**
* This email has no user-facing settings.
*/
public function init_settings() {}
/**
* Return email type.
*
* @return string
*/
public function get_email_type() {
return class_exists( 'DOMDocument' ) ? 'html' : 'plain';
}
/**
* Get email heading.
*
* @return string
*/
public function get_default_heading() {
return __( 'Your Report Download', 'woocommerce-admin' );
}
/**
* Get email subject.
*
* @return string
*/
public function get_default_subject() {
return __( '[{site_title}]: Your {report_name} Report download is ready', 'woocommerce-admin' );
}
/**
* Get content html.
*
* @return string
*/
public function get_content_html() {
return wc_get_template_html(
$this->template_html,
array(
'report_name' => $this->report_type,
'download_url' => $this->download_url,
'email_heading' => $this->get_heading(),
'sent_to_admin' => true,
'plain_text' => false,
'email' => $this,
),
'',
$this->template_base
);
}
/**
* Get content plain.
*
* @return string
*/
public function get_content_plain() {
return wc_get_template_html(
$this->template_plain,
array(
'report_name' => $this->report_type,
'download_url' => $this->download_url,
'email_heading' => $this->get_heading(),
'sent_to_admin' => true,
'plain_text' => true,
'email' => $this,
),
'',
$this->template_base
);
}
/**
* Trigger the sending of this email.
*
* @param int $order_id The order ID.
* @param WC_Order|false $order Order object.
*/
public function trigger( $user_id, $report_type, $download_url ) {
$user = new \WP_User( $user_id );
$this->recipient = $user->user_email;
$this->download_url = $download_url;
if ( isset( $this->report_labels[ $report_type ] ) ) {
Data store refactor (https://github.com/woocommerce/woocommerce-admin/pull/2961) * Base Report data store utility functions - 1 Standardizing the data store classes will be easier if the base class contains simple utility functions that can replace logic implemented in multiple data stores. - set_db_table_name() assigns a WP DB table name class variable for the data store - get_db_table_name() retrieves the WP DB table name - prepend_table_name() prepends a field in a query fragment with the data store table name * add context, clause handling, and filters to reports data store * add generated SQL clauses to class properties * reduce id getter logic to single function with filter, add phpdocs to new filters * update table_name to private string for use in constructor * extract SQL query clause handling to its own class - Will allow for use in subquery processing without creating a get_data stub - Swap parameter order in add_sql_clause for readability - Add support for clearing multple clauses in one call * add context var to SqlQuery class * implement SqlQuery in Categories data store * implement subquery in categories data store * coupons data stores, more underlying refactor - fix warnings - make filtered id functions static - add limit parameter handling - update coupons data store - update coupon stats data store * refactor coupon stats data store * refactor customers and customer stats data stores * add context to subqueries * add missed prepend table name call * refactor downloads data store, fix some warnings * fix warnings, add separator parameter to filtered IDs * refactor taxes and tax stats data stores * refactor variations data store * refactor product and product stats data stores * make table_name static throughout for compat with static hook functions * refactor order and order stats datastores - use consistent visibility on initialize_queries() - update db_table_name logic to use static keyword instead of self * fix missed whitespace * fix segmenting query, add SqlQuery join clause * DRY data store constructors, class properties * prefix table name when not yet assigned * fix unit tests, interpolations, WPDB delete calls * DRY get_object_where_filter() * remove redundant table prefix from unit test init * fix refactored SQL queries * restore product paging * remove unused query param arrays * add first pass on data docs readme * remove debug code, errant SQL spacing * refactor out outer_from query element * merge wheres, joins before filtering * move all report column definitions to assign_report_columns * fix data readme markdown * small code formating fixes from review * remove static from query/datastore context * missed self:: in previous, add comments, small code moves * rename get_statement() to get_query_statement() * remove temporary query references * static reference, remove reference parameter, fix coupon compare * add todo reminders * use correct query parameter in coupon data stores
2019-11-07 17:28:37 +00:00
$this->report_type = $this->report_labels[ $report_type ];
$this->placeholders['{report_name}'] = $this->report_type;
}
$this->send(
$this->get_recipient(),
$this->get_subject(),
$this->get_content(),
$this->get_headers(),
$this->get_attachments()
);
}
}