PluginProbe
Property Hive / 2.3.0
Property Hive v2.3.0
2.3.0 2.2.6 2.2.5 2.2.4 2.2.3 2.2.2 1.4.46 1.4.47 1.4.48 1.4.49 1.4.5 1.4.50 1.4.51 1.4.52 1.4.53 1.4.54 1.4.55 1.4.56 1.4.57 1.4.58 1.4.59 1.4.6 1.4.60 1.4.61 1.4.62 All 260 releases
propertyhive / includes / class-ph-frontend-scripts.php

class-ph-frontend-scripts.php in Property Hive 2.3.0, at includes/class-ph-frontend-scripts.php

236 lines 9.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 if ( ! defined( 'ABSPATH' ) ) {
4 exit; // Exit if accessed directly
5 }
6
7 /**
8 * Handle frontend forms
9 *
10 * @class PH_Frontend_Scripts
11 * @version 1.0.0
12 * @package PropertyHive/Classes/
13 * @category Class
14 * @author PropertyHive
15 */
16 class PH_Frontend_Scripts {
17
18 /**
19 * Hook in methods
20 */
21 public static function init() {
22 add_action( 'wp_enqueue_scripts', array( __CLASS__, 'load_scripts' ) );
23 add_filter( 'script_loader_tag', array( __CLASS__, 'embed_script_attributes' ), 10, 2 );
24 add_action( 'wp_print_scripts', array( __CLASS__, 'check_jquery' ), 25 );
25 add_action( 'wp_print_scripts', array( __CLASS__, 'localize_printed_scripts' ), 5 );
26 add_action( 'wp_print_footer_scripts', array( __CLASS__, 'localize_printed_scripts' ), 5 );
27 }
28
29 /**
30 * Preserve the provider attributes used by the original Reel embeds.
31 */
32 public static function embed_script_attributes( $tag, $handle ) {
33 if ( 'propertyhive-instagram-embed' === $handle ) {
34 return str_replace( '<script ', '<script async ', $tag );
35 }
36 if ( 'propertyhive-facebook-embed' === $handle ) {
37 $tag = str_replace( array( 'id="propertyhive-facebook-embed-js"', "id='propertyhive-facebook-embed-js'" ), 'id="facebook-jssdk"', $tag );
38 return str_replace( '<script ', '<script async defer crossorigin="anonymous" ', $tag );
39 }
40 return $tag;
41 }
42
43 /**
44 * Get styles for the frontend
45 * @return array
46 */
47 public static function get_styles() {
48 return apply_filters( 'propertyhive_enqueue_styles', array(
49 'propertyhive-general' => array(
50 'src' => str_replace( array( 'http:', 'https:' ), '', PH()->plugin_url() ) . '/assets/css/propertyhive.css',
51 'deps' => '',
52 'version' => PH_VERSION,
53 'media' => 'all'
54 ),
55 ) );
56 }
57
58 /**
59 * Register/queue frontend scripts.
60 *
61 * @access public
62 * @return void
63 */
64 public static function load_scripts() {
65 global $post;
66
67 //$suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
68 $suffix = '';
69 $assets_path = str_replace( array( 'http:', 'https:' ), '', PH()->plugin_url() ) . '/assets/';
70 $frontend_script_path = $assets_path . 'js/frontend/';
71
72 // Register any scripts for later use, or used as dependencies
73 wp_register_script( 'jquery-cookie', $assets_path . 'js/jquery-cookie/jquery.cookie' . $suffix . '.js', array( 'jquery' ), '1.3.1', true );
74
75 wp_register_script( 'propertyhive_fancybox', $assets_path . 'js/fancybox/jquery.fancybox' . $suffix . '.js', array( 'jquery' ), '3.5.7', true );
76 wp_register_style( 'propertyhive_fancybox_css', $assets_path . 'css/jquery.fancybox' . $suffix . '.css', array(), '3.5.7' );
77
78 wp_register_script( 'tiny_slider', $assets_path . 'js/tiny-slider/tiny-slider.js', array( 'jquery' ), '2.9.4', true );
79 wp_register_script( 'propertyhive_carousel', $assets_path . 'js/frontend/carousel.js', array( 'jquery' ), PH_VERSION, true );
80 wp_register_style( 'tiny_slider_css', $assets_path . 'js/tiny-slider/tiny-slider.css', array(), '2.9.4' );
81
82 if ( get_option('propertyhive_lettings_fees_display_search_results', '') == 'yes' )
83 {
84 wp_enqueue_script( 'propertyhive_fancybox' );
85 wp_enqueue_style( 'propertyhive_fancybox_css' );
86 }
87
88 if ( is_property() )
89 {
90 wp_enqueue_script( 'propertyhive_fancybox' );
91 wp_enqueue_style( 'propertyhive_fancybox_css' );
92
93 wp_enqueue_script( 'flexslider', $assets_path . 'js/flexslider/jquery.flexslider' . $suffix . '.js', array( 'jquery' ), '2.7.2', true );
94 wp_enqueue_script( 'flexslider-init', $assets_path . 'js/flexslider/jquery.flexslider.init' . $suffix . '.js', array( 'jquery','flexslider' ), PH_VERSION, true );
95 wp_enqueue_style( 'flexslider_css', $assets_path . 'css/flexslider.css', array(), '2.7.2' );
96 }
97
98 // Global frontend scripts
99 wp_enqueue_script( 'propertyhive_search', $frontend_script_path . 'search' . $suffix . '.js', array( 'jquery' ), PH_VERSION, true );
100 wp_enqueue_script( 'propertyhive_make_enquiry', $frontend_script_path . 'make-enquiry' . $suffix . '.js', array( 'jquery' ), PH_VERSION, true );
101 //wp_enqueue_script( 'propertyhive', $frontend_script_path . 'propertyhive' . $suffix . '.js', array( 'jquery' ), PH_VERSION, true );
102
103 $captcha_service = get_option( 'propertyhive_captcha_service', '' );
104 if ( $captcha_service == 'turnstile' )
105 {
106 if ( get_option( 'propertyhive_captcha_site_key', '' ) != '' && get_option( 'propertyhive_captcha_secret', '' ) != '' )
107 {
108 // phpcs:ignore PluginCheck.CodeAnalysis.EnqueuedResourceOffloading.OffloadedContent -- Required by the configured Cloudflare Turnstile service.
109 wp_enqueue_script( 'turnstile', 'https://challenges.cloudflare.com/turnstile/v0/api.js?onload=ph_init_turnstile', array(), PH_VERSION, array( 'strategy' => 'defer', 'in_footer' => true ) );
110 }
111 }
112
113 wp_register_script( 'multiselect', $assets_path . 'js/multiselect/jquery.multiselect' . /*$suffix .*/ '.js', array('jquery'), '2.4.18', true );
114 wp_enqueue_style( 'multiselect', $assets_path . 'css/jquery.multiselect.css', array(), '2.4.18' );
115
116 wp_register_script( 'propertyhive_dynamic_population', $assets_path . 'js/frontend/dynamic-population' . /*$suffix .*/ '.js', array('jquery'), '1.0.0', true );
117
118 wp_enqueue_script( 'propertyhive_utm_tracker', $assets_path . 'js/frontend/utm-tracker' . $suffix . '.js', array( 'jquery' ), PH_VERSION, true );
119
120 // CSS Styles
121 $enqueue_styles = self::get_styles();
122
123 if ( $enqueue_styles ) {
124 foreach ( $enqueue_styles as $handle => $args ) {
125 wp_enqueue_style( $handle, $args['src'], $args['deps'], $args['version'], $args['media'] );
126 }
127 }
128 }
129
130 /**
131 * Localize scripts only when enqueued
132 */
133 public static function localize_printed_scripts() {
134 global $wp;
135
136 $assets_path = str_replace( array( 'http:', 'https:' ), '', PH()->plugin_url() ) . '/assets/';
137
138 if ( wp_script_is( 'propertyhive_search' ) )
139 {
140 $params = array(
141 'custom_departments' => ph_get_custom_departments(),
142 'do_image_resize' => false,
143 'image_ratio' => 2 / 3,
144 );
145
146 $current_settings = get_option( 'propertyhive_template_assistant', array() );
147
148 if (
149 is_post_type_archive('property')
150 ||
151 ( isset($current_settings['search_result_css_all_pages']) && $current_settings['search_result_css_all_pages'] == 'yes' )
152 )
153 {
154 if (
155 isset($current_settings['search_result_layout']) &&
156 isset($current_settings['search_result_layout']) == 2
157 )
158 {
159 $params['do_image_resize'] = true;
160 }
161 }
162
163 $params = apply_filters( 'propertyhive_search_params', $params );
164 $params = apply_filters( 'propertyhive_template_assistant_script_params', $params );
165
166 wp_localize_script( 'propertyhive_search', 'propertyhive_search_params', $params );
167 }
168
169 if ( wp_script_is( 'propertyhive_make_enquiry' ) )
170 {
171 $data = array(
172 'ajax_url' => PH()->ajax_url(),
173 'default_validation_error_message' => esc_html(__( 'Please ensure all required fields have been completed', 'propertyhive' )),
174 );
175 if ( get_option('propertyhive_captcha_service', '') != '' )
176 {
177 $data['captcha_service'] = get_option('propertyhive_captcha_service', '');
178 $data['recaptcha_site_key'] = get_option('propertyhive_captcha_site_key', 'recaptcha-v3');
179 }
180 wp_localize_script( 'propertyhive_make_enquiry', 'propertyhive_make_property_enquiry_params', apply_filters( 'propertyhive_make_property_enquiry_params', $data ) );
181 }
182
183 if ( wp_script_is( 'propertyhive_account' ) )
184 {
185 $data = array(
186 'ajax_url' => PH()->ajax_url(),
187 'my_account_url' => get_permalink( ph_get_page_id('my_account') ),
188 'custom_departments' => ph_get_custom_departments(),
189 'login_nonce' => wp_create_nonce( "ph_login" ),
190 'lost_password_nonce' => wp_create_nonce( "ph_lost_password" ),
191 'reset_password_nonce' => wp_create_nonce( "ph_reset_password" ),
192 'register_nonce' => wp_create_nonce( "ph_register" ),
193 'userdetails_nonce' => wp_create_nonce( "ph_userdetails" ),
194 'requirements_nonce' => wp_create_nonce( "ph_requirements" ),
195 'default_validation_error_message' => esc_html(__( 'Please ensure all required fields have been completed', 'propertyhive' )),
196 );
197 if ( get_option('propertyhive_captcha_service', '') != '' )
198 {
199 $data['captcha_service'] = get_option('propertyhive_captcha_service', '');
200 $data['recaptcha_site_key'] = get_option('propertyhive_captcha_site_key', 'recaptcha-v3');
201 }
202
203 wp_localize_script( 'propertyhive_account', 'propertyhive_account_params', apply_filters( 'propertyhive_account_params', $data ) );
204 }
205
206 if ( wp_script_is( 'multiselect' ) ) {
207 wp_localize_script( 'multiselect', 'propertyhive_multiselect_params', apply_filters( 'propertyhive_multiselect_params', array(
208 'search' => false,
209 'selected_text' => __( 'selected', 'propertyhive' ),
210 ) ) );
211 }
212 }
213
214 /**
215 * PH requires jQuery 1.8 since it uses functions like .on() for events and .parseHTML.
216 * If, by the time wp_print_scrips is called, jQuery is outdated (i.e not
217 * using the version in core) we need to deregister it and register the
218 * core version of the file.
219 *
220 * @access public
221 * @return void
222 */
223 public static function check_jquery() {
224 global $wp_scripts;
225
226 // Enforce minimum version of jQuery
227 if ( ! empty( $wp_scripts->registered['jquery']->ver ) && ! empty( $wp_scripts->registered['jquery']->src ) && 0 >= version_compare( $wp_scripts->registered['jquery']->ver, '1.8' ) ) {
228 wp_deregister_script( 'jquery' );
229 wp_register_script( 'jquery', '/wp-includes/js/jquery/jquery.js', array(), '1.8', false );
230 wp_enqueue_script( 'jquery' );
231 }
232 }
233 }
234
235 PH_Frontend_Scripts::init();
236