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/rospirotorg.ru/bitrix/js/burlakastudio.realcommenter/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/burlakastudio.realcommenter/drag_n_drop.js
'use strict';

function realcommenter_dragndrop_ajax_request() {

	if ( typeof this === 'undefined' || !this ) {
		return;
	}

	let form_obj= this.closest( realcommenter_get_selector( 'form' ) );
	if ( !form_obj ) {
		return;
	}

	let data_comment_for= form_obj.getAttribute( 'data-form-to' );

	realcommenter_tint_area( 1, this );

	BX.ajax({
		url: '/bitrix/admin/burlakastudio.realcommenter.dragndrop_ajax.php',
		method: 'POST',
		data: {
			LANGUAGE_ID: BX.message('LANGUAGE_ID'),
			SITE_ID: BX.message('SITE_ID'),
			INPUT_NAME: "NEW_COMMENT_FILES_" + data_comment_for + '_',
			CONTROL_ID: 'BRCMD7_' + data_comment_for + '_'
		},
		onsuccess: realcommenter_dragndrop_ajax_success,
		onfailure: function() {
			console.log( 'dragndrop error' );
		}
	});
}

/**
 * Получили загрузчик, добавляем блок загрузки файлов и открываем его
 */
function realcommenter_dragndrop_ajax_success( result ) {

	realcommenter_tint_area( 0 );

	/**
	 * this содержит объект с параметрами аякс-отправки
	 * Один из ключей — data — содержит склеенную строку параметров, например:
	 *      INPUT_NAME=NEW_COMMENT_FILES_456_&CONTROL_ID=BRCMD7_456_
	 *
	 * ...где 456 — код комментария, на который оставляем ответ.
	 * Этот же код идентифицирует форму, из которой производилась отправка
	 */

	/**
	 * Нам нужно определить, в какую из форм предназначался загрузчик
	 * (смотрим на CONTROL_ID)
	 *
	 * Находим эту форму, генерим внутри область загрузки,
	 * вставляем её перед сабмит-областью
	 *
	 * Публикуем внутрь загрузчик
	 */

	if ( typeof this === 'undefined' || !this || typeof this.data === 'undefined' || !this.data ) {
		return;
	}

	let matches= this.data.match( /&CONTROL_ID=BRCMD7_([0-9]+)_$/ );
	if ( !matches || !matches[ 1 ] ) {
		return;
	}

	let target_id= matches[ 1 ];

	let form_obj= document.querySelector( realcommenter_get_selector( 'form' ) + '[data-form-to="' + target_id + '"]' );
	if ( !form_obj ) {
		return;
	}

	let submit_obj= form_obj.querySelector( realcommenter_get_selector( 'submit_block' ) );
	if ( !submit_obj ) {
		return;
	}

	let upload_obj= document.createElement( 'div' );
	upload_obj.className= 'brf_uploads';
	upload_obj.innerHTML= result;
	submit_obj.parentNode.insertBefore( upload_obj, submit_obj );

	/**
	 * Отключаем у скрепки реакцию на клик
	 * Ставим ей нулевой индикатор
	 */
	let button_obj= form_obj.querySelector( realcommenter_get_selector( 'upload_picker' ) );
	if( button_obj ) {
		button_obj.removeEventListener( 'click', realcommenter_dragndrop_ajax_request );
		button_obj.setAttribute( 'data-indicator', '0' );
	}

	realcommenter_dragndrop_ajax_MFIS_awaiter();

}

function realcommenter_dragndrop_ajax_MFIS_awaiter() {

	if ( typeof window.MFIDD === 'undefined' ) {
		setTimeout( realcommenter_dragndrop_ajax_MFIS_awaiter, 100 );
	} else {
		setTimeout( realcommenter_dragndrop_ajax_activator, 500 );
	}

}

function realcommenter_dragndrop_ajax_activator() {

	// Сканируем ссылки drag_n_drop и "кликаем" по ним
	let links= document.querySelectorAll( '[id^="file-selectdialogswitcher-"]' );
	if ( links && links.length ) {
		links.forEach(function( item ) {
			item.click();

			/**
			 * <a> id:
			 * file-selectdialogswitcher-#CONTROL_ID#
			 *
			 * <div> id:
			 * file-selectdialog-#CONTROL_ID#
			 *      * > .file-extended
			 *      ...должен быть display: block
			 *
			 */

			let div_id= item.id.replace( /-selectdialogswitcher-/, '-selectdialog-' );
			let obj= item.parentNode.querySelector( '#' +div_id + ' > .file-extended'  );
			if ( obj ) {
				setTimeout( realcommenter_dragndrop_ajax_extended_block_check.bind( item, obj ), 2000 );
			}

			/**
			 * Подписываемся на событие успешной загрузки файла
			 */
			BX.addCustomEvent(
				BX(div_id).parentNode,
				'OnFileUploadSuccess',
				realcommenter_dragndrop_ajax_OnFileUploadSuccess
			);

			/**
			 * Подписываемся на событие успешного удаления файла
			 */
			BX.addCustomEvent(
				BX(div_id).parentNode,
				'OnFileUploadRemove',
				realcommenter_dragndrop_indicator_after_delete
			);

		})
	}

}

function realcommenter_dragndrop_ajax_OnFileUploadSuccess( file_data, controller_data ) {

	/**
	 * Отправляем на ресайз только если это картинка
	 *
	 * file_data: [
	 *      element_content_type: "image/jpeg"
	 *      element_id: "51"
	 *      element_image: undefined
	 *      element_name: "30-01-title.jpg"
	 *      element_size: "960.36 КБ"
	 *      element_thumbnail: undefined
	 *      element_url: "/bitrix/components/bitrix/main.file.input/ajax.php?mfi_mode=down&fileID=51&cid=0132a2e203087d50e19e02ab7e7be7e7&sessid=60cdd15e4c4fd336a002e717bbb35c8a&s=f58721cc078c49e6421b6708330076c55b8234188452f10c70ec2a48dc29f6b3"
	 *      storage: "bfile"
	 *      success: true
	 * ]
	 */

	if(
		typeof file_data !== 'undefined' && file_data
		&& file_data[ 'element_id' ]
	) {

		if( ~file_data[ 'element_content_type' ].indexOf( 'image/' ) ) {

			BX.ajax( {
				url: '/bitrix/admin/burlakastudio.realcommenter.image_processor.php',
				method: 'POST',
				dataType: 'json',
				data: {
					file_id: file_data[ 'element_id' ],
				},
				onsuccess: realcommenter_dragndrop_place_thumb
			} );

		}

		realcommenter_dragndrop_indicator_after_upload( file_data[ 'element_id' ] );

	}
}

/**
 * Нам нужно обновить индикатор у скрепки
 *
 * Нам передали id загруженного файла.
 * По нему находим нужную форму и в ней - скрепку.
 *
 */
function realcommenter_dragndrop_indicator_after_upload( file_id ) {

	/**
	 * Превью находится в
	 * tr#wd-doc51
	 */
	let td_obj= document.querySelector( 'tr#wd-doc' + file_id );

	/**
	 * Нужен родитель, внутри него найдём все input[type="hidden"] с загруженными файлами.
	 * Их количество и помещаем в индикатор
	 */
	let parent_obj= td_obj.closest( 'div[id^="file-selectdialog-"]' );
	if ( !parent_obj ) {
		return;
	}

	realcommenter_dragndrop_update_indicator( parent_obj );
}

function realcommenter_dragndrop_indicator_after_delete( removed_file_id, _controller ) {

	if(
		typeof _controller === 'undefined'
		|| !_controller
		|| !_controller.controller
	) {
		return;
	}

	/**
	 * _controller.controller - DOM-объект формы загрузки
	 *
	 * Внутри строка ещё не удалена, индикатор даст неверное число, если вызвать сразу
	 */

	setTimeout( realcommenter_dragndrop_update_indicator.bind( this, _controller.controller ), 500 );

}

function realcommenter_dragndrop_update_indicator( parent_obj ) {

	let form_obj= parent_obj.closest( realcommenter_get_selector( 'form' ) );
	if ( !form_obj ) {
		return;
	}

	let button_obj= form_obj.querySelector( realcommenter_get_selector( 'upload_picker' ) );
	if ( !button_obj ) {
		return;
	}

	let uploaded_list= parent_obj.querySelectorAll( 'input[type="hidden"][id^="file-"]' );
	button_obj.setAttribute( 'data-indicator', '' + uploaded_list.length );
}

function realcommenter_dragndrop_ajax_extended_block_check( obj ) {
	/**
	 * this - ссылка, на которую мы кликали.
	 * Её теперь не нужно, а при открытии новых форм она может вмешиваться
	 * в querySelectorAll
 	 */
	this.parentNode.removeChild( this );

	/**
	 * Страхуемся -
	 * убеждаемся, что область загрузки открылась
	 */
	obj.style.display= 'block';
}

function realcommenter_dragndrop_place_thumb( json_result ) {
	/**
	 * Получаем массив, внутри ключ [THUMB] с путём к ресайзу.
	 * Публикуем этот ресайз в строку с информацией о загруженном файле
	 *
	 * !!! Может и не быть - мало ли: нам загрузили *.docx, а мы попытались его ресайзнуть =)
	 */
	if (
		typeof json_result !== 'undefined' && json_result
		&& json_result[ 'file_info' ]
	) {

		/**
		 * Превью должно находиться в
		 * tr#wd-doc51 td.files-name
		 */
		let td_obj= document.querySelector( 'tr#wd-doc' + json_result[ 'file_info' ][ 0 ][ 'file_id' ] + ' td.files-name' );
		if ( td_obj ) {

			td_obj.innerHTML= '';

			let thumb_obj= document.createElement( 'img' );
			thumb_obj.src= json_result[ 'file_info' ][ 0 ][ 'THUMB' ];
			td_obj.appendChild( thumb_obj );
		}

	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit