We could not synchronize checks via GitHub's checks API since Scrutinizer's GitHub App is not installed for this repository.
| 1 | <?php |
||
| 2 | |||
| 3 | /** |
||
| 4 | * (c) Kitodo. Key to digital objects e.V. <[email protected]> |
||
| 5 | * |
||
| 6 | * This file is part of the Kitodo and TYPO3 projects. |
||
| 7 | * |
||
| 8 | * @license GNU General Public License version 3 or later. |
||
| 9 | * For the full copyright and license information, please read the |
||
| 10 | * LICENSE.txt file that was distributed with this source code. |
||
| 11 | */ |
||
| 12 | |||
| 13 | namespace Kitodo\Dlf\Common; |
||
| 14 | |||
| 15 | use TYPO3\CMS\Core\Messaging\FlashMessage; |
||
| 16 | use TYPO3\CMS\Core\Messaging\Renderer\FlashMessageRendererInterface; |
||
| 17 | |||
| 18 | /** |
||
| 19 | * A class representing a bootstrap flash messages. |
||
| 20 | * This class renders flash messages as markup, based on the |
||
| 21 | * bootstrap HTML/CSS framework. It is used in backend context. |
||
| 22 | * The created output contains all classes which are required for |
||
| 23 | * the TYPO3 backend. Any kind of message contains also a nice icon. |
||
| 24 | * |
||
| 25 | * @package TYPO3 |
||
| 26 | * @subpackage dlf |
||
| 27 | * |
||
| 28 | * @access public |
||
| 29 | */ |
||
| 30 | class KitodoFlashMessageRenderer implements FlashMessageRendererInterface |
||
| 31 | { |
||
| 32 | /** |
||
| 33 | * @var array The message severity class names |
||
| 34 | */ |
||
| 35 | protected static array $classes = [ |
||
| 36 | // Todo: FlashMessage constants deprecated in v12, remove when dropping v11 support |
||
| 37 | FlashMessage::NOTICE => 'notice', |
||
| 38 | FlashMessage::INFO => 'info', |
||
| 39 | FlashMessage::OK => 'success', |
||
| 40 | FlashMessage::WARNING => 'warning', |
||
| 41 | FlashMessage::ERROR => 'danger' |
||
| 42 | ]; |
||
| 43 | |||
| 44 | /** |
||
| 45 | * @var array The message severity icon names |
||
| 46 | */ |
||
| 47 | protected static array $icons = [ |
||
| 48 | // Todo: FlashMessage constants deprecated in v12, remove when dropping v11 support |
||
| 49 | FlashMessage::NOTICE => 'lightbulb-o', |
||
| 50 | FlashMessage::INFO => 'info', |
||
| 51 | FlashMessage::OK => 'check', |
||
| 52 | FlashMessage::WARNING => 'exclamation', |
||
| 53 | FlashMessage::ERROR => 'times' |
||
| 54 | ]; |
||
| 55 | |||
| 56 | /** |
||
| 57 | * Render method |
||
| 58 | * |
||
| 59 | * @access public |
||
| 60 | * |
||
| 61 | * @param FlashMessage[] $flashMessages |
||
| 62 | * |
||
| 63 | * @return string Representation of the flash message |
||
| 64 | */ |
||
| 65 | public function render(array $flashMessages): string |
||
| 66 | { |
||
| 67 | return $this->getMessageAsMarkup($flashMessages); |
||
| 68 | } |
||
| 69 | |||
| 70 | /** |
||
| 71 | * Gets the message severity as integer value for compatibility with Typo3 v12 |
||
| 72 | * |
||
| 73 | * @access public |
||
| 74 | * |
||
| 75 | * @param FlashMessage $flashMessage |
||
| 76 | * |
||
| 77 | * @return int The message severity as integer |
||
| 78 | */ |
||
| 79 | protected function getSeverityAsInt(FlashMessage $flashMessage): int |
||
| 80 | { |
||
| 81 | $severity = $flashMessage->getSeverity(); |
||
| 82 | if (is_int($severity)) { |
||
|
0 ignored issues
–
show
introduced
by
Loading history...
|
|||
| 83 | // $severity is integer constant from FlashMessage in Typo3 v11 |
||
| 84 | return $severity; |
||
| 85 | } |
||
| 86 | // $severity is instance of ContextualFeedbackSeverity enum introduced in Typo3 v12 |
||
| 87 | // TODO: migrate message severity to ContextualFeedbackSeverity when dropping support for Typo3 v11 |
||
| 88 | return $severity->value; |
||
| 89 | } |
||
| 90 | |||
| 91 | /** |
||
| 92 | * Gets the message severity class name |
||
| 93 | * |
||
| 94 | * @access public |
||
| 95 | * |
||
| 96 | * @param FlashMessage $flashMessage |
||
| 97 | * |
||
| 98 | * @return string The message severity class name |
||
| 99 | */ |
||
| 100 | protected function getClass(FlashMessage $flashMessage): string |
||
| 101 | { |
||
| 102 | return 'alert-' . self::$classes[$this->getSeverityAsInt($flashMessage)]; |
||
| 103 | } |
||
| 104 | |||
| 105 | /** |
||
| 106 | * Gets the message severity icon name |
||
| 107 | * |
||
| 108 | * @access public |
||
| 109 | * |
||
| 110 | * @param FlashMessage $flashMessage |
||
| 111 | * |
||
| 112 | * @return string The message severity icon name |
||
| 113 | */ |
||
| 114 | protected function getIconName(FlashMessage $flashMessage): string |
||
| 115 | { |
||
| 116 | return self::$icons[$this->getSeverityAsInt($flashMessage)]; |
||
| 117 | } |
||
| 118 | |||
| 119 | /** |
||
| 120 | * Gets the message rendered as clean and secure markup |
||
| 121 | * |
||
| 122 | * @access public |
||
| 123 | * |
||
| 124 | * @param FlashMessage[] $flashMessages |
||
| 125 | * |
||
| 126 | * @return string |
||
| 127 | */ |
||
| 128 | protected function getMessageAsMarkup(array $flashMessages): string |
||
| 129 | { |
||
| 130 | // \TYPO3\CMS\Core\Messaging\FlashMessage::getMessageAsMarkup() uses htmlspecialchars() |
||
| 131 | // on all messages, but we have messages with HTML tags. Therefore we copy the official |
||
| 132 | // implementation and remove the htmlspecialchars() call on the message body. |
||
| 133 | $markup = []; |
||
| 134 | $markup[] = '<div class="typo3-messages">'; |
||
| 135 | foreach ($flashMessages as $flashMessage) { |
||
| 136 | $messageTitle = $flashMessage->getTitle(); |
||
| 137 | $markup[] = '<div class="alert ' . htmlspecialchars($this->getClass($flashMessage)) . '">'; |
||
| 138 | $markup[] = ' <div class="media">'; |
||
| 139 | $markup[] = ' <div class="media-left">'; |
||
| 140 | $markup[] = ' <span class="fa-stack fa-lg">'; |
||
| 141 | $markup[] = ' <i class="fa fa-circle fa-stack-2x"></i>'; |
||
| 142 | $markup[] = ' <i class="fa fa-' . htmlspecialchars($this->getIconName($flashMessage)) . ' fa-stack-1x"></i>'; |
||
| 143 | $markup[] = ' </span>'; |
||
| 144 | $markup[] = ' </div>'; |
||
| 145 | $markup[] = ' <div class="media-body">'; |
||
| 146 | if ($messageTitle !== '') { |
||
| 147 | $markup[] = ' <h4 class="alert-title">' . htmlspecialchars($messageTitle) . '</h4>'; |
||
| 148 | } |
||
| 149 | $markup[] = ' <p class="alert-message">' . $flashMessage->getMessage() . '</p>'; |
||
| 150 | $markup[] = ' </div>'; |
||
| 151 | $markup[] = ' </div>'; |
||
| 152 | $markup[] = '</div>'; |
||
| 153 | } |
||
| 154 | $markup[] = '</div>'; |
||
| 155 | return implode('', $markup); |
||
| 156 | } |
||
| 157 | } |
||
| 158 |