Your IP : 3.135.217.13


Current Path : /home/bitrix/ext_www/dev.ballu.in.ua/bitrix/modules/main/classes/general/
Upload File :
Current File : /home/bitrix/ext_www/dev.ballu.in.ua/bitrix/modules/main/classes/general/uploader.php

<?
// ***** CImageUploader, CFlashUploader *****
IncludeModuleLangFile(__FILE__);

class CImageUploader
{
	public static function ShowScript($Params = array())
	{
		global $APPLICATION;
		self::SetId($Params['id']);

		self::CheckDirPath($Params["pathToTmp"]);

		if (!isset($Params['height']))
			$Params['height'] = '500px';
		if (!isset($Params['width']))
			$Params['width'] = '100%';
		if (!isset($Params['layout']) || ($Params['layout'] != 'ThreePanes' && $Params['layout'] != 'OnePane'))
			$Params['layout'] = 'ThreePanes';
		if (!isset($Params['folderPaneHeight']))
			$Params['folderPaneHeight'] = 300;
		if (!isset($Params['treePaneWidth']))
			$Params['treePaneWidth'] = 200;
		if (!isset($Params['folderViewMode']) || !in_array($Params['folderViewMode'], array('Thumbnails', 'Tiles', 'Details', ' List')))
			$Params['folderViewMode'] = 'Thumbnails';
		if (!isset($Params['uploadViewMode']) || !in_array($Params['uploadViewMode'], array('Thumbnails', 'Tiles', 'Details', ' List')))
			$Params['uploadViewMode'] = 'Thumbnails';

		if (!isset($Params['thumbnailJpegQuality']) || $Params['thumbnailJpegQuality'] > 100 || $Params['thumbnailJpegQuality'] <= 0)
			$Params['thumbnailJpegQuality'] = 90;

		$Params['showAddFileButton'] = $Params['showAddFileButton'] === true;
		$Params['showAddFolderButton'] = $Params['showAddFolderButton'] === true;

		$Params['enableCrop'] = $Params['enableCrop'] !== false;

		// Uploading config
		if (!isset($Params['filesPerPackage']) || $Params['filesPerPackage'] <= 0)
			$Params['filesPerPackage'] = 1;

		if (!isset($Params['chunkSize']) || $Params['chunkSize'] <= 0)
			$Params['chunkSize'] = self::GetChunkSize();

		if (!isset($Params['fileMask']))
			$Params['fileMask'] = "*.*";

		if (!isset($Params['converters']) || count($Params['converters']) == 0)
			$Params['converters'] = array('code' => 'real', 'width' => false, 'height' => false);

		$APPLICATION->AddHeadScript('/bitrix/image_uploader/bximageuploader.js');
		$APPLICATION->SetAdditionalCSS('/bitrix/image_uploader/bximageuploader.css');

		$APPLICATION->AddHeadScript('/bitrix/image_uploader/aurigma.uploader.js');
		$APPLICATION->AddHeadScript('/bitrix/image_uploader/aurigma.uploader.installationprogress.js');
		$id = self::GetId();

		if ($Params['showAddFileButton'] || $Params['showAddFolderButton']): ?>
		<div class="bxiu-buttons">
			<?if($Params['showAddFileButton']):?>
			<button type="button" onclick="addFiles();"><?= GetMessage("UPLOADER_ADD_FILES")?></button>
			<?endif;?>
			<?if($Params['showAddFolderButton']):?>
			<button type="button" onclick="addFolder();"><?= GetMessage("UPLOADER_ADD_FOLDERS")?></button>
			<?endif;?>
		</div>
		<?endif;?>

		<script>
		var oBXUploaderHandler_<?= CUtil::JSEscape($id)?> = new window.BXUploader({id: '<?= CUtil::JSEscape($id)?>'});
		var BXIU_<?= CUtil::JSEscape($id)?> = $au.uploader({id: '<?= CUtil::JSEscape($id)?>'});

		// Params
		var bxp = {
			id: '<?= CUtil::JSEscape($id)?>',
			width: '<?= CUtil::JSEscape($Params['width'])?>',
			height: '<?= CUtil::JSEscape($Params['height'])?>',
			paneLayout: '<?= CUtil::JSEscape($Params['layout'])?>',
			enableAutoRotation: true,
			enableDescriptionEditor: true,
			enableRotation: true,
			activeXControl:
			{
				classId: '776D11E8-CD62-4105-B4F2-ABFDE7B4BFC5',
				codeBase: '/bitrix/image_uploader/ImageUploader7.cab',
				codeBase64: '/bitrix/image_uploader/ImageUploader7_x64.cab',
				progId: 'Bitrix.ImageUploader.7',
				version: '7.0.38.0'
			},
			javaControl:
			{
				className: 'com.bitrixsoft.imageuploader.ImageUploader',
				codeBase: '/bitrix/image_uploader/ImageUploader7.jar',
				version: '7.0.38.0'
			},
			metadata: {},
			events:{
				afterPackageUpload: [],
				afterSendRequest: [],
				afterUpload: [],
				beforePackageUpload: [],
				beforeSendRequest: [],
				beforeUpload: [],
				error: [],
				folderChange: [],
				imageEditorClose: [],
				imageRotated: [],
				initComplete: [],
				preRender: [],
				progress: [],
				restrictionFailed: [],
				selectionChange: [],
				uploadFileCountChange: [],
				viewChange: []
			},
			restrictions: {
				fileMask: '<?= CUtil::JSEscape($Params['fileMask'])?>'
			},
			uploadSettings: {
				actionUrl: '<?= CUtil::JSEscape(self::StrangeUrlEncode($Params['actionUrl']))?>',
				enableInstantUpload: false, // Immediate upload after file selecting
				filesPerPackage: <?= intval($Params['filesPerPackage'])?>,
				autoRecoveryTimeout: 5000,
				autoRecoveryMaxAttemptCount: 1,
				chunkSize: <?= intval($Params['chunkSize'])?>
			},
			paneItem: {
				descriptionAddedIconImageFormat: '',
				descriptionEditorIconImageFormat: '',
				imageCroppedIconImageFormat: '',
				imageEditorIconImageFormat: '',
				qualityMeter: {},
				removalIconImageFormat: '',
				rotationIconImageFormat: ''
			},
			converters: [],
			imageEditor: {
				enableCrop: <?= $Params['enableCrop'] ? 'true' : 'false'?>
			}
		};

		<?if (isset($Params['appendFormName']) && $Params['appendFormName'] != ''):?>
			bxp.metadata.additionalFormName = '<?= CUtil::JSEscape($Params['appendFormName'])?>';
		<?endif;?>

		<?foreach ($Params['converters'] as $converter):?>
			<?$bSource = (!$converter['width'] || !$converter['height']);?>
			bxp.converters.push({
					mode: '*.*=Thumbnail',
					thumbnailApplyCrop: true,
					thumbnailKeepColorSpace: true,
					thumbnailJpegQuality: <?= $Params['thumbnailJpegQuality']?>,
					thumbnailResizeQuality: "High", // High | Medium | Low,
					thumbnailCopyIptc: true,
					thumbnailCopyExif: true,
				<?if ($bSource):?>
					thumbnailFitMode: "ActualSize", // Fit | OrientationalFit | Width | Height | ActualSize
				<?else:?>
					thumbnailFitMode: "Fit", // Fit | OrientationalFit | Width | Height | ActualSize
					thumbnailHeight: <?= intval($converter['height'])?>,
					thumbnailWidth: <?= intval($converter['width'])?>,
				<?endif;?>
					thumbnailCompressOversizedOnly: true
			});
		<?endforeach;?>

		<?if ($Params['layout'] == 'ThreePanes'):?>
			bxp.folderPane = {
				height: <?= intval($Params['folderPaneHeight'])?>,
				viewMode: '<?= CUtil::JSEscape($Params['folderViewMode'])?>'
			};
			bxp.treePane = {width: <?= intval($Params['treePaneWidth'])?>};
		<?endif;?>

		<?if ($Params['uploadViewMode'] != 'Thumbnails'):?>
			bxp.uploadPane = {
				viewMode: '<?= CUtil::JSEscape($Params['uploadViewMode'])?>'
			};
		<?endif;?>

		<?if (isset($Params['redirectUrl'])):?>
			bxp.uploadSettings.redirectUrl = '<?= CUtil::JSEscape($Params['redirectUrl'])?>';
		<?endif;?>

		<? if (isset($Params['minFileCount'])):?>
			bxp.restrictions.minFileCount= '<?= CUtil::JSEscape($Params['minFileCount'])?>';
		<?endif;?>
		<? if (isset($Params['maxFileCount'])):?>
			bxp.restrictions.maxFileCount= '<?= CUtil::JSEscape($Params['maxFileCount'])?>';
		<?endif;?>
		<? if (isset($Params['maxTotalFileSize'])):?>
			bxp.restrictions.maxTotalFileSize = '<?= CUtil::JSEscape($Params['maxTotalFileSize'])?>';
		<?endif;?>
		<? if (isset($Params['maxFileSize'])):?>
			bxp.restrictions.maxFileSize = '<?= CUtil::JSEscape($Params['maxFileSize'])?>';
		<?endif;?>
		<? if (isset($Params['minFileSize'])):?>
			bxp.restrictions.minFileSize = '<?= CUtil::JSEscape($Params['minFileSize'])?>';
		<?endif;?>
		<? if (isset($Params['minImageWidth'])):?>
			bxp.restrictions.minImageWidth = '<?= CUtil::JSEscape($Params['minImageWidth'])?>';
		<?endif;?>
		<? if (isset($Params['minImageHeight'])):?>
			bxp.restrictions.minImageHeight = '<?= CUtil::JSEscape($Params['minImageHeight'])?>';
		<?endif;?>
		<? if (isset($Params['maxImageWidth'])):?>
			bxp.restrictions.maxImageWidth = '<?= CUtil::JSEscape($Params['maxImageWidth'])?>';
		<?endif;?>
		<? if (isset($Params['maxImageHeight'])):?>
			bxp.restrictions.maxImageHeight = '<?= CUtil::JSEscape($Params['maxImageHeight'])?>';
		<?endif;?>


		<?if (isset($Params['cropRatio'])):?>
			bxp.imageEditor.cropRatio = '<?= CUtil::JSEscape($Params['cropRatio'])?>';
		<?endif;?>
		<?if (isset($Params['cropMinSize'])):?>
			bxp.imageEditor.cropMinSize = '<?= CUtil::JSEscape($Params['cropMinSize'])?>';
		<?endif;?>

		<?if ($Params['useWatermark']):?>
			bxp = oBXUploaderHandler_<?= $id?>.enableWatermark(bxp, {
				rules: '<?= CUtil::JSEscape($Params['watermarkConfig']['rules'])?>', // ALL | USER
				type: '<?= CUtil::JSEscape($Params['watermarkConfig']['type'])?>', //
				text: '<?= CUtil::JSEscape($Params['watermarkConfig']['text'])?>', //
				color: '<?= CUtil::JSEscape($Params['watermarkConfig']['color'])?>',
				position: '<?= CUtil::JSEscape($Params['watermarkConfig']['position'])?>',
				size: '<?= CUtil::JSEscape($Params['watermarkConfig']['size'])?>',
				opacity: '<?= CUtil::JSEscape($Params['watermarkConfig']['opacity'])?>',
				file: '<?= CUtil::JSEscape($Params['watermarkConfig']['file'])?>',
				fileWidth: '<?= intVal($Params['watermarkConfig']['fileWidth'])?>',
				fileHeight: '<?= intVal($Params['watermarkConfig']['fileHeight'])?>',

				values: {
					use: '<?= CUtil::JSEscape($Params['watermarkConfig']['values']['use'])?>',
					type: '<?= CUtil::JSEscape($Params['watermarkConfig']['values']['type'])?>',
					text: '<?= CUtil::JSEscape($Params['watermarkConfig']['values']['text'])?>',
					color: '<?= CUtil::JSEscape($Params['watermarkConfig']['values']['color'])?>',
					position: '<?= CUtil::JSEscape($Params['watermarkConfig']['values']['position'])?>',
					size: '<?= CUtil::JSEscape($Params['watermarkConfig']['values']['size'])?>',
					opacity: '<?= CUtil::JSEscape($Params['watermarkConfig']['values']['opacity'])?>',
					file: '<?= CUtil::JSEscape($Params['watermarkConfig']['values']['file'])?>'
				}
			});
		<?endif;?>

		BXIU_<?= CUtil::JSEscape($id)?>.set(bxp);

		// Set theme
		// Todo: add view customization params
		var theme = {
			borderStyle: 'FixedSingle',
			headerColor: '#E4EEFB',
			headerTextColor: '#000000',
			panelBorderColor: '#C9C9C9',
			statusPane: {
				color: '#EEEEEE'
			}
		};
		BXIU_<?= CUtil::JSEscape($id)?>.set(theme);

		// Apply localization
		BXIU_<?= CUtil::JSEscape($id)?>.set(<?= self::GetLocalization()?>);

		<?if($Params['showAddFileButton']):?>
		function addFiles()	{$au.uploader('<?= CUtil::JSEscape($id)?>').uploadPane().addFiles();}
		<?endif;?>
		<?if($Params['showAddFolderButton']):?>
		function addFolder(){$au.uploader('<?= CUtil::JSEscape($id)?>').uploadPane().addFolders();}
		<?endif;?>
		BX.ready(function(){BX('bxiu_<?= CUtil::JSEscape($id)?>').innerHTML = BXIU_<?= CUtil::JSEscape($id)?>.getHtml();})
		</script>
		<div id="bxiu_<?= htmlspecialcharsbx($id)?>" class="bx-image-uploader"></div>
		<?
	}

	public static function UploadCallback($uploadedFiles)
	{

	}

	public static function InitUploaderHandler()
	{
		include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/image_uploader/ImageUploaderPHP/UploadHandler.class.php");
		//include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/image_uploader/ImageUploaderPHP/UploadedFile.class.php");
	}

	private static $id;
	public static function GetId()
	{
		return self::$id;
	}

	public static function SetId($id = "")
	{
		if ($id == "")
			$id = 'BXImageUploader_'.uniqid();
		self::$id = $id;
	}

	public static
		$uploadCallbackFunc,
		$uploadCallbackParams,
		$convCount,
		$sTmpPath,
		$PackageGuid,
		$savedData = false;

	public static function SetTmpPath($PackageGuid, $pathToTmp)
	{
		CheckDirPath($pathToTmp);

		self::$sTmpPath = $pathToTmp.md5(serialize(array("PackageGuid " => $PackageGuid, "sessid" => bitrix_sessid())));
		return self::$sTmpPath;
	}

	public static function CheckDirPath($path = "")
	{
		if ($path)
		{
			if (!CheckDirPath($path))
				echo "<b>Warning! Check file permissions for uploading dir: ".htmlspecialcharsbx($path)."</b><br>";
		}
	}

	public static function UploadFileHandler($callback, $Params)
	{
		self::InitUploaderHandler();

		self::$convCount = $Params['convCount'];
		self::$uploadCallbackFunc = $callback;
		self::$uploadCallbackParams = $Params;
		self::SetTmpPath($_REQUEST["PackageGuid"], $Params["pathToTmp"]);

		$uh = new UploadHandler();
		$uh->setUploadCacheDirectory($Params['pathToTmp']);
		$uh->setAllFilesUploadedCallback(array("CImageUploader", "SaveAllUploadedFiles"));
		$uh->processRequest();
	}

	public static function SaveAllUploadedFiles($uploadedFiles)
	{
		try
		{
			$packageFields = $uploadedFiles[0]->getPackage()->getPackageFields();
			// We call 'onBeforeUpload' only once and if exists handler
			if (isset(self::$uploadCallbackParams['onBeforeUpload']) && self::$PackageGuid != $packageFields['PackageGuid'])
			{
				self::$PackageGuid = $packageFields['PackageGuid'];
				self::$uploadCallbackParams['packageFields'] = $packageFields;
				if (!call_user_func(self::$uploadCallbackParams['onBeforeUpload'], self::$uploadCallbackParams))
					return;
			}
			foreach ($uploadedFiles as $uploadedFile)
			{
				try
				{
					$convertedFiles = $uploadedFile->getConvertedFiles();

					$arFiles = array();
					foreach ($convertedFiles as $j => $convertedFile)
					{
						$path = self::$sTmpPath."_".$j.".tmp";
						$convertedFile->moveTo($path);
						$arFiles[] = array(
							'name' => $convertedFile->getName(),
							'tmp_name' => $path,
							'errors' => 0,
							'type' => self::GetMimeType($convertedFile->getName()),
							'size' => $convertedFile->getSize(),
							'mode' => $convertedFile->getMode(),
							'height' => $convertedFile->getHeight(),
							'width' => $convertedFile->getWidth(),
							'path' => $path
						);
					}

					$name = $packageFields['Title_'.$uploadedFile->getIndex()];
					$fileName = $uploadedFile->getSourceName();
					if ($name == "")
						$name = $fileName;

					$Info = array(
						'name' => $name,
						'filename' => $fileName,
						'description' => $uploadedFile->getDescription(),
						'tags' => $uploadedFile->getTag()
					);
					call_user_func(self::$uploadCallbackFunc, $Info, $arFiles, self::$uploadCallbackParams);
				}
				catch (Exception $e)
				{
					CImageUploader::SaveError(array(array("id" => "BXUPL_APPLET_SAVE_1", "text" => $e->getMessage)));
				}
			}
			if (isset(self::$uploadCallbackParams['onAfterUpload']))
				call_user_func(self::$uploadCallbackParams['onAfterUpload'], self::$uploadCallbackParams);
		}
		catch (Exception $e)
		{
			CImageUploader::SaveError(array(array("id" => "BXUPL_APPLET_SAVE_2", "text" => $e->getMessage)));
		}
	}

	public static function SetSavedData($savedData = array())
	{
		//$savedPath = self::$sTmpPath."_sd.tmp";
		self::$savedData = $savedData;
		$_SESSION['BX_PHOTO_TMP_SAVED_DATA'] = $savedData;
		return true;
	}

	public static function GetSavedData()
	{
		if (is_array(self::$savedData))
			return self::$savedData;

		$savedData = $_SESSION['BX_PHOTO_TMP_SAVED_DATA'];

		if (!is_array($savedData))
			$savedData = array();

		return $savedData;
	}

	public static function CleanSavedData()
	{
		unset($_SESSION['BX_PHOTO_TMP_SAVED_DATA']);
	}

	public static function CheckErrors()
	{
		$arData = self::GetSavedData();
		$arErrors = $arData['arError'];
		if ($arData && is_array($arErrors) && count($arErrors) > 0)
			return $arErrors;
		return false;
	}

	public static function SaveError($arError)
	{
		$savedData = self::GetSavedData();
		if (is_array($savedData['arError']))
			$savedData['arError'] = array_merge($savedData['arError'], $arError);
		else
			$savedData['arError'] = $arError;
		CImageUploader::SetSavedData($savedData);
	}

	public static function GetMimeType($fileName)
	{
		$ext = strtolower(substr($fileName, strrpos($fileName, ".") + 1));

		if ($ext == 'jpeg' || $ext == 'jpg')
			return "image/jpg";
		if ($ext == 'bmp')
			return "image/bmp";
		if ($ext == 'png')
			return "image/png";
		if ($ext == 'gif')
			return "image/gif";
		if ($ext == 'psd')
			return "image/psd";
		if ($ext == 'wbmp')
			return "image/wbmp";

		return "";
	}

	public static function GetLocalization()
	{
		static $arLoc = false;
		if($arLoc === false)
		{
			$arLoc = array(
				'addFilesProgressDialog' => array(
					'cancelButtonText' => GetMessage("BXIU_CANCELBUTTONTEXT"),
					'currentFileText' => GetMessage("BXIU_CURRENTFILETEXT"),
					'titleText' => GetMessage("BXIU_TITLETEXT1"),
					'totalFilesText' => GetMessage("BXIU_TOTALFILESTEXT"),
					'waitText' => GetMessage("BXIU_WAITTEXT"),
				),
				'authenticationDialog' => array(
					'cancelButtonText' => GetMessage("BXIU_CANCELBUTTONTEXT"),
					'loginText' => GetMessage("BXIU_LOGINTEXT"),
					'okButtonText' => GetMessage("BXIU_OKBUTTONTEXT"),
					'passwordText' => GetMessage("BXIU_PASSWORDTEXT"),
					'realmText' => GetMessage("BXIU_REALMTEXT"),
					'text' => GetMessage("BXIU_TEXT"),
				),
				'contextMenu' => array(
					'arrangeByDimensionsText' => GetMessage("BXIU_ARRANGEBYDIMENSIONSTEXT"),
					'arrangeByModifiedText' => GetMessage("BXIU_ARRANGEBYMODIFIEDTEXT"),
					'arrangeByNameText' => GetMessage("BXIU_ARRANGEBYNAMETEXT"),
					'arrangeByPathText' => GetMessage("BXIU_ARRANGEBYPATHTEXT"),
					'arrangeBySizeText' => GetMessage("BXIU_ARRANGEBYSIZETEXT"),
					'arrangeByText' => GetMessage("BXIU_ARRANGEBYTEXT"),
					'arrangeByTypeText' => GetMessage("BXIU_ARRANGEBYTYPETEXT"),
					'checkAllText' => GetMessage("BXIU_CHECKALLTEXT"),
					'checkText' => GetMessage("BXIU_CHECKTEXT"),
					'detailsViewText' => GetMessage("BXIU_DETAILSVIEWTEXT"),
					'editDescriptionText' => GetMessage("BXIU_EDITDESCRIPTIONTEXT"),
					'editText' => GetMessage("BXIU_EDITTEXT"),
					'listViewText' => GetMessage("BXIU_LISTVIEWTEXT"),
					'openText' => GetMessage("BXIU_OPENTEXT"),
					'pasteText' => GetMessage("BXIU_PASTETEXT"),
					'removeAllText' => GetMessage("BXIU_REMOVEALLTEXT"),
					'removeText' => GetMessage("BXIU_REMOVETEXT"),
					'thumbnailsViewText' => GetMessage("BXIU_THUMBNAILSVIEWTEXT"),
					'tilesViewText' => GetMessage("BXIU_TILESVIEWTEXT"),
					'uncheckAllText' => GetMessage("BXIU_UNCHECKALLTEXT"),
					'uncheckText' => GetMessage("BXIU_UNCHECKTEXT"),
				),
				'deleteFilesDialog' => array(
					'message' => GetMessage("BXIU_MESSAGE"),
					'titleText' => GetMessage("BXIU_TITLETEXT2"),
				),
				'descriptionEditor' => array(
					'cancelHyperlinkText' => GetMessage("BXIU_CANCELHYPERLINKTEXT"),
					'orEscLabelText' => GetMessage("BXIU_ORESCLABELTEXT"),
					'saveButtonText' => GetMessage("BXIU_SAVEBUTTONTEXT1"),
				),
				'detailsViewColumns' => array(
					'dimensionsText' => GetMessage("BXIU_DIMENSIONSTEXT"),
					'fileNameText' => GetMessage("BXIU_FILENAMETEXT"),
					'fileSizeText' => GetMessage("BXIU_FILESIZETEXT"),
					'fileTypeText' => GetMessage("BXIU_FILETYPETEXT"),
					'infoText' => GetMessage("BXIU_INFOTEXT1"),
					'lastModifiedText' => GetMessage("BXIU_LASTMODIFIEDTEXT"),
				),
				'folderPane' => array(
					'filterHintText' => GetMessage("BXIU_FILTERHINTTEXT"),
					'headerText' => GetMessage("BXIU_HEADERTEXT"),
				),
				'imageEditor' => array(
					'cancelButtonText' => GetMessage("BXIU_CANCELBUTTONTEXT"),
					'cancelCropButtonText' => GetMessage("BXIU_CANCELCROPBUTTONTEXT"),
					'cropButtonText' => GetMessage("BXIU_CROPBUTTONTEXT"),
					'descriptionHintText' => GetMessage("BXIU_DESCRIPTIONHINTTEXT"),
					'rotateButtonText' => GetMessage("BXIU_ROTATEBUTTONTEXT"),
					'saveButtonText' => GetMessage("BXIU_SAVEBUTTONTEXT2"),
				),
				'messages' => array(
					'cmykImagesNotAllowed' => GetMessage("BXIU_CMYKIMAGESNOTALLOWED"),
					'deletingFilesError' => GetMessage("BXIU_DELETINGFILESERROR"),
					'dimensionsTooLarge' => GetMessage("BXIU_DIMENSIONSTOOLARGE"),
					'dimensionsTooSmall' => GetMessage("BXIU_DIMENSIONSTOOSMALL"),
					'fileNameNotAllowed' => GetMessage("BXIU_FILENAMENOTALLOWED"),
					'fileSizeTooSmall' => GetMessage("BXIU_FILESIZETOOSMALL"),
					'filesNotAdded' => GetMessage("BXIU_FILESNOTADDED"),
					'maxFileCountExceeded' => GetMessage("BXIU_MAXFILECOUNTEXCEEDED"),
					'maxFileSizeExceeded' => GetMessage("BXIU_MAXFILESIZEEXCEEDED"),
					'maxTotalFileSizeExceeded' => GetMessage("BXIU_MAXTOTALFILESIZEEXCEEDED"),
					'noResponseFromServer' => GetMessage("BXIU_NORESPONSEFROMSERVER"),
					'serverNotFound' => GetMessage("BXIU_SERVERNOTFOUND"),
					'unexpectedError' => GetMessage("BXIU_UNEXPECTEDERROR"),
					'uploadCancelled' => GetMessage("BXIU_UPLOADCANCELLED"),
					'uploadCompleted' => GetMessage("BXIU_UPLOADCOMPLETED"),
					'uploadFailed' => GetMessage("BXIU_UPLOADFAILED"),
				),
				'paneItem' => array(
					'descriptionEditorIconTooltip' => GetMessage("BXIU_DESCRIPTIONEDITORICONTOOLTIP"),
					'imageCroppedIconTooltip' => GetMessage("BXIU_IMAGECROPPEDICONTOOLTIP"),
					'imageEditorIconTooltip' => GetMessage("BXIU_IMAGEEDITORICONTOOLTIP"),
					'removalIconTooltip' => GetMessage("BXIU_REMOVALICONTOOLTIP"),
					'rotationIconTooltip' => GetMessage("BXIU_ROTATIONICONTOOLTIP"),
				),
				'statusPane' => array(
					'clearAllHyperlinkText' => GetMessage("BXIU_CLEARALLHYPERLINKTEXT"),
					'filesToUploadText' => GetMessage("BXIU_FILESTOUPLOADTEXT"),
					'noFilesToUploadText' => GetMessage("BXIU_NOFILESTOUPLOADTEXT"),
					'progressBarText' => GetMessage("BXIU_PROGRESSBARTEXT"),
				),
				'treePane' => array(
					'titleText' => GetMessage("BXIU_TITLETEXT3"),
					'unixFileSystemRootText' => GetMessage("BXIU_UNIXFILESYSTEMROOTTEXT"),
					'unixHomeDirectoryText' => GetMessage("BXIU_UNIXHOMEDIRECTORYTEXT"),
				),
				'uploadPane' => array(
					'dropFilesHereText' => GetMessage("BXIU_DROPFILESHERETEXT"),
				),
				'uploadProgressDialog' => array(
					'cancelUploadButtonText' => GetMessage("BXIU_CANCELUPLOADBUTTONTEXT"),
					'estimationText' => GetMessage("BXIU_ESTIMATIONTEXT"),
					'hideButtonText' => GetMessage("BXIU_HIDEBUTTONTEXT"),
					'hoursText' => GetMessage("BXIU_HOURSTEXT"),
					'infoText' => GetMessage("BXIU_INFOTEXT2"),
					'kilobytesText' => GetMessage("BXIU_KILOBYTESTEXT"),
					'megabytesText' => GetMessage("BXIU_MEGABYTESTEXT"),
					'minutesText' => GetMessage("BXIU_MINUTESTEXT"),
					'preparingText' => GetMessage("BXIU_PREPARINGTEXT"),
					'secondsText' => GetMessage("BXIU_SECONDSTEXT"),
					'titleText' => GetMessage("BXIU_TITLETEXT4"),
				),
				'cancelUploadButtonText' => GetMessage("BXIU_CANCELUPLOADBUTTONTEXT"),
				'loadingFolderContentText' => GetMessage("BXIU_LOADINGFOLDERCONTENTTEXT"),
				'uploadButtonText' => GetMessage("BXIU_UPLOADBUTTONTEXT"),
			);
		}
		return CUtil::PhpToJSObject($arLoc);
	}

	public static function GetChunkSize()
	{
		$max_upload_size = min(self::GetSize(ini_get('post_max_size')), self::GetSize(ini_get('upload_max_filesize')));
		$max_upload_size -= 1024 * 200;
		return $max_upload_size;
	}

	private function GetSize($v)
	{
		$l = substr($v, -1);
		$ret = substr($v, 0, -1);
		switch(strtoupper($l))
		{
			case 'P':
				$ret *= 1024;
			case 'T':
				$ret *= 1024;
			case 'G':
				$ret *= 1024;
			case 'M':
				$ret *= 1024;
			case 'K':
				$ret *= 1024;
			break;
		}
		return $ret;
	}

	public static function StrangeUrlEncode($url)
	{
		if (!defined('BX_UTF'))
			$url = \Bitrix\Main\Text\Encoding::convertEncoding($url, SITE_CHARSET, "UTF-8");

		$ind = strpos($url, "?");
		$url = str_replace("%2F", "/", rawurlencode(substr($url, 0, $ind))).substr($url, $ind);
		return $url;
	}
}

class CFlashUploader extends CImageUploader
{
	public static function ShowScript($Params = array())
	{
		global $APPLICATION;
		self::SetId($Params['id']);

		if (!isset($Params['height']))
			$Params['height'] = '500px';

		if (!isset($Params['width']))
			$Params['width'] = '100%';

		if (!isset($Params['fileMask']))
			$Params['fileMask'] = "*.*";

		if (!isset($Params['chunkSize']) || $Params['chunkSize'] <= 0)
			$Params['chunkSize'] = self::GetChunkSize();

		if (!isset($Params['thumbnailJpegQuality']) || $Params['thumbnailJpegQuality'] > 100 || $Params['thumbnailJpegQuality'] <= 0)
			$Params['thumbnailJpegQuality'] = 90;

		// Check and create tmp dir
		self::CheckDirPath($Params["pathToTmp"]);

		$APPLICATION->AddHeadScript('/bitrix/image_uploader/bximageuploader.js');
		$APPLICATION->SetAdditionalCSS('/bitrix/image_uploader/bximageuploader.css');
		$APPLICATION->AddHeadScript('/bitrix/image_uploader/flash/aurigma.imageuploaderflash.js');
		$id = self::GetId();
		?>
		<script>
		var oBXUploaderHandler_<?= CUtil::JSEscape($id)?> = new window.BXUploader({id: '<?= CUtil::JSEscape($id)?>',type: 'flash'});

		window.BXFIU_<?= CUtil::JSEscape($id)?> = $au.imageUploaderFlash({id: '<?= CUtil::JSEscape($id)?>'});
		var bxp = {
			id: '<?= CUtil::JSEscape($id)?>',
			width: '<?= CUtil::JSEscape($Params['width'])?>',
			height: '<?= CUtil::JSEscape($Params['height'])?>',
			converters: [],
			flashControl: {
				codeBase: '/bitrix/image_uploader/flash/aurigma.imageuploaderflash.swf',
				wmode: "opaque"
			},
			uploadSettings: {
				actionUrl: '<?= CUtil::JSEscape(self::StrangeUrlEncode($Params['actionUrl']))?>',
				chunkSize: <?= intval($Params['chunkSize'])?>
			},
			metadata: {},
			restrictions : {fileMask: '<?= CUtil::JSEscape($Params['fileMask'])?>'}
		};

		<? if (isset($Params['appendFormName']) && $Params['appendFormName'] != ''): ?>
			bxp.metadata.additionalFormName = '<?= CUtil::JSEscape($Params['appendFormName'])?>';
		<?endif;?>

		<? if (isset($Params['redirectUrl'])): ?>
			bxp.uploadSettings.redirectUrl = '<?= CUtil::JSEscape($Params['redirectUrl'])?>';
		<?endif;?>

		<? if (isset($Params['minFileCount'])):?>
			bxp.restrictions.minFileCount= '<?= CUtil::JSEscape($Params['minFileCount'])?>';
		<?endif;?>
		<? if (isset($Params['maxFileCount'])):?>
			bxp.restrictions.maxFileCount= '<?= CUtil::JSEscape($Params['maxFileCount'])?>';
		<?endif;?>
		<? if (isset($Params['maxTotalFileSize'])):?>
			bxp.restrictions.maxTotalFileSize = '<?= CUtil::JSEscape($Params['maxTotalFileSize'])?>';
		<?endif;?>
		<? if (isset($Params['maxFileSize'])):?>
			bxp.restrictions.maxFileSize = '<?= CUtil::JSEscape($Params['maxFileSize'])?>';
		<?endif;?>
		<? if (isset($Params['minFileSize'])):?>
			bxp.restrictions.minFileSize = '<?= CUtil::JSEscape($Params['minFileSize'])?>';
		<?endif;?>
		<? if (isset($Params['minImageWidth'])):?>
			bxp.restrictions.minImageWidth = '<?= CUtil::JSEscape($Params['minImageWidth'])?>';
		<?endif;?>
		<? if (isset($Params['minImageHeight'])):?>
			bxp.restrictions.minImageHeight = '<?= CUtil::JSEscape($Params['minImageHeight'])?>';
		<?endif;?>
		<? if (isset($Params['maxImageWidth'])):?>
			bxp.restrictions.maxImageWidth = '<?= CUtil::JSEscape($Params['maxImageWidth'])?>';
		<?endif;?>
		<? if (isset($Params['maxImageHeight'])):?>
			bxp.restrictions.maxImageHeight = '<?= CUtil::JSEscape($Params['maxImageHeight'])?>';
		<?endif;?>

		<?foreach ($Params['converters'] as $converter):?>
			<?$bSource = (!$converter['width'] || !$converter['height']);?>
			bxp.converters.push({
				<?if ($bSource):?>
					mode: '*.*=Thumbnail',
					thumbnailFitMode: "ActualSize", // Fit | OrientationalFit | Width | Height | ActualSize
					thumbnailCopyIptc: true,
					thumbnailCopyExif: true,
					thumbnailJpegQuality: <?= $Params['thumbnailJpegQuality']?>,
				<?else:?>
					mode: '*.*=Thumbnail',
					thumbnailFitMode: "Fit", // Fit | OrientationalFit | Width | Height | ActualSize
					thumbnailCopyIptc: true,
					thumbnailCopyExif: true,

					thumbnailHeight: <?= intval($converter['height'])?>,
					thumbnailWidth: <?= intval($converter['width'])?>,
					thumbnailJpegQuality: <?= $Params['thumbnailJpegQuality']?>
				<?endif;?>
			});
		<?endforeach;?>

		BXFIU_<?= CUtil::JSEscape($id)?>.set(bxp);
		// Apply localization
		BXFIU_<?= CUtil::JSEscape($id)?>.set(<?= self::GetLocalization()?>);

		// $au.debug().level(3);
		// $au.debug().mode(['popup', 'console']);

		BX.ready(function(){BX('bxiu_<?= CUtil::JSEscape($id)?>').innerHTML = BXFIU_<?= CUtil::JSEscape($id)?>.getHtml();});

		</script>
		<div id="bxiu_<?= htmlspecialcharsbx($id)?>" class="bx-image-uploader"></div>
		<?
	}

	public static function InitUploaderHandler()
	{
		include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/image_uploader/ImageUploaderFlashPHP/UploadHandler.class.php");
	}

	public static function UploadFileHandler($callback, $Params)
	{
		self::HealFilesVars();
		self::InitUploaderHandler();
		self::$convCount = $Params['convCount'];
		self::$uploadCallbackFunc = $callback;
		self::$uploadCallbackParams = $Params;
		self::SetTmpPath($_REQUEST["PackageGuid"], $Params["pathToTmp"]);

		$uh = new UploadHandler();
		$uh->setUploadCacheDirectory($Params['pathToTmp']);
		$uh->setAllFilesUploadedCallback(array("CFlashUploader", "SaveAllUploadedFiles"));
		$uh->processRequest();

		// Kill unsecure vars from $_POST
		self::HealFilesVars(true);
	}

	public static function HealFilesVars($bKill = false)
	{
		global $_UNSECURE;
		if (!$bKill)
			UnQuoteArr($_UNSECURE["_POST"], false, true);

		foreach($_POST as $key => $var)
		{
			if (preg_match("/file\d_\d/i", $key) && isset($_UNSECURE['_POST'][$key]))
			{
				if ($bKill)
					$_POST[$key] = null;
				else
					$_POST[$key] = $_UNSECURE['_POST'][$key];
			}
		}
	}

	public static function SaveAllUploadedFiles($uploadedFiles)
	{
		try
		{
			$packageFields = $uploadedFiles[0]->getPackage()->getPackageFields();
			// We call 'onBeforeUpload' only once and if exists handler
			if (isset(self::$uploadCallbackParams['onBeforeUpload']) && self::$PackageGuid != $packageFields['PackageGuid'])
			{
				self::$PackageGuid = $packageFields['PackageGuid'];
				self::$uploadCallbackParams['packageFields'] = $packageFields;
				if (!call_user_func(self::$uploadCallbackParams['onBeforeUpload'], self::$uploadCallbackParams))
					return;
			}
			foreach ($uploadedFiles as $uploadedFile)
			{
				try
				{
					$convertedFiles = $uploadedFile->getConvertedFiles();
					if (count($convertedFiles) <= 0)
					{
						CImageUploader::SaveError(array(array("id" => "BXUPL_FLASH_TYPE_1", "text" => GetMessage('P_BXUPL_FLASH_TYPE_1'))));
						continue;
					}

					$arFiles = array();
					foreach ($convertedFiles as $j => $convertedFile)
					{
						$path = self::$sTmpPath."_".$j.".tmp";
						$convertedFile->moveTo($path);
						$arFiles[] = array(
							'name' => $convertedFile->getName(),
							'tmp_name' => $path,
							'errors' => 0,
							'type' => self::GetMimeType($convertedFile->getName()),
							'size' => $convertedFile->getSize(),
							'mode' => $convertedFile->getMode(),
							'height' => $convertedFile->getHeight(),
							'width' => $convertedFile->getWidth(),
							'path' => $path
						);
					}
					$name = $packageFields['Title_'.$uploadedFile->getIndex()];
					$fileName = $uploadedFile->getSourceName();
					if ($name == "")
						$name = $fileName;
					$Info = array(
						'name' => $name,
						'filename' => $fileName,
						'description' => $uploadedFile->getDescription(),
						'tags' => $uploadedFile->getTag()
					);
					call_user_func(self::$uploadCallbackFunc, $Info, $arFiles, self::$uploadCallbackParams);
				}
				catch (Exception $e)
				{
					CImageUploader::SaveError(array(array("id" => "BXUPL_FLASH_SAVE_1", "text" => $e->getMessage)));
				}
			}
			if (isset(self::$uploadCallbackParams['onAfterUpload']))
				call_user_func(self::$uploadCallbackParams['onAfterUpload'], self::$uploadCallbackParams);
		}
		catch (Exception $e)
		{
			CImageUploader::SaveError(array(array("id" => "BXUPL_FLASH_SAVE_2", "text" => $e->getMessage)));
		}
	}

	public static function GetLocalization()
	{
		static $arLoc = false;
		if($arLoc === false)
		{
			$arLoc = array(
				'addFilesProgressDialog' => array(
					'text' => GetMessage("BXFIU_text")
				),
				'commonDialog' => array(
					'cancelButtonText' => GetMessage("BXFIU_cancelButtonText"),
					'okButtonText' => GetMessage("BXFIU_okButtonText")
				),
				'descriptionEditor' => array(
					'cancelButtonText' => GetMessage("BXFIU_cancelButtonText"),
					'saveButtonText' => GetMessage("BXFIU_saveButtonText")
				),
				'imagePreviewWindow' => array(
					'closePreviewTooltip' => GetMessage("BXFIU_closePreviewTooltip")
				),
				'messages' => array(
					'cannotReadFile' => GetMessage("BXFIU_cannotReadFile"),
					'dimensionsTooLarge' => GetMessage("BXFIU_dimensionsTooLarge"),
					'dimensionsTooSmall' => GetMessage("BXFIU_dimensionsTooSmall"),
					'fileSizeTooSmall' => GetMessage("BXFIU_fileSizeTooSmall"),
					'filesNotAdded' => GetMessage("BXFIU_filesNotAdded"),
					'maxFileCountExceeded' => GetMessage("BXFIU_maxFileCountExceeded"),
					'maxFileSizeExceeded' => GetMessage("BXFIU_maxFileSizeExceeded"),
					'maxTotalFileSizeExceeded' => GetMessage("BXFIU_maxTotalFileSizeExceeded"),
					'previewNotAvailable' => GetMessage("BXFIU_previewNotAvailable"),
					'tooFewFiles' => GetMessage("BXFIU_tooFewFiles")
				),
				'paneItem' => array(
					'descriptionEditorIconTooltip' => GetMessage("BXFIU_descriptionEditorIconTooltip"),
					'imageTooltip' => GetMessage("BXFIU_imageTooltip"),
					'itemTooltip' => GetMessage("BXFIU_itemTooltip"),
					'removalIconTooltip' => GetMessage("BXFIU_removalIconTooltip"),
					'rotationIconTooltip' => GetMessage("BXFIU_rotationIconTooltip")
				),
				'statusPane' => array(
					'dataUploadedText' => GetMessage("BXFIU_dataUploadedText"),
					'filesPreparedText' => GetMessage("BXFIU_filesPreparedText"),
					'filesToUploadText' => GetMessage("BXFIU_filesToUploadText"),
					'filesUploadedText' => GetMessage("BXFIU_filesUploadedText"),
					'noFilesToUploadText' => GetMessage("BXFIU_noFilesToUploadText"),
					'preparingText' => GetMessage("BXFIU_preparingText"),
					'sendingText' => GetMessage("BXFIU_sendingText")
				),
				'topPane' => array(
					'addFilesHyperlinkText' => GetMessage("BXFIU_addFilesHyperlinkText"),
					'clearAllHyperlinkText' => GetMessage("BXFIU_clearAllHyperlinkText"),
					'orText' => GetMessage("BXFIU_orText"),
					'titleText' => GetMessage("BXFIU_titleText"),
					'viewComboBox' => array(GetMessage("BXFIU_viewComboBox1"), GetMessage("BXFIU_viewComboBox2"), GetMessage("BXFIU_viewComboBox3")),
					'viewComboBoxText' => GetMessage("BXFIU_viewComboBoxText")
				),
				'uploadErrorDialog' => array(
					'hideDetailsButtonText' => GetMessage("BXFIU_hideDetailsButtonText"),
					'message' => GetMessage("BXFIU_message"),
					'showDetailsButtonText' => GetMessage("BXFIU_showDetailsButtonText"),
					'title' => GetMessage("BXFIU_title")
				),
				'uploadPane' => array(
					'addFilesButtonText' => GetMessage("BXFIU_addFilesButtonText")
				),
				'cancelUploadButtonText' => GetMessage("BXFIU_cancelUploadButtonText"),
				'uploadButtonText' => GetMessage("BXFIU_uploadButtonText")
			);
		}
		return CUtil::PhpToJSObject($arLoc);
	}
}
class CFileUploader extends \Bitrix\Main\UI\Uploader\Uploader {
	function __construct($params, $doCheckPost = true)
	{
		parent::__construct($params);
		if ($doCheckPost !== false)
		{
			$this->checkPost(($doCheckPost === true || $doCheckPost == "post"));
		}
		return $this;
	}
}



?>