PluginProbe ʕ •ᴥ•ʔ
Shortcodes and extra features for Phlox theme / 2.9.18
Shortcodes and extra features for Phlox theme v2.9.18
2.17.22 2.17.21 2.17.20 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.6 1.0.9 1.1.0 1.3.0 1.3.1 1.3.10 1.3.14 1.3.2 1.3.3 1.3.6 1.4.0 1.4.1 1.4.2 1.5.0 1.5.2 1.6.0 1.6.2 1.6.4 1.7.0 1.7.2 2.10.0 2.10.1 2.10.3 2.10.5 2.10.7 2.10.8 2.10.9 2.11.0 2.11.1 2.11.2 2.12.0 2.14.0 2.15.0 2.15.2 2.15.4 2.15.5 2.15.6 2.15.7 2.15.8 2.15.9 2.16.0 2.16.1 2.16.2 2.16.3 2.16.4 2.17.0 2.17.1 2.17.12 2.17.13 2.17.14 2.17.15 2.17.16 2.17.2 2.17.3 2.17.4 2.17.5 2.17.6 2.17.8 2.17.9 2.4.12 2.4.13 2.4.14 2.4.16 2.4.18 2.4.19 2.4.9 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.14 2.5.15 2.5.16 2.5.17 2.5.19 2.5.2 2.5.20 2.5.3 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.10 2.6.12 2.6.13 2.6.14 2.6.15 2.6.16 2.6.17 2.6.19 2.6.2 2.6.20 2.6.4 2.6.5 2.6.7 2.7.0 2.7.1 2.7.10 2.7.11 2.7.12 2.7.13 2.7.14 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 2.7.8 2.7.9 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.9 2.9.0 2.9.12 2.9.14 2.9.15 2.9.16 2.9.17 2.9.18 2.9.19 2.9.2 2.9.20 2.9.21 2.9.22 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 2.9.8
auxin-elements / public / includes / frontend-ajax.php
auxin-elements / public / includes Last commit date
class-auxels-frontend-assets.php 4 years ago frontend-ajax.php 4 years ago index.php 9 years ago templates-post.php 9 years ago
frontend-ajax.php
338 lines
1 <?php
2
3 /**
4 * Load more ajax handler for "Recent Posts Grid" element
5 *
6 * @return void
7 */
8 function auxels_ajax_handler_element_load_more(){
9 if( ! defined( 'AUXIN_INC' ) ){
10 wp_send_json_success("Phlox theme is required.");
11 }
12 if( empty( $_POST["handler"] ) ){
13 wp_send_json_success("Please specify a handler.");
14 }
15 // Direct call is not alloweded
16 if( empty( $_POST['action'] ) ){
17 wp_send_json_error( __( 'Ajax action not found.', 'auxin-elements' ) );
18 }
19 if( empty( $_POST['args'] ) ){
20 wp_send_json_error( __( 'Ajax args is required.', 'auxin-elements' ) );
21 }
22 // Authorize the call
23 if( ! wp_verify_nonce( $_POST['nonce'], 'auxin_front_load_more' ) ){
24 wp_send_json_error( __( 'Authorization failed.', 'auxin-elements' ) );
25 }
26
27 $ajax_args = auxin_sanitize_input( $_POST['args'] );
28 $element_markup = '';
29
30 // include the required resources
31 require_once( AUXELS_INC_DIR . '/general-functions.php' );
32 require_once( THEME_DIR . AUXIN_INC . 'include/functions.php' );
33 require_once( THEME_DIR . AUXIN_INC . 'include/templates/templates-post.php' );
34
35 // take required actions based on custom handler (element base name)
36 switch( $_POST['handler'] ) {
37
38 case 'aux_recent_posts':
39 require_once( AUXELS_INC_DIR . '/elements/recent-posts-grid-carousel.php' );
40
41 // Get the element markup
42 $element_markup = auxin_widget_recent_posts_callback( $ajax_args );
43 break;
44
45 case 'aux_recent_posts_land_style':
46 require_once( AUXELS_INC_DIR . '/elements/recent-posts-land-style.php' );
47
48 // Get the element markup
49 $element_markup = auxin_widget_recent_posts_land_style_callback( $ajax_args );
50 break;
51
52 case 'aux_recent_posts_masonry':
53 require_once( AUXELS_INC_DIR . '/elements/recent-posts-masonry.php' );
54
55 // Get the element markup
56 $element_markup = auxin_widget_recent_posts_masonry_callback( $ajax_args );
57 break;
58
59 case 'aux_recent_posts_tiles':
60 require_once( AUXELS_INC_DIR . '/elements/recent-posts-tiles.php' );
61
62 // Get the element markup
63 $element_markup = auxin_widget_recent_posts_tiles_callback( $ajax_args );
64 break;
65
66 case 'aux_recent_posts_timeline':
67 require_once( AUXELS_INC_DIR . '/elements/recent-posts-timeline.php' );
68
69 // Get the element markup
70 $element_markup = auxin_widget_recent_posts_timeline_callback( $ajax_args );
71 break;
72
73 case 'aux_recent_news':
74 require_once( AUXNEW_INC_DIR . '/elements/recent-news.php' );
75
76 // Get the element markup
77 $element_markup = auxin_widget_recent_news_callback( $ajax_args );
78 break;
79
80 case 'aux_recent_news_big_grid':
81 require_once( AUXNEW_INC_DIR . '/elements/recent-news-big-grid.php' );
82
83 // Get the element markup
84 $element_markup = auxin_widget_recent_news_big_grid_callback( $ajax_args );
85 break;
86
87 case 'aux_recent_portfolios_grid':
88 require_once( AUXPFO_INC_DIR . '/elements/recent-portfolios.php' );
89
90 // Get the element markup
91 $element_markup = auxin_widget_recent_portfolios_grid_callback( $ajax_args );
92 break;
93
94 case 'aux_flexible_recent_posts':
95 require_once( AUXPRO_INC_DIR . '/elements/flexible-recent-posts.php' );
96
97 // Get the element markup
98 $element_markup = auxin_widget_flexible_recent_posts_callback( $ajax_args );
99 break;
100
101 default:
102 wp_send_json_error( __( 'Not a valid handler.', 'auxin-elements' ) );
103 break;
104 }
105
106 // if the output is empty
107 if( empty( $element_markup ) ){
108 wp_send_json_error( __( 'No data received.', 'auxin-elements' ) );
109 }
110
111 wp_send_json_success( $element_markup );
112 }
113
114 add_action( 'wp_ajax_load_more_element', 'auxels_ajax_handler_element_load_more' );
115 add_action( 'wp_ajax_nopriv_load_more_element', 'auxels_ajax_handler_element_load_more' );
116
117 /**
118 * Remove Product from Cart via Ajax
119 *
120 * @return void
121 */
122 function auxels_remove_product_from_cart() {
123
124 if ( !class_exists( 'WooCommerce' ) )
125 return;
126
127 global $woocommerce;
128
129 try {
130
131 $nonce = sanitize_text_field( $_POST['verify_nonce'] );
132 $id = absint( $_POST['product_id'] );
133 $cart_item_key = sanitize_text_field( $_POST['cart_item_key'] );
134
135 if( ! isset( $_POST['product_id'] ) || ! wp_verify_nonce( $nonce, 'remove_cart-' . $id ) ){
136 wp_send_json_error( sprintf( '<div class="aux-woocommerce-ajax-notification woocommerce-error">%s</div>', __('Verification failed!', 'auxin-elements') ) );
137 }
138
139 $cart = $woocommerce->cart;
140 $cart->remove_cart_item( $cart_item_key );
141
142 $cart->calculate_totals();
143
144 $args = !empty( $_POST['args'] ) ? auxin_sanitize_input( $_POST['args'] ) : array(
145 'title' => '',
146 'css_class' => '',
147 'dropdown_class' => '',
148 'color_class' => 'aux-black',
149 'action_on' => 'click',
150 'cart_url' => '#',
151 'dropdown_skin' => '',
152 );
153
154 $count = (int) $cart->cart_contents_count;
155 if ( $count > 0 ) {
156 $items = auxin_get_cart_items( $args );
157 } else {
158 $items = '<div class="aux-card-box aux-empty-cart"><img src="'. esc_url( AUXIN_URL . 'images/other/empty-cart.svg' ) . '">' . esc_html__( 'Cart is empty', 'auxin-elements' ) . '</div>';
159 }
160
161
162 $response = array(
163 'fragments' => apply_filters(
164 'woocommerce_add_to_cart_fragments',
165 array(
166 '.aux-cart-wrapper .aux-card-dropdown' => '<div class="aux-card-dropdown aux-phone-off">' . $items . '</div>' ,
167 )
168 ),
169 'cart_hash' => WC()->cart->get_cart_hash(),
170 'items' => $items,
171 'total' => $woocommerce->cart->get_cart_subtotal(),
172 'count' => $count,
173 'empty' => sprintf( '<div class="aux-card-box">%s</div>', __( 'Your cart is currently empty.', 'auxin-elements' ) ),
174 'notif' => sprintf( '<div class="aux-woocommerce-ajax-notification woocommerce-message">%s</div>', __('Item has been removed from your shopping cart.', 'auxin-elements') )
175 );
176
177 wp_send_json_success( $response );
178
179 } catch (Exception $e) {
180 wp_send_json_error( sprintf( '<div class="aux-woocommerce-ajax-notification woocommerce-error">%s</div>', __('An Error Occurred!', 'auxin-elements') ) );
181 }
182
183 }
184 add_action( 'wp_ajax_auxels_remove_from_cart', 'auxels_remove_product_from_cart' );
185 add_action( 'wp_ajax_nopriv_auxels_remove_from_cart', 'auxels_remove_product_from_cart' );
186
187
188 /**
189 * Add to Cart via Ajax
190 */
191 function auxels_add_product_to_cart() {
192
193 if ( ! class_exists( 'WooCommerce' ) )
194 return;
195
196 global $woocommerce;
197
198 try {
199
200 $product_id = isset( $_POST['product_id'] ) ? absint( $_POST['product_id'] ) : '';
201 $quantity = empty( $_POST['quantity'] ) ? 1 : wc_stock_amount( absint( $_POST['quantity'] ) );
202 $passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity );
203
204 if( empty( $product_id ) ){
205 wp_send_json_error( sprintf( '<div class="aux-woocommerce-ajax-notification woocommerce-error">%s</div>', __('Verification failed!', 'auxin-elements') ) );
206 } else {
207 // Add item to cart
208 if( $passed_validation && WC()->cart->add_to_cart( $product_id, $quantity ) ) {
209 $args = isset( $_POST['args'] ) ? auxin_sanitize_input( $_POST['args'] ) : array(
210 'title' => '',
211 'css_class' => '',
212 'dropdown_class' => '',
213 'color_class' => 'aux-black',
214 'action_on' => 'click',
215 'cart_url' => '#',
216 'dropdown_skin' => '',
217 );
218 $items = auxin_get_cart_items( $args );
219 $count = $woocommerce->cart->cart_contents_count;
220 $total = auxin_get_cart_basket( $args, $count );
221
222 $data = array(
223 'fragments' => apply_filters(
224 'woocommerce_add_to_cart_fragments',
225 array(
226 '.aux-cart-wrapper .aux-card-dropdown' => '<div class="aux-card-dropdown aux-phone-off">' . $items . '</div>' ,
227 )
228 ),
229 'cart_hash' => WC()->cart->get_cart_hash(),
230 'items' => $items,
231 'total' => $total,
232 'notif' => sprintf( '<div class="aux-woocommerce-ajax-notification woocommerce-message"><a href="%s" class="button wc-forward">%s</a> "%s" %s</div>', esc_url( wc_get_cart_url() ) , __( 'View cart', 'auxin-elements' ), get_the_title( $product_id ) , __('has been added to your cart.', 'auxin-elements') )
233 );
234 // Send json success
235 wp_send_json_success( $data );
236 } else {
237 wp_send_json_error( sprintf( '<div class="aux-woocommerce-ajax-notification woocommerce-error">%s</div>', __('Sorry, this product cannot be purchased.', 'auxin-elements') ) );
238 }
239
240 }
241
242 } catch( Exception $e ){
243 wp_send_json_error( sprintf( '<div class="aux-woocommerce-ajax-notification woocommerce-error">%s</div>', __('An Error Occurred!', 'auxin-elements') ) );
244 }
245
246 }
247 add_action( 'wp_ajax_auxels_add_to_cart', 'auxels_add_product_to_cart' );
248 add_action( 'wp_ajax_nopriv_auxels_add_to_cart', 'auxels_add_product_to_cart' );
249
250 /**
251 * Get refreshed cart fragments
252 */
253 function auxels_get_refreshed_fragments() {
254 global $woocommerce;
255
256 $args = isset( $_POST['args'] ) ? auxin_sanitize_input( $_POST['args'] ) : array(
257 'title' => '',
258 'css_class' => '',
259 'dropdown_class' => '',
260 'color_class' => 'aux-black',
261 'action_on' => 'click',
262 'cart_url' => '#',
263 'dropdown_skin' => '',
264 );
265
266 $count = (int) $woocommerce->cart->cart_contents_count;
267 if ( $count > 0 ) {
268 $items = auxin_get_cart_items( $args );
269 } else {
270 $items = '<div class="aux-card-box aux-empty-cart"><img src="'. esc_url( AUXIN_URL . 'images/other/empty-cart.svg' ) . '">' . esc_html__( 'Cart is empty', 'auxin-elements' ) . '</div>';
271 }
272
273 $total = auxin_get_cart_basket( $args, $count );
274
275 $data = array(
276 'cart_hash' => WC()->cart->get_cart_hash(),
277 'items' => $items,
278 'total' => $total,
279 );
280
281 // Send json success
282 wp_send_json_success( $data );
283 }
284 add_action( 'wp_ajax_auxels_get_refreshed_fragments', 'auxels_get_refreshed_fragments' );
285 add_action( 'wp_ajax_nopriv_auxels_get_refreshed_fragments', 'auxels_get_refreshed_fragments' );
286
287 /**
288 * Ajax Search Handler
289 *
290 * @return void
291 */
292 function auxels_ajax_search() {
293
294 $available_search_post_types = auxin_get_available_post_types_for_search();
295
296 if ( ! empty( $_GET['post_types'] ) ) {
297 $post_types = auxin_sanitize_input( $_GET['post_types'] );
298 } else {
299 $post_types = array_keys( $available_search_post_types );
300 }
301
302 $s = trim( sanitize_text_field( $_GET['s'] ) );
303 if ( "0" == $cat = trim( sanitize_text_field( $_GET['cat'] ) ) ) {
304 $cat = '';
305 }
306
307 // Start Searching First Post type
308 $search_instance = new Auxels_Search_Post_Type($s,$cat,$post_types[0],'');
309
310 if ( ! empty( $_GET['per_page'] ) && is_numeric( $_GET['per_page'] ) ) {
311 $search_instance->set_query_args( array( 'posts_per_page' => sanitize_text_field( $_GET['per_page'] ) ) );
312 }
313
314 $results = array();
315 foreach( $post_types as $key => $post_type ) {
316 $search_instance->set_query_args( array( 'post_type' => $post_type ) );
317 switch ($post_type) {
318 case 'product':
319 $result = $search_instance->search_products();
320 break;
321 case 'portfolio':
322 $result = $search_instance->search_portfolio();
323 break;
324 default:
325 $result = $search_instance->search_general_post_types();
326 break;
327 }
328 $result['fromTitle'] = sprintf( esc_html__( 'From %s', 'auxin-elements' ), esc_html( $available_search_post_types[ $post_type ] ) );
329 $result['noResultMessage'] = sprintf( esc_html__( "Nothing found in %s", 'auxin-elements' ), esc_html( $available_search_post_types[ $post_type ] ) );
330 $results[] = $result;
331
332 }
333
334 wp_send_json_success( $results );
335 }
336
337 add_action( 'wp_ajax_aux_modern_search_handler', 'auxels_ajax_search' );
338 add_action( 'wp_ajax_nopriv_aux_modern_search_handler', 'auxels_ajax_search');