403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/cvetdv.ru/bitrix/js/im/view/element/media/src/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/js/im/view/element/media/src/file.js
/**
 * Bitrix Messenger
 * File element Vue component
 *
 * @package bitrix
 * @subpackage im
 * @copyright 2001-2019 Bitrix
 */

import './file.css';
import 'ui.icons';

import {Uploader} from "ui.progressbarjs.uploader";

import {BitrixVue} from 'ui.vue';
import {Vuex} from "ui.vue.vuex";
import {FilesModel} from 'im.model';
import { FileType, FileStatus, MessageType, EventType } from 'im.const';
import {Utils} from "im.lib.utils";
import { EventEmitter } from "main.core.events";

BitrixVue.component('bx-im-view-element-file',
{
	/*
	 * @emits EventType.dialog.clickOnUploadCancel {file: object, event: MouseEvent}
	 */

	mounted()
	{
		this.createProgressbar();
	},
	beforeDestroy()
	{
		this.removeProgressbar();
	},
	props:
	{
		userId: { default: 0 },
		messageType: { default: MessageType.self },
		file: {
			type: Object,
			required: true
		},
	},
	methods:
	{
		download(file)
		{
			if (file.progress !== 100)
			{
				return false;
			}

			if (BX.UI && BX.UI.Viewer && Object.keys(file.viewerAttrs).length > 0)
			{
				return false;
			}

			if (file.type === FileType.image && file.urlShow)
			{
				if (Utils.platform.isBitrixMobile())
				{
					BXMobileApp.UI.Photo.show({
						photos: this.files.collection[this.application.dialog.chatId].filter(file => file.type === 'image').map(file => {return {url: file.urlShow.replace('bxhttp', 'http')}}).reverse(),
						default_photo: file.urlShow.replace('bxhttp', 'http')
					})
				}
				else
				{
					window.open(file.urlShow, '_blank');
				}
			}
			else if (file.type === FileType.video && file.urlShow)
			{
				if (Utils.platform.isBitrixMobile())
				{
					app.openDocument({url: file.urlShow, name: file.name});
				}
				else
				{
					window.open(file.urlShow, '_blank');
				}
			}
			else if (file.urlDownload)
			{
				if (Utils.platform.isBitrixMobile())
				{
					app.openDocument({url: file.urlDownload, name: file.name});
				}
				else
				{
					window.open(file.urlDownload, '_blank');
				}
			}
			else
			{
				if (Utils.platform.isBitrixMobile())
				{
					app.openDocument({url: file.urlShow, name: file.name});
				}
				else
				{
					window.open(file.urlShow, '_blank');
				}
			}
		},
		createProgressbar()
		{
			if (this.uploader)
			{
				return true;
			}

			if (this.file.progress === 100)
			{
				return false;
			}

			let blurElement = undefined;

			if (
				this.file.progress < 0
				|| this.file.type !== FileType.image && this.file.type !== FileType.video
			)
			{
				blurElement = false;
			}

			this.uploader = new Uploader({
				container: this.$refs.container,
				blurElement,
				direction: this.$refs.container.offsetHeight > 54? Uploader.direction.vertical: Uploader.direction.horizontal,
				icon: this.file.progress < 0? Uploader.icon.cloud: Uploader.icon.cancel,
				sizes: {
					circle: this.$refs.container.offsetHeight > 54? 54: 38,
					progress: this.$refs.container.offsetHeight > 54? 4: 8,
				},
				labels: {
					loading: this.localize['IM_MESSENGER_ELEMENT_FILE_UPLOAD_LOADING'],
					completed: this.localize['IM_MESSENGER_ELEMENT_FILE_UPLOAD_COMPLETED'],
					canceled: this.localize['IM_MESSENGER_ELEMENT_FILE_UPLOAD_CANCELED'],
					cancelTitle: this.localize['IM_MESSENGER_ELEMENT_FILE_UPLOAD_CANCEL_TITLE'],
					megabyte: this.localize['IM_MESSENGER_ELEMENT_FILE_SIZE_MB'],
				},
				cancelCallback: this.file.progress < 0? null: (event) => {
					EventEmitter.emit(EventType.dialog.clickOnUploadCancel, {file: this.file, event});
				},
				destroyCallback: () => {
					if (this.uploader)
					{
						this.uploader = null;
					}
				}
			});

			this.uploader.start();

			if(
				this.file.size && (this.file.size/1024/1024) <= 2
				|| this.$refs.container.offsetHeight <= 54 && this.$refs.container.offsetWidth < 240
			)
			{
				this.uploader.setProgressTitleVisibility(false)
			}

			this.updateProgressbar();

			return true;
		},
		updateProgressbar()
		{
			if (!this.uploader)
			{
				let result = this.createProgressbar();
				if (!result)
				{
					return false;
				}
			}

			if (this.file.status === FileStatus.error)
			{
				this.uploader.setProgress(0);
				this.uploader.setCancelDisable(false);
				this.uploader.setIcon(Uploader.icon.error);
				this.uploader.setProgressTitle(this.localize['IM_MESSENGER_ELEMENT_FILE_UPLOAD_ERROR']);
			}
			else if (this.file.status === FileStatus.wait)
			{
				this.uploader.setProgress(this.file.progress > 5? this.file.progress: 5);
				this.uploader.setCancelDisable(true);
				this.uploader.setIcon(Uploader.icon.cloud);
				this.uploader.setProgressTitle(this.localize['IM_MESSENGER_ELEMENT_FILE_UPLOAD_SAVING']);
			}
			else if (this.file.progress === 100)
			{
				this.uploader.setProgress(100);
			}
			else if (this.file.progress === -1)
			{
				this.uploader.setProgress(10);
				this.uploader.setProgressTitle(this.localize['IM_MESSENGER_ELEMENT_FILE_UPLOAD_WAITING']);
			}
			else
			{
				if (this.file.progress === 0)
				{
					this.uploader.setIcon(Uploader.icon.cancel);
				}
				let progress = this.file.progress > 5? this.file.progress: 5;

				this.uploader.setProgress(progress);

				if((this.file.size/1024/1024) <= 2)
				{
					this.uploader.setProgressTitle(this.localize['IM_MESSENGER_ELEMENT_FILE_UPLOAD_LOADING']);
				}
				else
				{
					this.uploader.setByteSent(this.file.size/100*this.file.progress, this.file.size);
				}
			}
		},
		removeProgressbar()
		{
			if (!this.uploader)
			{
				return true;
			}

			this.uploader.destroy(false);

			return true;
		}
	},
	computed:
	{
		FileStatus: () => FileStatus,
		localize()
		{
			return BitrixVue.getFilteredPhrases('IM_MESSENGER_ELEMENT_FILE_', this);
		},
		fileName()
		{
			let maxLength = 70;

			if (this.file.name.length < maxLength)
			{
				return this.file.name;
			}

			let endWordLength = 10;

			let secondPart = this.file.name.substring(this.file.name.length-1 - (this.file.extension.length+1+endWordLength));
			let firstPart = this.file.name.substring(0, maxLength-secondPart.length-3);

			return firstPart.trim()+'...'+secondPart.trim();
		},
		fileSize()
		{
			let size = this.file.size;

			if (size <= 0)
			{
				return '&nbsp;';
			}

			let sizes = ["BYTE", "KB", "MB", "GB", "TB"];
			let position = 0;

			while (size >= 1024 && position < 4)
			{
				size /= 1024;
				position++;
			}

			return Math.round(size) + " " + this.localize['IM_MESSENGER_ELEMENT_FILE_SIZE_'+sizes[position]];
		},
		uploadProgress()
		{
			return this.file.status+' '+this.file.progress;
		},
		...Vuex.mapState({
			application: state => state.application,
			files: state => state.files,
		})
	},
	watch:
	{
		uploadProgress()
		{
			this.updateProgressbar();
		},
	},
	template: `
		<div class="bx-im-element-file" @click="download(file, $event)" ref="container">
			<div class="bx-im-element-file-icon">
				<div :class="['ui-icon', 'ui-icon-file-'+file.icon]"><i></i></div>
			</div>
			<div class="bx-im-element-file-block">
				<div class="bx-im-element-file-name" :title="file.name">
					{{fileName}}
				</div>
				<div class="bx-im-element-file-size" v-html="fileSize"></div>
			</div>
		</div>
	`
});

Youez - 2016 - github.com/yon3zu
LinuXploit