core-bundle/src/Resources/contao/controllers/BackendPopup.php
public function run()
	{
		if ($this->strFile == '')
		{
			die('No file given');
		}

		// Make sure there are no attempts to hack the file system
		if (preg_match('@^\.+@', $this->strFile) || preg_match('@\.+/@', $this->strFile) || preg_match('@(://)+@', $this->strFile))
		{
			die('Invalid file name');
		}

		// Limit preview to the files directory
		if (!preg_match('@^' . preg_quote(Config::get('uploadPath'), '@') . '@i', $this->strFile))
		{
			die('Invalid path');
		}

		$rootDir = System::getContainer()->getParameter('kernel.project_dir');

		// Check whether the file exists
		if (!file_exists($rootDir . '/' . $this->strFile))
		{
			die('File not found');
		}

		// Check whether the file is mounted (thanks to Marko Cupic)
		if (!$this->User->hasAccess($this->strFile, 'filemounts'))
		{
			die('Permission denied');
		}

		// Open the download dialogue
		if (Input::get('download'))
		{
			$objFile = new File($this->strFile);
			$objFile->sendToBrowser();
		}

		$objTemplate = new BackendTemplate('be_popup');

		// Add the resource (see #6880)
		if (($objModel = FilesModel::findByPath($this->strFile)) === null)
		{
			if (Dbafs::shouldBeSynchronized($this->strFile))
			{
				$objModel = Dbafs::addResource($this->strFile);
			}
		}

		if ($objModel !== null)
		{
			$objTemplate->uuid = StringUtil::binToUuid($objModel->uuid); // see #5211
		}

		// Add the file info
		if (is_dir($rootDir . '/' . $this->strFile))
		{
			$objFile = new Folder($this->strFile);
			$objTemplate->filesize = $this->getReadableSize($objFile->size) . ' (' . number_format($objFile->size, 0, $GLOBALS['TL_LANG']['MSC']['decimalSeparator'], $GLOBALS['TL_LANG']['MSC']['thousandsSeparator']) . ' Byte)';
		}
		else
		{
			$objFile = new File($this->strFile);

			// Image
			if ($objFile->isImage)
			{
				$objTemplate->isImage = true;
				$objTemplate->width = $objFile->viewWidth;
				$objTemplate->height = $objFile->viewHeight;
				$objTemplate->src = $this->urlEncode($this->strFile);
				$objTemplate->dataUri = $objFile->dataUri;
			}

			// Meta data
			if (($objModel = FilesModel::findByPath($this->strFile)) instanceof FilesModel)
			{
				$arrMeta = StringUtil::deserialize($objModel->meta);

				if (\is_array($arrMeta))
				{
					System::loadLanguageFile('languages');

					$objTemplate->meta = $arrMeta;
					$objTemplate->languages = (object) $GLOBALS['TL_LANG']['LNG'];
				}
			}

			$objTemplate->href = ampersand(Environment::get('request'), true) . '&amp;download=1';
			$objTemplate->filesize = $this->getReadableSize($objFile->filesize) . ' (' . number_format($objFile->filesize, 0, $GLOBALS['TL_LANG']['MSC']['decimalSeparator'], $GLOBALS['TL_LANG']['MSC']['thousandsSeparator']) . ' Byte)';
		}

		$objTemplate->icon = $objFile->icon;
		$objTemplate->mime = $objFile->mime;
		$objTemplate->ctime = Date::parse(Config::get('datimFormat'), $objFile->ctime);
		$objTemplate->mtime = Date::parse(Config::get('datimFormat'), $objFile->mtime);
		$objTemplate->atime = Date::parse(Config::get('datimFormat'), $objFile->atime);
		$objTemplate->path = StringUtil::specialchars($this->strFile);
		$objTemplate->theme = Backend::getTheme();
		$objTemplate->base = Environment::get('base');
		$objTemplate->language = $GLOBALS['TL_LANGUAGE'];
		$objTemplate->title = StringUtil::specialchars($this->strFile);
		$objTemplate->host = Environment::get('host');
		$objTemplate->charset = Config::get('characterSet');
		$objTemplate->labels = (object) $GLOBALS['TL_LANG']['MSC'];
		$objTemplate->download = StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['fileDownload']);

		return $objTemplate->getResponse();
	}
public function run()
	{
		if ($this->strFile == '')
		{
			die('No file given');
		}

		// Make sure there are no attempts to hack the file system
		if (preg_match('@^\.+@', $this->strFile) || preg_match('@\.+/@', $this->strFile) || preg_match('@(://)+@', $this->strFile))
		{
			die('Invalid file name');
		}

		// Limit preview to the files directory
		if (!preg_match('@^' . preg_quote(Config::get('uploadPath'), '@') . '@i', $this->strFile))
		{
			die('Invalid path');
		}

		$rootDir = System::getContainer()->getParameter('kernel.project_dir');

		// Check whether the file exists
		if (!file_exists($rootDir . '/' . $this->strFile))
		{
			die('File not found');
		}

		// Check whether the file is mounted (thanks to Marko Cupic)
		if (!$this->User->hasAccess($this->strFile, 'filemounts'))
		{
			die('Permission denied');
		}

		// Open the download dialogue
		if (Input::get('download'))
		{
			$objFile = new File($this->strFile);
			$objFile->sendToBrowser();
		}

		$objTemplate = new BackendTemplate('be_popup');

		// Add the resource (see #6880)
		if (($objModel = FilesModel::findByPath($this->strFile)) === null)
		{
			if (Dbafs::shouldBeSynchronized($this->strFile))
			{
				$objModel = Dbafs::addResource($this->strFile);
			}
		}

		if ($objModel !== null)
		{
			$objTemplate->uuid = StringUtil::binToUuid($objModel->uuid); // see #5211
		}

		// Add the file info
		if (is_dir($rootDir . '/' . $this->strFile))
		{
			$objFile = new Folder($this->strFile);
			$objTemplate->filesize = $this->getReadableSize($objFile->size) . ' (' . number_format($objFile->size, 0, $GLOBALS['TL_LANG']['MSC']['decimalSeparator'], $GLOBALS['TL_LANG']['MSC']['thousandsSeparator']) . ' Byte)';
		}
		else
		{
			$objFile = new File($this->strFile);

			// Image
			if ($objFile->isImage)
			{
				$objTemplate->isImage = true;
				$objTemplate->width = $objFile->viewWidth;
				$objTemplate->height = $objFile->viewHeight;
				$objTemplate->src = $this->urlEncode($this->strFile);
				$objTemplate->dataUri = $objFile->dataUri;
			}

			// Meta data
			if (($objModel = FilesModel::findByPath($this->strFile)) instanceof FilesModel)
			{
				$arrMeta = StringUtil::deserialize($objModel->meta);

				if (\is_array($arrMeta))
				{
					System::loadLanguageFile('languages');

					$objTemplate->meta = $arrMeta;
					$objTemplate->languages = (object) $GLOBALS['TL_LANG']['LNG'];
				}
			}

			$objTemplate->href = ampersand(Environment::get('request'), true) . '&amp;download=1';
			$objTemplate->filesize = $this->getReadableSize($objFile->filesize) . ' (' . number_format($objFile->filesize, 0, $GLOBALS['TL_LANG']['MSC']['decimalSeparator'], $GLOBALS['TL_LANG']['MSC']['thousandsSeparator']) . ' Byte)';
		}

		$objTemplate->icon = $objFile->icon;
		$objTemplate->mime = $objFile->mime;
		$objTemplate->ctime = Date::parse(Config::get('datimFormat'), $objFile->ctime);
		$objTemplate->mtime = Date::parse(Config::get('datimFormat'), $objFile->mtime);
		$objTemplate->atime = Date::parse(Config::get('datimFormat'), $objFile->atime);
		$objTemplate->path = StringUtil::specialchars($this->strFile);
		$objTemplate->theme = Backend::getTheme();
		$objTemplate->base = Environment::get('base');
		$objTemplate->language = $GLOBALS['TL_LANGUAGE'];
		$objTemplate->title = StringUtil::specialchars($this->strFile);
		$objTemplate->host = Environment::get('host');
		$objTemplate->charset = Config::get('characterSet');
		$objTemplate->labels = (object) $GLOBALS['TL_LANG']['MSC'];
		$objTemplate->download = StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['fileDownload']);

		return $objTemplate->getResponse();
	}
public function run ( ) { if ( $ this -> strFile == '' ) { die ( 'No file given' ) ; } // Make sure there are no attempts to hack the file system if ( preg_match ( '@^\.+@' , $ this -> strFile ) || preg_match ( '@\.+/@' , $ this -> strFile ) || preg_match ( '@(://)+@' , $ this -> strFile ) ) { die ( 'Invalid file name' ) ; } // Limit preview to the files directory if ( ! preg_match ( '@^' . preg_quote ( Config :: get ( 'uploadPath' ) , '@' ) . '@i' , $ this -> strFile ) ) { die ( 'Invalid path' ) ; } $ rootDir = System :: getContainer ( ) -> getParameter ( 'kernel.project_dir' ) ; // Check whether the file exists if ( ! file_exists ( $ rootDir . '/' . $ this -> strFile ) ) { die ( 'File not found' ) ; } // Check whether the file is mounted (thanks to Marko Cupic) if ( ! $ this -> User -> hasAccess ( $ this -> strFile , 'filemounts' ) ) { die ( 'Permission denied' ) ; } // Open the download dialogue if ( Input :: get ( 'download' ) ) { $ objFile = new File ( $ this -> strFile ) ; $ objFile -> sendToBrowser ( ) ; } $ objTemplate = new BackendTemplate ( 'be_popup' ) ; // Add the resource (see #6880) if ( ( $ objModel = FilesModel :: findByPath ( $ this -> strFile ) ) === null ) { if ( Dbafs :: shouldBeSynchronized ( $ this -> strFile ) ) { $ objModel = Dbafs :: addResource ( $ this -> strFile ) ; } } if ( $ objModel !== null ) { $ objTemplate -> uuid = StringUtil :: binToUuid ( $ objModel -> uuid ) ; // see #5211 } // Add the file info if ( is_dir ( $ rootDir . '/' . $ this -> strFile ) ) { $ objFile = new Folder ( $ this -> strFile ) ; $ objTemplate -> filesize = $ this -> getReadableSize ( $ objFile -> size ) . ' (' . number_format ( $ objFile -> size , 0 , $ GLOBALS [ 'TL_LANG' ] [ 'MSC' ] [ 'decimalSeparator' ] , $ GLOBALS [ 'TL_LANG' ] [ 'MSC' ] [ 'thousandsSeparator' ] ) . ' Byte)' ; } else { $ objFile = new File ( $ this -> strFile ) ; // Image if ( $ objFile -> isImage ) { $ objTemplate -> isImage = true ; $ objTemplate -> width = $ objFile -> viewWidth ; $ objTemplate -> height = $ objFile -> viewHeight ; $ objTemplate -> src = $ this -> urlEncode ( $ this -> strFile ) ; $ objTemplate -> dataUri = $ objFile -> dataUri ; } // Meta data if ( ( $ objModel = FilesModel :: findByPath ( $ this -> strFile ) ) instanceof FilesModel ) { $ arrMeta = StringUtil :: deserialize ( $ objModel -> meta ) ; if ( \ is_array ( $ arrMeta ) ) { System :: loadLanguageFile ( 'languages' ) ; $ objTemplate -> meta = $ arrMeta ; $ objTemplate -> languages = ( object ) $ GLOBALS [ 'TL_LANG' ] [ 'LNG' ] ; } } $ objTemplate -> href = ampersand ( Environment :: get ( 'request' ) , true ) . '&amp;download=1' ; $ objTemplate -> filesize = $ this -> getReadableSize ( $ objFile -> filesize ) . ' (' . number_format ( $ objFile -> filesize , 0 , $ GLOBALS [ 'TL_LANG' ] [ 'MSC' ] [ 'decimalSeparator' ] , $ GLOBALS [ 'TL_LANG' ] [ 'MSC' ] [ 'thousandsSeparator' ] ) . ' Byte)' ; } $ objTemplate -> icon = $ objFile -> icon ; $ objTemplate -> mime = $ objFile -> mime ; $ objTemplate -> ctime = Date :: parse ( Config :: get ( 'datimFormat' ) , $ objFile -> ctime ) ; $ objTemplate -> mtime = Date :: parse ( Config :: get ( 'datimFormat' ) , $ objFile -> mtime ) ; $ objTemplate -> atime = Date :: parse ( Config :: get ( 'datimFormat' ) , $ objFile -> atime ) ; $ objTemplate -> path = StringUtil :: specialchars ( $ this -> strFile ) ; $ objTemplate -> theme = Backend :: getTheme ( ) ; $ objTemplate -> base = Environment :: get ( 'base' ) ; $ objTemplate -> language = $ GLOBALS [ 'TL_LANGUAGE' ] ; $ objTemplate -> title = StringUtil :: specialchars ( $ this -> strFile ) ; $ objTemplate -> host = Environment :: get ( 'host' ) ; $ objTemplate -> charset = Config :: get ( 'characterSet' ) ; $ objTemplate -> labels = ( object ) $ GLOBALS [ 'TL_LANG' ] [ 'MSC' ] ; $ objTemplate -> download = StringUtil :: specialchars ( $ GLOBALS [ 'TL_LANG' ] [ 'MSC' ] [ 'fileDownload' ] ) ; return $ objTemplate -> getResponse ( ) ; }
Run the controller and parse the template

@return Response
Run the controller and parse the template