PluginProbe
CBX Map for Google Map & OpenStreetMap / 2.0.0
CBX Map for Google Map & OpenStreetMap v2.0.0
trunk 1.1.10 1.1.11 1.1.12 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5
cbxgooglemap / includes / CBXGoogleMapAdmin.php

CBXGoogleMapAdmin.php in CBX Map for Google Map & OpenStreetMap 2.0.0, at includes/CBXGoogleMapAdmin.php

1,483 lines 57.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * The admin-specific functionality of the plugin.
5 *
6 * @link https://codeboxr.com
7 * @since 1.0.0
8 *
9 * @package Cbxgooglemap
10 * @subpackage Cbxgooglemap/admin
11 */
12
13 /**
14 * The admin-specific functionality of the plugin.
15 *
16 * Defines the plugin name, version, and two examples hooks for how to
17 * enqueue the admin-specific stylesheet and JavaScript.
18 *
19 * @package Cbxgooglemap
20 * @subpackage Cbxgooglemap/admin
21 * @author Codeboxr <info@codeboxr.com>
22 */
23
24 namespace Cbx\Googlemap;
25
26 // If this file is called directly, abort.
27 if ( ! defined('WPINC')) {
28 die;
29 }
30
31 use Cbx\Googlemap\Helpers\CBXGooglemapHelper;
32 use Cbx\Googlemap\Helpers\CBXGooglemapMetaHelper;
33
34 final class CBXGoogleMapAdmin
35 {
36
37 /**
38 * The ID of this plugin.
39 *
40 * @since 1.0.0
41 * @access private
42 * @var string $plugin_name The ID of this plugin.
43 */
44 private $plugin_name;
45
46 /**
47 * The version of this plugin.
48 *
49 * @since 1.0.0
50 * @access private
51 * @var string $version The current version of this plugin.
52 */
53 private $version;
54
55 /**
56 * The ID of this plugin.
57 *
58 * @since 1.1.12
59 * @access private
60 * @var string $settings The ID of this plugin.
61 */
62 public $settings;
63
64 /**
65 * Initialize the class and set its properties.
66 *
67 *
68 * @since 1.0.0
69 */
70 public function __construct()
71 {
72 $this->plugin_name = CBXGOOGLEMAP_PLUGIN_NAME;
73 $this->version = CBXGOOGLEMAP_PLUGIN_VERSION;
74
75 //get instance of setting api
76 $this->settings = new CBXGooglemapSettings();
77 }//end of construtor
78
79 /**
80 * Initialize setting
81 */
82 public function setting_init()
83 {
84 //set the settings
85 $this->settings->set_sections($this->get_settings_sections());
86 $this->settings->set_fields($this->get_settings_fields());
87 //initialize settings
88 $this->settings->admin_init();
89 }//end setting_init
90
91 /**
92 * Global Setting Sections
93 *
94 *
95 * @return array
96 */
97 public function get_settings_sections()
98 {
99 return apply_filters(
100 'cbxgooglemap_setting_sections', [
101 [
102 'id' => 'cbxgooglemap_general',
103 'title' => esc_html__('Default Config', 'cbxgooglemap')
104 ],
105 [
106 'id' => 'cbxgooglemap_demo',
107 'title' => esc_html__('Demo & Shortcodes', 'cbxgooglemap')
108 ],
109 [
110 'id' => 'cbxgooglemap_tools',
111 'title' => esc_html__('Tools', 'cbxgooglemap'),
112 ]
113 ]
114 );
115 }//end get_settings_sections
116
117 /**
118 * Returns all the settings fields
119 *
120 * @return array settings fields
121 */
122 public function get_settings_fields()
123 {
124 $general_settings = get_option('cbxgooglemap_general', []);
125
126 $tools_delete_table_html = '<div id="setting_resetinfo">'.esc_html__('Loading ...', 'cbxgooglemap').'</div>';
127
128 $settings_builtin_fields = [
129 'cbxgooglemap_general' => [
130 'general_heading' => [
131 'name' => 'general_heading',
132 'label' => esc_html__('Default Config', 'cbxgooglemap'),
133 'type' => 'heading',
134 'default' => '',
135 ],
136 'mapsource' => [
137 'name' => 'mapsource',
138 'label' => esc_html__('Map Source', 'cbxgooglemap'),
139 'type' => 'radio',
140 'default' => 1,
141 'options' => [
142 0 => esc_html__('Openstreet Map(leafletjs)', 'cbxgooglemap'),
143 1 => esc_html__('Google Map', 'cbxgooglemap')
144 ],
145 'inline' => 1,
146 'sanitize_callback' => 'absint'
147 ],
148 'apikey' => [
149 'name' => 'apikey',
150 'label' => esc_html__('Api Key', 'cbxgooglemap'),
151 'desc' => esc_html__('Google map api key', 'cbxgooglemap'),
152 'type' => 'text'
153
154 ],
155 'maptype' => [
156 'name' => 'maptype',
157 'label' => esc_html__('Map Type', 'cbxgooglemap'),
158 'type' => 'select',
159 'default' => 'roadmap',
160 'options' => [
161 'roadmap' => esc_html__('Road Map', 'cbxgooglemap'),
162 'satellite' => esc_html__('Satellite Map', 'cbxgooglemap'),
163 'hybrid' => esc_html__('Hybrid Map', 'cbxgooglemap'),
164 'terrain' => esc_html__('Terrain Map', 'cbxgooglemap'),
165 ],
166 'desc' => esc_html__('Google Map only', 'cbxgooglemap'),
167 'sanitize_callback' => 'sanitize_text_field'
168 ],
169 'zoom' => [
170 'name' => 'zoom',
171 'label' => esc_html__('Zoom Level', 'cbxgooglemap'),
172 'desc' => esc_html__('Default Zoom Level', 'cbxgooglemap'),
173 'type' => 'number',
174 'step' => 1,
175 'default' => 8,
176 'sanitize_callback' => 'absint'
177
178 ],
179 'width' => [
180 'name' => 'with',
181 'label' => esc_html__('Width', 'cbxgooglemap'),
182 'desc' => esc_html__('Default is 100% to make the map responsive, if you want any fixed width then don\'t put, % or just put numeric value, don\'t px with numeric value', 'cbxgooglemap'),
183 'type' => 'text',
184 'default' => '100%',
185
186 ],
187 'height' => [
188 'name' => 'height',
189 'label' => esc_html__('Height', 'cbxgooglemap'),
190 'desc' => esc_html__('Default height 300 as px, put any numeric value.', 'cbxgooglemap'),
191 'type' => 'number',
192 'default' => '300',
193 'sanitize_callback' => 'floatval'
194 ],
195 'scrollwheel' => [
196 'name' => 'scrollwheel',
197 'label' => esc_html__('Mouse Scroll Wheel', 'cbxgooglemap'),
198 'desc' => esc_html__('Enable/disable mouse scroll whell', 'cbxgooglemap'),
199 'type' => 'radio',
200 'default' => 1,
201 'options' => [
202 '0' => esc_html__('Disable', 'cbxgooglemap'),
203 '1' => esc_html__('Enable', 'cbxgooglemap')
204 ],
205 'inline' => 1,
206 'sanitize_callback' => 'absint'
207 ],
208 'showinfo' => [
209 'name' => 'showinfo',
210 'label' => esc_html__('Show Info window', 'cbxgooglemap'),
211 'desc' => esc_html__('Show information on click of marker', 'cbxgooglemap'),
212 'type' => 'radio',
213 'default' => 1,
214 'options' => [
215 '0' => esc_html__('Disable', 'cbxgooglemap'),
216 '1' => esc_html__('Enable', 'cbxgooglemap')
217 ],
218 'inline' => 1,
219 'sanitize_callback' => 'absint'
220 ],
221 'infow_open' => [
222 'name' => 'infow_open',
223 'label' => esc_html__('Info/Popup Window', 'cbxgooglemap'),
224 'type' => 'radio',
225 'default' => 1,
226 'options' => [
227 '0' => esc_html__('On Click', 'cbxgooglemap'),
228 '1' => esc_html__('Open(Default)', 'cbxgooglemap'),
229 ],
230 'inline' => 1,
231 'sanitize_callback' => 'absint'
232 ],
233 'mapicon' => [
234 'name' => 'mapicon',
235 'label' => esc_html__('Map Icon', 'cbxgooglemap'),
236 'type' => 'file',
237 'default' => ''
238 ],
239 'hide_leaflet' => [
240 'name' => 'hide_leaflet',
241 'label' => esc_html__('Hide Leaflet Branding', 'cbxgooglemap'),
242 'type' => 'radio',
243 'default' => 0,
244 'options' => [
245 0 => esc_html__('Show/Default', 'cbxgooglemap'),
246 1 => esc_html__('Hide', 'cbxgooglemap'),
247 ],
248 'inline' => 1,
249 'sanitize_callback' => 'absint'
250 ],
251
252 ],
253 'cbxgooglemap_demo' => [
254 'demo_heading' => [
255 'name' => 'demo_heading',
256 'label' => esc_html__('Demo & Shortcodes', 'cbxgooglemap'),
257 'type' => 'heading',
258 'default' => '',
259 ],
260 'shortcode_demo' => [
261 'name' => 'shortcode_demo',
262 'label' => esc_html__('Shortcode & Demo', 'cbxgooglemap'),
263 'desc' => esc_html__('Shortcode and demo based on default setting, please save once to check change.', 'cbxgooglemap'),
264 'type' => 'shortcode',
265 'class' => 'cbcurrencyconverter_demo_copy',
266 'default' => CBXGooglemapHelper::shortcode_builder($general_settings),
267 'sanitize_callback' => 'sanitize_text_field'
268 ]
269 ],
270 'cbxgooglemap_tools' => [
271 'tools_heading' => [
272 'name' => 'tools_heading',
273 'label' => esc_html__('Tools Settings', 'cbxgooglemap'),
274 'type' => 'heading',
275 'default' => '',
276 ],
277 'delete_global_config' => [
278 'name' => 'delete_global_config',
279 'label' => esc_html__('On Uninstall delete plugin data', 'cbxgooglemap'),
280 'desc' => '<p>'.esc_html__('Delete Global Config data(options/plugin settings), custom table(s), files/folders, all map custom post type created by this plugin on uninstall. Please note that this process can not be undone and it is recommended to keep full database and files backup before doing this.', 'cbxgooglemap').'</p>',
281 'type' => 'radio',
282 'options' => [
283 'yes' => esc_html__('Yes', 'cbxgooglemap'),
284 'no' => esc_html__('No', 'cbxgooglemap'),
285 ],
286 'default' => 'no',
287 ],
288 'reset_data' => [
289 'name' => 'reset_data',
290 'label' => esc_html__('Reset all section', 'cbxgooglemap'),
291 'desc' => $tools_delete_table_html.'<p>'.esc_html__('This will reset all option/section created by this plugin.',
292 'cbxgooglemap').'<a data-busy="0" class="button secondary ml-20" id="reset_data_trigger" href="#">'.esc_html__('Reset Sections',
293 'cbxgooglemap').'</a></p>',
294 'type' => 'html',
295 'default' => 'off'
296 ],
297 ],
298 ];
299
300
301 $settings_fields = []; //final setting array that will be passed to different filters
302 $sections = $this->get_settings_sections();
303
304 foreach ($sections as $section) {
305 if ( ! isset($settings_builtin_fields[$section['id']])) {
306 $settings_builtin_fields[$section['id']] = [];
307 }
308 }
309
310
311 foreach ($sections as $section) {
312 $settings_fields[$section['id']] = apply_filters('cbxgooglemap_global_'.$section['id'].'_fields', $settings_builtin_fields[$section['id']]);
313 }
314
315 return apply_filters('cbxgooglemap_global_fields', $settings_fields);
316 }//end get_settings_fields
317
318 /**
319 * Register Custom Post Type cbxgooglemap
320 *
321 * @since 3.7.0
322 */
323 public function create_post_type()
324 {
325 CBXGooglemapHelper::create_googlemap_post_type();
326
327 // Check the option we set on activation.
328 if (get_option('cbxgooglemap_flush_rewrite_rules') === 'true') {
329 flush_rewrite_rules();
330 delete_option('cbxgooglemap_flush_rewrite_rules');
331 }
332 }//end create_post_type
333
334
335 /**
336 * Show menu page
337 */
338 public function menu_pages()
339 {
340 //setting page
341 $setting_page_hook = add_submenu_page('edit.php?post_type=cbxgooglemap', esc_html__('CBX Map: Settings', 'cbxgooglemap'), esc_html__('Settings', 'cbxgooglemap'), 'manage_options', 'cbxgooglemap_settings', [
342 $this,
343 'menu_page_settings'
344 ]);
345
346 $doc_page_hook = add_submenu_page('edit.php?post_type=cbxgooglemap', esc_html__('CBX Map Helps & Updates', 'cbxgooglemap'), esc_html__('Helps & Updates', 'cbxgooglemap'), 'manage_options', 'cbxgooglemap_support', [
347 $this,
348 'menu_page_docs'
349 ]);
350 }//end menu_pages
351
352 /**
353 * Show cbxeventz Setting page
354 */
355 public function menu_page_settings()
356 {
357 //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
358 echo cbxgooglemap_get_template_html('admin/settings.php',
359 [
360 'ref' => $this,
361 'settings' => $this->settings
362 ]
363 );
364 }//end menu_page_settings
365
366 /**
367 * Render the help & support page for this plugin.
368 *
369 * @since 1.0.0
370 */
371 public function menu_page_docs()
372 {
373 echo cbxgooglemap_get_template_html('admin/support.php');//phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
374 }//end method menu_page_docs
375
376 /**
377 * Add metabox for custom post type cbxfeedbackform && cbxfeedbackbtn
378 *
379 * @since 1.0.0
380 */
381 public function add_meta_boxes()
382 {
383 add_meta_box('cbxgooglemap_metabox', esc_html__('Map Parameters', 'cbxgooglemap'), [
384 $this,
385 'parameter_metabox_display'
386 ], 'cbxgooglemap', 'normal', 'high');
387
388
389 add_meta_box('cbxgooglemap_shortcode', esc_html__('Shortcode', 'cbxgooglemap'), [
390 $this,
391 'shortcode_metabox_display'
392 ], 'cbxgooglemap', 'side', 'low');
393 }//end add_meta_boxes
394
395 /**
396 * Show Shortcode display metabox
397 *
398 * @param $post
399 */
400 public function shortcode_metabox_display($post)
401 {
402 if (isset($post->ID) && $post->ID > 0) {
403 $post_id = $post->ID;
404 $post_type = $post->post_type;
405
406 echo cbxgooglemap_get_template_html('admin/metabox_shortcode.php', [//phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
407 'post_id' => $post_id,
408 'post_type' => $post_type
409 ]);
410 }
411 }//end shortcode_metabox_display
412
413 /**
414 * Render metabox
415 *
416 * @param $post
417 *
418 * since v1.0.0
419 */
420 public function parameter_metabox_display($post)
421 {
422 global $post;
423 $post_type = $post->post_type;
424
425
426 $meta_fields = CBXGooglemapMetaHelper::cbxgooglemap_meta_fields();
427
428 $combined_field = '_'.$post_type.'_combined'; //field name for non sortable fields
429 $meta_prefix = '_'.$post_type; //field prefix for sortable fields
430
431
432 CBXGooglemapMetaHelper::render_meta_fields($post, $meta_fields, $combined_field, $meta_prefix, true); //
433 }//end parameter_metabox_display
434
435 /**
436 * Save meta box for cbxeventz
437 *
438 * @param $post_id
439 */
440 public function metabox_save($post_id, $post, $update)
441 {
442
443 $post_type = $post->post_type;
444
445 // Check if our nonce is set.
446 if ( ! isset($_POST['cbxmetahelper_'.$post_type.'_meta_box_nonce'])) {
447 return $post_id;
448 }
449
450 // Verify that the nonce is valid.
451 if ( ! wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['cbxmetahelper_'.$post_type.'_meta_box_nonce'])), 'cbxmetahelper_'.$post_type.'_meta_box')) {
452 return $post_id;
453 }
454
455 // If this is an autosave, our form has not been submitted, so we don't want to do anything.
456 if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
457 return $post_id;
458 }
459
460 // Check the user's permissions.
461 if (isset($_POST['post_type']) && $post_type == $_POST['post_type']) {
462
463 if ( ! current_user_can('edit_post', $post_id)) {
464 return $post_id;
465 }
466 }
467
468 $meta_fields = CBXGooglemapMetaHelper::cbxgooglemap_meta_fields($post_id);
469
470
471 $combined_field = '_'.$post_type.'_combined'; //field name for non sortable fields
472 $meta_prefix = '_'.$post_type; //field prefix for sortable fields
473
474 $meta_combined = get_post_meta($post_id, $combined_field, true); //meta fields not sortable
475
476 $meta_combined = ! is_array($meta_combined) ? [] : $meta_combined;
477
478
479 $combined_arr = [];
480 foreach ($meta_fields as $section_id => $fields) {
481 foreach ($fields as $id => $field) {
482
483 $field_type = $field['type'];
484
485 $sanitize_callback = isset($field['sanitize_callback']) ? $field['sanitize_callback'] : null;
486
487 if (isset($_POST[$meta_prefix.$id])) {
488
489 if (isset($_POST[$meta_prefix.$id])) {
490 $updated_value = sanitize_text_field(wp_unslash($_POST[$meta_prefix.$id]));
491
492
493 if ($field_type == 'text') {
494 $updated_value = sanitize_text_field(wp_unslash($updated_value));
495 } elseif ($field_type == 'textarea') {
496 $updated_value = sanitize_textarea_field(wp_unslash($updated_value));
497 } else {
498 if ($sanitize_callback !== null && is_callable($sanitize_callback)) {
499 $updated_value = call_user_func($sanitize_callback, $updated_value);
500 }
501 }
502
503 $is_sortable = isset($field['sortable']) ? $field['sortable'] : false;
504
505 if ($is_sortable) {
506 $ret = update_post_meta($post_id, $meta_prefix.$id, $updated_value); //update the combined meta
507 } else {
508 //save as combined meta
509 $meta_combined[$meta_prefix.$id] = $updated_value;
510 }
511 }
512
513 }
514
515 }
516 }
517
518 update_post_meta($post_id, $combined_field, $meta_combined); //update the combined meta
519
520 do_action('cbxgooglemap_metabox_save', $post_id);
521
522 }//end metabox_save
523
524 /**
525 * Add or adjust col for cbxgooglemap post type
526 *
527 * @param $cbxpoll_columns
528 *
529 * @return array
530 *
531 */
532 public function cbxgooglemap_add_new_columns($columns)
533 {
534 unset($columns['date']);
535 unset($columns['comments']);
536
537 $columns['lat'] = esc_attr('Latitude', 'cbxgooglemap');
538 $columns['lng'] = esc_attr('Longitude', 'cbxgooglemap');
539 $columns['zoom'] = esc_attr('Zoom', 'cbxgooglemap');
540
541 //$columns['shortcode'] = esc_attr( 'Shortcode', 'cbxgooglemap' );
542
543 return $columns;
544 }//end cbxgooglemap_add_new_columns
545
546 /**
547 * Add extra cols information for cbxgooglemap post type
548 *
549 * @param $column_name
550 *
551 *
552 * show data to poll table custom column
553 */
554 public function cbxgooglemap_manage_columns($column_name)
555 {
556 global $wpdb, $post;
557
558 $post_id = intval($post->ID);
559 $post_type = $post->post_type;
560
561 $combined_field = '_cbxgooglemap_combined'; //field name for non sortable fields
562 $meta_prefix = '_cbxgooglemap'; //field prefix for sortable fields
563
564 $meta_combined = get_post_meta($post_id, $combined_field, true);
565
566 $lat = get_post_meta($post_id, $meta_prefix.'lat', true);
567 $lat = ($lat !== false) ? $lat : '';
568
569 $lng = get_post_meta($post_id, $meta_prefix.'lng', true);
570 $lng = ($lng !== false) ? $lng : '';
571
572 $zoom = (isset($meta_combined[$meta_prefix.'zoom']) && intval($meta_combined[$meta_prefix.'zoom']) > 0) ? intval($meta_combined[$meta_prefix.'zoom']) : '';
573
574
575 switch ($column_name) {
576 /*case 'shortcode':
577 echo '<div class="cbxshortcode-wrap">';
578 echo '<span data-clipboard-text=\'[cbxgooglemap id="' . absint( $post_id ) . '"]\' title="' . esc_html__( 'Click to clipboard', 'cbxgooglemap' ) . '" id="cbxgooglemapshortcode-' . absint( $post_id ) . '" class="cbxshortcode cbxshortcode-edit cbxshortcode-' . absint( $post_id ) . '">[cbxgooglemap id="' . absint( $post_id ) . '"]</span>';
579 echo '<span class="cbxballon_ctp_btn cbxballon_ctp" aria-label="' . esc_html__( 'Click to copy', 'cbxgooglemap' ) . '" data-balloon-pos="up"><i></i></span>';
580 echo '</div>';
581 break;*/
582 case 'lat':
583 echo esc_html($lat);
584 break;
585 case 'lng':
586 echo esc_html($lng);
587 break;
588 case 'zoom':
589 echo esc_html($zoom);
590 break;
591 default:
592 break;
593 } // end switch
594 }//end cbxgooglemap_manage_columns
595
596 /**
597 * Register the stylesheets for the admin area.
598 *
599 * @since 1.0.0
600 */
601 public function enqueue_styles($hook)
602 {
603 $current_page = isset($_GET['page']) ? sanitize_text_field(wp_unslash($_GET['page'])) : '';// phpcs:ignore WordPress.Security.NonceVerification.Recommended
604 $ver = $this->version;
605 $in_footer = [
606 'in_footer' => true,
607 ];
608
609 $vendor_url = CBXGOOGLEMAP_ROOT_URL.'assets/vendors/';
610 //$css_url = CBXGOOGLEMAP_ROOT_URL . 'assets/css/';
611 //$js_url = CBXGOOGLEMAP_ROOT_URL . 'assets/css/';
612
613 $css_url_part = CBXGOOGLEMAP_ROOT_URL.'assets/css/';
614 $css_url_part_vendors = CBXGOOGLEMAP_ROOT_URL.'assets/vendors/';
615 $js_url_part_vendors = CBXGOOGLEMAP_ROOT_URL.'assets/vendors/';
616
617 global $post_type, $post;
618
619 $api_key = esc_attr($this->settings->get_option('apikey', 'cbxgooglemap_general', ''));
620 $map_source = absint($this->settings->get_option('mapsource', 'cbxgooglemap_general', 1));
621
622 wp_register_style('awesome-notifications', $css_url_part_vendors.'awesome-notifications/style.css', [], $ver);
623 wp_register_style('flatpickr', $css_url_part_vendors.'flatpickr/flatpickr.min.css', [], $ver);
624 wp_register_style('cbxgooglemap-admin', $css_url_part.'cbxgooglemap-admin.css', [], $ver);
625
626 //listing mode
627 if (($hook == 'edit.php') && $post_type == 'cbxgooglemap') {
628 wp_register_style('cbxgooglemap-admin', $css_url_part.'cbxgooglemap-admin.css', [], $ver);
629 wp_enqueue_style('cbxgooglemap-admin');
630 }
631
632 //add new, edit mode
633 if (($hook == 'post.php' || $hook == 'post-new.php') && $post_type == 'cbxgooglemap') {
634
635 if ($map_source == 0) {
636 wp_register_style('leaflet', $vendor_url.'leaflet/leaflet.css', [], $ver, 'all');
637 wp_register_style('leaflet-control-geocoder', $vendor_url.'leaflet-control-geocoder/Control.Geocoder.css', [], $ver, 'all');
638 }
639
640 wp_register_style('select2', $vendor_url.'select2/select2.min.css', [], $ver);
641 wp_register_style('cbxgooglemap-admin', $css_url_part.'cbxgooglemap-admin.css', [
642 'select2',
643 ], $ver);
644
645 wp_enqueue_style('select2');
646
647 if ($map_source == 0) {
648 wp_enqueue_style('leaflet');
649 wp_enqueue_style('leaflet-control-geocoder');
650 }
651
652 wp_enqueue_style('awesome-notifications');
653 wp_enqueue_style('cbxgooglemap-admin');
654 }//add new, edit mode
655
656 if ($current_page == 'cbxgooglemap_settings') {
657 wp_register_style('pickr', $css_url_part_vendors.'pickr/classic.min.css', [], $ver);
658 wp_register_style('select2', $css_url_part_vendors.'select2/select2.min.css', [], $ver);
659
660 wp_register_style('cbxgooglemap-setting', $css_url_part.'cbxgooglemap-setting.css', [
661 'pickr',
662 'awesome-notifications',
663 'select2',
664 'cbxgooglemap-admin'
665 ], $ver);
666
667 wp_enqueue_style('pickr');
668 wp_enqueue_style('awesome-notifications');
669 wp_enqueue_style('select2');
670
671 //for demo css
672 if ($map_source == 0) {
673 wp_register_style('leaflet', $vendor_url.'leaflet/leaflet.css', [], $ver, 'all');
674 wp_register_style('cbxgooglemap-public', $css_url_part.'cbxgooglemap-public.css', ['leaflet'], $ver, 'all');
675 wp_enqueue_style('leaflet');
676
677 } else {
678 wp_register_style('cbxgooglemap-public', $css_url_part.'cbxgooglemap-public.css', [], $ver, 'all');
679 }
680
681 wp_enqueue_style('cbxgooglemap-public');
682 wp_enqueue_style('cbxgooglemap-admin');
683 wp_enqueue_style('cbxgooglemap-setting');
684
685 //end for demo css
686 }//end setting
687
688 if ($current_page == 'cbxgooglemap_support') {
689 wp_enqueue_style('cbxgooglemap-admin');
690 }//end style adding for doc page
691
692 //tax pages
693 if (($hook == 'edit-tags.php' || $hook == 'term.php') && $post_type == 'cbxgooglemap' && $current_page == '') {
694 wp_enqueue_style('awesome-notifications');
695 wp_enqueue_style('cbxgooglemap-admin');
696 }
697 }//end enqueue_styles
698
699 /**
700 * Register the JavaScript for the admin area.
701 *
702 * @since 1.0.0
703 */
704 public function enqueue_scripts($hook)
705 {
706 $current_page = isset($_GET['page']) ? sanitize_text_field(wp_unslash($_GET['page'])) : '';// phpcs:ignore WordPress.Security.NonceVerification.Recommended
707 $ver = $this->version;
708 $in_footer = [
709 'in_footer' => true,
710 ];
711
712 $vendor_url = CBXGOOGLEMAP_ROOT_URL.'assets/vendors/';
713 $css_url = CBXGOOGLEMAP_ROOT_URL.'assets/css/';
714 $js_url = CBXGOOGLEMAP_ROOT_URL.'assets/js/';
715
716 //assets urls
717 $js_url_part = CBXGOOGLEMAP_ROOT_URL.'assets/js/';
718 $js_url_part_vendors = CBXGOOGLEMAP_ROOT_URL.'assets/vendors/';
719 $js_url_part_vanila = CBXGOOGLEMAP_ROOT_URL.'assets/js/vanila/';
720 $js_url_part_build = CBXGOOGLEMAP_ROOT_URL.'assets/js/build/';
721
722
723 $t = true;
724 $f = false;
725
726
727 $in_footer = [
728 'in_footer' => $t,
729 ];
730
731 $in_footer_async = [
732 'in_footer' => $t,
733 'strategy' => 'async'
734 ];
735
736 $global_translation = CBXGooglemapHelper::global_translation_strings();
737 $plus_svg = cbxgooglemap_esc_svg(cbxgooglemap_load_svg('icon_plus'));
738
739
740 global $post_type, $post;
741 $post_id = isset($post->ID) ? absint($post->ID) : 0;
742
743 $api_key = esc_attr($this->settings->get_option('apikey', 'cbxgooglemap_general', ''));
744 $map_source = absint($this->settings->get_option('mapsource', 'cbxgooglemap_general', 1));
745 $default_mapicon = esc_url($this->settings->get_option('mapicon', 'cbxgooglemap_general', ''));
746
747 /*if($default_mapicon == ''){
748 $default_mapicon = 'https://mt.googleapis.com/vt/icon/name=icons/spotlight/spotlight-poi.png';
749 }*/
750
751 /*$zoom_level_default = intval( $this->settings->get_option( 'zoom', 'cbxgooglemap_general', '8' ) );
752 if ( $zoom_level_default == 0 ) {
753 $zoom_level_default = 8;
754 }*/
755
756
757 wp_register_script('cbxgooglemap-events', $js_url.'cbxgooglemap-events.js', [], $ver, $in_footer);
758 wp_register_script('awesome-notifications', $js_url_part_vendors.'awesome-notifications/script.js', [], $ver, $in_footer);
759 wp_register_script('select2', $js_url_part_vendors.'select2/select2.min.js', ['jquery'], $ver, $in_footer);
760 //wp_register_script( 'flatpickr', $js_url_part_vendors . 'flatpickr/flatpickr.min.js', [ 'jquery' ], $ver, true );
761 wp_register_script('pickr', $js_url_part_vendors.'pickr/pickr.min.js', [], $ver, $in_footer);
762 //wp_register_script( 'jquery-validate', $js_url_part_vendors . 'jquery-validation/jquery.validate.min.js', [ 'jquery' ], $ver, $in_footer );
763
764 //maps listing mode
765 if ($hook == 'edit.php' && $post_type == 'cbxgooglemap') {
766 wp_register_script('cbxgooglemap-listing', $js_url.'cbxgooglemap-listing.js', ['jquery'], $ver, $t);
767
768 $cbxgooglemap_listing_js_vars = apply_filters('cbxgooglemap_listing_js_vars', $global_translation);
769 wp_localize_script('cbxgooglemap-listing', 'cbxgooglemap_listing', $cbxgooglemap_listing_js_vars);
770
771 wp_enqueue_script('jquery');
772 wp_enqueue_script('cbxgooglemap-listing');
773 }
774
775 //add new or edit mode
776 if (($hook == 'post.php' || $hook == 'post-new.php') && $post_type == 'cbxgooglemap') {
777
778 wp_enqueue_script('cbxgooglemap-events');
779
780
781 $edit_js_dep = ['jquery', 'select2'];
782
783 if ($map_source == 1 && $api_key != '') {
784 wp_register_script('coregooglemapapi', '//maps.googleapis.com/maps/api/js?key='.$api_key.'&libraries=places&callback=Function.prototype', [], $ver, $in_footer_async);
785
786 $edit_js_dep[] = 'awesome-notifications';
787 $edit_js_dep[] = 'coregooglemapapi';
788 $edit_js_dep[] = 'cbxgooglemap-events';
789
790 } elseif ($map_source == 0) {
791 wp_register_script('coregooglemapapi', $vendor_url.'leaflet/leaflet.js', [], $ver, $in_footer_async);
792 wp_register_script('leaflet-control-geocoder', $vendor_url.'leaflet-control-geocoder/Control.Geocoder.js', [], $ver, $in_footer_async);
793
794 $edit_js_dep[] = 'awesome-notifications';
795 $edit_js_dep[] = 'coregooglemapapi';
796 $edit_js_dep[] = 'leaflet-control-geocoder';
797 $edit_js_dep[] = 'cbxgooglemap-events';
798 }
799
800 wp_enqueue_media();
801 $main_marker = [];
802
803 wp_register_script('cbxgooglemap-edit', $js_url.'cbxgooglemap-edit.js', $edit_js_dep, $ver, $in_footer);
804
805 $edit_js_vars = [
806 'search_address' => esc_html__('Search Address', 'cbxgooglemap'),
807 'icon_url_default' => $default_mapicon,
808 'api_key' => $api_key,
809 'map_source' => $map_source,
810 'map_title_placeholder' => esc_html__('Map Title Here', 'cbxgooglemap'),
811 'no_address_found' => esc_html__('No details available for current input', 'cbxgooglemap'),
812 ];
813
814 $edit_js_vars = array_merge($edit_js_vars, $global_translation);
815
816 $edit_js_vars = apply_filters('cbxgooglemap_edit_js_vars', $edit_js_vars, $post_id);
817
818 wp_localize_script('cbxgooglemap-edit', 'cbxgooglemap_edit', $edit_js_vars);
819
820 //enqueue dependency js cripts
821 foreach ($edit_js_dep as $dep) {
822 wp_enqueue_script($dep);
823 }
824
825 //enqueue main edit scripts
826 wp_enqueue_script('cbxgooglemap-edit');
827 }
828
829 if ($current_page == 'cbxgooglemap_settings') {
830 $setting_js_deps = [
831 'jquery',
832 'jquery-ui-sortable',
833 'select2',
834 'pickr',
835 'awesome-notifications'
836 ];
837
838 $setting_js_deps = apply_filters('cbxgooglemap_setting_js_deps', $setting_js_deps);
839
840 $blog_id = is_multisite() ? get_current_blog_id() : null;
841
842 // Localize the script with new data
843 $setting_js_vars = [
844 'global_setting_link_html' => '<a href="'.esc_url(admin_url('edit.php?post_type=cbxgooglemap&page=cbxgooglemap_settings')).'" class="button outline primary pull-right">'.esc_html__('Global Settings', 'cbxgooglemap').'</a>',
845 'lang' => get_user_locale(),
846 'clearPermalinks' => esc_url_raw(get_rest_url($blog_id, 'cbxgooglemap/v1/admin/clear-permalinks')),
847 'rest_end_points' => [
848 'migrate_wp_wpsimplegooglemap' => esc_url_raw(get_rest_url('', 'cbxgooglemap/v1/migrate-wp-wpsimplegooglemap-data')),
849 ],
850 ];
851
852 $import_modal_html = '<div id="cbxgooglemap_settings_import_modal_wrap" class="cbx-chota">';
853 $import_modal_html .= '<h2>'.esc_html__('Import CBX Google Map Setting: Json file', 'cbxgooglemap').'</h2>';
854 $import_modal_html .= '<form method="post" id="cbxgooglemap_settings_import_form">';
855 $import_modal_html .= '<input type="file" name="file" id="cbxgooglemap_settings_import_file" accept="application/json" />';
856 $import_modal_html .= '</form>';
857 $import_modal_html .= '</div>';
858
859 $setting_js_vars['import_modal'] = $import_modal_html;
860 $setting_js_vars['import_modal_progress'] = '<p>'.esc_html__('Please wait, Importing...', 'cbxgooglemap').'</p>';
861
862 $cbxgooglemap_setting_js_vars = apply_filters('cbxgooglemap_setting_js_vars', array_merge($setting_js_vars, $global_translation));
863
864 wp_register_script('cbxgooglemap-setting', $js_url.'cbxgooglemap-setting.js', $setting_js_deps, $ver, $in_footer);
865
866 wp_localize_script('cbxgooglemap-setting', 'cbxgooglemap_setting_js_var', $cbxgooglemap_setting_js_vars);
867
868 //core
869 wp_enqueue_script('jquery');
870 wp_enqueue_media();
871
872 //vendors
873 wp_enqueue_script('jquery-ui-sortable');
874 wp_enqueue_script('select2');
875 wp_enqueue_script('pickr');
876 wp_enqueue_script('awesome-notifications');
877
878 //custom
879 wp_enqueue_script('cbxgooglemap-setting');
880
881 //for demo js (we need this but we will sort out later)
882 if (($map_source == 1 && ! empty($api_key)) || $map_source == 0) {
883 if ($map_source == 1) {
884 //phpcs:ignore WordPress.WP.EnqueuedResourceParameters.NotInFooter
885 wp_register_script('coregooglemapapi', '//maps.googleapis.com/maps/api/js?key='.esc_attr($api_key).'&libraries=places&callback=Function.prototype', [], $ver, $in_footer_async);
886 wp_register_script('cbxgooglemap-public', $js_url.'cbxgooglemap-public.js', [
887 'jquery',
888 'cbxgooglemap-events',
889 'coregooglemapapi'
890 ], $ver, $in_footer);
891
892 wp_enqueue_script('coregooglemapapi');
893 } else {
894 wp_register_script('coregooglemapapi', $vendor_url.'leaflet/leaflet.js', [], $ver, $in_footer_async);
895 wp_register_script('cbxgooglemap-public', $js_url.'cbxgooglemap-public.js', [
896 'jquery',
897 'cbxgooglemap-events',
898 'coregooglemapapi',
899 //'leaflet-control-geocoder'
900 ], $ver, $in_footer);
901
902 wp_enqueue_script('cbxgooglemap-events');
903 wp_enqueue_script('coregooglemapapi');
904 //wp_enqueue_script( 'leaflet-control-geocoder' );
905 }
906
907 wp_enqueue_script('cbxgooglemap-public');
908 }//end for demo js
909
910 }//end js for setting page
911
912 //enqueue js for tax page
913 if (($hook == 'edit-tags.php' || $hook == 'term.php') && $post_type == 'cbxgooglemap' && $current_page == '') {
914 //tax js dependencies
915
916 $tax_js_deps = [
917 //core
918 'jquery',
919 //vendors
920 //'jquery-validate'
921 ];
922
923 $tax_js_deps = apply_filters('cbxgooglemap_tax_js_deps', $tax_js_deps);
924
925 $new_map_link_html = '<a href="'.esc_url(admin_url('edit.php?post_type=cbxgooglemap')).'" class="button secondary icon icon-right icon-inline mr-5"><i class="cbx-icon">'.$plus_svg.'</i>'.esc_html__('New Map',
926 'cbxgooglemap').'</a>';
927
928 $global_setting_link_html = '<a href="'.esc_url(admin_url('edit.php?post_type=cbxgooglemap&page=cbxgooglemap_settings')).'" class="button outline primary">'.esc_html__('Global Settings', 'cbxgooglemap').'</a>';
929
930 $tax_js_vars =
931 [
932 'tax_title_prefix' => esc_html__('Map:', 'cbxgooglemap'),
933 'tags_title' => esc_html__('Map: Tags', 'cbxgooglemap'),
934 'category_title' => esc_html__('Map: Category', 'cbxgooglemap'),
935 'tax_new_setting' => '<div class="wp-heading-wrap-right pull-right">'.$new_map_link_html.$global_setting_link_html.'</div>'
936 ];
937
938 $tax_js_vars = apply_filters('cbxgooglemap_tax_js_vars', array_merge($tax_js_vars, $global_translation));
939
940 wp_register_script('cbxgooglemap-tax', $js_url_part.'cbxgooglemap-tax.js', $tax_js_deps, $ver, true);
941 wp_localize_script('cbxgooglemap-tax', 'cbxgooglemap_tax', $tax_js_vars);
942
943
944 //core
945 wp_enqueue_script('jquery');
946
947 //vendors
948 //wp_enqueue_script( 'jquery-validate' );
949
950 //custom
951 wp_enqueue_script('cbxgooglemap-tax');
952 }//end enqueue js for tax page
953 }//end enqueue_scripts
954
955 /**
956 * Init all gutenberg blocks
957 */
958 public function gutenberg_blocks(){
959 if ( ! function_exists('register_block_type')) {
960 return;
961 }
962
963 $settings = $this->settings;
964 $in_footer = [
965 'in_footer' => true,
966 ];
967
968
969 //$general_settings = get_option( 'cbxgooglemap_general', [] );
970
971 //default field values
972 $zoom_default = $settings->get_field('zoom', 'cbxgooglemap_general', '8');
973 if ($zoom_default == 0) {
974 $zoom_default = 8;
975 }
976
977 $width_default = $settings->get_field('width', 'cbxgooglemap_general', '100%');
978 if ($width_default == '' || $width_default == 0) {
979 $width_default = '100%';
980 }
981
982 $height_default = absint($settings->get_field('height', 'cbxgooglemap_general', '300'));
983 if ($height_default == 0) {
984 $height_default = 300;
985 }
986
987
988 $scrollwheel_default = absint($settings->get_field('scrollwheel', 'cbxgooglemap_general', 1));
989 $showinfo_default = absint($settings->get_field('showinfo', 'cbxgooglemap_general', 1));
990 $infow_open_default = absint($settings->get_field('infow_open', 'cbxgooglemap_general', 1));
991 $maptype_default = esc_attr($settings->get_field('maptype', 'cbxgooglemap_general', 'roadmap'));
992
993 $query = get_posts([
994 'post_type' => 'cbxgooglemap',
995 'orderby' => 'date',
996 'posts_per_page' => -1,
997 'post_status' => 'publish'
998 ]);
999
1000 $googleMap_posts = [];
1001
1002 $googleMap_posts[] = [
1003 'label' => esc_html__('Select Map', 'cbxgooglemap'),
1004 'value' => '0'
1005 ];
1006
1007 foreach ($query as $key => $data) {
1008 $googleMap_posts[] = [
1009 'label' => esc_html($data->post_title),
1010 'value' => absint($data->ID)
1011 ];
1012 }
1013
1014
1015 wp_register_script('cbxgooglemap-block', plugin_dir_url(__FILE__).'../assets/js/blocks/cbxgooglemap-block.js', [
1016 'wp-blocks',
1017 'wp-element',
1018 'wp-components',
1019 'wp-editor',
1020 ], filemtime(plugin_dir_path(__FILE__).'../assets/js/blocks/cbxgooglemap-block.js'), $in_footer);
1021
1022 wp_register_style('cbxgooglemap-block', plugin_dir_url(__FILE__).'../assets/css/cbxgooglemap-block.css', [], filemtime(plugin_dir_path(__FILE__).'../assets/css/cbxgooglemap-block.css'));
1023
1024 $js_vars = apply_filters('cbxgooglemap_block_js_vars',
1025 [
1026 'block_title' => esc_html__('CBX Map: Location Map', 'cbxgooglemap'),
1027 'block_category' => 'codeboxr',
1028 'block_icon' => 'universal-access-alt',
1029 'general_settings' => [
1030 'title' => esc_html__('CBX Map Settings', 'cbxgooglemap'),
1031 'id' => esc_html__('Select Map', 'cbxgooglemap'),
1032 'id_default' => '',
1033 'id_options' => $googleMap_posts,
1034 'id_note' => esc_html__('Choose saved map or create from custom attributes below', 'cbxgooglemap'),
1035 'custom_attribute_note' => esc_html__('Custom Map Attributes', 'cbxgooglemap'),
1036 'maptype' => esc_html__('Map Type(Google Map Only)', 'cbxgooglemap'),
1037 'maptype_options' => CBXGooglemapHelper::maptype_block_options(),
1038 'lat' => esc_html__('Latitude', 'cbxgooglemap'),
1039 'lng' => esc_html__('Longitude', 'cbxgooglemap'),
1040 'width' => esc_html__('Width(Numeric, % allowed)', 'cbxgooglemap'),
1041 'height' => esc_html__('Height(only Numeric)', 'cbxgooglemap'),
1042 'zoom' => esc_html__('zoom', 'cbxgooglemap'),
1043 'scrollwheel' => esc_html__('Mouse Scroll Wheel', 'cbxgooglemap'),
1044 'showinfo' => esc_html__('Show Popup', 'cbxgooglemap'),
1045 'infow_open' => esc_html__('Popup Auto Display ', 'cbxgooglemap'),
1046 'heading' => esc_html__('Popup Heading', 'cbxgooglemap'),
1047 'address' => esc_html__('Location Address', 'cbxgooglemap'),
1048 'website' => esc_html__('Website url', 'cbxgooglemap'),
1049 'mapicon' => esc_html__('Map Icon', 'cbxgooglemap'),
1050 'mapicon_select' => esc_html__('Select image', 'cbxgooglemap'),
1051 ],
1052 ]);
1053
1054 wp_localize_script('cbxgooglemap-block', 'cbxgooglemap_block', $js_vars);
1055
1056 register_block_type('codeboxr/cbxgooglemap', [
1057 'editor_script' => 'cbxgooglemap-block',
1058 'editor_style' => 'cbxgooglemap-block',
1059 'attributes' => apply_filters('cbxgooglemap_block_attributes', [
1060 //general
1061 'id' => [
1062 'type' => 'integer',
1063 'default' => '0',
1064 ],
1065 'maptype' => [
1066 'type' => 'string',
1067 'default' => $maptype_default
1068 ],
1069 'lat' => [
1070 'type' => 'string',
1071 'default' => ''
1072 ],
1073 'lng' => [
1074 'type' => 'string',
1075 'default' => ''
1076 ],
1077 'width' => [
1078 'type' => 'string',
1079 'default' => $width_default,
1080 ],
1081
1082 'height' => [
1083 'type' => 'integer',
1084 'default' => $height_default
1085 ],
1086 'zoom' => [
1087 'type' => 'string',
1088 'default' => $zoom_default
1089 ],
1090 'scrollwheel' => [
1091 'type' => 'boolean',
1092 'default' => ($scrollwheel_default) ? true : false
1093 ],
1094 'showinfo' => [
1095 'type' => 'boolean',
1096 'default' => ($showinfo_default) ? true : false
1097 ],
1098 'infow_open' => [
1099 'type' => 'boolean',
1100 'default' => ($infow_open_default) ? true : false
1101 ],
1102 'heading' => [
1103 'type' => 'string',
1104 'default' => ''
1105 ],
1106 'address' => [
1107 'type' => 'string',
1108 'default' => ''
1109 ],
1110 'website' => [
1111 'type' => 'string',
1112 'default' => ''
1113 ],
1114 'mapicon' => [
1115 'type' => 'string',
1116 'default' => '',
1117 ]
1118 ]),
1119 'render_callback' => [$this, 'render_block']
1120 ]);
1121
1122 }//end gutenberg_blocks
1123
1124 /**
1125 * Getenberg server side render
1126 *
1127 * @param $settings
1128 *
1129 * @return string
1130 */
1131 public function render_block($attributes)
1132 {
1133 $settings = $this->settings;
1134 //$general_settings = get_option( 'cbxgooglemap_general', [] );
1135
1136 $api_key = $settings->get_field('apikey', 'cbxgooglemap_general', '');
1137 $map_source = intval($settings->get_field('mapsource', 'cbxgooglemap_general', 1));
1138
1139 if ($map_source == 1 && $api_key == '') {
1140 echo '<p style="text-align: center;">'.esc_html__('Google Map Api Key is invalid!', 'cbxgooglemap').'</p>';
1141 } else {
1142 $id = isset($attributes['id']) ? absint($attributes['id']) : 0;
1143
1144 if ($id > 0) {
1145 //render map from saved map
1146 return '[cbxgooglemap id="'.$id.'"]';
1147 } else {
1148 $attr = [];
1149
1150 if (isset($attributes['lat'])) {
1151 $attr['lat'] = sanitize_text_field(wp_unslash($attributes['lat']));
1152 }
1153
1154 if (isset($attributes['lng'])) {
1155 $attr['lng'] = sanitize_text_field(wp_unslash($attributes['lng']));
1156 }
1157
1158 if (isset($attributes['width'])) {
1159 $attr['width'] = sanitize_text_field($attributes['width']);
1160 }
1161
1162 if (isset($attributes['height'])) {
1163 $attr['height'] = intval($attributes['height']);
1164 }
1165
1166 if (isset($attributes['zoom'])) {
1167 $attr['zoom'] = sanitize_text_field($attributes['zoom']);
1168 }
1169
1170
1171 $attr['scrollwheel'] = ! empty($attributes['scrollwheel']) ? 1 : 0;
1172 $attr['infow_open'] = ! empty($attributes['infow_open']) ? 1 : 0;
1173 $attr['showinfo'] = ! empty($attributes['showinfo']) ? 1 : 0;
1174
1175 if (isset($attributes['heading'])) {
1176 $attr['heading'] = sanitize_text_field(wp_unslash($attributes['heading']));
1177 }
1178 if (isset($attributes['address'])) {
1179 $attr['address'] = sanitize_text_field(wp_unslash($attributes['address']));
1180 }
1181 if (isset($attributes['website'])) {
1182 $attr['website'] = sanitize_text_field(wp_unslash($attributes['website']));
1183 }
1184 if (isset($attributes['maptype'])) {
1185 $attr['maptype'] = sanitize_text_field(wp_unslash($attributes['maptype']));
1186 }
1187 if (isset($attributes['mapicon'])) {
1188 $attr['mapicon'] = esc_url($attributes['mapicon']);
1189 }
1190
1191 $attr = apply_filters('cbxgooglemap_block_shortcode_builder_attr', $attr, $attributes);
1192
1193 $attr_html = '';
1194
1195 foreach ($attr as $key => $value) {
1196 $attr_html .= ' '.$key.'="'.$value.'" ';
1197 }
1198
1199 //return do_shortcode( '[cbxgooglemap ' . $attr_html . ']' );
1200 return '[cbxgooglemap '.$attr_html.']';
1201 }
1202 }//end if api keys are ok
1203
1204 }//end codeboxrflexiblecountdown_block_render
1205
1206 /**
1207 * Register New Gutenberg block Category if need
1208 *
1209 * @param $categories
1210 * @param $post
1211 *
1212 * @return mixed
1213 */
1214 public function gutenberg_block_categories($categories, $post)
1215 {
1216 $found = false;
1217 foreach ($categories as $category) {
1218 if ($category['slug'] == 'codeboxr') {
1219 $found = true;
1220 break;
1221 }
1222 }
1223
1224 if ( ! $found) {
1225 return array_merge(
1226 $categories,
1227 [
1228 [
1229 'slug' => 'codeboxr',
1230 'title' => esc_html__('CBX Blocks', 'cbxgooglemap'),
1231 ],
1232 ]
1233 );
1234 }
1235
1236 return $categories;
1237 }//end gutenberg_block_categories
1238
1239
1240 /**
1241 * Enqueue style for block editor
1242 */
1243 public function enqueue_block_editor_assets()
1244 {
1245 }//end enqueue_block_editor_assets
1246
1247 /**
1248 * Load setting html
1249 *
1250 * @return void
1251 */
1252 public function settings_reset_load()
1253 {
1254 //security check
1255 check_ajax_referer('cbxgooglemap_nonce', 'security');
1256
1257 $msg = [];
1258 $msg['html'] = '';
1259 $msg['message'] = esc_html__('CBX Google Map reset setting html loaded successfully', 'cbxgooglemap');
1260 $msg['success'] = 1;
1261
1262 if ( ! current_user_can('manage_options')) {
1263 $msg['message'] = esc_html__('Sorry, you don\'t have enough permission', 'cbxgooglemap');
1264 $msg['success'] = 0;
1265 wp_send_json($msg);
1266 }
1267
1268 $msg['html'] = CBXGooglemapHelper::setting_reset_html_table();
1269
1270 wp_send_json($msg);
1271 } //end method settings_reset_load
1272
1273 /**
1274 * Full plugin reset and redirect
1275 */
1276 public function plugin_options_reset()
1277 {
1278
1279 //security check
1280 check_ajax_referer('cbxgooglemap_nonce', 'security');
1281
1282 $url = admin_url('admin.php?page=cbxgooglemap_settings');
1283
1284 $msg = [];
1285 $msg['message'] = esc_html__('CBX Google Map setting options reset successfully', 'cbxgooglemap');
1286 $msg['success'] = 1;
1287 $msg['url'] = $url;
1288
1289 if ( ! current_user_can('manage_options')) {
1290 $msg['message'] = esc_html__('Sorry, you don\'t have enough permission', 'cbxgooglemap');
1291 $msg['success'] = 0;
1292 wp_send_json($msg);
1293 }
1294
1295 do_action('cbxgooglemap_plugin_reset_before');
1296
1297 $plugin_resets = wp_unslash($_POST); // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing
1298
1299 //delete options
1300 $reset_options = isset($plugin_resets['reset_options']) ? $plugin_resets['reset_options'] : [];
1301 $option_values = (is_array($reset_options) && sizeof($reset_options) > 0) ? array_values($reset_options) : array_values(CBXGooglemapHelper::getAllOptionNames());
1302
1303 foreach ($option_values as $key => $option) {
1304 delete_option($option);
1305 }
1306
1307 do_action('cbxgooglemap_plugin_option_delete');
1308 do_action('cbxgooglemap_plugin_reset_after');
1309 do_action('cbxgooglemap_plugin_reset');
1310
1311 wp_send_json($msg);
1312 } //end plugin_reset
1313
1314 /**
1315 * Export plugin global settings
1316 *
1317 * @return void
1318 */
1319 public function settings_export()
1320 {
1321
1322 if (isset($_GET['cbxgooglemap_settings_export'])) {
1323 $url = admin_url('admin.php?page=cbxgooglemap_settings');
1324
1325 $msg = [];
1326 $msg['message'] = esc_html__('Google Map setting exported successfully', 'cbxgooglemap');
1327 $msg['success'] = 1;
1328 $msg['url'] = $url;
1329
1330 $passed = true;
1331
1332 $nonce = isset($_GET['security']) ? sanitize_text_field(wp_unslash($_GET['security'])) : '';
1333 if ( ! wp_verify_nonce($nonce, 'cbxgooglemap_settings_nonce')) {
1334 $passed = false;
1335 $msg['success'] = 0;
1336 $msg['message'] = esc_html__('Security check failed', 'cbxgooglemap');
1337 }
1338
1339 if ( ! current_user_can('manage_options')) {
1340 $passed = true;
1341 $msg['message'] = esc_html__('Sorry, you don\'t have enough permission', 'cbxgooglemap');
1342 $msg['success'] = 0;
1343 }
1344
1345 if ( ! $passed) {
1346 wp_send_json($msg);
1347 }
1348
1349 // Get Meta box data
1350 $sections = CBXGoogleMapAdmin::get_settings_sections();
1351
1352 $data = [
1353 'cbxgooglemap_settings' => true
1354 ];
1355
1356 $single_section = isset($_REQUEST['section']) ? sanitize_text_field(wp_unslash($_REQUEST['section'])) : '';
1357
1358 foreach ($sections as $section) {
1359 if ($single_section != '' && $section['id'] != $single_section) {
1360 continue;
1361 }
1362
1363
1364 $sections_fields = get_option($section['id']);
1365 if ( ! is_array($sections_fields)) {
1366 $sections_fields = [];
1367 }
1368
1369 $data[$section['id']] = $sections_fields;
1370
1371 if ($single_section != '' && $section['id'] == $single_section) {
1372 break;
1373 }
1374 }
1375
1376 // Create JSON
1377 $generate_json = wp_json_encode($data, JSON_PRETTY_PRINT);
1378
1379 // Create filename
1380 $filename = 'cbxgooglemap_settings_json';
1381
1382 // Force download .json file with JSON in it
1383 header('Content-type: application/vnd.ms-excel');
1384 header('Content-Type: application/force-download');
1385 header('Content-Type: application/download');
1386 header('Content-disposition: '.$filename.'.json');
1387 header('Content-disposition: filename='.$filename.'.json');
1388
1389 print $generate_json;//phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1390 exit;
1391 }//end if export mode
1392 }//end method settings_export
1393
1394 /**
1395 * Import settings
1396 *
1397 * @return void
1398 */
1399 public function settings_import()
1400 {
1401 //security check
1402 check_ajax_referer('cbxgooglemap_nonce', 'security');
1403
1404 $msg = [];
1405 $msg['message'] = esc_html__('CBX Google Map Settings imported successfully', 'cbxgooglemap');
1406 $msg['success'] = 1;
1407
1408 if ( ! current_user_can('manage_options')) {
1409 $msg['message'] = esc_html__('Sorry, you don\'t have enough permission', 'cbxgooglemap');
1410 $msg['success'] = 0;
1411 wp_send_json($msg);
1412 }
1413
1414 // Import settings api data
1415 $settings_data = isset($_REQUEST['settings_data']) ? sanitize_text_field(wp_unslash($_REQUEST['settings_data'])) : '';
1416 $settings_data = str_replace('data:application/json;base64,', '', $settings_data);
1417 $settings_data = base64_decode($settings_data);
1418
1419 $settings_data = json_decode($settings_data, true);
1420 // Redirect to settings page
1421 $msg['url'] = admin_url('admin.php?page=cbxgooglemap_settings');
1422
1423 if (isset($settings_data['cbxgooglemap_settings'])) {
1424 unset($settings_data['cbxgooglemap_settings']);
1425
1426 if (is_array($settings_data)) {
1427 foreach ($settings_data as $key => $value) {
1428 update_option($key, $value);
1429 }
1430 }
1431 wp_send_json($msg);
1432 }
1433
1434 $msg['message'] = esc_html__('Sorry, wrong format data', 'cbxgooglemap');
1435 $msg['success'] = 0;
1436 wp_send_json($msg);
1437 }//end method settings_import
1438
1439 /**
1440 * Reset single section
1441 *
1442 * @return void
1443 */
1444 public function plugin_reset_section()
1445 {
1446
1447 //security check
1448 check_ajax_referer('cbxgooglemap_nonce', 'security');
1449
1450 $url = admin_url('admin.php?page=cbxgooglemap_settings');
1451
1452 $msg = [];
1453 $msg['message'] = esc_html__('Comfort Google Map setting section reset successfully', 'cbxgooglemap');
1454 $msg['success'] = 1;
1455 $msg['url'] = $url;
1456
1457 if ( ! current_user_can('manage_options')) {
1458 $msg['message'] = esc_html__('Sorry, you don\'t have enough permission', 'cbxgooglemap');
1459 $msg['success'] = 0;
1460 wp_send_json($msg);
1461 }
1462
1463 $section = isset($_POST['section']) ? sanitize_text_field(wp_unslash($_POST['section'])) : '';
1464 if ($section == '') {
1465 $msg['message'] = esc_html__('Option section setting failed, as no section id is empty', 'cbxgooglemap');
1466 $msg['success'] = 0;
1467 wp_send_json($msg);
1468 }
1469
1470 //before hooks
1471 do_action('cbxgooglemap_plugin_reset_section_before');
1472
1473
1474 //delete the section
1475 delete_option($section);
1476
1477 //after hoooks
1478 do_action('cbxgooglemap_plugin_reset_section_after');
1479 do_action('cbxgooglemap_plugin_reset_section');
1480
1481 wp_send_json($msg);
1482 }//end method plugin_reset_section
1483 }//end class CBXGoogleMapAdmin