Source: my-calendar-migrate.php

<?php
/**
 * My Calendar migration tools
 *
 * @category Settings
 * @package  My Calendar
 * @author   Joe Dolson
 * @license  GPLv2 or later
 * @link     https://www.joedolson.com/my-calendar/
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Show migration form.
 */
function my_calendar_migration() {
	?>
<div class="wrap my-calendar-admin mc-migration-page" id="mc_migration">
	<h1><?php esc_html_e( 'My Calendar - Migration Tools', 'my-calendar' ); ?></h1>

	<div class="settings postbox-container jcd-wide">
		<div class="metabox-holder">
			<div class="ui-sortable meta-box-sortables">
				<div class="inside">
					<?php
					if ( isset( $_POST['import'] ) && 'true' === $_POST['import'] ) {
						$nonce = $_REQUEST['_wpnonce'];
						if ( ! wp_verify_nonce( $nonce, 'my-calendar-nonce' ) ) {
							wp_die( 'My Calendar: Security check failed' );
						}
						$source = ( in_array( $_POST['source'], array( 'calendar', 'tribe' ), true ) ) ? $_POST['source'] : false;
						if ( $source ) {
							/**
							 * Handle custom fields passed from the importer before doing the import.
							 *
							 * @hook mc_handle_importer_custom_fields
							 *
							 * @param {string} $source Importer source name.
							 */
							do_action( 'mc_handle_importer_custom_fields', $source );
							my_calendar_import( $source );
						}
					}
					$import_source = '';
					$message       = '';
					$to_import     = 1;
					if ( function_exists( 'check_calendar' ) && 'true' !== get_option( 'ko_calendar_imported' ) ) {
						$import_source = 'calendar';
						$message       = __( 'You have the Calendar plugin by Kieran O\'Shea installed. You can import those events and categories into My Calendar.', 'my-calendar' );
					}
					delete_option( 'mc_tribe_imported' );
					if ( function_exists( 'tribe_get_event' ) && 'true' !== get_option( 'mc_tribe_imported' ) ) {
						$import_source = 'tribe';
						$to_import     = mc_count_tribe_remaining();
						if ( 0 !== $to_import ) {
							// translators: Number of events to import.
							$message = sprintf( __( 'You have The Events Calendar plugin installed with %d events available to migrate. You can import those events, categories, and organizers into My Calendar.', 'my-calendar' ), $to_import );
						} else {
							$message = __( 'You have The Events Calendar installed. All events have been migrated to My Calendar.', 'my-calendar' );
						}
					}
					if ( $import_source ) {
						?>
					<div id="mc-importer" class='notice notice-info'>
						<p>
							<?php echo $message; ?>
						</p>
						<?php
						if ( 0 !== $to_import ) {
							?>
						<form method="post" action="<?php echo esc_url( admin_url( 'admin.php?page=my-calendar-migrate' ) ); ?>">
							<div>
								<input type="hidden" name="_wpnonce" value="<?php echo wp_create_nonce( 'my-calendar-nonce' ); ?>"/>
								<input type="hidden" name="import" value="true" />
								<input type="hidden" name="source" value="<?php echo $import_source; ?>" />
								<?php
								/**
								 * Output any custom fields or data required by the importer.
								 *
								 * @hook mc_importer_custom_fields
								 *
								 * @param {string} $output HTML output to display. Default empty.
								 * @param {string} $import_source Name of source being displayed.
								 *
								 * @return {string}
								 */
								$fields = apply_filters( 'mc_importer_custom_fields', '', $import_source );
								echo $fields;
								?>
								<input type="submit" value="<?php _e( 'Import Events', 'my-calendar' ); ?>" name="import-calendar" class="button-primary"/>
							</div>
						</form>
							<?php
						}
						?>
					</div>
						<?php
					}
					$in_progress = get_option( 'mc_import_running' );
					echo mc_display_progress( $in_progress );
					?>
				</div>
			</div>
		</div>
	</div>
</div>
	<?php
}