File "class-wc-emails.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/woocommerce/includes/class-wc-emails.php
File size: 16.47 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

use Automattic\Jetpack\Constants;
defined('ABSPATH') || exit;
class WC_Emails
{
    public $emails = array();
    protected static $_instance = null;
    protected static $background_emailer = null;
    public static function instance()
    {
        if (is_null(self::$_instance)) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }
    public function __clone()
    {
        wc_doing_it_wrong(__FUNCTION__, __('Cloning is forbidden.', 'woocommerce'), '2.1');
    }
    public function __wakeup()
    {
        wc_doing_it_wrong(__FUNCTION__, __('Unserializing instances of this class is forbidden.', 'woocommerce'), '2.1');
    }
    public static function init_transactional_emails()
    {
        $email_actions = apply_filters('woocommerce_email_actions', array('woocommerce_low_stock', 'woocommerce_no_stock', 'woocommerce_product_on_backorder', 'woocommerce_order_status_pending_to_processing', 'woocommerce_order_status_pending_to_completed', 'woocommerce_order_status_processing_to_cancelled', 'woocommerce_order_status_pending_to_failed', 'woocommerce_order_status_pending_to_on-hold', 'woocommerce_order_status_failed_to_processing', 'woocommerce_order_status_failed_to_completed', 'woocommerce_order_status_failed_to_on-hold', 'woocommerce_order_status_cancelled_to_processing', 'woocommerce_order_status_cancelled_to_completed', 'woocommerce_order_status_cancelled_to_on-hold', 'woocommerce_order_status_on-hold_to_processing', 'woocommerce_order_status_on-hold_to_cancelled', 'woocommerce_order_status_on-hold_to_failed', 'woocommerce_order_status_completed', 'woocommerce_order_fully_refunded', 'woocommerce_order_partially_refunded', 'woocommerce_new_customer_note', 'woocommerce_created_customer'));
        if (apply_filters('woocommerce_defer_transactional_emails', false)) {
            self::$background_emailer = new WC_Background_Emailer();
            foreach ($email_actions as $action) {
                add_action($action, array(__CLASS__, 'queue_transactional_email'), 10, 10);
            }
        } else {
            foreach ($email_actions as $action) {
                add_action($action, array(__CLASS__, 'send_transactional_email'), 10, 10);
            }
        }
    }
    public static function queue_transactional_email(...$args)
    {
        if (is_a(self::$background_emailer, 'WC_Background_Emailer')) {
            self::$background_emailer->push_to_queue(array('filter' => current_filter(), 'args' => func_get_args()));
        } else {
            self::send_transactional_email(...$args);
        }
    }
    public static function send_queued_transactional_email($filter = '', $args = array())
    {
        if (apply_filters('woocommerce_allow_send_queued_transactional_email', true, $filter, $args)) {
            self::instance();
            WC()->payment_gateways();
            WC()->shipping();
            do_action_ref_array($filter . '_notification', $args);
        }
    }
    public static function send_transactional_email($args = array())
    {
        try {
            $args = func_get_args();
            self::instance();
            do_action_ref_array(current_filter() . '_notification', $args);
        } catch (Exception $e) {
            $error = 'Transactional email triggered fatal error for callback ' . current_filter();
            $logger = wc_get_logger();
            $logger->critical($error . PHP_EOL, array('source' => 'transactional-emails'));
            if (Constants::is_true('WP_DEBUG')) {
                trigger_error($error, E_USER_WARNING);
            }
        }
    }
    public function __construct()
    {
        $this->init();
        add_action('woocommerce_email_header', array($this, 'email_header'));
        add_action('woocommerce_email_footer', array($this, 'email_footer'));
        add_action('woocommerce_email_order_details', array($this, 'order_downloads'), 10, 4);
        add_action('woocommerce_email_order_details', array($this, 'order_details'), 10, 4);
        add_action('woocommerce_email_order_meta', array($this, 'order_meta'), 10, 3);
        add_action('woocommerce_email_customer_details', array($this, 'customer_details'), 10, 3);
        add_action('woocommerce_email_customer_details', array($this, 'email_addresses'), 20, 3);
        add_action('woocommerce_low_stock_notification', array($this, 'low_stock'));
        add_action('woocommerce_no_stock_notification', array($this, 'no_stock'));
        add_action('woocommerce_product_on_backorder_notification', array($this, 'backorder'));
        add_action('woocommerce_created_customer_notification', array($this, 'customer_new_account'), 10, 3);
        add_filter('woocommerce_email_footer_text', array($this, 'replace_placeholders'));
        do_action('woocommerce_email', $this);
    }
    public function init()
    {
        include_once dirname(__FILE__) . '/emails/class-wc-email.php';
        $this->emails['WC_Email_New_Order'] = (include __DIR__ . '/emails/class-wc-email-new-order.php');
        $this->emails['WC_Email_Cancelled_Order'] = (include __DIR__ . '/emails/class-wc-email-cancelled-order.php');
        $this->emails['WC_Email_Failed_Order'] = (include __DIR__ . '/emails/class-wc-email-failed-order.php');
        $this->emails['WC_Email_Customer_On_Hold_Order'] = (include __DIR__ . '/emails/class-wc-email-customer-on-hold-order.php');
        $this->emails['WC_Email_Customer_Processing_Order'] = (include __DIR__ . '/emails/class-wc-email-customer-processing-order.php');
        $this->emails['WC_Email_Customer_Completed_Order'] = (include __DIR__ . '/emails/class-wc-email-customer-completed-order.php');
        $this->emails['WC_Email_Customer_Refunded_Order'] = (include __DIR__ . '/emails/class-wc-email-customer-refunded-order.php');
        $this->emails['WC_Email_Customer_Invoice'] = (include __DIR__ . '/emails/class-wc-email-customer-invoice.php');
        $this->emails['WC_Email_Customer_Note'] = (include __DIR__ . '/emails/class-wc-email-customer-note.php');
        $this->emails['WC_Email_Customer_Reset_Password'] = (include __DIR__ . '/emails/class-wc-email-customer-reset-password.php');
        $this->emails['WC_Email_Customer_New_Account'] = (include __DIR__ . '/emails/class-wc-email-customer-new-account.php');
        $this->emails = apply_filters('woocommerce_email_classes', $this->emails);
    }
    public function get_emails()
    {
        return $this->emails;
    }
    public function get_from_name()
    {
        return wp_specialchars_decode(get_option('woocommerce_email_from_name'), ENT_QUOTES);
    }
    public function get_from_address()
    {
        return sanitize_email(get_option('woocommerce_email_from_address'));
    }
    public function email_header($email_heading)
    {
        wc_get_template('emails/email-header.php', array('email_heading' => $email_heading));
    }
    public function email_footer()
    {
        wc_get_template('emails/email-footer.php');
    }
    public function replace_placeholders($string)
    {
        $domain = wp_parse_url(home_url(), PHP_URL_HOST);
        return str_replace(array('{site_title}', '{site_address}', '{site_url}', '{woocommerce}', '{WooCommerce}'), array($this->get_blogname(), $domain, $domain, '<a href="https://woocommerce.com">WooCommerce</a>', '<a href="https://woocommerce.com">WooCommerce</a>'), $string);
    }
    public function email_footer_replace_site_title($string)
    {
        wc_deprecated_function('WC_Emails::email_footer_replace_site_title', '3.7.0', 'WC_Emails::replace_placeholders');
        return $this->replace_placeholders($string);
    }
    public function wrap_message($email_heading, $message, $plain_text = false)
    {
        ob_start();
        do_action('woocommerce_email_header', $email_heading, null);
        echo wpautop(wptexturize($message));
        do_action('woocommerce_email_footer', null);
        $message = ob_get_clean();
        return $message;
    }
    public function send($to, $subject, $message, $headers = "Content-Type: text/html\r\n", $attachments = '')
    {
        $email = new WC_Email();
        return $email->send($to, $subject, $message, $headers, $attachments);
    }
    public function customer_invoice($order)
    {
        $email = $this->emails['WC_Email_Customer_Invoice'];
        if (!is_object($order)) {
            $order = wc_get_order(absint($order));
        }
        $email->trigger($order->get_id(), $order);
    }
    public function customer_new_account($customer_id, $new_customer_data = array(), $password_generated = false)
    {
        if (!$customer_id) {
            return;
        }
        $user_pass = !empty($new_customer_data['user_pass']) ? $new_customer_data['user_pass'] : '';
        $email = $this->emails['WC_Email_Customer_New_Account'];
        $email->trigger($customer_id, $user_pass, $password_generated);
    }
    public function order_details($order, $sent_to_admin = false, $plain_text = false, $email = '')
    {
        if ($plain_text) {
            wc_get_template('emails/plain/email-order-details.php', array('order' => $order, 'sent_to_admin' => $sent_to_admin, 'plain_text' => $plain_text, 'email' => $email));
        } else {
            wc_get_template('emails/email-order-details.php', array('order' => $order, 'sent_to_admin' => $sent_to_admin, 'plain_text' => $plain_text, 'email' => $email));
        }
    }
    public function order_downloads($order, $sent_to_admin = false, $plain_text = false, $email = '')
    {
        $show_downloads = $order->has_downloadable_item() && $order->is_download_permitted() && !$sent_to_admin && !is_a($email, 'WC_Email_Customer_Refunded_Order');
        if (!$show_downloads) {
            return;
        }
        $downloads = $order->get_downloadable_items();
        $columns = apply_filters('woocommerce_email_downloads_columns', array('download-product' => __('Product', 'woocommerce'), 'download-expires' => __('Expires', 'woocommerce'), 'download-file' => __('Download', 'woocommerce')));
        if ($plain_text) {
            wc_get_template('emails/plain/email-downloads.php', array('order' => $order, 'sent_to_admin' => $sent_to_admin, 'plain_text' => $plain_text, 'email' => $email, 'downloads' => $downloads, 'columns' => $columns));
        } else {
            wc_get_template('emails/email-downloads.php', array('order' => $order, 'sent_to_admin' => $sent_to_admin, 'plain_text' => $plain_text, 'email' => $email, 'downloads' => $downloads, 'columns' => $columns));
        }
    }
    public function order_meta($order, $sent_to_admin = false, $plain_text = false)
    {
        $fields = apply_filters('woocommerce_email_order_meta_fields', array(), $sent_to_admin, $order);
        $_fields = apply_filters('woocommerce_email_order_meta_keys', array(), $sent_to_admin);
        if ($_fields) {
            foreach ($_fields as $key => $field) {
                if (is_numeric($key)) {
                    $key = $field;
                }
                $fields[$key] = array('label' => wptexturize($key), 'value' => wptexturize(get_post_meta($order->get_id(), $field, true)));
            }
        }
        if ($fields) {
            if ($plain_text) {
                foreach ($fields as $field) {
                    if (isset($field['label']) && isset($field['value']) && $field['value']) {
                        echo $field['label'] . ': ' . $field['value'] . "\n";
                    }
                }
            } else {
                foreach ($fields as $field) {
                    if (isset($field['label']) && isset($field['value']) && $field['value']) {
                        echo '<p><strong>' . $field['label'] . ':</strong> ' . $field['value'] . '</p>';
                    }
                }
            }
        }
    }
    public function customer_detail_field_is_valid($field)
    {
        return isset($field['label']) && !empty($field['value']);
    }
    public function customer_details($order, $sent_to_admin = false, $plain_text = false)
    {
        if (!is_a($order, 'WC_Order')) {
            return;
        }
        $fields = array_filter(apply_filters('woocommerce_email_customer_details_fields', array(), $sent_to_admin, $order), array($this, 'customer_detail_field_is_valid'));
        if (!empty($fields)) {
            if ($plain_text) {
                wc_get_template('emails/plain/email-customer-details.php', array('fields' => $fields));
            } else {
                wc_get_template('emails/email-customer-details.php', array('fields' => $fields));
            }
        }
    }
    public function email_addresses($order, $sent_to_admin = false, $plain_text = false)
    {
        if (!is_a($order, 'WC_Order')) {
            return;
        }
        if ($plain_text) {
            wc_get_template('emails/plain/email-addresses.php', array('order' => $order, 'sent_to_admin' => $sent_to_admin));
        } else {
            wc_get_template('emails/email-addresses.php', array('order' => $order, 'sent_to_admin' => $sent_to_admin));
        }
    }
    private function get_blogname()
    {
        return wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
    }
    public function low_stock($product)
    {
        if ('no' === get_option('woocommerce_notify_low_stock', 'yes')) {
            return;
        }
        if (false === apply_filters('woocommerce_should_send_low_stock_notification', true, $product->get_id())) {
            return;
        }
        $subject = sprintf('[%s] %s', $this->get_blogname(), __('Product low in stock', 'woocommerce'));
        $message = sprintf(__('%1$s is low in stock. There are %2$d left.', 'woocommerce'), html_entity_decode(wp_strip_all_tags($product->get_formatted_name()), ENT_QUOTES, get_bloginfo('charset')), html_entity_decode(wp_strip_all_tags($product->get_stock_quantity())));
        wp_mail(apply_filters('woocommerce_email_recipient_low_stock', get_option('woocommerce_stock_email_recipient'), $product, null), apply_filters('woocommerce_email_subject_low_stock', $subject, $product, null), apply_filters('woocommerce_email_content_low_stock', $message, $product), apply_filters('woocommerce_email_headers', '', 'low_stock', $product, null), apply_filters('woocommerce_email_attachments', array(), 'low_stock', $product, null));
    }
    public function no_stock($product)
    {
        if ('no' === get_option('woocommerce_notify_no_stock', 'yes')) {
            return;
        }
        if (false === apply_filters('woocommerce_should_send_no_stock_notification', true, $product->get_id())) {
            return;
        }
        $subject = sprintf('[%s] %s', $this->get_blogname(), __('Product out of stock', 'woocommerce'));
        $message = sprintf(__('%s is out of stock.', 'woocommerce'), html_entity_decode(wp_strip_all_tags($product->get_formatted_name()), ENT_QUOTES, get_bloginfo('charset')));
        wp_mail(apply_filters('woocommerce_email_recipient_no_stock', get_option('woocommerce_stock_email_recipient'), $product, null), apply_filters('woocommerce_email_subject_no_stock', $subject, $product, null), apply_filters('woocommerce_email_content_no_stock', $message, $product), apply_filters('woocommerce_email_headers', '', 'no_stock', $product, null), apply_filters('woocommerce_email_attachments', array(), 'no_stock', $product, null));
    }
    public function backorder($args)
    {
        $args = wp_parse_args($args, array('product' => '', 'quantity' => '', 'order_id' => ''));
        $order = wc_get_order($args['order_id']);
        if (!$args['product'] || !is_object($args['product']) || !$args['quantity'] || !$order) {
            return;
        }
        $subject = sprintf('[%s] %s', $this->get_blogname(), __('Product backorder', 'woocommerce'));
        $message = sprintf(__('%1$s units of %2$s have been backordered in order #%3$s.', 'woocommerce'), $args['quantity'], html_entity_decode(wp_strip_all_tags($args['product']->get_formatted_name()), ENT_QUOTES, get_bloginfo('charset')), $order->get_order_number());
        wp_mail(apply_filters('woocommerce_email_recipient_backorder', get_option('woocommerce_stock_email_recipient'), $args, null), apply_filters('woocommerce_email_subject_backorder', $subject, $args, null), apply_filters('woocommerce_email_content_backorder', $message, $args), apply_filters('woocommerce_email_headers', '', 'backorder', $args, null), apply_filters('woocommerce_email_attachments', array(), 'backorder', $args, null));
    }
    public function order_schema_markup($order, $sent_to_admin = false, $plain_text = false)
    {
        wc_deprecated_function('WC_Emails::order_schema_markup', '3.0', 'WC_Structured_Data::generate_order_data');
        WC()->structured_data->generate_order_data($order, $sent_to_admin, $plain_text);
        WC()->structured_data->output_structured_data();
    }
}