core-bundle/src/Resources/contao/library/Contao/Controller.php
public static function addEnclosuresToTemplate($objTemplate, $arrItem, $strKey='enclosure')
	{
		$arrEnclosures = StringUtil::deserialize($arrItem[$strKey]);

		if (empty($arrEnclosures) || !\is_array($arrEnclosures))
		{
			return;
		}

		$objFiles = FilesModel::findMultipleByUuids($arrEnclosures);

		if ($objFiles === null)
		{
			return;
		}

		$file = Input::get('file', true);

		// Send the file to the browser and do not send a 404 header (see #5178)
		if ($file != '')
		{
			while ($objFiles->next())
			{
				if ($file == $objFiles->path)
				{
					static::sendFileToBrowser($file);
				}
			}

			$objFiles->reset();
		}

		/** @var PageModel $objPage */
		global $objPage;

		$arrEnclosures = array();
		$allowedDownload = StringUtil::trimsplit(',', strtolower(Config::get('allowedDownload')));

		// Add download links
		while ($objFiles->next())
		{
			if ($objFiles->type == 'file')
			{
				$rootDir = System::getContainer()->getParameter('kernel.project_dir');

				if (!\in_array($objFiles->extension, $allowedDownload) || !is_file($rootDir . '/' . $objFiles->path))
				{
					continue;
				}

				$objFile = new File($objFiles->path);
				$strHref = Environment::get('request');

				// Remove an existing file parameter (see #5683)
				if (preg_match('/(&(amp;)?|\?)file=/', $strHref))
				{
					$strHref = preg_replace('/(&(amp;)?|\?)file=[^&]+/', '', $strHref);
				}

				$strHref .= ((strpos($strHref, '?') !== false) ? '&amp;' : '?') . 'file=' . System::urlEncode($objFiles->path);

				$arrMeta = Frontend::getMetaData($objFiles->meta, $objPage->language);

				if (empty($arrMeta) && $objPage->rootFallbackLanguage !== null)
				{
					$arrMeta = Frontend::getMetaData($objFiles->meta, $objPage->rootFallbackLanguage);
				}

				// Use the file name as title if none is given
				if ($arrMeta['title'] == '')
				{
					$arrMeta['title'] = StringUtil::specialchars($objFile->basename);
				}

				$arrEnclosures[] = array
				(
					'id'        => $objFiles->id,
					'uuid'      => $objFiles->uuid,
					'name'      => $objFile->basename,
					'title'     => StringUtil::specialchars(sprintf($GLOBALS['TL_LANG']['MSC']['download'], $objFile->basename)),
					'link'      => $arrMeta['title'],
					'caption'   => $arrMeta['caption'],
					'href'      => $strHref,
					'filesize'  => static::getReadableSize($objFile->filesize),
					'icon'      => Image::getPath($objFile->icon),
					'mime'      => $objFile->mime,
					'meta'      => $arrMeta,
					'extension' => $objFile->extension,
					'path'      => $objFile->dirname,
					'enclosure' => $objFiles->path // backwards compatibility
				);
			}
		}

		// Order the enclosures
		if (!empty($arrItem['orderEnclosure']))
		{
			$tmp = StringUtil::deserialize($arrItem['orderEnclosure']);

			if (!empty($tmp) && \is_array($tmp))
			{
				// Remove all values
				$arrOrder = array_map(function () {}, array_flip($tmp));

				// Move the matching elements to their position in $arrOrder
				foreach ($arrEnclosures as $k=>$v)
				{
					if (\array_key_exists($v['uuid'], $arrOrder))
					{
						$arrOrder[$v['uuid']] = $v;
						unset($arrEnclosures[$k]);
					}
				}

				// Append the left-over enclosures at the end
				if (!empty($arrEnclosures))
				{
					$arrOrder = array_merge($arrOrder, array_values($arrEnclosures));
				}

				// Remove empty (unreplaced) entries
				$arrEnclosures = array_values(array_filter($arrOrder));
				unset($arrOrder);
			}
		}

		$objTemplate->enclosure = $arrEnclosures;
	}
public static function addEnclosuresToTemplate($objTemplate, $arrItem, $strKey='enclosure')
	{
		$arrEnclosures = StringUtil::deserialize($arrItem[$strKey]);

		if (empty($arrEnclosures) || !\is_array($arrEnclosures))
		{
			return;
		}

		$objFiles = FilesModel::findMultipleByUuids($arrEnclosures);

		if ($objFiles === null)
		{
			return;
		}

		$file = Input::get('file', true);

		// Send the file to the browser and do not send a 404 header (see #5178)
		if ($file != '')
		{
			while ($objFiles->next())
			{
				if ($file == $objFiles->path)
				{
					static::sendFileToBrowser($file);
				}
			}

			$objFiles->reset();
		}

		/** @var PageModel $objPage */
		global $objPage;

		$arrEnclosures = array();
		$allowedDownload = StringUtil::trimsplit(',', strtolower(Config::get('allowedDownload')));

		// Add download links
		while ($objFiles->next())
		{
			if ($objFiles->type == 'file')
			{
				$rootDir = System::getContainer()->getParameter('kernel.project_dir');

				if (!\in_array($objFiles->extension, $allowedDownload) || !is_file($rootDir . '/' . $objFiles->path))
				{
					continue;
				}

				$objFile = new File($objFiles->path);
				$strHref = Environment::get('request');

				// Remove an existing file parameter (see #5683)
				if (preg_match('/(&(amp;)?|\?)file=/', $strHref))
				{
					$strHref = preg_replace('/(&(amp;)?|\?)file=[^&]+/', '', $strHref);
				}

				$strHref .= ((strpos($strHref, '?') !== false) ? '&amp;' : '?') . 'file=' . System::urlEncode($objFiles->path);

				$arrMeta = Frontend::getMetaData($objFiles->meta, $objPage->language);

				if (empty($arrMeta) && $objPage->rootFallbackLanguage !== null)
				{
					$arrMeta = Frontend::getMetaData($objFiles->meta, $objPage->rootFallbackLanguage);
				}

				// Use the file name as title if none is given
				if ($arrMeta['title'] == '')
				{
					$arrMeta['title'] = StringUtil::specialchars($objFile->basename);
				}

				$arrEnclosures[] = array
				(
					'id'        => $objFiles->id,
					'uuid'      => $objFiles->uuid,
					'name'      => $objFile->basename,
					'title'     => StringUtil::specialchars(sprintf($GLOBALS['TL_LANG']['MSC']['download'], $objFile->basename)),
					'link'      => $arrMeta['title'],
					'caption'   => $arrMeta['caption'],
					'href'      => $strHref,
					'filesize'  => static::getReadableSize($objFile->filesize),
					'icon'      => Image::getPath($objFile->icon),
					'mime'      => $objFile->mime,
					'meta'      => $arrMeta,
					'extension' => $objFile->extension,
					'path'      => $objFile->dirname,
					'enclosure' => $objFiles->path // backwards compatibility
				);
			}
		}

		// Order the enclosures
		if (!empty($arrItem['orderEnclosure']))
		{
			$tmp = StringUtil::deserialize($arrItem['orderEnclosure']);

			if (!empty($tmp) && \is_array($tmp))
			{
				// Remove all values
				$arrOrder = array_map(function () {}, array_flip($tmp));

				// Move the matching elements to their position in $arrOrder
				foreach ($arrEnclosures as $k=>$v)
				{
					if (\array_key_exists($v['uuid'], $arrOrder))
					{
						$arrOrder[$v['uuid']] = $v;
						unset($arrEnclosures[$k]);
					}
				}

				// Append the left-over enclosures at the end
				if (!empty($arrEnclosures))
				{
					$arrOrder = array_merge($arrOrder, array_values($arrEnclosures));
				}

				// Remove empty (unreplaced) entries
				$arrEnclosures = array_values(array_filter($arrOrder));
				unset($arrOrder);
			}
		}

		$objTemplate->enclosure = $arrEnclosures;
	}
public static function addEnclosuresToTemplate ( $ objTemplate , $ arrItem , $ strKey = 'enclosure' ) { $ arrEnclosures = StringUtil :: deserialize ( $ arrItem [ $ strKey ] ) ; if ( empty ( $ arrEnclosures ) || ! \ is_array ( $ arrEnclosures ) ) { return ; } $ objFiles = FilesModel :: findMultipleByUuids ( $ arrEnclosures ) ; if ( $ objFiles === null ) { return ; } $ file = Input :: get ( 'file' , true ) ; // Send the file to the browser and do not send a 404 header (see #5178) if ( $ file != '' ) { while ( $ objFiles -> next ( ) ) { if ( $ file == $ objFiles -> path ) { static :: sendFileToBrowser ( $ file ) ; } } $ objFiles -> reset ( ) ; } /** @var PageModel $objPage */ global $ objPage ; $ arrEnclosures = array ( ) ; $ allowedDownload = StringUtil :: trimsplit ( ',' , strtolower ( Config :: get ( 'allowedDownload' ) ) ) ; // Add download links while ( $ objFiles -> next ( ) ) { if ( $ objFiles -> type == 'file' ) { $ rootDir = System :: getContainer ( ) -> getParameter ( 'kernel.project_dir' ) ; if ( ! \ in_array ( $ objFiles -> extension , $ allowedDownload ) || ! is_file ( $ rootDir . '/' . $ objFiles -> path ) ) { continue ; } $ objFile = new File ( $ objFiles -> path ) ; $ strHref = Environment :: get ( 'request' ) ; // Remove an existing file parameter (see #5683) if ( preg_match ( '/(&(amp;)?|\?)file=/' , $ strHref ) ) { $ strHref = preg_replace ( '/(&(amp;)?|\?)file=[^&]+/' , '' , $ strHref ) ; } $ strHref .= ( ( strpos ( $ strHref , '?' ) !== false ) ? '&amp;' : '?' ) . 'file=' . System :: urlEncode ( $ objFiles -> path ) ; $ arrMeta = Frontend :: getMetaData ( $ objFiles -> meta , $ objPage -> language ) ; if ( empty ( $ arrMeta ) && $ objPage -> rootFallbackLanguage !== null ) { $ arrMeta = Frontend :: getMetaData ( $ objFiles -> meta , $ objPage -> rootFallbackLanguage ) ; } // Use the file name as title if none is given if ( $ arrMeta [ 'title' ] == '' ) { $ arrMeta [ 'title' ] = StringUtil :: specialchars ( $ objFile -> basename ) ; } $ arrEnclosures [ ] = array ( 'id' => $ objFiles -> id , 'uuid' => $ objFiles -> uuid , 'name' => $ objFile -> basename , 'title' => StringUtil :: specialchars ( sprintf ( $ GLOBALS [ 'TL_LANG' ] [ 'MSC' ] [ 'download' ] , $ objFile -> basename ) ) , 'link' => $ arrMeta [ 'title' ] , 'caption' => $ arrMeta [ 'caption' ] , 'href' => $ strHref , 'filesize' => static :: getReadableSize ( $ objFile -> filesize ) , 'icon' => Image :: getPath ( $ objFile -> icon ) , 'mime' => $ objFile -> mime , 'meta' => $ arrMeta , 'extension' => $ objFile -> extension , 'path' => $ objFile -> dirname , 'enclosure' => $ objFiles -> path // backwards compatibility ) ; } } // Order the enclosures if ( ! empty ( $ arrItem [ 'orderEnclosure' ] ) ) { $ tmp = StringUtil :: deserialize ( $ arrItem [ 'orderEnclosure' ] ) ; if ( ! empty ( $ tmp ) && \ is_array ( $ tmp ) ) { // Remove all values $ arrOrder = array_map ( function ( ) { } , array_flip ( $ tmp ) ) ; // Move the matching elements to their position in $arrOrder foreach ( $ arrEnclosures as $ k => $ v ) { if ( \ array_key_exists ( $ v [ 'uuid' ] , $ arrOrder ) ) { $ arrOrder [ $ v [ 'uuid' ] ] = $ v ; unset ( $ arrEnclosures [ $ k ] ) ; } } // Append the left-over enclosures at the end if ( ! empty ( $ arrEnclosures ) ) { $ arrOrder = array_merge ( $ arrOrder , array_values ( $ arrEnclosures ) ) ; } // Remove empty (unreplaced) entries $ arrEnclosures = array_values ( array_filter ( $ arrOrder ) ) ; unset ( $ arrOrder ) ; } } $ objTemplate -> enclosure = $ arrEnclosures ; }
Add enclosures to a template

@param object $objTemplate The template object to add the enclosures to
@param array  $arrItem     The element or module as array
@param string $strKey      The name of the enclosures field in $arrItem
Add enclosures to a template