PluginProbe
CBX Map for Google Map & OpenStreetMap / 2.0.1
CBX Map for Google Map & OpenStreetMap v2.0.1
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.1, at includes/CBXGoogleMapAdmin.php

1,485 lines 57.2 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 = wp_unslash($_POST[$meta_prefix.$id]);
491
492 if ($field_type == 'text') {
493 $updated_value = sanitize_text_field($updated_value);
494 } elseif ($field_type == 'textarea') {
495 $updated_value = sanitize_textarea_field($updated_value);
496 } else {
497 if ($sanitize_callback !== null && is_callable($sanitize_callback)) {
498 $updated_value = call_user_func($sanitize_callback, $updated_value);
499 }
500 else{
501 $updated_value = sanitize_text_field($updated_value);
502 }
503 }
504
505 $is_sortable = isset($field['sortable']) ? $field['sortable'] : false;
506
507 if ($is_sortable) {
508 $ret = update_post_meta($post_id, $meta_prefix.$id, $updated_value); //update the combined meta
509 } else {
510 //save as combined meta
511 $meta_combined[$meta_prefix.$id] = $updated_value;
512 }
513 }
514
515 }
516
517 }
518 }
519
520 update_post_meta($post_id, $combined_field, $meta_combined); //update the combined meta
521
522 do_action('cbxgooglemap_metabox_save', $post_id);
523
524 }//end metabox_save
525
526 /**
527 * Add or adjust col for cbxgooglemap post type
528 *
529 * @param $cbxpoll_columns
530 *
531 * @return array
532 *
533 */
534 public function cbxgooglemap_add_new_columns($columns)
535 {
536 unset($columns['date']);
537 unset($columns['comments']);
538
539 $columns['lat'] = esc_attr('Latitude', 'cbxgooglemap');
540 $columns['lng'] = esc_attr('Longitude', 'cbxgooglemap');
541 $columns['zoom'] = esc_attr('Zoom', 'cbxgooglemap');
542
543 //$columns['shortcode'] = esc_attr( 'Shortcode', 'cbxgooglemap' );
544
545 return $columns;
546 }//end cbxgooglemap_add_new_columns
547
548 /**
549 * Add extra cols information for cbxgooglemap post type
550 *
551 * @param $column_name
552 *
553 *
554 * show data to poll table custom column
555 */
556 public function cbxgooglemap_manage_columns($column_name)
557 {
558 global $wpdb, $post;
559
560 $post_id = intval($post->ID);
561 $post_type = $post->post_type;
562
563 $combined_field = '_cbxgooglemap_combined'; //field name for non sortable fields
564 $meta_prefix = '_cbxgooglemap'; //field prefix for sortable fields
565
566 $meta_combined = get_post_meta($post_id, $combined_field, true);
567
568 $lat = get_post_meta($post_id, $meta_prefix.'lat', true);
569 $lat = ($lat !== false) ? $lat : '';
570
571 $lng = get_post_meta($post_id, $meta_prefix.'lng', true);
572 $lng = ($lng !== false) ? $lng : '';
573
574 $zoom = (isset($meta_combined[$meta_prefix.'zoom']) && intval($meta_combined[$meta_prefix.'zoom']) > 0) ? intval($meta_combined[$meta_prefix.'zoom']) : '';
575
576
577 switch ($column_name) {
578 /*case 'shortcode':
579 echo '<div class="cbxshortcode-wrap">';
580 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>';
581 echo '<span class="cbxballon_ctp_btn cbxballon_ctp" aria-label="' . esc_html__( 'Click to copy', 'cbxgooglemap' ) . '" data-balloon-pos="up"><i></i></span>';
582 echo '</div>';
583 break;*/
584 case 'lat':
585 echo esc_html($lat);
586 break;
587 case 'lng':
588 echo esc_html($lng);
589 break;
590 case 'zoom':
591 echo esc_html($zoom);
592 break;
593 default:
594 break;
595 } // end switch
596 }//end cbxgooglemap_manage_columns
597
598 /**
599 * Register the stylesheets for the admin area.
600 *
601 * @since 1.0.0
602 */
603 public function enqueue_styles($hook)
604 {
605 $current_page = isset($_GET['page']) ? sanitize_text_field(wp_unslash($_GET['page'])) : '';// phpcs:ignore WordPress.Security.NonceVerification.Recommended
606 $ver = $this->version;
607 $in_footer = [
608 'in_footer' => true,
609 ];
610
611 $vendor_url = CBXGOOGLEMAP_ROOT_URL.'assets/vendors/';
612 //$css_url = CBXGOOGLEMAP_ROOT_URL . 'assets/css/';
613 //$js_url = CBXGOOGLEMAP_ROOT_URL . 'assets/css/';
614
615 $css_url_part = CBXGOOGLEMAP_ROOT_URL.'assets/css/';
616 $css_url_part_vendors = CBXGOOGLEMAP_ROOT_URL.'assets/vendors/';
617 $js_url_part_vendors = CBXGOOGLEMAP_ROOT_URL.'assets/vendors/';
618
619 global $post_type, $post;
620
621 $api_key = esc_attr($this->settings->get_option('apikey', 'cbxgooglemap_general', ''));
622 $map_source = absint($this->settings->get_option('mapsource', 'cbxgooglemap_general', 1));
623
624 wp_register_style('awesome-notifications', $css_url_part_vendors.'awesome-notifications/style.css', [], $ver);
625 wp_register_style('flatpickr', $css_url_part_vendors.'flatpickr/flatpickr.min.css', [], $ver);
626 wp_register_style('cbxgooglemap-admin', $css_url_part.'cbxgooglemap-admin.css', [], $ver);
627
628 //listing mode
629 if (($hook == 'edit.php') && $post_type == 'cbxgooglemap') {
630 wp_register_style('cbxgooglemap-admin', $css_url_part.'cbxgooglemap-admin.css', [], $ver);
631 wp_enqueue_style('cbxgooglemap-admin');
632 }
633
634 //add new, edit mode
635 if (($hook == 'post.php' || $hook == 'post-new.php') && $post_type == 'cbxgooglemap') {
636
637 if ($map_source == 0) {
638 wp_register_style('leaflet', $vendor_url.'leaflet/leaflet.css', [], $ver, 'all');
639 wp_register_style('leaflet-control-geocoder', $vendor_url.'leaflet-control-geocoder/Control.Geocoder.css', [], $ver, 'all');
640 }
641
642 wp_register_style('select2', $vendor_url.'select2/select2.min.css', [], $ver);
643 wp_register_style('cbxgooglemap-admin', $css_url_part.'cbxgooglemap-admin.css', [
644 'select2',
645 ], $ver);
646
647 wp_enqueue_style('select2');
648
649 if ($map_source == 0) {
650 wp_enqueue_style('leaflet');
651 wp_enqueue_style('leaflet-control-geocoder');
652 }
653
654 wp_enqueue_style('awesome-notifications');
655 wp_enqueue_style('cbxgooglemap-admin');
656 }//add new, edit mode
657
658 if ($current_page == 'cbxgooglemap_settings') {
659 wp_register_style('pickr', $css_url_part_vendors.'pickr/classic.min.css', [], $ver);
660 wp_register_style('select2', $css_url_part_vendors.'select2/select2.min.css', [], $ver);
661
662 wp_register_style('cbxgooglemap-setting', $css_url_part.'cbxgooglemap-setting.css', [
663 'pickr',
664 'awesome-notifications',
665 'select2',
666 'cbxgooglemap-admin'
667 ], $ver);
668
669 wp_enqueue_style('pickr');
670 wp_enqueue_style('awesome-notifications');
671 wp_enqueue_style('select2');
672
673 //for demo css
674 if ($map_source == 0) {
675 wp_register_style('leaflet', $vendor_url.'leaflet/leaflet.css', [], $ver, 'all');
676 wp_register_style('cbxgooglemap-public', $css_url_part.'cbxgooglemap-public.css', ['leaflet'], $ver, 'all');
677 wp_enqueue_style('leaflet');
678
679 } else {
680 wp_register_style('cbxgooglemap-public', $css_url_part.'cbxgooglemap-public.css', [], $ver, 'all');
681 }
682
683 wp_enqueue_style('cbxgooglemap-public');
684 wp_enqueue_style('cbxgooglemap-admin');
685 wp_enqueue_style('cbxgooglemap-setting');
686
687 //end for demo css
688 }//end setting
689
690 if ($current_page == 'cbxgooglemap_support') {
691 wp_enqueue_style('cbxgooglemap-admin');
692 }//end style adding for doc page
693
694 //tax pages
695 if (($hook == 'edit-tags.php' || $hook == 'term.php') && $post_type == 'cbxgooglemap' && $current_page == '') {
696 wp_enqueue_style('awesome-notifications');
697 wp_enqueue_style('cbxgooglemap-admin');
698 }
699 }//end enqueue_styles
700
701 /**
702 * Register the JavaScript for the admin area.
703 *
704 * @since 1.0.0
705 */
706 public function enqueue_scripts($hook)
707 {
708 $current_page = isset($_GET['page']) ? sanitize_text_field(wp_unslash($_GET['page'])) : '';// phpcs:ignore WordPress.Security.NonceVerification.Recommended
709 $ver = $this->version;
710 $in_footer = [
711 'in_footer' => true,
712 ];
713
714 $vendor_url = CBXGOOGLEMAP_ROOT_URL.'assets/vendors/';
715 $css_url = CBXGOOGLEMAP_ROOT_URL.'assets/css/';
716 $js_url = CBXGOOGLEMAP_ROOT_URL.'assets/js/';
717
718 //assets urls
719 $js_url_part = CBXGOOGLEMAP_ROOT_URL.'assets/js/';
720 $js_url_part_vendors = CBXGOOGLEMAP_ROOT_URL.'assets/vendors/';
721 $js_url_part_vanila = CBXGOOGLEMAP_ROOT_URL.'assets/js/vanila/';
722 $js_url_part_build = CBXGOOGLEMAP_ROOT_URL.'assets/js/build/';
723
724
725 $t = true;
726 $f = false;
727
728
729 $in_footer = [
730 'in_footer' => $t,
731 ];
732
733 $in_footer_async = [
734 'in_footer' => $t,
735 'strategy' => 'async'
736 ];
737
738 $global_translation = CBXGooglemapHelper::global_translation_strings();
739 $plus_svg = cbxgooglemap_esc_svg(cbxgooglemap_load_svg('icon_plus'));
740
741
742 global $post_type, $post;
743 $post_id = isset($post->ID) ? absint($post->ID) : 0;
744
745 $api_key = esc_attr($this->settings->get_option('apikey', 'cbxgooglemap_general', ''));
746 $map_source = absint($this->settings->get_option('mapsource', 'cbxgooglemap_general', 1));
747 $default_mapicon = esc_url($this->settings->get_option('mapicon', 'cbxgooglemap_general', ''));
748
749 /*if($default_mapicon == ''){
750 $default_mapicon = 'https://mt.googleapis.com/vt/icon/name=icons/spotlight/spotlight-poi.png';
751 }*/
752
753 /*$zoom_level_default = intval( $this->settings->get_option( 'zoom', 'cbxgooglemap_general', '8' ) );
754 if ( $zoom_level_default == 0 ) {
755 $zoom_level_default = 8;
756 }*/
757
758
759 wp_register_script('cbxgooglemap-events', $js_url.'cbxgooglemap-events.js', [], $ver, $in_footer);
760 wp_register_script('awesome-notifications', $js_url_part_vendors.'awesome-notifications/script.js', [], $ver, $in_footer);
761 wp_register_script('select2', $js_url_part_vendors.'select2/select2.min.js', ['jquery'], $ver, $in_footer);
762 //wp_register_script( 'flatpickr', $js_url_part_vendors . 'flatpickr/flatpickr.min.js', [ 'jquery' ], $ver, true );
763 wp_register_script('pickr', $js_url_part_vendors.'pickr/pickr.min.js', [], $ver, $in_footer);
764 //wp_register_script( 'jquery-validate', $js_url_part_vendors . 'jquery-validation/jquery.validate.min.js', [ 'jquery' ], $ver, $in_footer );
765
766 //maps listing mode
767 if ($hook == 'edit.php' && $post_type == 'cbxgooglemap') {
768 wp_register_script('cbxgooglemap-listing', $js_url.'cbxgooglemap-listing.js', ['jquery'], $ver, $t);
769
770 $cbxgooglemap_listing_js_vars = apply_filters('cbxgooglemap_listing_js_vars', $global_translation);
771 wp_localize_script('cbxgooglemap-listing', 'cbxgooglemap_listing', $cbxgooglemap_listing_js_vars);
772
773 wp_enqueue_script('jquery');
774 wp_enqueue_script('cbxgooglemap-listing');
775 }
776
777 //add new or edit mode
778 if (($hook == 'post.php' || $hook == 'post-new.php') && $post_type == 'cbxgooglemap') {
779
780 wp_enqueue_script('cbxgooglemap-events');
781
782
783 $edit_js_dep = ['jquery', 'select2'];
784
785 if ($map_source == 1 && $api_key != '') {
786 wp_register_script('coregooglemapapi', '//maps.googleapis.com/maps/api/js?key='.$api_key.'&libraries=places&callback=Function.prototype', [], $ver, $in_footer_async);
787
788 $edit_js_dep[] = 'awesome-notifications';
789 $edit_js_dep[] = 'coregooglemapapi';
790 $edit_js_dep[] = 'cbxgooglemap-events';
791
792 } elseif ($map_source == 0) {
793 wp_register_script('coregooglemapapi', $vendor_url.'leaflet/leaflet.js', [], $ver, $in_footer_async);
794 wp_register_script('leaflet-control-geocoder', $vendor_url.'leaflet-control-geocoder/Control.Geocoder.js', [], $ver, $in_footer_async);
795
796 $edit_js_dep[] = 'awesome-notifications';
797 $edit_js_dep[] = 'coregooglemapapi';
798 $edit_js_dep[] = 'leaflet-control-geocoder';
799 $edit_js_dep[] = 'cbxgooglemap-events';
800 }
801
802 wp_enqueue_media();
803 $main_marker = [];
804
805 wp_register_script('cbxgooglemap-edit', $js_url.'cbxgooglemap-edit.js', $edit_js_dep, $ver, $in_footer);
806
807 $edit_js_vars = [
808 'search_address' => esc_html__('Search Address', 'cbxgooglemap'),
809 'icon_url_default' => $default_mapicon,
810 'api_key' => $api_key,
811 'map_source' => $map_source,
812 'map_title_placeholder' => esc_html__('Map Title Here', 'cbxgooglemap'),
813 'no_address_found' => esc_html__('No details available for current input', 'cbxgooglemap'),
814 ];
815
816 $edit_js_vars = array_merge($edit_js_vars, $global_translation);
817
818 $edit_js_vars = apply_filters('cbxgooglemap_edit_js_vars', $edit_js_vars, $post_id);
819
820 wp_localize_script('cbxgooglemap-edit', 'cbxgooglemap_edit', $edit_js_vars);
821
822 //enqueue dependency js cripts
823 foreach ($edit_js_dep as $dep) {
824 wp_enqueue_script($dep);
825 }
826
827 //enqueue main edit scripts
828 wp_enqueue_script('cbxgooglemap-edit');
829 }
830
831 if ($current_page == 'cbxgooglemap_settings') {
832 $setting_js_deps = [
833 'jquery',
834 'jquery-ui-sortable',
835 'select2',
836 'pickr',
837 'awesome-notifications'
838 ];
839
840 $setting_js_deps = apply_filters('cbxgooglemap_setting_js_deps', $setting_js_deps);
841
842 $blog_id = is_multisite() ? get_current_blog_id() : null;
843
844 // Localize the script with new data
845 $setting_js_vars = [
846 '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>',
847 'lang' => get_user_locale(),
848 'clearPermalinks' => esc_url_raw(get_rest_url($blog_id, 'cbxgooglemap/v1/admin/clear-permalinks')),
849 'rest_end_points' => [
850 'migrate_wp_wpsimplegooglemap' => esc_url_raw(get_rest_url('', 'cbxgooglemap/v1/migrate-wp-wpsimplegooglemap-data')),
851 ],
852 ];
853
854 $import_modal_html = '<div id="cbxgooglemap_settings_import_modal_wrap" class="cbx-chota">';
855 $import_modal_html .= '<h2>'.esc_html__('Import CBX Google Map Setting: Json file', 'cbxgooglemap').'</h2>';
856 $import_modal_html .= '<form method="post" id="cbxgooglemap_settings_import_form">';
857 $import_modal_html .= '<input type="file" name="file" id="cbxgooglemap_settings_import_file" accept="application/json" />';
858 $import_modal_html .= '</form>';
859 $import_modal_html .= '</div>';
860
861 $setting_js_vars['import_modal'] = $import_modal_html;
862 $setting_js_vars['import_modal_progress'] = '<p>'.esc_html__('Please wait, Importing...', 'cbxgooglemap').'</p>';
863
864 $cbxgooglemap_setting_js_vars = apply_filters('cbxgooglemap_setting_js_vars', array_merge($setting_js_vars, $global_translation));
865
866 wp_register_script('cbxgooglemap-setting', $js_url.'cbxgooglemap-setting.js', $setting_js_deps, $ver, $in_footer);
867
868 wp_localize_script('cbxgooglemap-setting', 'cbxgooglemap_setting_js_var', $cbxgooglemap_setting_js_vars);
869
870 //core
871 wp_enqueue_script('jquery');
872 wp_enqueue_media();
873
874 //vendors
875 wp_enqueue_script('jquery-ui-sortable');
876 wp_enqueue_script('select2');
877 wp_enqueue_script('pickr');
878 wp_enqueue_script('awesome-notifications');
879
880 //custom
881 wp_enqueue_script('cbxgooglemap-setting');
882
883 //for demo js (we need this but we will sort out later)
884 if (($map_source == 1 && ! empty($api_key)) || $map_source == 0) {
885 if ($map_source == 1) {
886 //phpcs:ignore WordPress.WP.EnqueuedResourceParameters.NotInFooter
887 wp_register_script('coregooglemapapi', '//maps.googleapis.com/maps/api/js?key='.esc_attr($api_key).'&libraries=places&callback=Function.prototype', [], $ver, $in_footer_async);
888 wp_register_script('cbxgooglemap-public', $js_url.'cbxgooglemap-public.js', [
889 'jquery',
890 'cbxgooglemap-events',
891 'coregooglemapapi'
892 ], $ver, $in_footer);
893
894 wp_enqueue_script('coregooglemapapi');
895 } else {
896 wp_register_script('coregooglemapapi', $vendor_url.'leaflet/leaflet.js', [], $ver, $in_footer_async);
897 wp_register_script('cbxgooglemap-public', $js_url.'cbxgooglemap-public.js', [
898 'jquery',
899 'cbxgooglemap-events',
900 'coregooglemapapi',
901 //'leaflet-control-geocoder'
902 ], $ver, $in_footer);
903
904 wp_enqueue_script('cbxgooglemap-events');
905 wp_enqueue_script('coregooglemapapi');
906 //wp_enqueue_script( 'leaflet-control-geocoder' );
907 }
908
909 wp_enqueue_script('cbxgooglemap-public');
910 }//end for demo js
911
912 }//end js for setting page
913
914 //enqueue js for tax page
915 if (($hook == 'edit-tags.php' || $hook == 'term.php') && $post_type == 'cbxgooglemap' && $current_page == '') {
916 //tax js dependencies
917
918 $tax_js_deps = [
919 //core
920 'jquery',
921 //vendors
922 //'jquery-validate'
923 ];
924
925 $tax_js_deps = apply_filters('cbxgooglemap_tax_js_deps', $tax_js_deps);
926
927 $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',
928 'cbxgooglemap').'</a>';
929
930 $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>';
931
932 $tax_js_vars =
933 [
934 'tax_title_prefix' => esc_html__('Map:', 'cbxgooglemap'),
935 'tags_title' => esc_html__('Map: Tags', 'cbxgooglemap'),
936 'category_title' => esc_html__('Map: Category', 'cbxgooglemap'),
937 'tax_new_setting' => '<div class="wp-heading-wrap-right pull-right">'.$new_map_link_html.$global_setting_link_html.'</div>'
938 ];
939
940 $tax_js_vars = apply_filters('cbxgooglemap_tax_js_vars', array_merge($tax_js_vars, $global_translation));
941
942 wp_register_script('cbxgooglemap-tax', $js_url_part.'cbxgooglemap-tax.js', $tax_js_deps, $ver, true);
943 wp_localize_script('cbxgooglemap-tax', 'cbxgooglemap_tax', $tax_js_vars);
944
945
946 //core
947 wp_enqueue_script('jquery');
948
949 //vendors
950 //wp_enqueue_script( 'jquery-validate' );
951
952 //custom
953 wp_enqueue_script('cbxgooglemap-tax');
954 }//end enqueue js for tax page
955 }//end enqueue_scripts
956
957 /**
958 * Init all gutenberg blocks
959 */
960 public function gutenberg_blocks(){
961 if ( ! function_exists('register_block_type')) {
962 return;
963 }
964
965 $settings = $this->settings;
966 $in_footer = [
967 'in_footer' => true,
968 ];
969
970
971 //$general_settings = get_option( 'cbxgooglemap_general', [] );
972
973 //default field values
974 $zoom_default = $settings->get_field('zoom', 'cbxgooglemap_general', '8');
975 if ($zoom_default == 0) {
976 $zoom_default = 8;
977 }
978
979 $width_default = $settings->get_field('width', 'cbxgooglemap_general', '100%');
980 if ($width_default == '' || $width_default == 0) {
981 $width_default = '100%';
982 }
983
984 $height_default = absint($settings->get_field('height', 'cbxgooglemap_general', '300'));
985 if ($height_default == 0) {
986 $height_default = 300;
987 }
988
989
990 $scrollwheel_default = absint($settings->get_field('scrollwheel', 'cbxgooglemap_general', 1));
991 $showinfo_default = absint($settings->get_field('showinfo', 'cbxgooglemap_general', 1));
992 $infow_open_default = absint($settings->get_field('infow_open', 'cbxgooglemap_general', 1));
993 $maptype_default = esc_attr($settings->get_field('maptype', 'cbxgooglemap_general', 'roadmap'));
994
995 $query = get_posts([
996 'post_type' => 'cbxgooglemap',
997 'orderby' => 'date',
998 'posts_per_page' => -1,
999 'post_status' => 'publish'
1000 ]);
1001
1002 $googleMap_posts = [];
1003
1004 $googleMap_posts[] = [
1005 'label' => esc_html__('Select Map', 'cbxgooglemap'),
1006 'value' => '0'
1007 ];
1008
1009 foreach ($query as $key => $data) {
1010 $googleMap_posts[] = [
1011 'label' => esc_html($data->post_title),
1012 'value' => absint($data->ID)
1013 ];
1014 }
1015
1016
1017 wp_register_script('cbxgooglemap-block', plugin_dir_url(__FILE__).'../assets/js/blocks/cbxgooglemap-block.js', [
1018 'wp-blocks',
1019 'wp-element',
1020 'wp-components',
1021 'wp-editor',
1022 ], filemtime(plugin_dir_path(__FILE__).'../assets/js/blocks/cbxgooglemap-block.js'), $in_footer);
1023
1024 wp_register_style('cbxgooglemap-block', plugin_dir_url(__FILE__).'../assets/css/cbxgooglemap-block.css', [], filemtime(plugin_dir_path(__FILE__).'../assets/css/cbxgooglemap-block.css'));
1025
1026 $js_vars = apply_filters('cbxgooglemap_block_js_vars',
1027 [
1028 'block_title' => esc_html__('CBX Map: Location Map', 'cbxgooglemap'),
1029 'block_category' => 'codeboxr',
1030 'block_icon' => 'universal-access-alt',
1031 'general_settings' => [
1032 'title' => esc_html__('CBX Map Settings', 'cbxgooglemap'),
1033 'id' => esc_html__('Select Map', 'cbxgooglemap'),
1034 'id_default' => '',
1035 'id_options' => $googleMap_posts,
1036 'id_note' => esc_html__('Choose saved map or create from custom attributes below', 'cbxgooglemap'),
1037 'custom_attribute_note' => esc_html__('Custom Map Attributes', 'cbxgooglemap'),
1038 'maptype' => esc_html__('Map Type(Google Map Only)', 'cbxgooglemap'),
1039 'maptype_options' => CBXGooglemapHelper::maptype_block_options(),
1040 'lat' => esc_html__('Latitude', 'cbxgooglemap'),
1041 'lng' => esc_html__('Longitude', 'cbxgooglemap'),
1042 'width' => esc_html__('Width(Numeric, % allowed)', 'cbxgooglemap'),
1043 'height' => esc_html__('Height(only Numeric)', 'cbxgooglemap'),
1044 'zoom' => esc_html__('zoom', 'cbxgooglemap'),
1045 'scrollwheel' => esc_html__('Mouse Scroll Wheel', 'cbxgooglemap'),
1046 'showinfo' => esc_html__('Show Popup', 'cbxgooglemap'),
1047 'infow_open' => esc_html__('Popup Auto Display ', 'cbxgooglemap'),
1048 'heading' => esc_html__('Popup Heading', 'cbxgooglemap'),
1049 'address' => esc_html__('Location Address', 'cbxgooglemap'),
1050 'website' => esc_html__('Website url', 'cbxgooglemap'),
1051 'mapicon' => esc_html__('Map Icon', 'cbxgooglemap'),
1052 'mapicon_select' => esc_html__('Select image', 'cbxgooglemap'),
1053 ],
1054 ]);
1055
1056 wp_localize_script('cbxgooglemap-block', 'cbxgooglemap_block', $js_vars);
1057
1058 register_block_type('codeboxr/cbxgooglemap', [
1059 'editor_script' => 'cbxgooglemap-block',
1060 'editor_style' => 'cbxgooglemap-block',
1061 'attributes' => apply_filters('cbxgooglemap_block_attributes', [
1062 //general
1063 'id' => [
1064 'type' => 'integer',
1065 'default' => '0',
1066 ],
1067 'maptype' => [
1068 'type' => 'string',
1069 'default' => $maptype_default
1070 ],
1071 'lat' => [
1072 'type' => 'string',
1073 'default' => ''
1074 ],
1075 'lng' => [
1076 'type' => 'string',
1077 'default' => ''
1078 ],
1079 'width' => [
1080 'type' => 'string',
1081 'default' => $width_default,
1082 ],
1083
1084 'height' => [
1085 'type' => 'integer',
1086 'default' => $height_default
1087 ],
1088 'zoom' => [
1089 'type' => 'string',
1090 'default' => $zoom_default
1091 ],
1092 'scrollwheel' => [
1093 'type' => 'boolean',
1094 'default' => ($scrollwheel_default) ? true : false
1095 ],
1096 'showinfo' => [
1097 'type' => 'boolean',
1098 'default' => ($showinfo_default) ? true : false
1099 ],
1100 'infow_open' => [
1101 'type' => 'boolean',
1102 'default' => ($infow_open_default) ? true : false
1103 ],
1104 'heading' => [
1105 'type' => 'string',
1106 'default' => ''
1107 ],
1108 'address' => [
1109 'type' => 'string',
1110 'default' => ''
1111 ],
1112 'website' => [
1113 'type' => 'string',
1114 'default' => ''
1115 ],
1116 'mapicon' => [
1117 'type' => 'string',
1118 'default' => '',
1119 ]
1120 ]),
1121 'render_callback' => [$this, 'render_block']
1122 ]);
1123
1124 }//end gutenberg_blocks
1125
1126 /**
1127 * Getenberg server side render
1128 *
1129 * @param $settings
1130 *
1131 * @return string
1132 */
1133 public function render_block($attributes)
1134 {
1135 $settings = $this->settings;
1136 //$general_settings = get_option( 'cbxgooglemap_general', [] );
1137
1138 $api_key = $settings->get_field('apikey', 'cbxgooglemap_general', '');
1139 $map_source = (int) $settings->get_field( 'mapsource', 'cbxgooglemap_general', 1 );
1140
1141 if ($map_source == 1 && $api_key == '') {
1142 echo '<p style="text-align: center;">'.esc_html__('Google Map Api Key is invalid!', 'cbxgooglemap').'</p>';
1143 } else {
1144 $id = isset($attributes['id']) ? absint($attributes['id']) : 0;
1145
1146 if ($id > 0) {
1147 //render map from saved map
1148 return '[cbxgooglemap id="'.$id.'"]';
1149 } else {
1150 $attr = [];
1151
1152 if (isset($attributes['lat'])) {
1153 $attr['lat'] = sanitize_text_field(wp_unslash($attributes['lat']));
1154 }
1155
1156 if (isset($attributes['lng'])) {
1157 $attr['lng'] = sanitize_text_field(wp_unslash($attributes['lng']));
1158 }
1159
1160 if (isset($attributes['width'])) {
1161 $attr['width'] = sanitize_text_field($attributes['width']);
1162 }
1163
1164 if (isset($attributes['height'])) {
1165 $attr['height'] = (int) $attributes['height'];
1166 }
1167
1168 if (isset($attributes['zoom'])) {
1169 $attr['zoom'] = sanitize_text_field($attributes['zoom']);
1170 }
1171
1172
1173 $attr['scrollwheel'] = ! empty($attributes['scrollwheel']) ? 1 : 0;
1174 $attr['infow_open'] = ! empty($attributes['infow_open']) ? 1 : 0;
1175 $attr['showinfo'] = ! empty($attributes['showinfo']) ? 1 : 0;
1176
1177 if (isset($attributes['heading'])) {
1178 $attr['heading'] = sanitize_text_field(wp_unslash($attributes['heading']));
1179 }
1180 if (isset($attributes['address'])) {
1181 $attr['address'] = sanitize_text_field(wp_unslash($attributes['address']));
1182 }
1183 if (isset($attributes['website'])) {
1184 $attr['website'] = sanitize_text_field(wp_unslash($attributes['website']));
1185 }
1186 if (isset($attributes['maptype'])) {
1187 $attr['maptype'] = sanitize_text_field(wp_unslash($attributes['maptype']));
1188 }
1189 if (isset($attributes['mapicon'])) {
1190 $attr['mapicon'] = esc_url($attributes['mapicon']);
1191 }
1192
1193 $attr = apply_filters('cbxgooglemap_block_shortcode_builder_attr', $attr, $attributes);
1194
1195 $attr_html = '';
1196
1197 foreach ($attr as $key => $value) {
1198 $attr_html .= ' '.$key.'="'.$value.'" ';
1199 }
1200
1201 //return do_shortcode( '[cbxgooglemap ' . $attr_html . ']' );
1202 return '[cbxgooglemap '.$attr_html.']';
1203 }
1204 }//end if api keys are ok
1205
1206 }//end codeboxrflexiblecountdown_block_render
1207
1208 /**
1209 * Register New Gutenberg block Category if need
1210 *
1211 * @param $categories
1212 * @param $post
1213 *
1214 * @return mixed
1215 */
1216 public function gutenberg_block_categories($categories, $post)
1217 {
1218 $found = false;
1219 foreach ($categories as $category) {
1220 if ($category['slug'] == 'codeboxr') {
1221 $found = true;
1222 break;
1223 }
1224 }
1225
1226 if ( ! $found) {
1227 return array_merge(
1228 $categories,
1229 [
1230 [
1231 'slug' => 'codeboxr',
1232 'title' => esc_html__('CBX Blocks', 'cbxgooglemap'),
1233 ],
1234 ]
1235 );
1236 }
1237
1238 return $categories;
1239 }//end gutenberg_block_categories
1240
1241
1242 /**
1243 * Enqueue style for block editor
1244 */
1245 public function enqueue_block_editor_assets()
1246 {
1247 }//end enqueue_block_editor_assets
1248
1249 /**
1250 * Load setting html
1251 *
1252 * @return void
1253 */
1254 public function settings_reset_load()
1255 {
1256 //security check
1257 check_ajax_referer('cbxgooglemap_nonce', 'security');
1258
1259 $msg = [];
1260 $msg['html'] = '';
1261 $msg['message'] = esc_html__('CBX Google Map reset setting html loaded successfully', 'cbxgooglemap');
1262 $msg['success'] = 1;
1263
1264 if ( ! current_user_can('manage_options')) {
1265 $msg['message'] = esc_html__('Sorry, you don\'t have enough permission', 'cbxgooglemap');
1266 $msg['success'] = 0;
1267 wp_send_json($msg);
1268 }
1269
1270 $msg['html'] = CBXGooglemapHelper::setting_reset_html_table();
1271
1272 wp_send_json($msg);
1273 } //end method settings_reset_load
1274
1275 /**
1276 * Full plugin reset and redirect
1277 */
1278 public function plugin_options_reset()
1279 {
1280
1281 //security check
1282 check_ajax_referer('cbxgooglemap_nonce', 'security');
1283
1284 $url = admin_url('admin.php?page=cbxgooglemap_settings');
1285
1286 $msg = [];
1287 $msg['message'] = esc_html__('CBX Google Map setting options reset successfully', 'cbxgooglemap');
1288 $msg['success'] = 1;
1289 $msg['url'] = $url;
1290
1291 if ( ! current_user_can('manage_options')) {
1292 $msg['message'] = esc_html__('Sorry, you don\'t have enough permission', 'cbxgooglemap');
1293 $msg['success'] = 0;
1294 wp_send_json($msg);
1295 }
1296
1297 do_action('cbxgooglemap_plugin_reset_before');
1298
1299 $plugin_resets = wp_unslash($_POST); // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.NonceVerification.Missing
1300
1301 //delete options
1302 $reset_options = isset($plugin_resets['reset_options']) ? $plugin_resets['reset_options'] : [];
1303 $option_values = (is_array($reset_options) && sizeof($reset_options) > 0) ? array_values($reset_options) : array_values(CBXGooglemapHelper::getAllOptionNames());
1304
1305 foreach ($option_values as $key => $option) {
1306 delete_option($option);
1307 }
1308
1309 do_action('cbxgooglemap_plugin_option_delete');
1310 do_action('cbxgooglemap_plugin_reset_after');
1311 do_action('cbxgooglemap_plugin_reset');
1312
1313 wp_send_json($msg);
1314 } //end plugin_reset
1315
1316 /**
1317 * Export plugin global settings
1318 *
1319 * @return void
1320 */
1321 public function settings_export()
1322 {
1323
1324 if (isset($_GET['cbxgooglemap_settings_export'])) {
1325 $url = admin_url('admin.php?page=cbxgooglemap_settings');
1326
1327 $msg = [];
1328 $msg['message'] = esc_html__('Google Map setting exported successfully', 'cbxgooglemap');
1329 $msg['success'] = 1;
1330 $msg['url'] = $url;
1331
1332 $passed = true;
1333
1334 $nonce = isset($_GET['security']) ? sanitize_text_field(wp_unslash($_GET['security'])) : '';
1335 if ( ! wp_verify_nonce($nonce, 'cbxgooglemap_settings_nonce')) {
1336 $passed = false;
1337 $msg['success'] = 0;
1338 $msg['message'] = esc_html__('Security check failed', 'cbxgooglemap');
1339 }
1340
1341 if ( ! current_user_can('manage_options')) {
1342 $passed = true;
1343 $msg['message'] = esc_html__('Sorry, you don\'t have enough permission', 'cbxgooglemap');
1344 $msg['success'] = 0;
1345 }
1346
1347 if ( ! $passed) {
1348 wp_send_json($msg);
1349 }
1350
1351 // Get Meta box data
1352 $sections = CBXGoogleMapAdmin::get_settings_sections();
1353
1354 $data = [
1355 'cbxgooglemap_settings' => true
1356 ];
1357
1358 $single_section = isset($_REQUEST['section']) ? sanitize_text_field(wp_unslash($_REQUEST['section'])) : '';
1359
1360 foreach ($sections as $section) {
1361 if ($single_section != '' && $section['id'] != $single_section) {
1362 continue;
1363 }
1364
1365
1366 $sections_fields = get_option($section['id']);
1367 if ( ! is_array($sections_fields)) {
1368 $sections_fields = [];
1369 }
1370
1371 $data[$section['id']] = $sections_fields;
1372
1373 if ($single_section != '' && $section['id'] == $single_section) {
1374 break;
1375 }
1376 }
1377
1378 // Create JSON
1379 $generate_json = wp_json_encode($data, JSON_PRETTY_PRINT);
1380
1381 // Create filename
1382 $filename = 'cbxgooglemap_settings_json';
1383
1384 // Force download .json file with JSON in it
1385 header('Content-type: application/vnd.ms-excel');
1386 header('Content-Type: application/force-download');
1387 header('Content-Type: application/download');
1388 header('Content-disposition: '.$filename.'.json');
1389 header('Content-disposition: filename='.$filename.'.json');
1390
1391 print $generate_json;//phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1392 exit;
1393 }//end if export mode
1394 }//end method settings_export
1395
1396 /**
1397 * Import settings
1398 *
1399 * @return void
1400 */
1401 public function settings_import()
1402 {
1403 //security check
1404 check_ajax_referer('cbxgooglemap_nonce', 'security');
1405
1406 $msg = [];
1407 $msg['message'] = esc_html__('CBX Google Map Settings imported successfully', 'cbxgooglemap');
1408 $msg['success'] = 1;
1409
1410 if ( ! current_user_can('manage_options')) {
1411 $msg['message'] = esc_html__('Sorry, you don\'t have enough permission', 'cbxgooglemap');
1412 $msg['success'] = 0;
1413 wp_send_json($msg);
1414 }
1415
1416 // Import settings api data
1417 $settings_data = isset($_REQUEST['settings_data']) ? sanitize_text_field(wp_unslash($_REQUEST['settings_data'])) : '';
1418 $settings_data = str_replace('data:application/json;base64,', '', $settings_data);
1419 $settings_data = base64_decode($settings_data);
1420
1421 $settings_data = json_decode($settings_data, true);
1422 // Redirect to settings page
1423 $msg['url'] = admin_url('admin.php?page=cbxgooglemap_settings');
1424
1425 if (isset($settings_data['cbxgooglemap_settings'])) {
1426 unset($settings_data['cbxgooglemap_settings']);
1427
1428 if (is_array($settings_data)) {
1429 foreach ($settings_data as $key => $value) {
1430 update_option($key, $value);
1431 }
1432 }
1433 wp_send_json($msg);
1434 }
1435
1436 $msg['message'] = esc_html__('Sorry, wrong format data', 'cbxgooglemap');
1437 $msg['success'] = 0;
1438 wp_send_json($msg);
1439 }//end method settings_import
1440
1441 /**
1442 * Reset single section
1443 *
1444 * @return void
1445 */
1446 public function plugin_reset_section()
1447 {
1448
1449 //security check
1450 check_ajax_referer('cbxgooglemap_nonce', 'security');
1451
1452 $url = admin_url('admin.php?page=cbxgooglemap_settings');
1453
1454 $msg = [];
1455 $msg['message'] = esc_html__('Comfort Google Map setting section reset successfully', 'cbxgooglemap');
1456 $msg['success'] = 1;
1457 $msg['url'] = $url;
1458
1459 if ( ! current_user_can('manage_options')) {
1460 $msg['message'] = esc_html__('Sorry, you don\'t have enough permission', 'cbxgooglemap');
1461 $msg['success'] = 0;
1462 wp_send_json($msg);
1463 }
1464
1465 $section = isset($_POST['section']) ? sanitize_text_field(wp_unslash($_POST['section'])) : '';
1466 if ($section == '') {
1467 $msg['message'] = esc_html__('Option section setting failed, as no section id is empty', 'cbxgooglemap');
1468 $msg['success'] = 0;
1469 wp_send_json($msg);
1470 }
1471
1472 //before hooks
1473 do_action('cbxgooglemap_plugin_reset_section_before');
1474
1475
1476 //delete the section
1477 delete_option($section);
1478
1479 //after hoooks
1480 do_action('cbxgooglemap_plugin_reset_section_after');
1481 do_action('cbxgooglemap_plugin_reset_section');
1482
1483 wp_send_json($msg);
1484 }//end method plugin_reset_section
1485 }//end class CBXGoogleMapAdmin