File "demo-installer.js"

Full Path: /var/www/bvnghean.vn/save_bvnghean.vn/wp-content/plugins/sneeit-framework/js/demo-installer.js
File size: 19.81 KB
MIME-type: text/plain
Charset: utf-8

jQuery( function ( $ ) {

// fixme: debug
	/* for debuging database
$.post(ajaxurl, {
	action: 'sneeit_demo_installer',
	sub_action: 'install_start',			
	folder: 'debug'	// place this folder inside sneeit_demo with sneeit-demo-data.txt inside
});
$('#sneeit-demo-installer .demo .demo-actions .button-primary').click(function(){
	$.post(ajaxurl, {
		action: 'sneeit_demo_installer',
		sub_action: 'install_start',			
		folder: 'debug'	// place this folder inside sneeit_demo with sneeit-demo-data.txt inside
	});
});
return;
/**/


/* work around to fix the problem with some hostings which have 
 * ajax security to not allow access system folders
 * in this case is: /tmp/ folder 
 * this must be sync with demo-installer php files
 * */
var Sneeit_Safe_Forward_Slash = 'sneeit-safe-forward-slash';
/*
SNEEIT DEMO INSTALLER
*********************
 ---- BUILDER ------
*********************
*/
	var Sneeit_Demo_Installer_Build_Building = false;
	var Sneeit_Demo_Installer_Build_Files = new Array();
	var Sneeit_Demo_Installer_Build_Files_String = '';
	var Sneeit_Demo_Installer_Build_Folder = '';	
	
	function sneeit_demo_installer_data_is_error(data, update_status, action_selector) {
		if (typeof(update_status) == 'undefined') {
			update_status = true;
		}
		try {
		    data = $.parseJSON(data);
		} catch (e) {
		    // not JSON
		    if (update_status) {
		    	sneeit_demo_installer_update_process_status(
		    		100, 
		    		sneeit_demo_installer.text['Unknown error'], 
		    		true, 
		    		action_selector);	
		    }  
		    return true;
		}
		if (data == null) {
			if (update_status) {
				sneeit_demo_installer_update_process_status(
					100, 
					sneeit_demo_installer.text['Unknown error'], 
					true,
					action_selector);
			}
			return true;
		}
		if ('error' in data) {
			if (update_status) {
				sneeit_demo_installer_update_process_status(
					100, 
					data['error'], 
					true, 
					action_selector);
			} else {
				if (data['error']) {
					return data['error'];
				}
			}
			return true;
		}
		return false; 
	}
	function sneeit_demo_installer_update_process_status(percent, status, error, action_selector) {
		if (percent < 0) {
			percent = 0;
		}
		if (percent > 100) {
			percent == 100;
		}
		if (typeof(error) == 'undefined') {
			error = false;
		}
		
		$(action_selector).find('.demo-process-percent').html(percent.toFixed(2)+'%');
		$(action_selector).find('.demo-process-overlay')
			.stop()
			.animate({'height': (percent+'%')}, 500);
		$(action_selector).find('.demo-process-message').html(status);

		if (error) {
			$(action_selector).addClass('error');
		} else if (percent == 100)	{
			$(action_selector).addClass('finished');
		}
	}

/*
SNEEIT DEMO BUILDER
*************************
 ---- B U I L D E R ----
*************************
*/
	/**************
	 * BUILD : 01*/
	function sneeit_demo_installer_build_database() {		
		sneeit_demo_installer_update_process_status(0, sneeit_demo_installer.text['Building database file'], false, '#build-demo-process');
		$.post(ajaxurl, {
			action: 'sneeit_demo_installer',
			sub_action: 'build_database'			
		}).done(function( data ) {					
			if (sneeit_demo_installer_data_is_error(data, true, '#build-demo-process')) {				
				return;
			}			
			data = $.parseJSON(data);			
			Sneeit_Demo_Installer_Build_Folder = data['folder'];
			
			sneeit_demo_installer_build_list_media_files();
		});
	}
	
	/**************
	 * BUILD : 02*/
	function sneeit_demo_installer_build_list_media_files() {
		sneeit_demo_installer_update_process_status(10, sneeit_demo_installer.text['Listing files'], false, '#build-demo-process');		
		$.post(ajaxurl, {
			action: 'sneeit_demo_installer',
			sub_action: 'build_list_files',
			folder: Sneeit_Demo_Installer_Build_Folder			
		}).done(function( data ) {			
			if (sneeit_demo_installer_data_is_error(data, true, '#build-demo-process')) {
				return;
			}
			Sneeit_Demo_Installer_Build_Files_String = data;
			Sneeit_Demo_Installer_Build_Files = $.parseJSON(data);
			sneeit_demo_installer_build_media_files(0);
		});
	}
	
	/**************
	 * BUILD : 03*/
	function sneeit_demo_installer_build_media_files(latest_id) {		
		percent = 20;
		if (latest_id) { // count percent processed file in all files in list
			percent = (Sneeit_Demo_Installer_Build_Files.length - latest_id) / Sneeit_Demo_Installer_Build_Files.length;
			percent = 80 * (1- percent) + 20;
		}
		
		sneeit_demo_installer_update_process_status(percent, sneeit_demo_installer.text['Building Files'], false, '#build-demo-process');
		
		$.post(ajaxurl, {
			action: 'sneeit_demo_installer',
			sub_action: 'build_files',
			files: Sneeit_Demo_Installer_Build_Files_String,
			latest: latest_id,
			folder: Sneeit_Demo_Installer_Build_Folder
		}).done(function( data ) {			
			if (sneeit_demo_installer_data_is_error(data, true, '#build-demo-process')) {
				return;
			}
			data = $.parseJSON(data);
			latest_id = data['latest'];
			if (latest_id == Sneeit_Demo_Installer_Build_Files.length) {
				sneeit_demo_installer_build_finalize();
			} else {
				sneeit_demo_installer_build_media_files(latest_id);
			}
		});
	}
	
	/**************
	 * BUILD : 04*/
	function sneeit_demo_installer_build_finalize() {
		sneeit_demo_installer_update_process_status(100, sneeit_demo_installer.text['Built successfully'], false, '#build-demo-process');
		$('#build-demo-process .demo-process-percent').html(sneeit_demo_installer.text['Done']);
		Sneeit_Demo_Installer_Build_Building = false;
		sneeit_demo_installer_explore(Sneeit_Demo_Installer_Build_Folder);
	}

/*
SNEEIT DEMO SUPPORTER
*****************************
 ---- S U P P O R T E R ----
*****************************
*/
	/******************
	 * SUPPORTER : 01*/
	function sneeit_demo_installer_delete(folder_name) {		
		$.post(ajaxurl, {
			action: 'sneeit_demo_installer',
			sub_action: 'delete',
			folder: folder_name
		}).done(function( data ) {
			var ret = sneeit_demo_installer_data_is_error(data, false);
			if (ret) {
				if (typeof(ret) == 'String') {
					$('#sneeit-demo-installer .explored').html(ret);
				} else {
					$('#sneeit-demo-installer .explored').html(
						sneeit_demo_installer.text['Can not delete the demo data']);
				}
				return;
			}
			sneeit_demo_installer_explore();
		});
	}
	
	/******************
	 * SUPPORTER : 02*/
	function sneeit_demo_installer_explore(folder_name) {
		$('#sneeit-demo-installer .explored').show();
		$('#sneeit-demo-installer .explored').addClass('loading');
		$('#sneeit-demo-installer .explored').html('<i class="fa fa-cog fa-spin explored-loading-icon"></i>');

		if (typeof(folder_name) == 'undefined') {
			folder_name = '';
		}
		$.post(ajaxurl, {
			action: 'sneeit_demo_installer',
			sub_action: 'explore'
		}).done(function( data ) {
			var ret = sneeit_demo_installer_data_is_error(data, false);
			if (ret) {
				if (typeof(ret) == 'String') {
					$('#sneeit-demo-installer .explored').html(ret);
				} else {
					$('#sneeit-demo-installer .explored').html(
						sneeit_demo_installer.text['Can not explore the demo data']);
				}
				
				return;
			}
			data = $.parseJSON(data);			
			if (data.length == 0) {
				$('#sneeit-demo-installer .explored').html(sneeit_demo_installer.text['Not found any built demo files']);
				if (!Sneeit_Demo_Installer_Build_Building) {					
					$('#build-demo-process').css('display', 'none').removeClass('finished');
					$('#build-demo').css('display', 'block');
				}
				return;
			}
			
			var html = '';
			for (var i = data.length - 1; i >= 0; i-=1) {	
				
				html += 
'<div class="item" data-folder="'+data[i]['folder']+'">'+
	'<span class="col name">'+
		'<strong>'+
			data[i]['folder']+
		'</strong>'+
		(data[i]['name'] != data[i]['folder']? ' ('+data[i]['name']+')':'')+
	'</span>'+
	'<a class="col delete" href="javascript:void(0)" data-folder="'+data[i]['folder']+'">'+
		sneeit_demo_installer.text['Delete']+
	'</a>'+
	
	/* COMMING SOON: Allow restore from custom built demo folder */
	/* '<a class="col restore" href="javascript:void(0)">'+sneeit_demo_installer.text['Restore Demo']+'</a>'+ */
	
	'<a class="col get" href="javascript:void(0)">'+sneeit_demo_installer.text['Get Code']+'</a>'+
	'<div class="clear"></div>'+
	'<div class="content">'+
	'<p>'+sneeit_demo_installer.text['Download those below files and upload to some where (example: Google drive, Drop Box).']+'</p>'+			
	'<ul>';				
				for (var j = 0; j < data[i]['files'].length; j++) {
					html += 
		'<li>'+
			'<a href="'+data[i]['files'][j]['link']+'">'+
				data[i]['files'][j]['name']+
			'</a>'+
		'</li>';
				}
				

				html +=		
	'</ul>'+
	
	'<p>'+sneeit_demo_installer.text['copy_code']+'</p>'+
				
	'<textarea class="code">'+
"	'your-demo-id' => array(\n"+
"		'name' => __('"+sneeit_demo_installer.text['Your demo name']+"', 'your-theme-slug'), \n"+
"		'screenshot' => 'link-to-your-screenshot-image',\n"+
"		'files' => array(\n";
				for (var j = 0; j < data[i]['files'].length; j++) {
						html += 
"			'direct-download-link-to-"+data[i]['files'][j]['name']+"',\n";
				}
				html +=					
"		) \n"+
"	)\n"+
		'</textarea>'+
	'</div>'+
'</div>';
			}


			/* finished explored demo folders */
			$('#sneeit-demo-installer .explored').html(html).removeClass('loading');
			if (folder_name) {
				$('#sneeit-demo-installer .explored .item[data-folder="'+folder_name+'"] .content').slideDown();
			}
			
			/* restore demo when click [restore] link*/
			$('#sneeit-demo-installer .explored .item .restore').click(function () {
				if (!confirm(sneeit_demo_installer.text['Please make sure your site is very NEW or just a TEST site, because demo data will ERASE all your database. Are you sure to install demo?'])) {
					return;
				}
				
				// let's go
				$('#sneeit-demo-installer .explored').slideUp();				
			});
			
			/* show declare code when click [get] link*/
			$('#sneeit-demo-installer .explored .item .get').click(function () {
				$('#sneeit-demo-installer .explored .item .content').slideUp();
				$(this).parent().find('.content').each(function () {
					if ($(this).css('display') == 'none') {
						$(this).stop().slideDown();
					} else {
						$(this).stop().slideUp();
					}
				});
			});

			/* delete demo folder and files when click [delete] link */
			$('#sneeit-demo-installer .explored .item .delete').click(function () {
				var folder_name = $(this).attr('data-folder');
				sneeit_demo_installer_delete(folder_name);				
			});
		});
	}


/*
SNEEIT DEMO INSTALLER
*****************************
 ---- I N S T A L L E R ----
*****************************
*/
	var Sneeit_Demo_Installer_Install_Folder = '';	
	var Sneeit_Demo_Installer_Install_Files = new Array();
	var Sneeit_Demo_Installer_Install_Links = new Array();
	var Sneeit_Demo_Installer_Install_Selector = null;

	/****************************************
	 * INSTALLER : 01 - create temp folder */
	function sneeit_demo_installer_install_folder() {		
		sneeit_demo_installer_update_process_status(0, sneeit_demo_installer.text['Creating download folder'], false, Sneeit_Demo_Installer_Install_Selector);
		
		$.post(ajaxurl, {
			action: 'sneeit_demo_installer',
			sub_action: 'install_folder',
			folder: Sneeit_Demo_Installer_Install_Folder
		}).done(function( data ) {
			if (sneeit_demo_installer_data_is_error(data, true, Sneeit_Demo_Installer_Install_Selector)) {
				return;
			}

			sneeit_demo_installer_install_download(0);
		});
	}

	/***************************************************
	 * INSTALLER : 02 - download files to temp folder */
	var start_percent = Math.random() + 4; /* limited at 5% */
	var current_percent = start_percent;
	function sneeit_demo_installer_install_download(latest_id) {		
		latest_id = Number(latest_id);
		if (latest_id) { 
			// count percent processed file in all files in list
			current_percent = (Sneeit_Demo_Installer_Install_Links.length - latest_id) / Sneeit_Demo_Installer_Install_Links.length;
			// limit at 45%
			// percent range for this is 40% from start_percent 
			// because start percent will never higher than 5
			// So this will also never higher than 45%
			current_percent = 40 * (1 - current_percent) + start_percent; 		
		}

		sneeit_demo_installer_update_process_status(current_percent, sneeit_demo_installer.text['Downloading files'], false, Sneeit_Demo_Installer_Install_Selector);

		$.post(ajaxurl, {
			action: 'sneeit_demo_installer',
			sub_action: 'install_download',
			folder: Sneeit_Demo_Installer_Install_Folder,
			latest: latest_id,
			links: Sneeit_Demo_Installer_Install_Links
		}).done(function( data ) {
			if (sneeit_demo_installer_data_is_error(data, true, Sneeit_Demo_Installer_Install_Selector)) {
				return;
			}			
			data = $.parseJSON(data);
			Sneeit_Demo_Installer_Install_Files.push(data['file']);

			latest_id = Number(data['latest']);
			if (latest_id == Sneeit_Demo_Installer_Install_Links.length) {
				// point to next step
				start_percent = current_percent;
				sneeit_demo_installer_install_extract(0);
			} else {
				// continue loop
				sneeit_demo_installer_install_download(latest_id);
			}
		});
	}
	
	/******************************************************
	 * INSTALLER : 03 - extract files in template folder */
	function sneeit_demo_installer_install_extract(latest_id) {
		latest_id = Number(latest_id);
		if (latest_id) { 
			// count percent processed file in all files in list
			current_percent = (Sneeit_Demo_Installer_Install_Files.length - latest_id) / Sneeit_Demo_Installer_Install_Files.length;
			// limit at 75%
			// percent range for this is 30% from start_percent 
			// because previous percent will never higher than 45
			// So this will also never higher than 75%
			current_percent = 30 * (1 - current_percent) + start_percent; 		
		}

		sneeit_demo_installer_update_process_status(current_percent, sneeit_demo_installer.text['Extracting files'], false, Sneeit_Demo_Installer_Install_Selector);
		
		var files = Sneeit_Demo_Installer_Install_Files;
		for (var i = 0; i < files.length; i++) {
			files[i] = files[i].replaceAll('/', Sneeit_Safe_Forward_Slash);
		}
		$.post(ajaxurl, {
			action: 'sneeit_demo_installer',
			sub_action: 'install_extract',
			latest: latest_id,
			files: Sneeit_Demo_Installer_Install_Files,
			folder: Sneeit_Demo_Installer_Install_Folder
		}).done(function( data ) {
			if (sneeit_demo_installer_data_is_error(data, true, Sneeit_Demo_Installer_Install_Selector)) {
				return;
			}
			
			data = $.parseJSON(data);
			latest_id = Number(data['latest']);
			if (latest_id == Sneeit_Demo_Installer_Install_Files.length) {
				// point to next step
				start_percent = current_percent;
				sneeit_demo_installer_install_list();
			} else {
				// continue loop
				sneeit_demo_installer_install_extract(latest_id);
			}
		});
	}
	
	/************************************************************
	 * INSTALLER : 04 - list number of files in media structure */
	var sneeit_demo_installer_num_file = 0;
	function sneeit_demo_installer_install_list() {		
		current_percent = start_percent + Math.random()+4; // prev 75%, so limted at 80%
		sneeit_demo_installer_update_process_status(current_percent, sneeit_demo_installer.text['Listing files'], false, Sneeit_Demo_Installer_Install_Selector);

		$.post(ajaxurl, {
			action: 'sneeit_demo_installer',
			sub_action: 'install_list',			
			folder: Sneeit_Demo_Installer_Install_Folder
		}).done(function( data ) {
			if (sneeit_demo_installer_data_is_error(data, true, Sneeit_Demo_Installer_Install_Selector)) {
				return;
			}
			
			data = $.parseJSON(data);
			sneeit_demo_installer_num_file = Number(data['num']);
			start_percent = current_percent;
			sneeit_demo_installer_install_move(0, 0);			
		});
	}
	
	
	/****************************************************
	 * INSTALLER : 05 - move files to "uploads" folder */	
	function sneeit_demo_installer_install_move(latest_id, fail_num) {		
		latest_id = Number(latest_id);
		if (latest_id) { 
			// count percent processed file in all files in list
			current_percent = (sneeit_demo_installer_num_file - latest_id ) / sneeit_demo_installer_num_file;
			
			// percent range for this is 15% from start_percent 
			// because previous percent will never higher than 80%
			// So this will also never higher than 95%
			if (current_percent < 0) {
				current_percent = 0;
			}
			current_percent = 15 * (1 - current_percent) + start_percent; 		
		}

		sneeit_demo_installer_update_process_status(current_percent, sneeit_demo_installer.text['Moving files'], false, Sneeit_Demo_Installer_Install_Selector);

		$.post(ajaxurl, {
			action: 'sneeit_demo_installer',
			sub_action: 'install_move',
			folder: Sneeit_Demo_Installer_Install_Folder,
			files: Sneeit_Demo_Installer_Install_Files,
			fail: fail_num,
			latest: latest_id
		}).done(function( data ) {
			if (sneeit_demo_installer_data_is_error(data, true, Sneeit_Demo_Installer_Install_Selector)) {
				return;
			}			
			data = $.parseJSON(data);			

			latest_id = data['latest'];
			fail_num = data['fail'];			
			
			if ('done' == latest_id) {
				// point to next step
				start_percent = current_percent;
				sneeit_demo_installer_install_start();
			} else {
				// continue loop
				sneeit_demo_installer_install_move(latest_id, fail_num);
			}
		});
	}

	/*************************************
	 * INSTALLER : 06 - write to database*/
	function sneeit_demo_installer_install_start() {
		current_percent = start_percent + Math.random()+4; // limited at 99%
		sneeit_demo_installer_update_process_status(current_percent, sneeit_demo_installer.text['Installing files'], false, Sneeit_Demo_Installer_Install_Selector);

		$.post(ajaxurl, {
			action: 'sneeit_demo_installer',
			sub_action: 'install_start',			
			folder: Sneeit_Demo_Installer_Install_Folder
		}).done(function( data ) {
			if (sneeit_demo_installer_data_is_error(data, true, Sneeit_Demo_Installer_Install_Selector)) {
				return;
			}

			sneeit_demo_installer_install_finalize();
		});
	}

	/**************************************************
	 * INSTALLER : 07 - delete temp folder and finish */
	function sneeit_demo_installer_install_finalize() {		
		sneeit_demo_installer_update_process_status(100, sneeit_demo_installer.text['Installed successfully'], false, Sneeit_Demo_Installer_Install_Selector);

		$(Sneeit_Demo_Installer_Install_Selector).find('.demo-process-percent').html(sneeit_demo_installer.text['Done']);
		$(Sneeit_Demo_Installer_Install_Selector).addClass('finished');
		Sneeit_Demo_Installer_Build_Building = false;

		sneeit_demo_installer_explore();
	}
	
	
/*
 * 
 * * * * * * * * *
*********************
 ---- ACTIONS --------
*********************
 * * * * * * * * *
 * 
*/	
	// explore when first load page
	sneeit_demo_installer_explore();

	// when click build demo button
	$('#build-demo').click(function () {
		if (Sneeit_Demo_Installer_Build_Building) {
			alert(sneeit_demo_installer.text['A process is running!']);
			return;
		}
		if (!confirm(sneeit_demo_installer.text['This function is for DEVELOPERS only to help them building demo data to integrate to their themes. Are you sure to BUILD yours?'])) {
			return;
		}
		Sneeit_Demo_Installer_Build_Building = true;
		$(this).css('display', 'none');
		$('#build-demo-process').css('display', 'block');
		$('#sneeit-demo-installer .explored').slideUp(500);
		sneeit_demo_installer_build_database();
	});


	// when click install demo
	$('.button-start-demo-install').click(function () {
		if (Sneeit_Demo_Installer_Build_Building) {
			alert(sneeit_demo_installer.text['A process is running!']);
			return;
		}
		if (!confirm(sneeit_demo_installer.text['Please make sure your site is very NEW or just a TEST site, because demo data will ERASE all your database. Are you sure to install demo?'])) {
			return;
		}
		Sneeit_Demo_Installer_Build_Building = true;

		$(this).parents('.demo-main').hide();
		Sneeit_Demo_Installer_Install_Selector = $(this).parents('.demo').find('.demo-process');
		Sneeit_Demo_Installer_Install_Selector.show();

		// get the parameters
		Sneeit_Demo_Installer_Install_Folder = $(this).attr('data-id');
		
		var demo_list = sneeit_demo_installer.demo_list;
		

		Sneeit_Demo_Installer_Install_Links = demo_list[Sneeit_Demo_Installer_Install_Folder]['files'];
		
		sneeit_demo_installer_install_folder();

	});
});