PluginProbe
CBX Map for Google Map & OpenStreetMap / 2.0.4
CBX Map for Google Map & OpenStreetMap v2.0.4
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.4, at includes/CBXGoogleMapAdmin.php

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