oont-contents/plugins/email-template-customizer-for-woo/includes/init.php
2025-04-06 08:34:48 +02:00

430 lines
21 KiB
PHP

<?php
namespace VIWEC\INC;
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
//Auto load class
spl_autoload_register( function ( $class ) {
$prefix = __NAMESPACE__;
$base_dir = __DIR__;
$len = strlen( $prefix );
if ( strncmp( $prefix, $class, $len ) !== 0 ) {
return;
}
$relative_class = strtolower( substr( $class, $len ) );
$relative_class = strtolower( str_replace( '_', '-', $relative_class ) );
$file = $base_dir . str_replace( '\\', '/', $relative_class ) . '.php';
if ( file_exists( $file ) ) {
require_once $file;
} else {
return;
}
} );
/*
* Initialize Plugin
*/
class Init {
protected static $instance = null;
public static $img_map;
protected $cache_products = [];
protected $cache_posts = [];
private function __construct() {
$this->define_params();
$this->class_init();
add_action( 'init', array( $this, 'plugin_textdomain' ) );
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue' ), 1 );
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_run_file' ), 9999 );
add_action( 'admin_footer', array( $this, 'admin_footer' ) );
add_filter( 'admin_body_class', array( $this, 'admin_body_class' ) );
}
public static function init() {
if ( null == self::$instance ) {
self::$instance = new self();
}
return self::$instance;
}
public function define_params() {
self::$img_map = apply_filters( 'viwec_image_map', [
'infor_icons' => [
'home' => [
'home-black' => esc_html__( 'Black', 'viwec-email-template-customizer' ),
'home-white' => esc_html__( 'White', 'viwec-email-template-customizer' ),
'home-white-border' => esc_html__( 'White/Border', 'viwec-email-template-customizer' ),
'home-black-border' => esc_html__( 'Black/Border', 'viwec-email-template-customizer' ),
'home-black-white' => esc_html__( 'Black/White', 'viwec-email-template-customizer' ),
'home-white-black' => esc_html__( 'White/Black', 'viwec-email-template-customizer' ),
],
'email' => [
'email-black' => esc_html__( 'Black', 'viwec-email-template-customizer' ),
'email-white' => esc_html__( 'White', 'viwec-email-template-customizer' ),
'email-white-border' => esc_html__( 'White/Border', 'viwec-email-template-customizer' ),
'email-black-border' => esc_html__( 'Black/Border', 'viwec-email-template-customizer' ),
'email-black-white' => esc_html__( 'Black/White', 'viwec-email-template-customizer' ),
'email-white-black' => esc_html__( 'White/Black', 'viwec-email-template-customizer' ),
],
'phone' => [
'phone-black' => esc_html__( 'Black', 'viwec-email-template-customizer' ),
'phone-white' => esc_html__( 'White', 'viwec-email-template-customizer' ),
'phone-white-border' => esc_html__( 'White/Border', 'viwec-email-template-customizer' ),
'phone-black-border' => esc_html__( 'Black/Border', 'viwec-email-template-customizer' ),
'phone-black-white' => esc_html__( 'Black/White', 'viwec-email-template-customizer' ),
'phone-white-black' => esc_html__( 'White/Black', 'viwec-email-template-customizer' ),
],
'location' => [
'location-white' => esc_html__( 'Black', 'viwec-email-template-customizer' ),
'location-black' => esc_html__( 'White', 'viwec-email-template-customizer' ),
'location-white-border' => esc_html__( 'White/Border', 'viwec-email-template-customizer' ),
'location-black-border' => esc_html__( 'Black/Border', 'viwec-email-template-customizer' ),
'location-black-white' => esc_html__( 'Black/White', 'viwec-email-template-customizer' ),
'location-white-black' => esc_html__( 'White/Black', 'viwec-email-template-customizer' ),
],
],
'social_icons' => [
'facebook' => [
'' => esc_html__( 'Disable', 'viwec-email-template-customizer' ),
'fb-black' => esc_html__( 'Black', 'viwec-email-template-customizer' ),
'fb-white' => esc_html__( 'White', 'viwec-email-template-customizer' ),
'fb-blue' => esc_html__( 'Color', 'viwec-email-template-customizer' ),
'fb-white-border' => esc_html__( 'White border', 'viwec-email-template-customizer' ),
'fb-black-border' => esc_html__( 'Black border', 'viwec-email-template-customizer' ),
'fb-blue-border' => esc_html__( 'Color border', 'viwec-email-template-customizer' ),
'fb-blue-white' => esc_html__( 'Color - White', 'viwec-email-template-customizer' ),
'fb-white-black' => esc_html__( 'Black - White', 'viwec-email-template-customizer' ),
'fb-white-blue' => esc_html__( 'White - Color', 'viwec-email-template-customizer' ),
],
'twitter' => [
'' => esc_html__( 'Disable', 'viwec-email-template-customizer' ),
'twi-black' => esc_html__( 'Black', 'viwec-email-template-customizer' ),
'twi-white' => esc_html__( 'White', 'viwec-email-template-customizer' ),
'twi-cyan' => esc_html__( 'Color', 'viwec-email-template-customizer' ),
'twi-white-border' => esc_html__( 'White border', 'viwec-email-template-customizer' ),
'twi-black-border' => esc_html__( 'Black border', 'viwec-email-template-customizer' ),
'twi-cyan-border' => esc_html__( 'Color border', 'viwec-email-template-customizer' ),
'twi-cyan-white' => esc_html__( 'Color - White', 'viwec-email-template-customizer' ),
'twi-white-black' => esc_html__( 'Black - White', 'viwec-email-template-customizer' ),
'twi-white-cyan' => esc_html__( 'White - Color', 'viwec-email-template-customizer' ),
],
'instagram' => [
'' => esc_html__( 'Disable', 'viwec-email-template-customizer' ),
'ins-black' => esc_html__( 'Black', 'viwec-email-template-customizer' ),
'ins-white' => esc_html__( 'White', 'viwec-email-template-customizer' ),
'ins-color' => esc_html__( 'Color', 'viwec-email-template-customizer' ),
'ins-white-border' => esc_html__( 'White border', 'viwec-email-template-customizer' ),
'ins-black-border' => esc_html__( 'Black border', 'viwec-email-template-customizer' ),
'ins-color-border' => esc_html__( 'Color border', 'viwec-email-template-customizer' ),
'ins-color-white' => esc_html__( 'Color - White', 'viwec-email-template-customizer' ),
'ins-white-black' => esc_html__( 'Black - White', 'viwec-email-template-customizer' ),
'ins-white-color' => esc_html__( 'White - Color', 'viwec-email-template-customizer' ),
],
'youtube' => [
'' => esc_html__( 'Disable', 'viwec-email-template-customizer' ),
'yt-black' => esc_html__( 'Black', 'viwec-email-template-customizer' ),
'yt-white' => esc_html__( 'White', 'viwec-email-template-customizer' ),
'yt-color' => esc_html__( 'Color', 'viwec-email-template-customizer' ),
'yt-white-border' => esc_html__( 'White border', 'viwec-email-template-customizer' ),
'yt-black-border' => esc_html__( 'Black border', 'viwec-email-template-customizer' ),
'yt-color-border' => esc_html__( 'Color border', 'viwec-email-template-customizer' ),
'yt-color-white' => esc_html__( 'Color - White', 'viwec-email-template-customizer' ),
'yt-white-black' => esc_html__( 'Black - White', 'viwec-email-template-customizer' ),
'yt-white-color' => esc_html__( 'White - Color', 'viwec-email-template-customizer' ),
],
'linkedin' => [
'' => esc_html__( 'Disable', 'viwec-email-template-customizer' ),
'li-black' => esc_html__( 'Black', 'viwec-email-template-customizer' ),
'li-white' => esc_html__( 'White', 'viwec-email-template-customizer' ),
'li-color' => esc_html__( 'Color', 'viwec-email-template-customizer' ),
'li-white-border' => esc_html__( 'White border', 'viwec-email-template-customizer' ),
'li-black-border' => esc_html__( 'Black border', 'viwec-email-template-customizer' ),
'li-color-border' => esc_html__( 'Color border', 'viwec-email-template-customizer' ),
'li-color-white' => esc_html__( 'Color - White', 'viwec-email-template-customizer' ),
'li-white-black' => esc_html__( 'Black - White', 'viwec-email-template-customizer' ),
'li-white-color' => esc_html__( 'White - Color', 'viwec-email-template-customizer' ),
],
'whatsapp' => [
'' => esc_html__( 'Disable', 'viwec-email-template-customizer' ),
'wa-black' => esc_html__( 'Black', 'viwec-email-template-customizer' ),
'wa-white' => esc_html__( 'White', 'viwec-email-template-customizer' ),
'wa-color' => esc_html__( 'Color', 'viwec-email-template-customizer' ),
'wa-white-border' => esc_html__( 'White border', 'viwec-email-template-customizer' ),
'wa-black-border' => esc_html__( 'Black border', 'viwec-email-template-customizer' ),
'wa-color-border' => esc_html__( 'Color border', 'viwec-email-template-customizer' ),
'wa-color-white' => esc_html__( 'Color - White', 'viwec-email-template-customizer' ),
'wa-white-black' => esc_html__( 'Black - White', 'viwec-email-template-customizer' ),
'wa-white-color' => esc_html__( 'White - Color', 'viwec-email-template-customizer' ),
],
'telegram' => [
'' => esc_html__( 'Disable', 'viwec-email-template-customizer' ),
'tele-black' => esc_html__( 'Black', 'viwec-email-template-customizer' ),
'tele-white' => esc_html__( 'White', 'viwec-email-template-customizer' ),
'tele-color' => esc_html__( 'Color', 'viwec-email-template-customizer' ),
'tele-white-border' => esc_html__( 'White border', 'viwec-email-template-customizer' ),
'tele-black-border' => esc_html__( 'Black border', 'viwec-email-template-customizer' ),
'tele-color-border' => esc_html__( 'Color border', 'viwec-email-template-customizer' ),
'tele-color-white' => esc_html__( 'Color - White', 'viwec-email-template-customizer' ),
'tele-white-black' => esc_html__( 'Black - White', 'viwec-email-template-customizer' ),
'tele-white-color' => esc_html__( 'White - Color', 'viwec-email-template-customizer' ),
],
'tiktok' => [
'' => esc_html__( 'Disable', 'viwec-email-template-customizer' ),
'tiktok-black' => esc_html__( 'Black', 'viwec-email-template-customizer' ),
'tiktok-white' => esc_html__( 'White', 'viwec-email-template-customizer' ),
'tiktok-color' => esc_html__( 'Color', 'viwec-email-template-customizer' ),
'tiktok-white-border' => esc_html__( 'White border', 'viwec-email-template-customizer' ),
'tiktok-black-border' => esc_html__( 'Black border', 'viwec-email-template-customizer' ),
'tiktok-color-border' => esc_html__( 'Color border', 'viwec-email-template-customizer' ),
'tiktok-color-white' => esc_html__( 'Color - White', 'viwec-email-template-customizer' ),
'tiktok-white-black' => esc_html__( 'Black - White', 'viwec-email-template-customizer' ),
'tiktok-white-color' => esc_html__( 'White - Color', 'viwec-email-template-customizer' ),
],
]
] );
}
public function class_init() {
Utils::init();
Email_Builder::init();
Email_Trigger::init();
Compatible::init();
include_once VIWEC_DIR . 'compatible' . DIRECTORY_SEPARATOR . 'email-template-customizer.php';
include_once VIWEC_SUPPORT . 'support.php';
include_once VIWEC_INCLUDES . 'functions.php';
if ( class_exists( 'VillaTheme_Support' ) ) {
new \VillaTheme_Support(
array(
'support' => 'https://wordpress.org/support/plugin/email-template-customizer-for-woo/',
'docs' => 'https://docs.villatheme.com/?item=woo-email-template-customizer',
'review' => 'https://wordpress.org/support/plugin/email-template-customizer-for-woo/reviews/?rate=5#rate-response',
'pro_url' => 'https://1.envato.market/BZZv1',
'css' => VIWEC_CSS,
'image' => VIWEC_IMAGES,
'slug' => 'email-template-customizer-for-woo',
'menu_slug' => 'edit.php?post_type=viwec_template',
'version' => VIWEC_VER,
'survey_url' => 'https://script.google.com/macros/s/AKfycbxkQO1eTmttYm1uNwN_pxenA9JEYbDo8PWumGZPvk29G2VIDi59/exec'
)
);
}
}
public function plugin_textdomain() {
$locale = is_admin() && function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale();
// Global + Frontend Locale
load_textdomain( 'viwec-email-template-customizer', VIWEC_LANGUAGES . "viwec-email-template-customizer-$locale.mo" );
load_plugin_textdomain( 'viwec-email-template-customizer', false, VIWEC_LANGUAGES );
}
public function admin_enqueue() {
global $post;
switch ( get_current_screen()->id ) {
case 'viwec_template':
$scripts_lib = [ 'tab', 'accordion', 'select2', 'dimmer', 'transition', 'modal' ];
$scripts = [ 'inputs', 'email-builder', 'properties', 'components' ];
$styles_lib = [ 'tab', 'menu', 'accordion', 'select2', 'dimmer', 'transition', 'modal', 'button' ];
$styles = [ 'email-builder' ];
wp_enqueue_editor();
wp_enqueue_media();
wp_enqueue_script( 'wc-enhanced-select' );
wp_enqueue_script( 'iris' );
Utils::enqueue_admin_script_libs( $scripts_lib, [ 'jquery' ] );
Utils::enqueue_admin_scripts( $scripts, [ 'jquery', 'jquery-ui-sortable', 'jquery-ui-draggable', 'wp-color-picker' ] );
Utils::enqueue_admin_styles_libs( $styles_lib );
Utils::enqueue_admin_styles( $styles );
$samples = Email_Samples::sample_templates();
$hide_rule = Utils::get_hide_rules_data();
$accept_elements = Utils::get_accept_elements_data();
$params = [
'ajaxUrl' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'viwec_nonce' ),
'product' => VIWEC_IMAGES . 'product.png',
'post' => VIWEC_IMAGES . 'post.png',
'placeholder' => VIWEC_IMAGES . 'placeholder.jpg',
'emailTypes' => Utils::get_email_ids_grouped(),
'samples' => $samples,
'subjects' => Email_Samples::default_subject(),
'adminBarStt' => Utils::get_admin_bar_stt(),
'suggestProductPrice' => wc_price( 20 ),
'homeUrl' => home_url(),
'siteUrl' => site_url(),
'shopUrl' => wc_get_endpoint_url( 'shop' ),
'adminEmail' => get_bloginfo( 'admin_email' ),
'adminPhone' => get_user_meta( get_current_user_id(), 'billing_phone', true ) ?? '202-000-0000',
'hide_rule' => $hide_rule,
'accept_elements' => $accept_elements,
'DISALLOW_UNFILTERED_HTML' => defined('DISALLOW_UNFILTERED_HTML') && DISALLOW_UNFILTERED_HTML ? 1:'',
];
foreach ( self::$img_map['social_icons'] as $type => $data ) {
foreach ( $data as $key => $text ) {
$url = $key ? VIWEC_IMAGES . $key . '.png' : '';
$params['social_icons'][ $type ][] = [ 'id' => $url, 'text' => $text, 'slug' => $key ];
}
}
foreach ( self::$img_map['infor_icons'] as $type => $data ) {
foreach ( $data as $key => $text ) {
$params['infor_icons'][ $type ][] = [ 'id' => VIWEC_IMAGES . $key . '.png', 'text' => $text, 'slug' => $key ];
}
}
$params['shortcode'] = array_keys( Utils::shortcodes() );
$params['shortcode_for_replace'] = array_merge( Utils::shortcodes(), Utils::get_register_shortcode_for_replace() );
$params['sc_3rd_party'] = Utils::get_register_shortcode_for_builder();
$params['sc_3rd_party_for_text_editor'] = Utils::get_register_shortcode_for_text_editor();
$params['post_categories'] = $this->get_categories( 'category' );
$params['product_categories'] = $this->get_categories( 'product_cat' );
$email_structure = ( get_post_meta( $post->ID, 'viwec_email_structure', true ) );
if ( ! empty( $email_structure ) && $email_structure !== 'null' ) {
$email_structure = html_entity_decode( $email_structure );
$json_decode_email_structure = json_decode( $email_structure, true );
if (is_array($json_decode_email_structure)) {
array_walk_recursive( $json_decode_email_structure, function ( $value, $key ) {
if ( in_array( $key, [ 'data-coupon-include-product', 'data-coupon-exclude-product' ], true ) ) {
$value = explode( ',', $value );
$this->cache_products = array_merge( $this->cache_products, $value );
}
if ( in_array( $key, [ 'data-include-post-id', 'data-exclude-post-id' ], true ) ) {
$value = explode( ',', $value );
$this->cache_posts = array_merge( $this->cache_posts, $value );
}
} );
}
$products_temp = [ [ 'id' => '', 'text' => '' ] ];
$posts_temp = [];
if ( ! empty( $this->cache_products ) ) {
$this->cache_products = array_values( array_unique( $this->cache_products ) );
$products = wc_get_products( [ 'limit' => - 1, 'include' => $this->cache_products ] );
if ( ! empty( $products ) ) {
foreach ( $products as $p ) {
$products_temp[] = [ 'id' => (string) $p->get_id(), 'text' => $p->get_name() ];
}
}
}
if ( ! empty( $this->cache_posts ) ) {
$this->cache_posts = array_values( array_unique( $this->cache_posts ) );
$posts = get_posts( [ 'numberposts' => 5, 'include' => $this->cache_posts ] );
if ( ! empty( $posts ) ) {
foreach ( $posts as $p ) {
$posts_temp[] = [ 'id' => $p->ID, 'text' => $p->post_title, 'content' => do_shortcode( $p->post_content ) ];
}
}
}
wp_localize_script( VIWEC_SLUG . '-email-builder', 'viWecCachePosts', $posts_temp );
wp_localize_script( VIWEC_SLUG . '-email-builder', 'viWecCacheProducts', $products_temp );
wp_localize_script( VIWEC_SLUG . '-email-builder', 'viWecLoadTemplate', [ $email_structure ] );
}
$params['i18n'] = I18n::init();
if ( ! empty( $_GET['sample'] ) ) {// phpcs:ignore WordPress.Security.NonceVerification.Recommended
if ( ! isset( $_GET['action'] ) || $_GET['action'] !== 'edit' ) {// phpcs:ignore WordPress.Security.NonceVerification.Recommended
$style = ! empty( $_GET['style'] ) ? sanitize_text_field( wp_unslash( $_GET['style'] ) ) : 'basic';// phpcs:ignore WordPress.Security.NonceVerification.Recommended
$params['addNew'] = [ 'type' => sanitize_text_field( wp_unslash( $_GET['sample'] ) ), 'style' => $style ];// phpcs:ignore WordPress.Security.NonceVerification.Recommended
}
}
global $viwec_params;
$viwec_params = $params;
wp_localize_script( VIWEC_SLUG . '-inputs', 'viWecParams', $params );
break;
case 'edit-viwec_template':
$styles = [ 'manage-template' ];
$styles_lib = [ 'form', 'segment', 'button', 'icon' ];
Utils::enqueue_admin_styles( $styles );
Utils::enqueue_admin_styles_libs( $styles_lib );
break;
//Premium
case 'viwec_template_page_viwec-auto-update':
$scripts = [ 'get-key' ];
$styles = [ 'manage-template' ];
Utils::enqueue_admin_scripts( $scripts, [ 'jquery' ] );
Utils::enqueue_admin_styles( $styles );
$styles_lib = [ 'form', 'segment', 'button', 'icon' ];
Utils::enqueue_admin_styles_libs( $styles_lib );
break;
}
}
public function get_categories( $type ) {
$cats = [];
$categories = get_terms( array(
'taxonomy' => $type,
'orderby' => 'name',
'order' => 'ASC',
'hide_empty' => false
) );
if ( ! empty( $categories ) ) {
foreach ( $categories as $cat ) {
$cats[] = [ 'id' => $cat->term_id, 'text' => $cat->name ];
}
}
return $cats;
}
public function enqueue_run_file() {
if ( get_current_screen()->id === 'viwec_template' ) {
Utils::enqueue_admin_scripts( [ 'run' ], [ 'jquery', 'jquery-ui-sortable', 'jquery-ui-draggable', 'wp-color-picker' ] );
}
}
public function admin_body_class( $class ) {
$admin_bar = Utils::get_admin_bar_stt();
$class = $admin_bar ? $class : $class . ' viwec-admin-bar-hidden';
return $class;
}
public function admin_footer() {
if ( get_current_screen()->id === 'edit-viwec_template' ) {
?>
<div id="viwec-in-all-email-page">
<?php do_action( 'villatheme_support_email-template-customizer-for-woo' ); ?>
</div>
<?php }
}
}
Init::init();