250 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			250 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
	/**
 | 
						|
	 * @package     Freemius
 | 
						|
	 * @copyright   Copyright (c) 2015, Freemius, Inc.
 | 
						|
	 * @license     https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
 | 
						|
	 * @since       1.2.1.5
 | 
						|
	 */
 | 
						|
 | 
						|
	if ( ! defined( 'ABSPATH' ) ) {
 | 
						|
		exit;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @var array    $VARS
 | 
						|
	 * @var Freemius $fs
 | 
						|
	 */
 | 
						|
    $slug      = $VARS['slug'];
 | 
						|
    $plugin_id = $VARS['target_module_id'];
 | 
						|
 | 
						|
    $fs = freemius( $VARS['id'] );
 | 
						|
 | 
						|
	$action = $fs->is_tracking_allowed() ?
 | 
						|
		'stop_tracking' :
 | 
						|
		'allow_tracking';
 | 
						|
 | 
						|
	$title = $fs->get_plugin_title();
 | 
						|
 | 
						|
	if ( $plugin_id != $fs->get_id() ) {
 | 
						|
		$addon = $fs->get_addon( $plugin_id );
 | 
						|
 | 
						|
		if ( is_object( $addon ) ) {
 | 
						|
			$title = $addon->title . ' ' . fs_text_inline( 'Add-On', 'addon', $slug );
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	$plugin_title = sprintf(
 | 
						|
		'<strong>%s</strong>',
 | 
						|
		esc_html( $title )
 | 
						|
	);
 | 
						|
 | 
						|
	$sec_countdown  = 30;
 | 
						|
	$countdown_html = sprintf(
 | 
						|
		esc_js(
 | 
						|
			/* translators: %s: Number of seconds */
 | 
						|
			fs_text_inline( '%s sec', 'x-sec', $slug )
 | 
						|
		),
 | 
						|
		sprintf( '<span class="fs-countdown">%s</span>', $sec_countdown )
 | 
						|
	);
 | 
						|
 | 
						|
	fs_enqueue_local_style( 'fs_dialog_boxes', '/admin/dialog-boxes.css' );
 | 
						|
	fs_enqueue_local_style( 'fs_common', '/admin/common.css' );
 | 
						|
 | 
						|
	$params      = array();
 | 
						|
	$loader_html = fs_get_template( 'ajax-loader.php', $params );
 | 
						|
 | 
						|
	// Pass unique auto installation URL if WP_Filesystem is needed.
 | 
						|
	$install_url = $fs->_get_sync_license_url(
 | 
						|
		$plugin_id,
 | 
						|
		true,
 | 
						|
		array( 'auto_install' => 'true' )
 | 
						|
	);
 | 
						|
 | 
						|
 | 
						|
	ob_start();
 | 
						|
 | 
						|
	$method = ''; // Leave blank so WP_Filesystem can populate it as necessary.
 | 
						|
 | 
						|
	$credentials = request_filesystem_credentials(
 | 
						|
		esc_url_raw( $install_url ),
 | 
						|
		$method,
 | 
						|
		false,
 | 
						|
		WP_PLUGIN_DIR,
 | 
						|
		array()
 | 
						|
	);
 | 
						|
 | 
						|
	$credentials_form = ob_get_clean();
 | 
						|
 | 
						|
	$require_credentials = ! empty( $credentials_form );
 | 
						|
?>
 | 
						|
<div class="fs-modal fs-modal-auto-install">
 | 
						|
	<div class="fs-modal-dialog">
 | 
						|
		<div class="fs-modal-header">
 | 
						|
			<h4><?php echo esc_js( fs_text_inline( 'Automatic Installation', 'auto-installation', $slug ) ) ?></h4>
 | 
						|
		</div>
 | 
						|
		<div class="fs-modal-body">
 | 
						|
			<div class="fs-notice-error" style="display: none"><p></p></div>
 | 
						|
			<?php if ( $require_credentials ) : ?>
 | 
						|
				<div id="request-filesystem-credentials-dialog">
 | 
						|
					<?php echo $credentials_form ?>
 | 
						|
				</div>
 | 
						|
			<?php else : ?>
 | 
						|
				<p class="fs-installation-notice"><?php echo sprintf(
 | 
						|
						fs_esc_html_inline( 'An automated download and installation of %s (paid version) from %s will start in %s. If you would like to do it manually - click the cancellation button now.', 'installing-in-n', $slug ),
 | 
						|
						$plugin_title,
 | 
						|
						sprintf(
 | 
						|
							'<a href="%s" target="_blank" rel="noopener">%s</a>',
 | 
						|
							'https://freemius.com',
 | 
						|
							'freemius.com'
 | 
						|
						),
 | 
						|
						$countdown_html
 | 
						|
					) ?></p>
 | 
						|
			<?php endif ?>
 | 
						|
			<p class="fs-installing"
 | 
						|
			   style="display: none"><?php echo sprintf( fs_esc_html_inline( 'The installation process has started and may take a few minutes to complete. Please wait until it is done - do not refresh this page.', 'installing-module-x', $slug ), $plugin_title ) ?></p>
 | 
						|
		</div>
 | 
						|
		<div class="fs-modal-footer">
 | 
						|
			<?php echo $loader_html ?>
 | 
						|
			<button
 | 
						|
				class="button button-secondary button-cancel"><?php fs_esc_html_echo_inline( 'Cancel Installation', 'cancel-installation', $slug ) ?><?php if ( ! $require_credentials ) : ?> (<?php echo $countdown_html ?>)<?php endif ?></button>
 | 
						|
			<button
 | 
						|
				class="button button-primary"><?php fs_esc_html_echo_inline( 'Install Now', 'install-now', $slug ) ?></button>
 | 
						|
		</div>
 | 
						|
	</div>
 | 
						|
</div>'
 | 
						|
 | 
						|
<script type="text/javascript">
 | 
						|
	(function ($) {
 | 
						|
		$(document).ready(function () {
 | 
						|
			var $modal             = $('.fs-modal-auto-install'),
 | 
						|
			    $body              = $('body'),
 | 
						|
			    $countdown         = $modal.find('.fs-countdown'),
 | 
						|
			    requireCredentials = <?php echo json_encode( $require_credentials ) ?>,
 | 
						|
			    $credentialsForm   = $('#request-filesystem-credentials-dialog'),
 | 
						|
			    $errorNotice       = $modal.find('.fs-notice-error'),
 | 
						|
			    installing         = false;
 | 
						|
 | 
						|
			$modal.appendTo($body);
 | 
						|
 | 
						|
			var startAutoInstall = function () {
 | 
						|
				if (installing)
 | 
						|
					return;
 | 
						|
 | 
						|
				installing = true;
 | 
						|
 | 
						|
				// Start auto-install.
 | 
						|
				$modal.addClass('fs-warn');
 | 
						|
				if (requireCredentials) {
 | 
						|
					$credentialsForm.hide();
 | 
						|
				} else {
 | 
						|
					$modal.find('.fs-installation-notice').hide();
 | 
						|
				}
 | 
						|
 | 
						|
				$errorNotice.hide();
 | 
						|
				$modal.find('.fs-installing').show();
 | 
						|
				$modal.find('button').hide();
 | 
						|
				$modal.find('.fs-ajax-loader').show();
 | 
						|
 | 
						|
				var data = {
 | 
						|
					action          : '<?php echo $fs->get_ajax_action( 'install_premium_version' ) ?>',
 | 
						|
					security        : '<?php echo $fs->get_ajax_security( 'install_premium_version' ) ?>',
 | 
						|
					slug            : '<?php echo $slug ?>',
 | 
						|
					module_id       : '<?php echo $fs->get_id() ?>',
 | 
						|
                    target_module_id: '<?php echo $plugin_id ?>'
 | 
						|
				};
 | 
						|
 | 
						|
				if (requireCredentials) {
 | 
						|
					// Add filesystem credentials.
 | 
						|
					data.hostname = $('#hostname').val();
 | 
						|
					data.username = $('#username').val();
 | 
						|
					data.password = $('#password').val();
 | 
						|
					data.connection_type = $('input[name="connection_type"]:checked').val();
 | 
						|
					data.public_key = $('#public_key').val();
 | 
						|
					data.private_key = $('#private_key').val();
 | 
						|
				}
 | 
						|
 | 
						|
				$.ajax({
 | 
						|
					url    : <?php echo Freemius::ajax_url() ?>,
 | 
						|
					method : 'POST',
 | 
						|
					data   : data,
 | 
						|
					success: function (resultObj) {
 | 
						|
						var reloadAccount = false;
 | 
						|
 | 
						|
						if (resultObj.success) {
 | 
						|
							// Reload account page to show new data.
 | 
						|
							reloadAccount = true;
 | 
						|
						} else {
 | 
						|
							switch (resultObj.error.code) {
 | 
						|
								case 'invalid_module_id':
 | 
						|
								case 'premium_installed':
 | 
						|
									reloadAccount = true;
 | 
						|
									break;
 | 
						|
								case 'invalid_license':
 | 
						|
								case 'premium_version_missing':
 | 
						|
								case 'unable_to_connect_to_filesystem':
 | 
						|
								default:
 | 
						|
									$modal.removeClass('fs-warn');
 | 
						|
									$modal.find('.fs-installing').hide();
 | 
						|
									$modal.find('.fs-ajax-loader').hide();
 | 
						|
									$modal.find('.button-cancel').html(<?php fs_json_encode_echo_inline( 'Cancel Installation', 'cancel-installation', $slug ) ?>);
 | 
						|
									$modal.find('button').show();
 | 
						|
 | 
						|
									$errorNotice.find('p').text(resultObj.error.message);
 | 
						|
									$errorNotice.addClass('notice notice-alt notice-error').show();
 | 
						|
									if (requireCredentials) {
 | 
						|
										$credentialsForm.show();
 | 
						|
									}
 | 
						|
									break;
 | 
						|
							}
 | 
						|
						}
 | 
						|
 | 
						|
						if (reloadAccount) {
 | 
						|
							window.location = '<?php echo $fs->get_account_url() ?>';
 | 
						|
						}
 | 
						|
 | 
						|
						installing = false;
 | 
						|
					}
 | 
						|
				});
 | 
						|
			};
 | 
						|
 | 
						|
			var clearCountdown = function () {
 | 
						|
				clearInterval(countdownInterval);
 | 
						|
				countdownInterval = null;
 | 
						|
			};
 | 
						|
 | 
						|
			var cancelAutoInstall = function () {
 | 
						|
				$modal.fadeOut(function () {
 | 
						|
					$modal.remove();
 | 
						|
					$body.removeClass('has-fs-modal');
 | 
						|
				});
 | 
						|
			};
 | 
						|
 | 
						|
			var countdown         = <?php echo $sec_countdown ?>,
 | 
						|
			    countdownInterval = requireCredentials ? null : setInterval(function () {
 | 
						|
				    $countdown.html(--countdown);
 | 
						|
				    if (0 == countdown) {
 | 
						|
					    clearCountdown();
 | 
						|
					    startAutoInstall();
 | 
						|
				    }
 | 
						|
			    }, 1000);
 | 
						|
 | 
						|
			$modal.addClass('active');
 | 
						|
			$body.addClass('has-fs-modal');
 | 
						|
 | 
						|
			$modal.find('.button-primary').click(function () {
 | 
						|
				clearCountdown();
 | 
						|
				startAutoInstall();
 | 
						|
			});
 | 
						|
 | 
						|
			$modal.find('.button-cancel').click(function () {
 | 
						|
				clearCountdown();
 | 
						|
				cancelAutoInstall();
 | 
						|
			});
 | 
						|
 | 
						|
			if (requireCredentials) {
 | 
						|
 | 
						|
			}
 | 
						|
		});
 | 
						|
	})(jQuery);
 | 
						|
</script>
 |