Your IP : 3.21.134.124


Current Path : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/js/disk/
Upload File :
Current File : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/js/disk/external_loader.js

BX.namespace("BX.Disk.ExternalLoader");
BX.Disk.ExternalLoader = (function (){
	var queue = new BX.Disk.Queue;

	return {
		startLoad: function(file) {
			var queueItem = new BX.Disk.QueueItem(
				new BX.Disk.ExternalLoader.NewItemClass(file),
				function (item)
				{
					item.start();
				},
				function (item)
				{
					return [item, "onFinish"];
				}
			);

			queue.push(queueItem).process();
		},
		reloadLoadAttachedObject: function(attachedObject) {
			return new BX.Disk.ExternalLoader.AttachedItemClass(attachedObject);
		}
	};
})();

BX.Disk.ExternalLoader.NewItemClass = (function ()
{
	var NewItemClass = function (parameters)
	{
		this.ajaxUrl = '/bitrix/tools/disk/uf.php';

		this.file = {
			id: parameters.file.id,
			service: parameters.file.service
		};
		this.cloudImport = {};
		this.handlers = {
			onFinish: parameters.onFinish,
			onProgress: parameters.onProgress
		};

		this.setEvents();
	};

	NewItemClass.prototype.setEvents = function()
	{};

	NewItemClass.prototype.onFinish = function(response)
	{
		BX.onCustomEvent(this, "onFinish", [this]);
		this.handlers.onFinish(response.file);
	};

	NewItemClass.prototype.onProgress = function(progress)
	{
		this.handlers.onProgress(progress);
	};

	NewItemClass.prototype.start = function() {
		BX.Disk.ajax({
			method: 'POST',
			dataType: 'json',
			url: BX.Disk.addToLinkParam(this.ajaxUrl, 'action', 'startUpload'),
			data: {
				fileId: this.file.id,
				service: this.file.service
			},
			onsuccess: BX.delegate(function (response) {
				if(response.status != 'success')
				{
					response.errors = response.errors || [{}];
					BX.Disk.showModalWithStatusAction({
						status: 'error',
						message: response.errors.pop().message
					});
					return null;
				}
				this.cloudImport = {
					id: response.cloudImport.id
				};

				this.processChunkDownload();
			}, this)
		});
	};

	NewItemClass.prototype.processChunkDownload = function(){
		BX.Disk.ajax({
			method: 'POST',
			dataType: 'json',
			url: BX.Disk.addToLinkParam(this.ajaxUrl, 'action', 'uploadChunk'),
			data: {
				cloudImportId: this.cloudImport.id
			},
			onsuccess: BX.delegate(function (response) {
				if(response.status != 'success')
				{
					response.errors = response.errors || [{}];
					BX.Disk.showModalWithStatusAction({
						status: 'error',
						message: response.errors.pop().message
					});
					return null;
				}

				this.onProgress(parseInt(response.downloadedContentSize / response.contentSize * 100, 10));

				if(response.step == 'finish') {
					this.saveAsNewFile();
				}
				else{
					this.processChunkDownload();
				}

			}, this)
		});
	};

	NewItemClass.prototype.saveAsNewFile = function() {
		BX.Disk.ajax({
			method: 'POST',
			dataType: 'json',
			url: BX.Disk.addToLinkParam(this.ajaxUrl, 'action', 'saveAsNewFile'),
			data: {
				cloudImportId: this.cloudImport.id
			},
			onsuccess: BX.delegate(function (response) {
				if(response.status != 'success')
				{
					response.errors = response.errors || [{}];
					BX.Disk.showModalWithStatusAction({
						status: 'error',
						message: response.errors.pop().message
					});
					return null;
				}

				this.onFinish(response);
			}, this)
		});
	};

	return NewItemClass;
})();

BX.Disk.ExternalLoader.AttachedItemClass = (function ()
{
	var AttachedItemClass = function (parameters)
	{
		this.ajaxUrl = '/bitrix/tools/disk/uf.php';

		this.attachedObject = {
			id: parameters.attachedObject.id,
			service: parameters.attachedObject.service
		};
		this.cloudImport = {};
		this.handlers = {
			onFinish: parameters.onFinish,
			onProgress: parameters.onProgress
		};

		this.setEvents();
	};

	AttachedItemClass.prototype.setEvents = function()
	{};

	AttachedItemClass.prototype.onFinish = function(response)
	{
		this.handlers.onFinish(response);
	};

	AttachedItemClass.prototype.onProgress = function(progress)
	{
		this.handlers.onProgress(progress);
	};

	AttachedItemClass.prototype.start = function() {
		BX.Disk.ajax({
			method: 'POST',
			dataType: 'json',
			url: BX.Disk.addToLinkParam(this.ajaxUrl, 'action', 'reloadAttachedObject'),
			data: {
				attachedId: this.attachedObject.id,
				service: this.attachedObject.service
			},
			onsuccess: BX.delegate(function (response) {
				if(response.status != 'success')
				{
					response.errors = response.errors || [{}];
					BX.Disk.showModalWithStatusAction({
						status: 'error',
						message: response.errors.pop().message
					});
					return;
				}
				if(!response.hasNewVersion)
				{
					this.onFinish(response);
					return;
				}

				this.cloudImport = {
					id: response.cloudImport.id
				};

				this.processChunkDownload();
			}, this)
		});
	};

	AttachedItemClass.prototype.processChunkDownload = function(){
		BX.Disk.ajax({
			method: 'POST',
			dataType: 'json',
			url: BX.Disk.addToLinkParam(this.ajaxUrl, 'action', 'uploadChunk'),
			data: {
				cloudImportId: this.cloudImport.id
			},
			onsuccess: BX.delegate(function (response) {
				if(response.status != 'success')
				{
					response.errors = response.errors || [{}];
					BX.Disk.showModalWithStatusAction({
						status: 'error',
						message: response.errors.pop().message
					});
					return null;
				}

				this.onProgress(parseInt(response.downloadedContentSize / response.contentSize * 100, 10));

				if(response.step == 'finish') {
					this.updateFile();
				}
				else{
					this.processChunkDownload();
				}

			}, this)
		});
	};

	AttachedItemClass.prototype.updateFile = function() {
		BX.Disk.ajax({
			method: 'POST',
			dataType: 'json',
			url: BX.Disk.addToLinkParam(this.ajaxUrl, 'action', 'updateAttachedObject'),
			data: {
				attachedId: this.attachedObject.id,
				cloudImportId: this.cloudImport.id
			},
			onsuccess: BX.delegate(function (response) {
				if(response.status != 'success')
				{
					response.errors = response.errors || [{}];
					BX.Disk.showModalWithStatusAction({
						status: 'error',
						message: response.errors.pop().message
					});
					return null;
				}

				this.onFinish(response);
			}, this)
		});
	};

	return AttachedItemClass;
})();