PluginProbe
WPVR – 360 Panorama viewer and Virtual Tour Builder for WordPress / 8.5.71
WPVR – 360 Panorama viewer and Virtual Tour Builder for WordPress v8.5.71
9.1.2 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 All 221 releases
wpvr / includes / class-wpvr.php

class-wpvr.php in WPVR – 360 Panorama viewer and Virtual Tour Builder for WordPress 8.5.71, at includes/class-wpvr.php

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