File "class-wc-shortcode-my-account.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/woocommerce/includes/shortcodes/class-wc-shortcode-my-account.php
File size: 9.48 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

defined('ABSPATH') || exit;
class WC_Shortcode_My_Account
{
    public static function get($atts)
    {
        return WC_Shortcodes::shortcode_wrapper(array(__CLASS__, 'output'), $atts);
    }
    public static function output($atts)
    {
        global $wp;
        if (is_null(WC()->cart)) {
            return;
        }
        if (!is_user_logged_in() || isset($wp->query_vars['lost-password'])) {
            $message = apply_filters('woocommerce_my_account_message', '');
            if (!empty($message)) {
                wc_add_notice($message);
            }
            if (!empty($_GET['password-reset'])) {
                wc_add_notice(__('Your password has been reset successfully.', 'woocommerce'));
            }
            if (isset($wp->query_vars['lost-password'])) {
                self::lost_password();
            } else {
                wc_get_template('myaccount/form-login.php');
            }
        } else {
            ob_start();
            if (isset($wp->query_vars['customer-logout'])) {
                wc_add_notice(sprintf(__('Are you sure you want to log out? <a href="%s">Confirm and log out</a>', 'woocommerce'), wc_logout_url()));
            }
            $notices = wc_get_notices();
            self::my_account($atts);
            if (!did_action('woocommerce_account_content')) {
                if (!empty($wp->query_vars)) {
                    foreach ($wp->query_vars as $key => $value) {
                        if ('pagename' === $key) {
                            continue;
                        }
                        if (has_action('woocommerce_account_' . $key . '_endpoint')) {
                            ob_clean();
                            wc_set_notices($notices);
                            wc_print_notices();
                            do_action('woocommerce_account_' . $key . '_endpoint', $value);
                            break;
                        }
                    }
                    wc_deprecated_function('Your theme version of my-account.php template', '2.6', 'the latest version, which supports multiple account pages and navigation, from WC 2.6.0');
                }
            }
            ob_end_flush();
        }
    }
    private static function my_account($atts)
    {
        $args = shortcode_atts(array('order_count' => 15), $atts, 'woocommerce_my_account');
        wc_get_template('myaccount/my-account.php', array('current_user' => get_user_by('id', get_current_user_id()), 'order_count' => 'all' === $args['order_count'] ? -1 : $args['order_count']));
    }
    public static function view_order($order_id)
    {
        $order = wc_get_order($order_id);
        if (!$order || !current_user_can('view_order', $order_id)) {
            echo '<div class="woocommerce-error">' . esc_html__('Invalid order.', 'woocommerce') . ' <a href="' . esc_url(wc_get_page_permalink('myaccount')) . '" class="wc-forward">' . esc_html__('My account', 'woocommerce') . '</a></div>';
            return;
        }
        $status = new stdClass();
        $status->name = wc_get_order_status_name($order->get_status());
        wc_get_template('myaccount/view-order.php', array('status' => $status, 'order' => $order, 'order_id' => $order->get_id()));
    }
    public static function edit_account()
    {
        wc_get_template('myaccount/form-edit-account.php', array('user' => get_user_by('id', get_current_user_id())));
    }
    public static function edit_address($load_address = 'billing')
    {
        $current_user = wp_get_current_user();
        $load_address = sanitize_key($load_address);
        $country = get_user_meta(get_current_user_id(), $load_address . '_country', true);
        if (!$country) {
            $country = WC()->countries->get_base_country();
        }
        if ('billing' === $load_address) {
            $allowed_countries = WC()->countries->get_allowed_countries();
            if (!array_key_exists($country, $allowed_countries)) {
                $country = current(array_keys($allowed_countries));
            }
        }
        if ('shipping' === $load_address) {
            $allowed_countries = WC()->countries->get_shipping_countries();
            if (!array_key_exists($country, $allowed_countries)) {
                $country = current(array_keys($allowed_countries));
            }
        }
        $address = WC()->countries->get_address_fields($country, $load_address . '_');
        wp_enqueue_script('wc-country-select');
        wp_enqueue_script('wc-address-i18n');
        foreach ($address as $key => $field) {
            $value = get_user_meta(get_current_user_id(), $key, true);
            if (!$value) {
                switch ($key) {
                    case 'billing_email':
                    case 'shipping_email':
                        $value = $current_user->user_email;
                        break;
                }
            }
            $address[$key]['value'] = apply_filters('woocommerce_my_account_edit_address_field_value', $value, $key, $load_address);
        }
        wc_get_template('myaccount/form-edit-address.php', array('load_address' => $load_address, 'address' => apply_filters('woocommerce_address_to_edit', $address, $load_address)));
    }
    public static function lost_password()
    {
        if (!empty($_GET['reset-link-sent'])) {
            return wc_get_template('myaccount/lost-password-confirmation.php');
        } elseif (!empty($_GET['show-reset-form'])) {
            if (isset($_COOKIE['wp-resetpass-' . COOKIEHASH]) && 0 < strpos($_COOKIE['wp-resetpass-' . COOKIEHASH], ':')) {
                list($rp_id, $rp_key) = array_map('wc_clean', explode(':', wp_unslash($_COOKIE['wp-resetpass-' . COOKIEHASH]), 2));
                $userdata = get_userdata(absint($rp_id));
                $rp_login = $userdata ? $userdata->user_login : '';
                $user = self::check_password_reset_key($rp_key, $rp_login);
                if (is_object($user)) {
                    return wc_get_template('myaccount/form-reset-password.php', array('key' => $rp_key, 'login' => $rp_login));
                }
            }
        }
        wc_get_template('myaccount/form-lost-password.php', array('form' => 'lost_password'));
    }
    public static function retrieve_password()
    {
        $login = isset($_POST['user_login']) ? sanitize_user(wp_unslash($_POST['user_login'])) : '';
        if (empty($login)) {
            wc_add_notice(__('Enter a username or email address.', 'woocommerce'), 'error');
            return false;
        } else {
            $user_data = get_user_by('login', $login);
        }
        if (!$user_data && is_email($login) && apply_filters('woocommerce_get_username_from_email', true)) {
            $user_data = get_user_by('email', $login);
        }
        $errors = new WP_Error();
        do_action('lostpassword_post', $errors, $user_data);
        if ($errors->get_error_code()) {
            wc_add_notice($errors->get_error_message(), 'error');
            return false;
        }
        if (!$user_data) {
            wc_add_notice(__('Invalid username or email.', 'woocommerce'), 'error');
            return false;
        }
        if (is_multisite() && !is_user_member_of_blog($user_data->ID, get_current_blog_id())) {
            wc_add_notice(__('Invalid username or email.', 'woocommerce'), 'error');
            return false;
        }
        $user_login = $user_data->user_login;
        do_action('retrieve_password', $user_login);
        $allow = apply_filters('allow_password_reset', true, $user_data->ID);
        if (!$allow) {
            wc_add_notice(__('Password reset is not allowed for this user', 'woocommerce'), 'error');
            return false;
        } elseif (is_wp_error($allow)) {
            wc_add_notice($allow->get_error_message(), 'error');
            return false;
        }
        $key = get_password_reset_key($user_data);
        WC()->mailer();
        do_action('woocommerce_reset_password_notification', $user_login, $key);
        return true;
    }
    public static function check_password_reset_key($key, $login)
    {
        $user = check_password_reset_key($key, $login);
        if (is_wp_error($user)) {
            wc_add_notice(__('This key is invalid or has already been used. Please reset your password again if needed.', 'woocommerce'), 'error');
            return false;
        }
        return $user;
    }
    public static function reset_password($user, $new_pass)
    {
        do_action('password_reset', $user, $new_pass);
        wp_set_password($new_pass, $user->ID);
        self::set_reset_password_cookie();
        if (!apply_filters('woocommerce_disable_password_change_notification', false)) {
            wp_password_change_notification($user);
        }
    }
    public static function set_reset_password_cookie($value = '')
    {
        $rp_cookie = 'wp-resetpass-' . COOKIEHASH;
        $rp_path = isset($_SERVER['REQUEST_URI']) ? current(explode('?', wp_unslash($_SERVER['REQUEST_URI']))) : '';
        if ($value) {
            setcookie($rp_cookie, $value, 0, $rp_path, COOKIE_DOMAIN, is_ssl(), true);
        } else {
            setcookie($rp_cookie, ' ', time() - YEAR_IN_SECONDS, $rp_path, COOKIE_DOMAIN, is_ssl(), true);
        }
    }
    public static function add_payment_method()
    {
        if (!is_user_logged_in()) {
            wp_safe_redirect(wc_get_page_permalink('myaccount'));
            exit;
        } else {
            do_action('before_woocommerce_add_payment_method');
            wc_get_template('myaccount/form-add-payment-method.php');
            do_action('after_woocommerce_add_payment_method');
        }
    }
}