PluginProbe
WP VR – 360 Panorama and Virtual Tour Builder / 8.5.78
WP VR – 360 Panorama and Virtual Tour Builder v8.5.78
9.1.1 9.1.0 9.0.3 9.0.2 9.0.1 9.0.0 8.5.79 8.5.78 8.5.77 8.5.76 8.5.75 8.5.74 8.5.73 8.5.72 8.5.71 8.5.70 8.5.69 8.5.68 8.5.35 8.5.36 8.5.37 8.5.38 8.5.39 8.5.4 8.5.40 All 220 releases
wpvr / includes / class-wpvr.php

class-wpvr.php in WP VR – 360 Panorama and Virtual Tour Builder 8.5.78, at includes/class-wpvr.php

520 lines 15.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * The file that defines the core plugin class
5 *
6 * A class definition that includes attributes and functions used across both the
7 * public-facing side of the site and the admin area.
8 *
9 * @link http://rextheme.com/
10 * @since 8.0.0
11 *
12 * @package Wpvr
13 * @subpackage Wpvr/includes
14 */
15
16 use WPVR\Builder\DIVI\WPVR_Divi_modules;
17
18 /**
19 * The core plugin class.
20 *
21 * This is used to define internationalization, admin-specific hooks, and
22 * public-facing site hooks.
23 *
24 * Also maintains the unique identifier of this plugin as well as the current
25 * version of the plugin.
26 *
27 * @since 8.0.0
28 * @package Wpvr
29 * @subpackage Wpvr/includes
30 * @author Rextheme <support@rextheme.com>
31 */
32 class Wpvr
33 {
34
35 /**
36 * The loader that's responsible for maintaining and registering all hooks that power
37 * the plugin.
38 *
39 * @since 8.0.0
40 * @access protected
41 * @var Wpvr_Loader $loader Maintains and registers all hooks for the plugin.
42 */
43 protected $loader;
44
45 /**
46 * The unique identifier of this plugin.
47 *
48 * @since 8.0.0
49 * @access protected
50 * @var string $plugin_name The string used to uniquely identify this plugin.
51 */
52 protected $plugin_name;
53
54 /**
55 * The current version of the plugin.
56 *
57 * @since 8.0.0
58 * @access protected
59 * @var string $version The current version of the plugin.
60 */
61 protected $version;
62
63 /**
64 * The post type for the plugin
65 *
66 * @since 8.0.0
67 * @var string $version The current version of the plugin.
68 */
69 protected $post_type;
70
71 /**
72 * Instacne of WPVR_Post_Type
73 *
74 * @var object
75 * @since 8.0.0
76 */
77 protected $wpvr_post_type;
78
79 /**
80 * Instance of Wpvr_Admin class
81 *
82 * @var object
83 * @since 8.0.0
84 */
85 protected $plugin_admin;
86
87 /**
88 * Holds instances or information about the DIVI modules used in the builder.
89 *
90 * This property may store an array of module instances or configurations, depending
91 * on how it's utilized within the class. It's used to manage and reference DIVI modules
92 * effectively within custom builder implementations.
93 *
94 * @var array
95 */
96 protected $divi_modules;
97
98 /**
99 * Define the core functionality of the plugin.
100 *
101 * Set the plugin name and the plugin version that can be used throughout the plugin.
102 * Load the dependencies, define the locale, and set the hooks for the admin area and
103 * the public-facing side of the site.
104 *
105 * Define the core functionality of the plugin.
106 *
107 * Set the plugin name and the plugin version that can be used throughout the plugin.
108 * Load the dependencies, define the locale, and set the hooks for the admin area and
109 * the public-facing side of the site.
110 *
111 * @since 8.0.0
112 */
113 public function __construct()
114 {
115 if (defined('WPVR_VERSION')) {
116 $this->version = WPVR_VERSION;
117 } else {
118 $this->version = '8.0.0';
119 }
120 $this->plugin_name = 'wpvr';
121 $this->post_type = 'wpvr_item';
122
123 $this->load_dependencies();
124 $this->set_locale();
125 $this->define_admin_hooks();
126 $this->define_public_hooks();
127 add_action('plugins_loaded', array($this, 'load_plugin'), 99);
128 add_action('init', array($this, 'register_wpvr_setup_wizard'));
129 add_action('admin_init', array($this, 'admin_redirects'));
130 add_filter('wpvr_tracking_enabled', array($this, 'wpvr_tracking_enabled'));
131 }
132
133 /**
134 * Initializes and loads the DIVI modules into the class property.
135 *
136 * This method sets up the DIVI modules by fetching an instance of the WPVR_Divi_modules class
137 * and storing it in the divi_modules property. It ensures that the modules are ready to be
138 * used within the plugin.
139 *
140 * @since 8.4.8 This method was introduced in version 8.4.8 to streamline the initialization of DIVI modules.
141 */
142 public function load_plugin()
143 {
144 $this->divi_modules = WPVR_Divi_modules::instance();
145 }
146
147
148 /**
149 * Load the required dependencies for this plugin.
150 *
151 * Include the following files that make up the plugin:
152 *
153 * - Wpvr_Loader. Orchestrates the hooks of the plugin.
154 * - Wpvr_i18n. Defines internationalization functionality.
155 * - Wpvr_Admin. Defines all hooks for the admin area.
156 * - Wpvr_Public. Defines all hooks for the public side of the site.
157 *
158 * Create an instance of the loader which will be used to register the hooks
159 * with WordPress.
160 *
161 * @since 8.0.0
162 * @access private
163 */
164 private function load_dependencies()
165 {
166
167 /**
168 * The class responsible for auto loading all files of the core plugin.
169 */
170 require_once plugin_dir_path(__DIR__) . 'vendor/autoload.php';
171
172 /**
173 * The class responsible for orchestrating the actions and filters of the core plugin.
174 */
175 require_once plugin_dir_path(__DIR__) . 'includes/class-wpvr-loader.php';
176
177 /**
178 * The class responsible for defining internationalization functionality of the plugin.
179 */
180 require_once plugin_dir_path(__DIR__) . 'includes/class-wpvr-i18n.php';
181
182 $this->loader = new Wpvr_Loader();
183 }
184
185
186 /**
187 * Define the locale for this plugin for internationalization.
188 *
189 * Uses the Wpvr_i18n class in order to set the domain and to register the hook
190 * with WordPress.
191 *
192 * @since 8.0.0
193 * @access private
194 */
195 private function set_locale()
196 {
197 $plugin_i18n = new Wpvr_i18n();
198 $this->loader->add_action('init', $plugin_i18n, 'load_plugin_textdomain');
199 }
200
201
202 /**
203 * Register all of the hooks related to the admin area functionality
204 * of the plugin.
205 *
206 * @since 8.0.0
207 * @access private
208 */
209 private function define_admin_hooks()
210 {
211 if ( ! function_exists( 'is_plugin_active' ) ) {
212 require_once ABSPATH . 'wp-admin/includes/plugin.php';
213 }
214 $this->plugin_admin = new Wpvr_Admin($this->get_plugin_name(), $this->get_version(), $this->get_post_type());
215
216 $this->loader->add_filter('plugin_action_links_' . WPVR_BASE, $this->plugin_admin, 'plugin_action_links_wpvr', 10, 4);
217 $this->loader->add_action('admin_enqueue_scripts', $this->plugin_admin, 'enqueue_styles');
218 $this->loader->add_action('admin_enqueue_scripts', $this->plugin_admin, 'enqueue_scripts');
219 $this->loader->add_action('publish_wpvr_item', $this->plugin_admin, 'show_review_request_markups', 99999);
220 $this->loader->add_action('admin_init', $this->plugin_admin, 'wpvr_trigger_based_review_helper', 99999);
221 $high_res_image = get_option('high_res_image');
222
223 if ($high_res_image == 'true') { //phpcs:ignore
224 add_filter('big_image_size_threshold', '__return_false');
225 }
226
227 $this->loader->add_action('admin_init', $this->plugin_admin, 'trigger_rollback');
228 if (!is_plugin_active('wpvr-pro/wpvr-pro.php')) {
229 $this->loader->add_action('include_floor_plan_meta_content', $this, 'include_floor_plan_meta_content', 10, 1);
230 $this->loader->add_action('include_background_tour_meta_content', $this, 'include_background_tour_meta_content', 10, 1);
231 $this->loader->add_action('include_street_view_meta_content', $this, 'include_street_view_meta_content', 10, 1);
232 $this->loader->add_action('include_export_meta_content', $this, 'include_export_meta_content', 10, 2);
233 }
234
235 }
236
237 public function include_floor_plan_meta_content($post_data)
238 {
239 ?>
240
241 <div class="rex-pano-tab floor-plan" id="floorPlan">
242 <h6 class="title"> <?php echo esc_html__('Floor Plan Settings : ', 'wpvr');?> </h6>
243
244 <div class="content-wrapper">
245
246 <div class="floor-plan-left">
247 <!-- bg tour on/off -->
248 <div class="single-settings inline-style">
249 <span> <?php echo esc_html__('Enable Floor Plan: ', 'wpvr') ?> </span>
250 <span class="wpvr-switcher">
251 <input id="wpvr_floor_plan_enabler" class="vr-switcher-check wpvr_floor_plan_enabler" name="wpvr_floor_plan_enabler" disabled type="checkbox"/>
252 <label for="wpvr_floor_plan_enabler"></label>
253 </span>
254
255
256 <div class="field-tooltip">
257 <img loading="lazy" src="<?php echo esc_url( WPVR_PLUGIN_DIR_URL . 'admin/icon/tooltip-icon.svg' ); ?>" alt="icon" />
258
259 <span>
260 <?php
261 echo wp_kses(
262 sprintf(
263 /* translators: %s: documentation url */
264 __('Activate the floor plan view for your virtual tour. <a href="%s" target="_blank" rel="noopener noreferrer">View Doc</a>', 'wpvr'),
265 esc_url('https://rextheme.com/docs/virtual-floor-plans-inside-tours/#0-toc-title')
266 ),
267 array(
268 'a' => array('href' => array(), 'target' => array(), 'rel' => array())
269 )
270 );
271 ?>
272 </span>
273 </div>
274
275
276 </div>
277
278 </div>
279
280 </div>
281
282 </div>
283
284 <?php
285 }
286
287 public function include_background_tour_meta_content($post_data)
288 {
289 ?>
290
291 <div class="rex-pano-tab background-tour" id="backgroundTour">
292 <h6 class="title"> <?php echo esc_html__('Background Tour Settings : ', 'wpvr');?> </h6>
293
294 <div class="content-wrapper">
295 <div class="background-tour-left">
296 <!-- bg tour on/off -->
297 <div class="single-settings inline-style">
298 <span> <?php echo esc_html__('Enable Background Tour: ', 'wpvr') ?> </span>
299
300 <span class="wpvr-switcher">
301 <input id="wpvr_bg_tour_enabler" class="vr-switcher-check wpvr_bg_tour_enabler" name="wpvr_bg_tour_enabler" type="checkbox" disabled />
302 <label for="wpvr_bg_tour_enabler"></label>
303 </span>
304
305 <div class="field-tooltip">
306 <img loading="lazy" src="<?php echo esc_url( WPVR_PLUGIN_DIR_URL . 'admin/icon/tooltip-icon.svg' ); ?>" alt="icon" />
307
308 <span>
309 <?php
310 echo wp_kses(
311 sprintf(
312 /* translators: %s: documentation url */
313 __('When enabled, a title and subtitle will appear at the top of the tour. <a href="%s" target="_blank" rel="noopener noreferrer">View Doc</a>', 'wpvr'),
314 esc_url('https://rextheme.com/docs/360-panorama-background-virtual-tour/')
315 ),
316 array(
317 'a' => array('href' => array(), 'target' => array(), 'rel' => array())
318 )
319 );
320 ?>
321 </span>
322 </div>
323
324 </div>
325 </div>
326 </div>
327
328 </div>
329
330 <?php
331 }
332
333 public function include_street_view_meta_content($post_data)
334 {
335 ?>
336
337 <div class="rex-pano-tab streetview" id="streetview">
338
339 <h6 class="title"> <?php echo esc_html__('Embed Google Street View : ', 'wpvr'); ?> </h6>
340
341 <div class="single-settings">
342 <div class="wpvr-global-tooltip-area">
343 <span> <?php echo esc_html__('Enable Street View:','wpvr') ?> </span>
344
345 <div class="field-tooltip">
346 <img loading="lazy" src="<?php echo esc_url( WPVR_PLUGIN_DIR_URL . 'admin/icon/tooltip-icon.svg' ); ?>" alt="icon" />
347 <span>
348 <?php echo esc_html__('Insert a Street View iframe link.', 'wpvr'); ?>
349 <a href="https://rextheme.com/docs/wp-vr-embed-google-street-view-tour/"
350 target="_blank"
351 rel="noopener noreferrer">
352 <?php echo esc_html__('View Doc', 'wpvr'); ?>
353 </a>
354 </span>
355 </div>
356
357 </div>
358
359
360 <ul>
361 <li class="radio-btn">
362 <input class="styled-radio wpvrStreetView_off" id="styled-radio-sv-off" type="radio" name="wpvrStreetView" value="off" >
363 <label for="styled-radio-sv-off">Off</label>
364 </li>
365
366 <li class="radio-btn">
367 <input class="styled-radio wpvrStreetView_on" id="styled-radio-sv-on" type="radio" name="wpvrStreetView" value="on">
368 <label for="styled-radio-sv-on">On</label>
369 </li>
370 </ul>
371
372 </div>
373
374 </div>
375 <?php
376
377 }
378
379 public function include_export_meta_content($post_data ,$post)
380 {
381 ?>
382
383 <div class="rex-pano-tab export" id="import">
384 <h6 class="title"> <?php echo esc_html__('Export Tour : ', 'wpvr') ?></h6>
385 <a class="vr-export"><?php echo esc_html__('Download', 'wpvr') ?></a>
386 </div>
387 <?php
388
389 }
390
391
392 /**
393 * Register all of the hooks related to the public-facing functionality
394 * of the plugin.
395 *
396 * @since 8.0.0
397 * @access private
398 */
399 private function define_public_hooks()
400 {
401 if (apply_filters('is_wpvr_pro_active', false)) {
402 if (class_exists('Wpvrpropublic')) {
403 $plugin_public = new Wpvrpropublic($this->get_plugin_name(), $this->get_version());
404 } else {
405 $plugin_public = new Wpvr_Public($this->get_plugin_name(), $this->get_version());
406 }
407 } else {
408 $plugin_public = new Wpvr_Public($this->get_plugin_name(), $this->get_version());
409 }
410
411 $this->loader->add_action('wp_enqueue_scripts', $plugin_public, 'enqueue_styles');
412 $this->loader->add_action('wp_enqueue_scripts', $plugin_public, 'enqueue_scripts');
413
414 $plugin_public->public_init();
415 }
416
417
418 /**
419 * Run the loader to execute all of the hooks with WordPress.
420 *
421 * @since 8.0.0
422 */
423 public function run()
424 {
425 $this->loader->run();
426 }
427
428
429 /**
430 * The name of the plugin used to uniquely identify it within the context of
431 * WordPress and to define internationalization functionality.
432 *
433 * @since 8.0.0
434 * @return string The name of the plugin.
435 */
436 public function get_plugin_name()
437 {
438 return $this->plugin_name;
439 }
440
441
442 /**
443 * The reference to the class that orchestrates the hooks with the plugin.
444 *
445 * @since 8.0.0
446 * @return Wpvr_Loader Orchestrates the hooks of the plugin.
447 */
448 public function get_loader()
449 {
450 return $this->loader;
451 }
452
453
454 /**
455 * Retrieve the version number of the plugin.
456 *
457 * @since 8.0.0
458 * @return string The version number of the plugin.
459 */
460 public function get_version()
461 {
462 return $this->version;
463 }
464
465
466 /**
467 * Retrieve the post type of the plugin.
468 *
469 * @since 8.0.0
470 */
471 public function get_post_type()
472 {
473 return $this->post_type;
474 }
475
476 public function register_wpvr_setup_wizard()
477 {
478 if (!empty($_GET['page']) && 'rex-wpvr-setup-wizard' == sanitize_text_field($_GET['page'])) {
479 add_action('admin_menu', function () {
480 add_dashboard_page('WPVR Setup', 'WPVR Setup', 'manage_options', 'rex-wpvr-setup-wizard', function () {
481 return '';
482 });
483 });
484 add_action('current_screen', function () {
485 (new WPVR_Setup_Wizard())->setup_wizard();
486 }, 999);
487 }
488 }
489
490 /**
491 * Handle redirects to setup/welcome page after install and updates.
492 *
493 * For setup wizard, transient must be present, the user must have access rights, and we must ignore the network/bulk plugin updaters.
494 */
495 public function admin_redirects()
496 {
497 // Setup wizard redirect.
498 if (get_transient('_wpvr_activation_redirect')) {
499 $do_redirect = true;
500 // On these pages, or during these events, postpone the redirect.
501 if (wp_doing_ajax() || is_network_admin() || !current_user_can('manage_options')) {
502 $do_redirect = false;
503 }
504
505 if ( $do_redirect ) {
506 delete_transient('_wpvr_activation_redirect');
507 $url = admin_url('admin.php?page=rex-wpvr-setup-wizard');
508 wp_safe_redirect( wp_sanitize_redirect( esc_url_raw( $url ) ) );
509 exit;
510 }
511 }
512 }
513
514 public function wpvr_tracking_enabled(){
515 // Check if the tracking option is enabled
516 $tracking_enabled = get_option( 'wpvr_posthog_access_enabled', 'yes' );
517 return $tracking_enabled === 'yes';
518 }
519 }
520