PluginProbe
Product Labels, Quick View, Buy Now, Pre-Orders, Frequently Bought Together & More for WooCommerce – Merchant / 1.8.1
Product Labels, Quick View, Buy Now, Pre-Orders, Frequently Bought Together & More for WooCommerce – Merchant v1.8.1
2.3.2 2.3.1 2.3.0 2.2.8 2.2.7 trunk 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.10.5 1.11.0 1.11.1 1.11.2 1.6 1.7 1.8 1.8.1 1.8.2 1.8.3 1.9.0 1.9.1 1.9.10 1.9.11 All 60 releases
merchant / inc / modules / wait-list / class-wait-list.php

class-wait-list.php in Product Labels, Quick View, Buy Now, Pre-Orders, Frequently Bought Together & More for WooCommerce – Merchant 1.8.1, at inc/modules/wait-list/class-wait-list.php

234 lines 8.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Wait list
5 *
6 * @package Merchant
7 */
8
9 if ( ! defined( 'ABSPATH' ) ) {
10 exit; // Exit if accessed directly
11 }
12
13 /**
14 * Wait list class.
15 *
16 */
17 class Merchant_Wait_List extends Merchant_Add_Module {
18
19 /**
20 * Module ID.
21 *
22 */
23 const MODULE_ID = 'wait-list';
24
25 /**
26 * Module path.
27 */
28 const MODULE_DIR = MERCHANT_DIR . 'inc/modules/' . self::MODULE_ID;
29
30 /**
31 * Is module preview.
32 *
33 */
34 public static $is_module_preview = false;
35
36 /**
37 * Constructor.
38 *
39 */
40 public function __construct() {
41 // Module id.
42 $this->module_id = self::MODULE_ID;
43
44 // WooCommerce only.
45 $this->wc_only = true;
46
47 // Parent construct.
48 parent::__construct();
49
50 // Module section.
51 $this->module_section = 'convert-more';
52
53 // Module default settings.
54 $this->module_default_settings = array(
55 'form_title' => __( 'New stock is coming! Email me when this item is back in stock', 'merchant' ),
56 'form_email_label' => __( 'Your Email Address', 'merchant' ),
57 'form_button_text' => __( 'Notify Me', 'merchant' ),
58 'form_success_message' => __( 'You have been successfully added to our stock waitlist. As soon as new stock becomes available, we will notify you via email.', 'merchant' ),
59 'email_new_subscriber' => __( 'Hello, thank you for subscribing to the stock waitlist for {product}. We will email you once the product back in stock.', 'merchant' ),
60 'email_update' => __( 'Hello, thanks for your patience and finally the wait is over! Your {product} is now back in stock! We only have a limited amount of stock, and this email is not a guarantee you’ll get one. Add this {product} directly to your cart.',
61 'merchant' ),
62 'form_nonce_field' => wp_nonce_field( 'merchant_wait_list_action', 'merchant_wait_list_action', true, false ),
63 );
64
65 // Mount preview url.
66 $preview_url = site_url( '/' );
67
68 if ( function_exists( 'wc_get_products' ) ) {
69 $products = wc_get_products( array( 'limit' => 1 ) );
70
71 if ( ! empty( $products ) && ! empty( $products[0] ) ) {
72 $preview_url = get_permalink( $products[0]->get_id() );
73 }
74 }
75
76 // Module data.
77 $this->module_data = Merchant_Admin_Modules::$modules_data[ self::MODULE_ID ];
78 $this->module_data['preview_url'] = $preview_url;
79
80 // Module options path.
81 $this->module_options_path = self::MODULE_DIR . '/admin/options.php';
82
83 // Is module preview page.
84 if ( is_admin() && parent::is_module_settings_page() ) {
85 self::$is_module_preview = true;
86
87 // Enqueue admin styles.
88 add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_css' ) );
89
90 // Admin preview box.
91 add_filter( 'merchant_module_preview', array( $this, 'render_admin_preview' ), 10, 2 );
92 }
93
94 if ( Merchant_Modules::is_module_active( self::MODULE_ID ) && is_admin() ) {
95 // Init translations.
96 $this->init_translations();
97 }
98 }
99
100 /**
101 * Init translations.
102 *
103 * @return void
104 */
105 public function init_translations() {
106 $settings = $this->get_module_settings();
107
108 if ( ! empty( $settings['form_title'] ) ) {
109 Merchant_Translator::register_string( $settings['form_title'], esc_html__( 'Wait list: Form title', 'merchant' ) );
110 }
111 if ( ! empty( $settings['form_email_label'] ) ) {
112 Merchant_Translator::register_string( $settings['form_email_label'], esc_html__( 'Wait list: Form email label', 'merchant' ) );
113 }
114 if ( ! empty( $settings['form_button_text'] ) ) {
115 Merchant_Translator::register_string( $settings['form_button_text'], esc_html__( 'Wait list: Form button text', 'merchant' ) );
116 }
117 if ( ! empty( $settings['form_success_message'] ) ) {
118 Merchant_Translator::register_string( $settings['form_success_message'], esc_html__( 'Wait list: Form success message', 'merchant' ) );
119 }
120 if ( ! empty( $settings['email_new_subscriber'] ) ) {
121 Merchant_Translator::register_string( $settings['email_new_subscriber'], esc_html__( 'Wait list: Email new subscriber', 'merchant' ) );
122 }
123 if ( ! empty( $settings['email_update'] ) ) {
124 Merchant_Translator::register_string( $settings['email_update'], esc_html__( 'Wait list: Email update', 'merchant' ) );
125 }
126 }
127
128 /**
129 * Admin enqueue CSS.
130 *
131 * @return void
132 */
133 public function admin_enqueue_css() {
134 if ( parent::is_module_settings_page() ) {
135 wp_enqueue_style( 'merchant-' . self::MODULE_ID, MERCHANT_URI . 'assets/css/modules/' . self::MODULE_ID . '/wait-list.min.css', array(), MERCHANT_VERSION );
136 wp_enqueue_style( 'merchant-admin-' . self::MODULE_ID, MERCHANT_URI . 'assets/css/modules/' . self::MODULE_ID . '/admin/preview.min.css', array(), MERCHANT_VERSION );
137 }
138 }
139
140 /**
141 * Render admin preview
142 *
143 * @param Merchant_Admin_Preview $preview
144 * @param string $module
145 *
146 * @return Merchant_Admin_Preview
147 */
148 public function render_admin_preview( $preview, $module ) {
149 if ( self::MODULE_ID === $module ) {
150 ob_start();
151 self::admin_preview_content();
152 $content = ob_get_clean();
153
154 $preview->set_html( $content );
155
156 $preview->set_text( 'form_title', '.merchant-wait-list-title' );
157 $preview->set_text( 'form_button_text', '.merchant-wait-list-submit' );
158 $preview->set_attribute( 'form_email_label', '#merchant-wait-list-email', 'placeholder' );
159 }
160
161 return $preview;
162 }
163
164 /**
165 * Admin preview content.
166 *
167 * @return void
168 */
169 public function admin_preview_content() {
170 $settings = $this->get_module_settings();
171 ?>
172
173 <div class="mrc-preview-single-product-elements">
174 <div class="mrc-preview-left-column">
175 <div class="mrc-preview-product-image-wrapper">
176 <div class="mrc-preview-product-image"></div>
177 <div class="mrc-preview-product-image-thumbs">
178 <div class="mrc-preview-product-image-thumb"></div>
179 <div class="mrc-preview-product-image-thumb"></div>
180 <div class="mrc-preview-product-image-thumb"></div>
181 </div>
182 </div>
183 </div>
184 <div class="mrc-preview-right-column">
185 <div class="mrc-preview-text-placeholder"></div>
186 <div class="mrc-preview-text-placeholder mrc-mw-70"></div>
187 <div class="mrc-preview-text-placeholder mrc-mw-30"></div>
188 <div class="preview-merchant-wait-list">
189 <?php
190 $preview_html = str_replace( 'required', '', $this->get_html( $settings ) );
191 echo wp_kses( $preview_html, merchant_kses_allowed_tags( array( 'forms', 'nonce' ) ) ); ?>
192 </div>
193 </div>
194 </div>
195
196 <?php
197 }
198
199 /**
200 * Get the module HTML.
201 *
202 * @param array $settings
203 *
204 * @return string
205 */
206 public function get_html( $settings ) {
207 $product_id = isset( $settings[ 'product_id' ] ) ? absint( $settings[ 'product_id' ] ) : 0;
208 $html = '<div class="merchant-wait-list-container">';
209 $html .= '<div class="merchant-cover">';
210 $html .= '<div class="merchant-wait-list-loader">';
211 $html .= '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path opacity="0.4" d="M478.71 364.58zm-22 6.11l-27.83-15.9a15.92 15.92 0 0 1-6.94-19.2A184 184 0 1 1 256 72c5.89 0 11.71.29 17.46.83-.74-.07-1.48-.15-2.23-.21-8.49-.69-15.23-7.31-15.23-15.83v-32a16 16 0 0 1 15.34-16C266.24 8.46 261.18 8 256 8 119 8 8 119 8 256s111 248 248 248c98 0 182.42-56.95 222.71-139.42-4.13 7.86-14.23 10.55-22 6.11z" /><path d="M271.23 72.62c-8.49-.69-15.23-7.31-15.23-15.83V24.73c0-9.11 7.67-16.78 16.77-16.17C401.92 17.18 504 124.67 504 256a246 246 0 0 1-25 108.24c-4 8.17-14.37 11-22.26 6.45l-27.84-15.9c-7.41-4.23-9.83-13.35-6.2-21.07A182.53 182.53 0 0 0 440 256c0-96.49-74.27-175.63-168.77-183.38z" /></svg>';
212 $html .= '</div>';
213 $html .= '</div>';
214 $html .= '<form id="merchant-wait-list" class="merchant-wait-list" method="post">';
215 $html .= '<p class="merchant-wait-list-title">' . Merchant_Translator::translate( $settings[ 'form_title' ] ) . '</p>';
216 $html .= '<div class="merchant-wait-list-email">';
217 $html .= '<label for="merchant-wait-list-email">' . Merchant_Translator::translate( $settings[ 'form_email_label' ] ) . ' <abbr class="required" title="required">*</abbr></label>';
218 $html .= '<input type="email" name="merchant-wait-list-email" id="merchant-wait-list-email" value="" autocomplete="email" placeholder="' . Merchant_Translator::translate( $settings[ 'form_email_label' ] ) . '" required="">';
219 $html .= '</div>';
220 $html .= '<button class="merchant-wait-list-submit" type="submit" name="subscribe">' . Merchant_Translator::translate( $settings[ 'form_button_text' ] ) . '</button>';
221 $html .= $settings['form_nonce_field'];
222 $html .= '<input type="hidden" name="merchant-wait-list-product-id" id="merchant-wait-list-product-id" value="' . $product_id . '" >';
223 $html .= '</form>';
224 $html .= '</div>';
225
226 return $html;
227 }
228 }
229
230 // Initialize the module.
231 add_action( 'init', function () {
232 Merchant_Modules::create_module( new Merchant_Wait_List() );
233 } );
234