Your IP : 3.145.96.41


Current Path : /home/bitrix/ext_www/klimatlend.ua/bitrix/modules/main/lib/ui/
Upload File :
Current File : /home/bitrix/ext_www/klimatlend.ua/bitrix/modules/main/lib/ui/fileinpututility.php

<?php
namespace Bitrix\Main\UI;

use Bitrix\Main\Context;

class FileInputUtility
{
	protected static $instance = null;

	const SESSION_VAR_PREFIX = "MFI_UPLOADED_FILES_";
	const SESSION_LIST = "MFI_SESSIONS";
	const SESSION_TTL = 86400;

	/**
	 * @return FileInputUtility
	 */
	public static function instance()
	{
		if (!isset(static::$instance))
			static::$instance = new static();

		return static::$instance;
	}

	public function __construct()
	{
	}

	public function registerControl($CID, $controlId = "")
	{
		if (func_num_args() == 1)
		{
			$controlId = $CID;
			$CID = "";
		}
		$CID = (!empty($CID) ? $CID : md5(randString(15)));
		$this->initSession($CID, $controlId);
		return $CID;
	}

	public function registerFile($CID, $fileId)
	{
		$_SESSION[self::SESSION_VAR_PREFIX.$CID][] = $fileId;
	}

	public function unRegisterFile($CID, $fileId)
	{
		if (isset($_SESSION[self::SESSION_VAR_PREFIX.$CID]))
		{
			$key = array_search($fileId, $_SESSION[self::SESSION_VAR_PREFIX.$CID]);
			if($key !== false)
			{
				unset($_SESSION[self::SESSION_VAR_PREFIX.$CID][$key]);
				return true;
			}
		}
		return false;
	}

	public function checkFiles($controlId, $arFiles)
	{
		$arSessionFilesList = $this->getSessionControlFiles($controlId);

		if(is_array($arFiles))
		{
			foreach($arFiles as $key => $fileId)
			{
				if(!in_array($fileId, $arSessionFilesList))
				{
					unset($arFiles[$key]);
				}
			}

			$arFiles = array_values($arFiles);
		}

		return $arFiles;
	}

	public function checkDeletedFiles($controlId)
	{
		$arSessionFilesList = $this->getSessionControlFiles($controlId);
		$deletedRequestName = $controlId.'_deleted';

		$result = array();

		$request = Context::getCurrent()->getRequest();
		if(isset($request[$deletedRequestName]) && is_array($request[$deletedRequestName]))
		{
			foreach($request[$deletedRequestName] as $deletedFile)
			{
				if(
					in_array($deletedFile, $arSessionFilesList)
					&& \CFile::SaveFile(array(
					'old_file' => $deletedFile,
					'del' => 'Y',
				), ''))
				{
					$result[] = $deletedFile;
				}
			}
		}

		return $result;
	}

	public function checkFile($CID, $fileId)
	{
		return isset($_SESSION[self::SESSION_VAR_PREFIX.$CID])
			&& in_array($fileId, $_SESSION[self::SESSION_VAR_PREFIX.$CID]);
	}

	public function getControlByCid($CID)
	{
		$ts = time();
		$found = null;
		foreach ($_SESSION[self::SESSION_LIST] as $controlId => $d)
		{
			if (array_key_exists($CID, $d))
			{
				$r = $d[$CID];
				if($r["SESSID"] != bitrix_sessid()
					|| $ts-$r["TS"] > self::SESSION_TTL)
				{
					unset($_SESSION[self::SESSION_LIST][$controlId][$CID]);
					unset($_SESSION[self::SESSION_VAR_PREFIX.$CID]);
				}
				else
				{
					$found = $controlId;
					break;
				}
			}
		}
		return $found;
	}
	public function isCidRegistered($CID)
	{
		return !is_null($this->getControlByCid($CID));
	}

	public function getUserFieldCid(array $userField)
	{
		$fieldName = $userField['MULTIPLE'] === 'Y' ? preg_replace("/\[.*\]$/", '', $userField['FIELD_NAME']) : $userField['FIELD_NAME'];
		return $userField["ENTITY_ID"]."-".$userField["ID"]."-".$fieldName;
	}

	protected function initSession($CID, $controlId)
	{
		$ts = time();

		if(!isset($_SESSION[self::SESSION_LIST][$controlId]))
		{
			$_SESSION[self::SESSION_LIST][$controlId] = array();
		}
		else
		{
			foreach($_SESSION[self::SESSION_LIST][$controlId] as $key => $arSession)
			{
				if($arSession["SESSID"] != bitrix_sessid()
					|| $ts-$arSession["TS"] > self::SESSION_TTL)
				{
					unset($_SESSION[self::SESSION_LIST][$controlId][$key]);
					unset($_SESSION[self::SESSION_VAR_PREFIX.$key]);
				}
			}
		}
		if (!array_key_exists($CID, $_SESSION[self::SESSION_LIST][$controlId]))
		{
			$_SESSION[self::SESSION_LIST][$controlId][$CID] = array(
				"TS" => $ts,
				"SESSID" => bitrix_sessid()
			);
			$_SESSION[self::SESSION_VAR_PREFIX.$CID] = array();
		}
	}

	protected function getSessionControlFiles($controlId)
	{
		$res = array();

		if(isset($_SESSION[self::SESSION_LIST][$controlId]))
		{
			foreach($_SESSION[self::SESSION_LIST][$controlId] as $CID => $arSession)
			{
				if(isset($_SESSION[self::SESSION_VAR_PREFIX.$CID]) && is_array($_SESSION[self::SESSION_VAR_PREFIX.$CID]))
				{
					$res = array_merge($res, $_SESSION[self::SESSION_VAR_PREFIX.$CID]);
				}
			}
		}

		return $res;
	}
}