escaper = $escaper; } /** * Returns the HTML for notification's title to the ui component * * @param array $page * @return string */ public function getNotificationTitle(array $page) { $title = $this->escaper->escapeHtml($page['mainContent']['title']); $imageUrl = $this->escaper->escapeUrl($page['mainContent']['imageUrl']); $content = ""; if (!empty($imageUrl)) { $content .= "
"; $content .= $title; $content .= "
"; } else { $content = $title; } return $content; } /** * Returns the HTML for the content in the notification ui component * * @param array $page * @return string */ public function getNotificationContent(array $page) { $content = $this->buildMainContent($page['mainContent']); $content .= $this->buildSubHeadings($page['subHeading']); $content .= $this->buildFooter($page['footer']); return $content; } /** * Builds the HTML for the main content in the notification ui component * * @param array $mainContent * @return string */ private function buildMainContent(array $mainContent) { $content = $this->buildContentTextAreas($mainContent['content']); $content .= $this->buildLists($mainContent['lists']); return $this->formatContentWithLinks($content); } /** * Builds the HTML for the main text areas in the notification ui component * * @param array $contentAreas * @return string */ private function buildContentTextAreas(array $contentAreas) { $content = ""; $lastContentArea = end($contentAreas); foreach ($contentAreas as $contentArea) { $content .= "

"; $content .= $this->escaper->escapeHtml($contentArea['text']); $content .= "

"; if ($contentArea != $lastContentArea) { $content .= "
"; } } return $content; } /** * Builds the HTML for the bullet list content in the notification ui component * * @param array $lists * @return string */ private function buildLists(array $lists) { $content = ""; return $content; } /** * Builds the HTML for the highlighted sub heads for the overview page in the notification ui component * * @param array $subHeadings * @return string */ private function buildSubHeadings(array $subHeadings) { $content = ""; foreach ($subHeadings as $subHeading) { if (!empty($subHeading['imageUrl'])) { $content .= "
"; } else { $content .= "
"; } $content .= "

"; $content .= $this->escaper->escapeHtml($subHeading['title']); $content .= "

"; $content .= "

"; $content .= $this->formatContentWithLinks($subHeading['content']); $content .= "

"; $content .= "
"; } return $content; } /** * Builds the HTML for the footer content in the notification ui component * * @param array $footer * @return string */ private function buildFooter(array $footer) { $content = "

"; $content .= $this->escaper->escapeHtml($footer['content']); $content .= "

"; return $this->formatContentWithLinks($content); } /** * Searches a given string for a URL, formats it to an HTML anchor tag, and returns the original string in the * correct HTML format. * * @param string $content * @return string */ private function formatContentWithLinks($content) { $urlRegex = '#\bhttps?://[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#'; $urlTextRegex = '/\[(.*?)\]/'; preg_match_all($urlRegex, $content, $urlMatches); preg_match_all($urlTextRegex, $content, $urlTextMatches); foreach ($urlMatches[0] as $key => $urlMatch) { if (!empty($urlTextMatches[0])) { $linkMatch = $urlMatch . " " . $urlTextMatches[0][$key]; $content = str_replace( $linkMatch, " {$this->escaper->escapeHtml($urlTextMatches[1][$key])}", $content ); } else { $content = str_replace( $urlMatch, " {$this->escaper->escapeUrl($urlMatch)}", $content ); } } return $content; } }