1<?php 2namespace TYPO3\CMS\Fluid\ViewHelpers\Be; 3 4/* 5 * This file is part of the TYPO3 CMS project. 6 * 7 * It is free software; you can redistribute it and/or modify it under 8 * the terms of the GNU General Public License, either version 2 9 * of the License, or any later version. 10 * 11 * For the full copyright and license information, please read the 12 * LICENSE.txt file that was distributed with this source code. 13 * 14 * The TYPO3 project - inspiring people to share! 15 */ 16 17use TYPO3\CMS\Backend\Utility\BackendUtility; 18use TYPO3\CMS\Core\Imaging\Icon; 19use TYPO3\CMS\Core\Imaging\IconFactory; 20use TYPO3\CMS\Core\Type\Bitmask\Permission; 21use TYPO3\CMS\Core\Utility\GeneralUtility; 22use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface; 23 24/** 25 * ViewHelper which return page info icon as known from TYPO3 backend modules. 26 * 27 * .. note:: 28 * This ViewHelper is experimental! 29 * 30 * Examples 31 * ======== 32 * 33 * Default:: 34 * 35 * <f:be.pageInfo /> 36 * 37 * Page info icon with context menu 38 */ 39class PageInfoViewHelper extends AbstractBackendViewHelper 40{ 41 42 /** 43 * This ViewHelper renders HTML, thus output must not be escaped 44 * 45 * @var bool 46 */ 47 protected $escapeOutput = false; 48 49 /** 50 * Render javascript in header 51 * 52 * @return string the rendered page info icon 53 * @see \TYPO3\CMS\Backend\Template\DocumentTemplate::getPageInfo() Note: can't call this method as it's protected! 54 */ 55 public function render() 56 { 57 return static::renderStatic( 58 [], 59 $this->buildRenderChildrenClosure(), 60 $this->renderingContext 61 ); 62 } 63 64 /** 65 * @param array $arguments 66 * @param \Closure $renderChildrenClosure 67 * @param RenderingContextInterface $renderingContext 68 * 69 * @return string 70 */ 71 public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext) 72 { 73 $id = GeneralUtility::_GP('id'); 74 $pageRecord = BackendUtility::readPageAccess($id, $GLOBALS['BE_USER']->getPagePermsClause(Permission::PAGE_SHOW)); 75 // Add icon with context menu, etc: 76 /** @var IconFactory $iconFactory */ 77 $iconFactory = GeneralUtility::makeInstance(IconFactory::class); 78 if ($pageRecord['uid']) { 79 // If there IS a real page 80 $altText = BackendUtility::getRecordIconAltText($pageRecord, 'pages'); 81 $theIcon = '<span title="' . $altText . '">' . $iconFactory->getIconForRecord('pages', $pageRecord, Icon::SIZE_SMALL)->render() . '</span>'; 82 // Make Icon: 83 $theIcon = BackendUtility::wrapClickMenuOnIcon($theIcon, 'pages', $pageRecord['uid']); 84 85 // Setting icon with context menu + uid 86 $theIcon .= ' <em>[PID: ' . $pageRecord['uid'] . ']</em>'; 87 } else { 88 // On root-level of page tree 89 // Make Icon 90 $theIcon = '<span title="' . htmlspecialchars($GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename']) . '">' . $iconFactory->getIcon('apps-pagetree-page-domain', Icon::SIZE_SMALL)->render() . '</span>'; 91 if ($GLOBALS['BE_USER']->isAdmin()) { 92 $theIcon = BackendUtility::wrapClickMenuOnIcon($theIcon, 'pages'); 93 } 94 } 95 return $theIcon; 96 } 97} 98