1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: 404: 405: 406: 407: 408: 409: 410: 411: 412: 413: 414: 415: 416: 417: 418: 419: 420: 421: 422: 423: 424: 425: 426: 427: 428: 429: 430: 431: 432: 433: 434: 435: 436: 437: 438: 439: 440: 441: 442: 443: 444: 445: 446: 447: 448: 449: 450: 451: 452: 453: 454: 455: 456: 457: 458: 459: 460: 461: 462: 463: 464: 465: 466: 467: 468: 469: 470: 471: 472: 473: 474: 475: 476: 477: 478: 479: 480: 481: 482: 483: 484: 485: 486: 487: 488: 489: 490: 491: 492: 493: 494: 495: 496: 497: 498: 499: 500: 501: 502: 503: 504: 505: 506: 507: 508: 509: 510: 511: 512: 513: 514: 515: 516: 517: 518: 519: 520: 521: 522: 523: 524: 525: 526: 527: 528: 529: 530: 531: 532: 533: 534: 535: 536: 537: 538: 539: 540: 541: 542: 543: 544: 545: 546: 547: 548: 549: 550: 551: 552: 553: 554: 555: 556: 557: 558: 559: 560: 561: 562: 563: 564: 565: 566: 567: 568: 569: 570: 571: 572: 573: 574: 575: 576: 577: 578: 579: 580: 581: 582: 583: 584: 585: 586: 587: 588: 589: 590: 591: 592: 593: 594: 595: 596: 597: 598: 599: 600: 601: 602: 603: 604: 605: 606: 607: 608: 609: 610: 611: 612: 613: 614: 615: 616: 617: 618: 619: 620: 621: 622: 623: 624: 625: 626: 627: 628: 629: 630: 631: 632: 633: 634: 635: 636: 637: 638: 639: 640: 641: 642: 643: 644: 645: 646: 647: 648: 649: 650: 651: 652: 653: 654: 655: 656: 657: 658: 659: 660: 661: 662: 663: 664: 665: 666: 667: 668: 669: 670: 671: 672: 673: 674: 675: 676: 677: 678: 679: 680: 681: 682: 683: 684: 685: 686: 687: 688: 689: 690: 691: 692: 693: 694: 695: 696: 697: 698: 699: 700: 701: 702: 703: 704: 705: 706: 707: 708: 709: 710: 711: 712: 713: 714: 715: 716: 717: 718: 719: 720: 721: 722: 723: 724: 725: 726: 727: 728: 729: 730: 731: 732: 733: 734: 735: 736: 737: 738: 739: 740: 741: 742: 743: 744: 745: 746: 747: 748: 749: 750: 751: 752: 753: 754: 755: 756: 757: 758: 759: 760: 761: 762: 763: 764: 765: 766: 767: 768: 769: 770: 771: 772: 773: 774: 775: 776: 777: 778: 779: 780: 781: 782: 783: 784: 785: 786: 787: 788: 789: 790: 791: 792: 793: 794: 795: 796: 797: 798: 799: 800: 801: 802: 803: 804: 805: 806: 807: 808: 809: 810: 811: 812: 813: 814: 815: 816: 817: 818: 819: 820: 821: 822: 823: 824: 825: 826: 827: 828: 829: 830: 831: 832: 833: 834: 835: 836: 837: 838: 839: 840: 841: 842: 843: 844: 845: 846: 847: 848: 849: 850: 851: 852: 853: 854: 855: 856: 857: 858: 859: 860: 861: 862: 863: 864: 865: 866: 867: 868: 869: 870: 871: 872: 873: 874: 875: 876: 877: 878: 879: 880: 881: 882: 883: 884: 885: 886: 887: 888: 889: 890: 891: 892: 893: 894: 895: 896: 897: 898: 899: 900: 901: 902: 903: 904: 905: 906: 907: 908: 909: 910: 911: 912: 913: 914: 915: 916: 917: 918: 919: 920: 921: 922: 923: 924: 925: 926: 927: 928: 929: 930: 931: 932: 933: 934: 935: 936: 937: 938: 939: 940: 941: 942: 943: 944: 945: 946: 947: 948: 949: 950: 951: 952: 953: 954: 955: 956: 957: 958: 959: 960: 961: 962: 963: 964: 965: 966: 967: 968: 969: 970: 971: 972: 973: 974: 975: 976: 977: 978: 979: 980: 981: 982: 983: 984: 985: 986: 987: 988: 989: 990: 991: 992: 993: 994: 995: 996: 997: 998: 999: 1000: 1001: 1002: 1003: 1004: 1005: 1006: 1007: 1008: 1009: 1010: 1011: 1012: 1013: 1014: 1015: 1016: 1017: 1018: 1019: 1020: 1021: 1022: 1023: 1024: 1025: 1026: 1027: 1028: 1029: 1030: 1031: 1032: 1033: 1034: 1035: 1036: 1037: 1038: 1039: 1040: 1041: 1042: 1043: 1044: 1045: 1046: 1047: 1048: 1049: 1050: 1051: 1052: 1053: 1054: 1055: 1056: 1057: 1058: 1059: 1060: 1061: 1062: 1063: 1064: 1065: 1066: 1067: 1068: 1069: 1070: 1071: 1072: 1073: 1074: 1075: 1076: 1077: 1078: 1079: 1080: 1081: 1082: 1083: 1084: 1085: 1086: 1087: 1088: 1089: 1090: 1091: 1092: 1093: 1094: 1095: 1096: 1097: 1098: 1099: 1100: 1101: 1102: 1103: 1104: 1105: 1106: 1107:
<?php
namespace WPGMZA;
class ImportJSON extends Import {
protected $map_id_map = array();
protected $cat_id_map = array();
protected $cat_all_maps = array();
protected $field_id_map = array();
protected $marker_id_map = array();
protected function check_options() {
if ( ! is_array( $this->options ) ) {
throw new \Exception( __( 'Error: Malformed options.', 'wp-google-maps' ) );
}
$this->options['maps'] = isset( $this->options['maps'] ) ? explode( ',', $this->options['maps'] ) : array();
$this->options['maps'] = $this->check_ids( $this->options['maps'] );
$this->options['categories'] = isset( $this->options['categories'] ) ? true : false;
$this->options['customfields'] = isset( $this->options['customfields'] ) ? true : false;
$this->options['markers'] = isset( $this->options['markers'] ) ? true : false;
$this->options['circles'] = isset( $this->options['circles'] ) ? true : false;
$this->options['polygons'] = isset( $this->options['polygons'] ) ? true : false;
$this->options['polylines'] = isset( $this->options['polylines'] ) ? true : false;
$this->options['rectangles'] = isset( $this->options['rectangles'] ) ? true : false;
$this->options['datasets'] = isset( $this->options['datasets'] ) ? true : false;
$this->options['apply'] = isset( $this->options['apply'] ) ? true : false;
$this->options['replace'] = isset( $this->options['replace'] ) ? true : false;
$this->options['applys'] = isset( $this->options['applys'] ) ? explode( ',', $this->options['applys'] ) : array();
if ( $this->options['apply'] && empty( $this->options['applys'] ) ) {
$this->options['applys'] = import_export_get_maps_list( 'ids' );
}
$this->options['applys'] = $this->check_ids( $this->options['applys'] );
}
protected function parse_file() {
if ( ! empty( $this->file_data ) ) {
$this->file_data = json_decode( $this->file_data, true );
if( $this->file_data === null )
throw new \Exception( __('Error parsing JSON: ', 'wp-google-maps') . json_last_error_msg() );
if ( empty( $this->file_data['maps'] ) )
throw new \Exception( __( 'Error: File contains no maps.', 'wp-google-maps' ) );
} else {
throw new \Exception( __( 'Error: Empty file data.', 'wp-google-maps' ) );
}
}
public function admin_options() {
$doing_edit = ! empty( $_POST['schedule_id'] ) ? true : false;
$maps = import_export_get_maps_list( 'apply', $doing_edit ? $this->options['applys'] : false );
ob_start();
?>
<h2><?php esc_html_e( 'Import', 'wp-google-maps' ); ?></h2>
<h4><?php echo ! empty( $this->file ) ? esc_html( basename( $this->file ) ) : ( ! empty( $this->file_url ) ? esc_html( $this->file_url ) : '' ); ?></h4>
<div style="margin:0 0 1em 0;width:100%;">
<?php if ( empty( $this->file_data['maps'] ) ) { ?>
<br><?php esc_html_e( 'No maps available for import.', 'wp-google-maps' ); ?>
<?php
echo '</div>';
return;
?>
<?php } else { ?>
<table class="wp-list-table widefat fixed striped wpgmza-listing" style="width:100%;">
<thead style="display:block;border-bottom:1px solid #e1e1e1;">
<tr style="display:block;width:100%;">
<th style="width:2.2em;border:none;"></th>
<th style="border:none;"><?php esc_html_e( 'Title', 'wp-google-maps' ); ?></th>
</tr>
</thead>
<tbody style="display:block;max-height:370px;overflow-y:scroll;">
<?php
foreach ( $this->file_data['maps'] as $map ) {
?><tr style="display:block;width:100%;"><td style="width:2.2em;"><div class="switch"><input id="maps_import_<?php echo esc_attr( $map['id'] ); ?>" type="checkbox" value="<?php echo esc_attr( $map['id'] ); ?>" class="maps_import cmn-toggle cmn-toggle-round-flat" <?php echo empty( $this->options['maps'] ) || in_array( $map['id'], $this->options['maps'] ) ? 'checked' : ''; ?>><label for="maps_import_<?php echo esc_attr( $map['id'] ); ?>"></label></div></td><td><?php echo esc_html( $map['map_title'] ); ?></td></tr><?php
}
?>
</tbody>
</table>
<button id="maps_import_select_all" class="wpgmza_general_btn"><?php esc_html_e( 'Select All', 'wp-google-maps' ); ?></button> <button id='maps_import_select_none' class='wpgmza_general_btn'><?php esc_html_e( 'Select None', 'wp-google-maps' ); ?></button><br><br>
<?php } ?>
</div>
<p>
<h2><?php esc_html_e( 'Map Data', 'wp-google-maps' ); ?></h2>
</p>
<div class="switch"><input id="categories_import" class="map_data_import cmn-toggle cmn-toggle-round-flat" type="checkbox" <?php echo empty( $this->file_data['categories'] ) ? 'disabled' : ( ! $doing_edit || $this->options['categories'] ? 'checked' : '' ); ?>><label for="categories_import"></label></div><?php esc_html_e( 'Categories', 'wp-google-maps' ); ?><br>
<div class="switch"><input id="customfields_import" class="map_data_import cmn-toggle cmn-toggle-round-flat" type="checkbox" <?php echo empty( $this->file_data['customfields'] ) ? 'disabled' : ( ! $doing_edit || $this->options['customfields'] ? 'checked' : '' ); ?>><label for="customfields_import"></label></div><?php esc_html_e( 'Custom Fields', 'wp-google-maps' ); ?><br>
<div class="switch"><input id="markers_import" class="map_data_import cmn-toggle cmn-toggle-round-flat" type="checkbox" <?php echo empty( $this->file_data['markers'] ) ? 'disabled' : ( ! $doing_edit || $this->options['markers'] ? 'checked' : '' ); ?>><label for="markers_import"></label></div><?php esc_html_e( 'Markers', 'wp-google-maps' ); ?><br>
<div class="switch"><input id="circles_import" class="map_data_import cmn-toggle cmn-toggle-round-flat" type="checkbox" <?php echo empty( $this->file_data['circles'] ) ? 'disabled' : ( ! $doing_edit || $this->options['circles'] ? 'checked' : '' ); ?>><label for="circles_import"></label></div><?php esc_html_e( 'Circles', 'wp-google-maps' ); ?><br>
<div class="switch"><input id="polygons_import" class="map_data_import cmn-toggle cmn-toggle-round-flat" type="checkbox" <?php echo empty( $this->file_data['polygons'] ) ? 'disabled' : ( ! $doing_edit || $this->options['polygons'] ? 'checked' : '' ); ?>><label for="polygons_import"></label></div><?php esc_html_e( 'Polygons', 'wp-google-maps' ); ?><br>
<div class="switch"><input id="polylines_import" class="map_data_import cmn-toggle cmn-toggle-round-flat" type="checkbox" <?php echo empty( $this->file_data['polylines'] ) ? 'disabled' : ( ! $doing_edit || $this->options['polylines'] ? 'checked' : '' ); ?>><label for="polylines_import"></label></div><?php esc_html_e( 'Polylines', 'wp-google-maps' ); ?><br>
<div class="switch"><input id="rectangles_import" class="map_data_import cmn-toggle cmn-toggle-round-flat" type="checkbox" <?php echo empty( $this->file_data['rectangles'] ) ? 'disabled' : ( ! $doing_edit || $this->options['rectangles'] ? 'checked' : '' ); ?>><label for="rectangles_import"></label></div><?php esc_html_e( 'Rectangles', 'wp-google-maps' ); ?><br>
<div class="switch"><input id="datasets_import" class="map_data_import cmn-toggle cmn-toggle-round-flat" type="checkbox" <?php echo empty( $this->file_data['datasets'] ) ? 'disabled' : ( ! $doing_edit || $this->options['datasets'] ? 'checked' : '' ); ?>><label for="datasets_import"></label></div><?php esc_html_e( 'Heatmap Datasets', 'wp-google-maps' ); ?><br>
<br>
<div class="switch">
<input
id="geocode_import"
class="map_data_import cmn-toggle cmn-toggle-round-flat" type="checkbox"
<?php
echo ($doing_edit && isset($this->options['geocode']) ? 'checked' : '');
?>
/>
<label for="geocode_import"></label>
</div>
<?php esc_html_e( 'Find Addresses or Latitude and Longitude when missing', 'wp-google-maps' ); ?>
<br>
<span style="font-style:italic;"><?php esc_html_e( 'Requires Google Maps Geocoding API to be enabled.', 'wp-google-maps' ); ?></span> <a href="https://www.wpgmaps.com/documentation/creating-a-google-maps-api-key/" target="_blank">[?]</a><br>
<br>
<div class="switch"><input id="apply_import" class="map_data_import cmn-toggle cmn-toggle-round-flat" type="checkbox" <?php echo empty( $maps ) ? 'disabled' : ( $doing_edit && $this->options['apply'] ? 'checked' : '' ); ?>><label for="apply_import"></label></div><?php esc_html_e( 'Apply import data to', 'wp-google-maps' ); ?>
<br>
<span style="font-style:italic;"><?php esc_html_e( 'No maps will be imported with this option, only map data.', 'wp-google-maps' ); ?></span>
<br>
<div id="maps_apply_import" style="<?php echo empty( $maps ) ? 'display:none;' : ( $doing_edit && $this->options['apply'] ? '' : 'display:none;' ); ?>width:100%;">
<?php if ( empty( $maps ) ) { ?>
<br><?php esc_html_e( 'No maps available for import to.', 'wp-google-maps' ); ?>
<?php } else { ?>
<br>
<div class="switch"><input id="replace_import" class="map_data_import cmn-toggle cmn-toggle-round-flat" type="checkbox" <?php echo $doing_edit && $this->options['replace'] ? 'checked' : ''; ?>><label for="replace_import"></label></div><?php esc_html_e( 'Replace map data', 'wp-google-maps' ); ?>
<br>
<table class="wp-list-table widefat fixed striped wpgmza-listing" style="width:100%;">
<thead style="display:block;border-bottom:1px solid #e1e1e1;">
<tr style="display:block;width:100%;">
<th style="width:2.2em;border:none;"></th>
<th style="width:80px;border:none;"><?php esc_html_e( 'ID', 'wp-google-maps' ); ?></th>
<th style="border:none;"><?php esc_html_e( 'Title', 'wp-google-maps' ); ?></th>
</tr>
</thead>
<tbody style="display:block;max-height:370px;overflow-y:scroll;">
<?php echo $maps; ?>
</tbody>
</table>
<button id="maps_apply_select_all" class="wpgmza_general_btn"><?php esc_html_e( 'Select All', 'wp-google-maps' ); ?></button> <button id='maps_apply_select_none' class='wpgmza_general_btn'><?php esc_html_e( 'Select None', 'wp-google-maps' ); ?></button><br><br>
<?php } ?>
</div>
<br>
<div class="delete-after-import">
<div class="switch"><input id="delete_import" class="map_data_import cmn-toggle cmn-toggle-round-flat" type="checkbox" <?php echo $doing_edit ? 'disabled' : ''; ?>><label for="delete_import"></label></div><?php esc_html_e( 'Delete import file after import', 'wp-google-maps' ); ?>
</div>
<br><br>
<div id="import-schedule-json-options" <?php if ( ! $doing_edit ) { ?>style="display:none;"<?php } ?>>
<h2><?php esc_html_e( 'Scheduling Options', 'wp-google-maps' ); ?></h2>
<?php esc_html_e( 'Start Date', 'wp-google-maps' ); ?>
<br>
<input type="date" id="import-schedule-json-start" class="import-schedule-json-options" <?php echo $doing_edit ? 'value="' . $this->options['start'] . '"' : ''; ?>>
<br><br>
<?php esc_html_e( 'Interval', 'wp-google-maps' ); ?>
<br>
<select id="import-schedule-json-interval" class="import-schedule-json-options">
<?php
$schedule_intervals = wp_get_schedules();
foreach ( $schedule_intervals as $schedule_interval_key => $schedule_interval ) { ?>
<option value="<?php echo esc_attr( $schedule_interval_key ); ?>" <?php echo $doing_edit && $schedule_interval_key === $this->options['interval'] ? 'selected' : ''; ?>><?php echo esc_html( $schedule_interval['display'] ); ?></option>
<?php } ?>
</select>
<br><br>
</div>
<p>
<button id="import-json" class="wpgmza_general_btn" <?php if ( $doing_edit ) { ?>style="display:none;"<?php } ?>><?php esc_html_e( 'Import', 'wp-google-maps' ); ?></button>
<button id="import-schedule-json" class="wpgmza_general_btn"><?php echo $doing_edit ? esc_html__( 'Update Schedule', 'wp-google-maps' ) : esc_html__( 'Schedule', 'wp-google-maps' ); ?></button>
<button id="import-schedule-json-cancel" class="wpgmza_general_btn" <?php if ( ! $doing_edit ) { ?>style="display:none;"<?php } ?>><?php esc_html_e( 'Cancel', 'wp-google-maps' ); ?></button>
</p>
<script>
(function($){
<?php if ( ! $doing_edit ) { ?>$('.maps_apply').prop('checked', false);<?php } ?>
$('#maps_import_select_all').click(function(){
$('.maps_import').prop('checked', true);
});
$('#maps_import_select_none').click(function(){
$('.maps_import').prop('checked', false);
});
$('#maps_apply_select_all').click(function(){
$('.maps_apply').prop('checked', true);
});
$('#maps_apply_select_none').click(function(){
$('.maps_apply').prop('checked', false);
});
$('#apply_import').click(function(){
if ($(this).prop('checked')){
$('#maps_apply_import').slideDown(300);
} else {
$('#maps_apply_import').slideUp(300);
}
});
function json_get_import_options(){
var import_options = {};
var maps_check = $('.maps_import:checked');
var map_ids = [];
var apply_check = $('.maps_apply:checked');
var apply_ids = [];
if (maps_check.length < 1){
alert('<?php echo wp_slash( __( 'Please select at least one map to import.', 'wp-google-maps' ) ); ?>');
return {};
}
maps_check.each(function(){
map_ids.push($(this).val());
});
if (map_ids.length < $('.maps_import').length){
import_options['maps'] = map_ids.join(',');
}
$('.map_data_import').each(function(){
if ($(this).prop('checked')){
import_options[ $(this).attr('id').replace('_import', '') ] = '';
}
});
if ($('#apply_import').prop('checked')){
if (apply_check.length < 1){
alert('<?php echo wp_slash( __( 'Please select at least one map to import to, or deselect the "Apply import data to" option.', 'wp-google-maps' ) ); ?>');
return {};
}
apply_check.each(function(){
apply_ids.push($(this).val());
});
if (apply_ids.length < $('.maps_apply').length){
import_options['applys'] = apply_ids.join(',');
}
}
return import_options;
}
$('#import-json').click(function(){
var import_options = json_get_import_options();
if (Object.keys(import_options).length < 1){
return;
}
$('#import_loader_text').html('<br><?php echo wp_slash( __( 'Importing, this may take a moment...', 'wp-google-maps' ) ); ?>');
$('#import_loader').show();
$('#import_options').hide();
wp.ajax.send({
data: {
action: 'wpgmza_import',
<?php echo isset( $_POST['import_id'] ) ? 'import_id: ' . absint( $_POST['import_id'] ) . ',' : ( isset( $_POST['import_url'] ) ? "import_url: '" . $_POST['import_url'] . "'," : '' ); ?>
options: import_options,
wpgmaps_security: WPGMZA.import_security_nonce
},
success: function (data) {
$('#import_loader').hide();
if (typeof data !== 'undefined' && data.hasOwnProperty('id')) {
wpgmaps_import_add_notice('<p><?php echo wp_slash( __( 'Import completed.', 'wp-google-maps' ) ); ?></p>');
if (data.hasOwnProperty('del') && 1 === data.del){
$('#import_options').html('');
$('#import-list-item-' + data.id).remove();
$('#import_files').show();
return;
}
}
$('#import_options').show();
},
error: function (data) {
if (typeof data !== 'undefined') {
wpgmaps_import_add_notice(data, 'error');
}
$('#import_loader').hide();
$('#import_options').show();
}
});
});
$('#import-schedule-json').click(function(){
if ($('#import-json').is(':visible')) {
$('#import-json,.delete-after-import').hide();
$('#import-schedule-json-cancel').show();
$('#import-schedule-json-options').slideDown(300);
} else {
var import_options = json_get_import_options();
if (Object.keys(import_options).length < 1){
return;
}
if ($('#import-schedule-json-start').val().length < 1){
alert('<?php echo wp_slash( __( 'Please enter a start date.', 'wp-google-maps' ) ); ?>');
return;
}
$('#import_loader_text').html('<br><?php echo wp_slash( __( 'Scheduling, this may take a moment...', 'wp-google-maps' ) ); ?>');
$('#import_loader').show();
$('#import_options').hide();
wp.ajax.send({
data: {
action: 'wpgmza_import_schedule',
<?php echo isset( $_POST['import_id'] ) ? 'import_id: ' . absint( $_POST['import_id'] ) . ',' : ( isset( $_POST['import_url'] ) ? "import_url: '" . $_POST['import_url'] . "'," : '' ); ?>
options: import_options,
<?php echo isset( $_POST['schedule_id'] ) ? "schedule_id: '" . $_POST['schedule_id'] . "'," : ''; ?>
start: $('#import-schedule-json-start').val(),
interval: $('#import-schedule-json-interval').val(),
wpgmaps_security: WPGMZA.import_security_nonce
},
success: function (data) {
if (typeof data !== 'undefined' && data.hasOwnProperty('schedule_id') && data.hasOwnProperty('next_run')) {
wpgmaps_import_add_notice('<p><?php echo wp_slash( __( 'Scheduling completed.', 'wp-google-maps' ) ); ?></p>');
$('#import_loader').hide();
$('#import_options').html('').hide();
$('#import_files').show();
$('a[href="#schedule-tab"').click();
$('#wpgmap_import_schedule_list_table tbody').prepend('<tr id="import-schedule-list-item-' + data.schedule_id + '"><td><strong><span class="import_schedule_title" style="font-size:larger;">' + data.title + '</span></strong><br>' +
'<a href="javascript:void(0);" class="import_schedule_edit" data-schedule-id="' + data.schedule_id + '"><?php esc_html_e( 'Edit', 'wp-google-maps' ); ?></a>' +
' | <a href="javascript:void(0);" class="import_schedule_delete" data-schedule-id="' + data.schedule_id + '"><?php esc_html_e( 'Delete', 'wp-google-maps' ); ?></a>' +
' | ' + ( ( data.next_run.length < 1 || ! data.next_run ) ? '<?php esc_html_e( 'No schedule found', 'wp-google-maps' ); ?>' :
'<?php esc_html_e( 'Next Scheduled Run', 'wp-google-maps' ); ?>: ' + data.next_run ) + '</td></tr>' );
wpgmaps_import_setup_schedule_links(data.schedule_id);
$('#wpgmaps_import_schedule_list').show();
}
},
error: function (data) {
if (typeof data !== 'undefined') {
wpgmaps_import_add_notice(data, 'error');
$('#import_loader').hide();
$('#import_options').show();
}
}
});
}
});
$('#import-schedule-json-cancel').click(function(){
$('#import-json,.delete-after-import').show();
$('#import-schedule-json-cancel').hide();
$('#import-schedule-json-options').slideUp(300);
});
})(jQuery);
</script>
<?php
return ob_get_clean();
}
public function import() {
$iterations = 1;
if ( $this->options['apply'] ) {
$iterations = count( $this->options['applys'] );
}
for ( $i = 0; $i < $iterations; $i++ ) {
if ( $this->options['apply'] ) {
if ( $this->options['replace'] ) {
$this->clear_map_data();
$this->options['replace'] = false;
}
$this->map_id_map = array();
foreach ( $this->file_data['maps'] as $map ) {
if ( ! empty( $this->options['maps'] ) && ! in_array( absint( $map['id'] ), $this->options['maps'], true ) ) {
continue;
}
$this->map_id_map[ absint( $map['id'] ) ] = $this->options['applys'][ $i ];
}
}
$this->import_custom_fields();
$this->import_maps();
$this->import_categories();
$this->import_markers();
$this->import_circles();
$this->import_polygons();
$this->import_polylines();
$this->import_rectangles();
$this->import_datasets();
}
$this->onImportComplete();
}
function clear_map_data() {
if ( ! $this->options['apply'] || empty( $this->options['applys'] ) ) {
return;
}
global $wpdb;
global $wpgmza_tblname;
global $wpgmza_tblname_circles;
global $wpgmza_tblname_poly;
global $wpgmza_tblname_polylines;
global $wpgmza_tblname_rectangles;
global $wpgmza_tblname_datasets;
$applys_in = implode( ',', $this->options['applys'] );
if ( $this->options['markers'] ) {
$wpdb->query( "DELETE FROM `$wpgmza_tblname` WHERE `map_id` IN ($applys_in)" );
}
if ( $this->options['circles'] ) {
$wpdb->query( "DELETE FROM `$wpgmza_tblname_circles` WHERE `map_id` IN ($applys_in)" );
}
if ( $this->options['polygons'] ) {
$wpdb->query( "DELETE FROM `$wpgmza_tblname_poly` WHERE `map_id` IN ($applys_in)" );
}
if ( $this->options['polylines'] ) {
$wpdb->query( "DELETE FROM `$wpgmza_tblname_polylines` WHERE `map_id` IN ($applys_in)" );
}
if ( $this->options['rectangles'] ) {
$wpdb->query( "DELETE FROM `$wpgmza_tblname_rectangles` WHERE `map_id` IN ($applys_in)" );
}
if ( $this->options['datasets'] ) {
$wpdb->query( "DELETE FROM `$wpgmza_tblname_datasets` WHERE `map_id` IN ($applys_in)" );
}
}
protected function import_maps() {
if ( $this->options['apply'] || empty( $this->file_data['maps'] ) ) {
return;
}
global $wpdb;
global $wpgmza_tblname_maps;
foreach ( $this->file_data['maps'] as $map ) {
if ( ! empty( $this->options['maps'] ) && ! in_array( absint( $map['id'] ), $this->options['maps'], true ) ) {
continue;
}
$success = $wpdb->insert( $wpgmza_tblname_maps, array(
'map_title' => isset( $map['map_title'] ) ? $map['map_title'] : __( 'New Imported Map', 'wp-google-maps' ),
'map_width' => isset( $map['map_width'] ) ? $map['map_width'] : 100,
'map_height' => isset( $map['map_height'] ) ? $map['map_height'] : 400,
'map_start_lat' => isset( $map['map_start_lat'] ) ? $map['map_start_lat'] : '',
'map_start_lng' => isset( $map['map_start_lng'] ) ? $map['map_start_lng'] : '',
'map_start_location' => isset( $map['map_start_location'] ) ? $map['map_start_location'] : '',
'map_start_zoom' => isset( $map['map_start_zoom'] ) ? $map['map_start_zoom'] : 15,
'default_marker' => isset( $map['default_marker'] ) ? $map['default_marker'] : 0,
'type' => isset( $map['type'] ) ? $map['type'] : 3,
'alignment' => isset( $map['alignment'] ) ? $map['alignment'] : 1,
'directions_enabled' => isset( $map['directions_enabled'] ) ? $map['directions_enabled'] : 1,
'styling_enabled' => isset( $map['styling_enabled'] ) ? $map['styling_enabled'] : 0,
'styling_json' => isset( $map['styling_json'] ) ? $map['styling_json'] : '',
'active' => isset( $map['active'] ) ? $map['active'] : 0,
'kml' => isset( $map['kml'] ) ? $map['kml'] : '',
'bicycle' => isset( $map['bicycle'] ) ? $map['bicycle'] : 2,
'traffic' => isset( $map['traffic'] ) ? $map['traffic'] : 2,
'dbox' => isset( $map['dbox'] ) ? $map['dbox'] : 4,
'dbox_width' => isset( $map['dbox_width'] ) ? $map['dbox_width'] : 100,
'listmarkers' => isset( $map['listmarkers'] ) ? $map['listmarkers'] : 0,
'listmarkers_advanced' => isset( $map['listmarkers_advanced'] ) ? $map['listmarkers_advanced'] : 0,
'filterbycat' => isset( $map['filterbycat'] ) ? $map['filterbycat'] : 0,
'ugm_enabled' => isset( $map['ugm_enabled'] ) ? $map['ugm_enabled'] : 0,
'ugm_category_enabled' => isset( $map['ugm_category_enabled'] ) ? $map['ugm_category_enabled'] : 0,
'fusion' => isset( $map['fusion'] ) ? $map['fusion'] : '',
'map_width_type' => isset( $map['map_width_type'] ) ? $map['map_width_type'] : '\%',
'map_height_type' => isset( $map['map_height_type'] ) ? $map['map_height_type'] : 'px',
'mass_marker_support' => isset( $map['mass_marker_support'] ) ? $map['mass_marker_support'] : 0,
'ugm_access' => isset( $map['ugm_access'] ) ? $map['ugm_access'] : 0,
'order_markers_by' => isset( $map['order_markers_by'] ) ? $map['order_markers_by'] : 2,
'order_markers_choice' => isset( $map['order_markers_choice'] ) ? $map['order_markers_choice'] : 1,
'show_user_location' => isset( $map['show_user_location'] ) ? $map['show_user_location'] : 1,
'default_to' => isset( $map['default_to'] ) ? $map['default_to'] : '',
'other_settings' => isset( $map['other_settings'] ) ? $map['other_settings'] : '',
), array(
'%s',
'%d',
'%d',
'%f',
'%f',
'%s',
'%d',
'%d',
'%d',
'%d',
'%d',
'%d',
'%s',
'%d',
'%s',
'%d',
'%d',
'%d',
'%d',
'%d',
'%d',
'%d',
'%d',
'%d',
'%s',
'%s',
'%s',
'%d',
'%d',
'%d',
'%d',
'%d',
'%s',
'%s',
) );
if ( false !== $success ) {
$map_id = empty( $map['id'] ) ? 0 : absint( $map['id'] );
$this->map_id_map[ $map_id ] = $wpdb->insert_id;
}
if(!empty($map->filter_custom_field_names))
{
}
}
}
protected function import_categories() {
if ( ! $this->options['categories'] || empty( $this->file_data['categories'] ) ) {
return;
}
global $wpdb;
global $wpgmza_tblname_categories;
global $wpgmza_tblname_category_maps;
$parent_update = array();
foreach ( $this->file_data['categories'] as $cat_key => $category ) {
if ( ! isset( $category['map_id'] ) || ( absint( $category['map_id'] ) > 0 && ! isset( $this->map_id_map[ absint( $category['map_id'] ) ] ) ) ) {
continue;
}
$cat_id = empty( $category['id'] ) ? 0 : absint( $category['id'] );
if ( ! isset( $this->cat_id_map[ $cat_id ] ) ) {
$cat_search = null;
if ( ! empty( $category['category_name'] ) ) {
$cat_search = $wpdb->get_var( $wpdb->prepare( "SELECT `id` FROM `$wpgmza_tblname_categories` WHERE `category_name`=%s", $category['category_name'] ) );
}
if ( null === $cat_search ) {
$success = $wpdb->insert( $wpgmza_tblname_categories, array(
'active' => isset( $category['active'] ) ? $category['active'] : 0,
'category_name' => isset( $category['category_name'] ) ? $category['category_name'] : __( 'New Imported Category', 'wp-google-maps' ),
'category_icon' => isset( $category['category_icon'] ) ? $category['category_icon'] : '',
'retina' => isset( $category['retina'] ) ? $category['retina'] : 0,
'parent' => isset( $category['parent'] ) ? $category['parent'] : 0,
'priority' => isset( $category['priority'] ) ? $category['priority'] : 0,
), array(
'%d',
'%s',
'%s',
'%d',
'%d',
'%d',
) );
} else {
$success = 1;
}
if ( false !== $success ) {
$this->cat_id_map[ $cat_id ] = null !== $cat_search ? $cat_search : $wpdb->insert_id;
if ( isset( $category['parent'] ) && intval( $category['parent'] ) > 0 ) {
$parent_update[] = $cat_key;
}
}
}
if ( isset( $this->cat_id_map[ $cat_id ], $category['map_id'] ) ) {
$map_id = isset( $this->map_id_map[ absint( $category['map_id'] ) ] ) ? $this->map_id_map[ absint( $category['map_id'] ) ] : 0;
if ( 0 === $map_id ) {
if ( isset( $this->cat_all_maps[ $cat_id ] ) ) {
continue;
} else {
$this->cat_all_maps[ $cat_id ] = $this->cat_id_map[ $cat_id ];
}
}
$success = $wpdb->insert( $wpgmza_tblname_category_maps, array(
'cat_id' => $this->cat_id_map[ $cat_id ],
'map_id' => $map_id,
), array(
'%d',
'%d',
) );
}
}
foreach ( $parent_update as $cat_key ) {
$cat_id = absint( $this->file_data['categories'][ $cat_key ]['id'] );
$parent_id = absint( $this->file_data['categories'][ $cat_key ]['parent'] );
if ( isset( $this->cat_id_map[ $cat_id ], $this->cat_id_map[ $parent_id ] ) ) {
$success = $wpdb->update( $wpgmza_tblname_categories, array(
'parent' => $this->cat_id_map[ $parent_id ],
), array(
'id' => $this->cat_id_map[ $cat_id ],
), '%d', '%d' );
}
}
}
protected function import_markers() {
if ( ! $this->options['markers'] || empty( $this->file_data['markers'] ) ) {
return;
}
global $wpdb;
global $wpgmza_tblname;
foreach ( $this->file_data['markers'] as $marker ) {
if ( ! isset( $marker['map_id'] ) || absint( $marker['map_id'] ) < 1 || ! isset( $this->map_id_map[ absint( $marker['map_id'] ) ] ) ) {
continue;
}
if(isset($this->options['geocode']))
{
if(!($result = $this->geocode($marker['address'])))
echo "<div>" . sprintf( __('Failed to geocode "%s"'), $marker['address'] ) . '</div>';
$marker['lat'] = $result[0];
$marker['lng'] = $result[1];
}
$stmt = $wpdb->prepare( "INSERT INTO `$wpgmza_tblname`
(`map_id`,`address`,`description`,`pic`,`link`,`icon`,`lat`,`lng`,`anim`,`title`,`infoopen`,`category`,`approved`,`retina`,`type`,`did`,`other_data`,`latlng`)
VALUES (%d,%s,%s,%s,%s,%s,%f,%f,%d,%s,%d,%d,%d,%d,%d,%s,%s,POINT(%f,%f))",
$this->map_id_map[ absint( $marker['map_id'] ) ],
isset( $marker['address'] ) ? $marker['address'] : '',
isset( $marker['description'] ) ? $marker['description'] : '',
isset( $marker['pic'] ) ? $marker['pic'] : '',
isset( $marker['link'] ) ? $marker['link'] : '',
isset( $marker['icon'] ) ? $marker['icon'] : '',
isset( $marker['lat'] ) ? $marker['lat'] : 0,
isset( $marker['lng'] ) ? $marker['lng'] : 0,
isset( $marker['anim'] ) ? $marker['anim'] : 0,
isset( $marker['title'] ) ? $marker['title'] : __( 'New Imported Marker' , 'wp-google-maps' ),
isset( $marker['infoopen'] ) ? $marker['infoopen'] : 0,
isset( $marker['category'] ) ? $marker['category'] : 0,
isset( $marker['approved'] ) ? $marker['approved'] : 1,
isset( $marker['retina'] ) ? $marker['retina'] : 0,
isset( $marker['type'] ) ? $marker['type'] : 0,
isset( $marker['did'] ) ? $marker['did'] : '',
isset( $marker['other_data'] ) ? $marker['other_data'] : '',
isset( $marker['lat'] ) ? $marker['lat'] : 0,
isset( $marker['lng'] ) ? $marker['lng'] : 0
);
file_put_contents(ABSPATH . 'query.log', $stmt, FILE_APPEND);
$success = $wpdb->query( $stmt );
$marker_id = $wpdb->insert_id;
if(!empty($marker['custom_fields_data']))
{
$custom_fields = new CustomMarkerFields($marker_id);
foreach($marker['custom_fields_data'] as $key => $value)
$custom_fields->{$key} = $value;
}
}
}
protected function import_custom_fields() {
global $wpdb;
global $WPGMZA_TABLE_NAME_CUSTOM_FIELDS;
if ( ! $this->options['customfields'] || empty( $this->file_data['customfields'] ) ) {
return;
}
CustomFields::install();
$existing_custom_field_names = $wpdb->get_col("SELECT name FROM $WPGMZA_TABLE_NAME_CUSTOM_FIELDS");
$columns = $wpdb->get_results("SHOW COLUMNS FROM $WPGMZA_TABLE_NAME_CUSTOM_FIELDS");
$column_names = array();
$placeholders = array();
foreach($columns as $col)
{
if($col->Field == 'id')
continue;
$column_names[] = $col->Field;
if(preg_match('/^int/', $col->Type))
$placeholders[] = '%d';
else
$placeholders[] = '%s';
}
$imploded_columns = implode(', ', $column_names);
$imploded_placeholders = implode(', ', $placeholders);
$qstr = "INSERT INTO $WPGMZA_TABLE_NAME_CUSTOM_FIELDS ($imploded_columns) VALUES ($imploded_placeholders)";
foreach ( $this->file_data['customfields'] as $field )
{
$values = array();
foreach($columns as $col) {
if($col->Field == 'id')
continue;
if($col->Field == 'name')
{
$custom_field_name = $field[$col->Field];
if(array_search($custom_field_name, $existing_custom_field_names) !== false)
continue 2;
}
if(isset($field[$col->Field]))
$values[] = $field[$col->Field];
else
$values[] = '';
}
$stmt = $wpdb->prepare($qstr, $values);
$wpdb->query($stmt);
}
}
protected function import_circles() {
if ( ! $this->options['circles'] || empty( $this->file_data['circles'] ) ) {
return;
}
global $wpdb;
global $wpgmza_tblname_circles;
foreach ( $this->file_data['circles'] as $circle ) {
if ( ! isset( $circle['map_id'] ) || absint( $circle['map_id'] ) < 1 || ! isset( $this->map_id_map[ absint( $circle['map_id'] ) ] ) ) {
continue;
}
$success = $wpdb->query( $wpdb->prepare( "INSERT INTO `$wpgmza_tblname_circles`
(`map_id`,`name`,`center`,`radius`,`color`,`opacity`)
VALUES (%d,%s,POINT(%f,%f),%f,%s,%f)",
$this->map_id_map[ absint( $circle['map_id'] ) ],
isset( $circle['name'] ) ? $circle['name'] : __( 'New Imported Circle', 'wp-google-maps' ),
isset( $circle['centerX'] ) ? $circle['centerX'] : 0,
isset( $circle['centerY'] ) ? $circle['centerY'] : 0,
isset( $circle['radius'] ) ? $circle['radius'] : 20,
isset( $circle['color'] ) ? $circle['color'] : '#ff0000',
isset( $circle['opacity'] ) ? $circle['opacity'] : 0.6
) );
}
}
protected function import_polygons() {
if ( ! $this->options['polygons'] || empty( $this->file_data['polygons'] ) ) {
return;
}
global $wpdb;
global $wpgmza_tblname_poly;
foreach ( $this->file_data['polygons'] as $polygon ) {
if ( ! isset( $polygon['map_id'] ) || absint( $polygon['map_id'] ) < 1 || ! isset( $this->map_id_map[ absint( $polygon['map_id'] ) ] ) ) {
continue;
}
$success = $wpdb->insert( $wpgmza_tblname_poly, array(
'map_id' => $this->map_id_map[ absint( $polygon['map_id'] ) ],
'polydata' => isset( $polygon['polydata'] ) ? $polygon['polydata'] : '',
'innerpolydata' => isset( $polygon['innerpolydata'] ) ? $polygon['innerpolydata'] : '',
'linecolor' => isset( $polygon['linecolor'] ) ? $polygon['linecolor'] : '000000',
'lineopacity' => isset( $polygon['lineopacity'] ) ? $polygon['lineopacity'] : 0.5,
'fillcolor' => isset( $polygon['fillcolor'] ) ? $polygon['fillcolor'] : '66FF00',
'opacity' => isset( $polygon['opacity'] ) ? $polygon['opacity'] : 0.5,
'title' => isset( $polygon['title'] ) ? $polygon['title'] : '',
'link' => isset( $polygon['link'] ) ? $polygon['link'] : '',
'ohfillcolor' => isset( $polygon['ohfillcolor'] ) ? $polygon['ohfillcolor'] : '57FF78',
'ohlinecolor' => isset( $polygon['ohlinecolor'] ) ? $polygon['ohlinecolor'] : '737373',
'ohopacity' => isset( $polygon['opacity'] ) ? $polygon['opacity'] : 0.7,
'polyname' => isset( $polygon['polyname'] ) ? $polygon['polyname'] : __( 'New Imported Polygon', 'wp-google-maps' ),
), array(
'%d',
'%s',
'%s',
'%s',
'%f',
'%s',
'%f',
'%s',
'%s',
'%s',
'%s',
'%f',
'%s',
) );
}
}
protected function import_polylines() {
if ( ! $this->options['polylines'] || empty( $this->file_data['polylines'] ) ) {
return;
}
global $wpdb;
global $wpgmza_tblname_polylines;
foreach ( $this->file_data['polylines'] as $polyline ) {
if ( ! isset( $polyline['map_id'] ) || absint( $polyline['map_id'] ) < 1 || ! isset( $this->map_id_map[ absint( $polyline['map_id'] ) ] ) ) {
continue;
}
$success = $wpdb->insert( $wpgmza_tblname_polylines, array(
'map_id' => $this->map_id_map[ absint( $polyline['map_id'] ) ],
'polydata' => isset( $polyline['polydata'] ) ? $polyline['polydata'] : '',
'linecolor' => isset( $polyline['linecolor'] ) ? $polyline['linecolor'] : '000000',
'linethickness' => isset( $polyline['linethickness'] ) ? $polyline['linethickness'] : 4,
'opacity' => isset( $polyline['opacity'] ) ? $polyline['opacity'] : 0.8,
'polyname' => isset( $polyline['polyname'] ) ? $polyline['polyname'] : __( 'New Imported Polyline', 'wp-google-maps' ),
), array(
'%d',
'%s',
'%s',
'%f',
'%f',
'%s',
) );
}
}
protected function import_rectangles() {
if ( ! $this->options['rectangles'] || empty( $this->file_data['rectangles'] ) ) {
return;
}
global $wpdb;
global $wpgmza_tblname_rectangles;
foreach ( $this->file_data['rectangles'] as $rectangle ) {
if ( ! isset( $rectangle['map_id'] ) || absint( $rectangle['map_id'] ) < 1 || ! isset( $this->map_id_map[ absint( $rectangle['map_id'] ) ] ) ) {
continue;
}
$success = $wpdb->query( $wpdb->prepare( "INSERT INTO `$wpgmza_tblname_rectangles`
(`map_id`,`name`,`cornerA`,`cornerB`,`color`,`opacity`)
VALUES (%d,%s,POINT(%f,%f),POINT(%f,%f),%s,%f)",
$this->map_id_map[ absint( $rectangle['map_id'] ) ],
isset( $rectangle['name'] ) ? $rectangle['name'] : __( 'New Imported Rectangle', 'wp-google-maps' ),
isset( $rectangle['cornerAX'] ) ? $rectangle['cornerAX'] : 0,
isset( $rectangle['cornerAY'] ) ? $rectangle['cornerAY'] : 0,
isset( $rectangle['cornerBX'] ) ? $rectangle['cornerBX'] : 0,
isset( $rectangle['cornerBY'] ) ? $rectangle['cornerBY'] : 0,
isset( $rectangle['color'] ) ? $rectangle['color'] : '#ff0000',
isset( $rectangle['opacity'] ) ? $rectangle['opacity'] : 0.6
) );
}
}
protected function import_datasets() {
if ( ! $this->options['datasets'] || empty( $this->file_data['datasets'] ) ) {
return;
}
global $wpdb;
global $wpgmza_tblname_datasets;
foreach ( $this->file_data['datasets'] as $dataset ) {
if ( ! isset( $dataset['map_id'] ) || absint( $dataset['map_id'] ) < 1 || ! isset( $this->map_id_map[ absint( $dataset['map_id'] ) ] ) ) {
continue;
}
$success = $wpdb->insert( $wpgmza_tblname_datasets, array(
'map_id' => $this->map_id_map[ absint( $dataset['map_id'] ) ],
'type' => isset( $dataset['type'] ) ? $dataset['type'] : 0,
'dataset_name' => isset( $dataset['dataset_name'] ) ? $dataset['dataset_name'] : __( 'New Imported Dataset', 'wp-google-maps' ),
'dataset' => isset( $dataset['dataset'] ) ? $dataset['dataset'] : '',
'options' => isset( $dataset['options'] ) ? $dataset['options'] : '',
), array(
'%d',
'%d',
'%s',
'%s',
'%s',
) );
}
}
}