File "class-storefront-nux-admin.php"
Full Path: /home/warrior1/public_html/wp-content-20241001222009/themes/storefront/inc/nux/class-storefront-nux-admin.php
File size: 11.2 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* Storefront NUX Admin Class
*
* @package storefront
* @since 2.0.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
if ( ! class_exists( 'Storefront_NUX_Admin' ) ) :
/**
* The Storefront NUX Admin class
*/
class Storefront_NUX_Admin {
/**
* Setup class.
*
* @since 2.2.0
*/
public function __construct() {
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
/*
* In case the WC Admin inbox is not available, show the admin notice.
*/
if ( $this->is_inbox_available() ) {
add_action( 'admin_notices', array( $this, 'admin_inbox_messages' ), 99 );
} else {
add_action( 'admin_notices', array( $this, 'admin_notices' ), 99 );
}
add_action( 'wp_ajax_storefront_dismiss_notice', array( $this, 'dismiss_nux' ) );
add_action( 'admin_post_storefront_starter_content', array( $this, 'redirect_customizer' ) );
add_action( 'init', array( $this, 'log_fresh_site_state' ) );
add_filter( 'admin_body_class', array( $this, 'admin_body_class' ) );
}
/**
* Checks if WC Admin inbox is available. It might not be available if
* WooCommerce is not installed, in old versions of WC or if wc-admin
* has been disabled.
*
* @since 3.3.0
*/
private function is_inbox_available() {
if (
function_exists( 'WC' ) &&
is_callable( array( WC(), 'is_wc_admin_active' ) ) &&
WC()->is_wc_admin_active() &&
version_compare( WC_VERSION, '4.8.0', '>=' )
) {
return true;
}
return false;
}
/**
* Enqueue scripts.
*
* @since 2.2.0
*/
public function enqueue_scripts() {
global $wp_customize, $storefront_version;
if ( isset( $wp_customize ) || true === (bool) get_option( 'storefront_nux_dismissed' ) ) {
return;
}
$suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
wp_enqueue_style( 'storefront-admin-nux', get_template_directory_uri() . '/assets/css/admin/admin.css', '', $storefront_version );
wp_style_add_data( 'storefront-admin-nux', 'rtl', 'replace' );
wp_enqueue_script( 'storefront-admin-nux', get_template_directory_uri() . '/assets/js/admin/admin' . $suffix . '.js', array( 'jquery' ), $storefront_version, 'all' );
$storefront_nux = array(
'nonce' => wp_create_nonce( 'storefront_notice_dismiss' ),
);
wp_localize_script( 'storefront-admin-nux', 'storefrontNUX', $storefront_nux );
}
/**
* Output admin notices.
*
* @since 2.2.0
*/
public function admin_notices() {
global $pagenow;
if ( true === (bool) get_option( 'storefront_nux_dismissed' ) ) {
return;
}
// Coming from the WooCommerce Wizard?
if ( wp_get_referer() && 0 === strpos( basename( wp_get_referer() ), 'index.php?page=wc-setup' ) && 'post-new.php' === $pagenow ) {
return;
}
?>
<div class="notice notice-info sf-notice-nux is-dismissible">
<span class="sf-icon">
<?php echo '<img src="' . esc_url( get_template_directory_uri() ) . '/assets/images/admin/storefront-icon.svg" alt="Storefront" width="250" />'; ?>
</span>
<?php
self::admin_notices_content();
?>
</div>
<?php
}
/**
* Admin notices body.
* Extracted to a separate static function to be usable in other than admin_notice context.
*
* @since 3.0.0
*/
public static function admin_notices_content() {
global $pagenow;
?>
<div class="notice-content">
<?php if ( ! storefront_is_woocommerce_activated() && current_user_can( 'install_plugins' ) && current_user_can( 'activate_plugins' ) ) : ?>
<h2><?php esc_html_e( 'Thanks for installing Storefront, you rock! 🤘', 'storefront' ); ?></h2>
<p><?php esc_html_e( 'To enable eCommerce features you need to install the WooCommerce plugin.', 'storefront' ); ?></p>
<p><?php Storefront_Plugin_Install::install_plugin_button( 'woocommerce', 'woocommerce.php', 'WooCommerce', array(), __( 'WooCommerce activated', 'storefront' ), __( 'Activate WooCommerce', 'storefront' ), __( 'Install WooCommerce', 'storefront' ) ); ?></p>
<?php endif; ?>
<?php if ( storefront_is_woocommerce_activated() ) : ?>
<h2><?php esc_html_e( 'Design your store 🎨', 'storefront' ); ?></h2>
<p>
<?php
if ( true === (bool) get_option( 'storefront_nux_fresh_site' ) && 'post-new.php' === $pagenow ) {
echo esc_html__( 'Before you add your first product let\'s design your store. We\'ll add some example products for you. When you\'re ready let\'s get started by adding your logo.', 'storefront' );
} else {
echo esc_html__( 'You\'ve set up WooCommerce, now it\'s time to give it some style! Let\'s get started by entering the Customizer and adding your logo.', 'storefront' );
}
?>
</p>
<form action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>" method="post">
<input type="hidden" name="action" value="storefront_starter_content">
<?php wp_nonce_field( 'storefront_starter_content' ); ?>
<?php if ( true === (bool) get_option( 'storefront_nux_fresh_site' ) ) : ?>
<input type="hidden" name="homepage" value="on">
<?php endif; ?>
<?php if ( true === (bool) get_option( 'storefront_nux_fresh_site' ) && self::is_woocommerce_empty() ) : ?>
<input type="hidden" name="products" value="on">
<?php endif; ?>
<?php if ( false === (bool) get_option( 'storefront_nux_fresh_site' ) ) : ?>
<div class="notice-input">
<label>
<input type="checkbox" name="homepage" checked>
<?php
if ( 'page' === get_option( 'show_on_front' ) ) {
esc_html_e( 'Apply the Storefront homepage template', 'storefront' );
} else {
esc_html_e( 'Create a homepage using Storefront\'s homepage template', 'storefront' );
}
?>
</label>
</div>
<?php if ( self::is_woocommerce_empty() ) : ?>
<div class="notice-input">
<label>
<input type="checkbox" name="products" checked>
<?php esc_html_e( 'Add example products', 'storefront' ); ?>
</label>
</div>
<?php endif; ?>
<?php endif; ?>
<input type="submit" name="storefront-guided-tour" class="sf-nux-button" value="<?php esc_attr_e( 'Let\'s go!', 'storefront' ); ?>">
<a href="#" class="sf-nux-dismiss-button" ><?php esc_html_e( 'Skip', 'storefront' ); ?></a>
</form>
<?php endif; ?>
</div>
<?php
}
/**
* AJAX dismiss notice.
*
* @since 2.2.0
*/
public function dismiss_nux() {
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_key( wp_unslash( $_POST['nonce'] ) ), 'storefront_notice_dismiss' ) || ! current_user_can( 'manage_options' ) ) { // WPCS: input var ok.
die();
}
update_option( 'storefront_nux_dismissed', true );
}
/**
* Prints Storefront inbox messages.
*
* @since 3.0.0
*/
public function admin_inbox_messages() {
// The setup already has happened. No inbox message needed.
if ( true === (bool) get_option( 'storefront_nux_dismissed' ) ) {
return;
}
// Storefront settings page link and welcome message.
require 'class-storefront-nux-admin-inbox-messages-customize.php';
Storefront_NUX_Admin_Inbox_Messages_Customize::possibly_add_note();
}
/**
* Redirects to the customizer with the correct variables.
*
* @since 2.2.0
*/
public function redirect_customizer() {
check_admin_referer( 'storefront_starter_content' );
if ( current_user_can( 'manage_options' ) ) {
// Dismiss notice.
update_option( 'storefront_nux_dismissed', true );
}
$args = array( 'sf_starter_content' => '1' );
$tasks = array();
if ( ! empty( $_REQUEST['homepage'] ) && 'on' === sanitize_text_field( wp_unslash( $_REQUEST['homepage'] ) ) ) { // WPCS: input var ok.
if ( current_user_can( 'edit_pages' ) && 'page' === get_option( 'show_on_front' ) ) {
$this->assign_page_template( get_option( 'page_on_front' ), 'template-homepage.php' );
} else {
$tasks[] = 'homepage';
}
}
if ( ! empty( $_REQUEST['products'] ) && 'on' === sanitize_text_field( wp_unslash( $_REQUEST['products'] ) ) ) { // WPCS: input var ok.
$tasks[] = 'products';
}
if ( ! empty( $tasks ) ) {
$args['sf_tasks'] = implode( ',', $tasks );
if ( current_user_can( 'manage_options' ) ) {
// Make sure the fresh_site flag is set to true.
update_option( 'fresh_site', true );
if ( current_user_can( 'edit_pages' ) && true === (bool) get_option( 'storefront_nux_fresh_site' ) ) {
$this->set_woocommerce_pages_full_width();
}
}
}
// Redirect to the Storefront Welcome screen when exiting the Customizer.
$args['return'] = rawurlencode( admin_url( 'themes.php?page=storefront-welcome' ) );
wp_safe_redirect( add_query_arg( $args, admin_url( 'customize.php' ) ) );
die();
}
/**
* Get WooCommerce page ids.
*
* @since 2.2.0
*/
public static function get_woocommerce_pages() {
$woocommerce_pages = array();
$wc_pages_options = apply_filters(
'storefront_page_option_names',
array(
'woocommerce_cart_page_id',
'woocommerce_checkout_page_id',
'woocommerce_myaccount_page_id',
'woocommerce_shop_page_id',
'woocommerce_terms_page_id',
)
);
foreach ( $wc_pages_options as $option ) {
$page_id = get_option( $option );
if ( ! empty( $page_id ) ) {
$page_id = intval( $page_id );
if ( null !== get_post( $page_id ) ) {
$woocommerce_pages[ $option ] = $page_id;
}
}
}
return $woocommerce_pages;
}
/**
* Update Storefront fresh site flag.
*
* @since 2.2.0
*/
public function log_fresh_site_state() {
if ( null === get_option( 'storefront_nux_fresh_site', null ) ) {
update_option( 'storefront_nux_fresh_site', get_option( 'fresh_site' ) );
}
}
/**
* Add custom classes to the list of admin body classes.
*
* @since 2.2.0
* @param string $classes Classes for the admin body element.
* @return string
*/
public function admin_body_class( $classes ) {
if ( true === (bool) get_option( 'storefront_nux_dismissed' ) ) {
return $classes;
}
$classes .= ' sf-nux ';
return $classes;
}
/**
* Set WooCommerce pages to use the full width template.
*
* @since 2.2.0
*/
private function set_woocommerce_pages_full_width() {
$wc_pages = $this->get_woocommerce_pages();
foreach ( $wc_pages as $option => $page_id ) {
$this->assign_page_template( $page_id, 'template-fullwidth.php' );
}
}
/**
* Given a page id assign a given page template to it.
*
* @since 2.2.0
* @param int $page_id Page id.
* @param string $template Template file name.
* @return void|bool Returns false if $page_id or $template is empty.
*/
private function assign_page_template( $page_id, $template ) {
if ( empty( $page_id ) || empty( $template ) || '' === locate_template( $template ) ) {
return false;
}
update_post_meta( $page_id, '_wp_page_template', $template );
}
/**
* Check if WooCommerce is empty.
*
* @return bool
*/
private static function is_woocommerce_empty() {
$products = wp_count_posts( 'product' );
if ( 0 < $products->publish ) {
return false;
}
return true;
}
}
endif;
return new Storefront_NUX_Admin();