From 2c0b5dee19f1276a40a6dfdf5e13e7d5bafb20f3 Mon Sep 17 00:00:00 2001
From: Joas Schilling <coding@schilljs.com>
Date: Thu, 27 Oct 2016 15:43:34 +0200
Subject: [PATCH] Allow rich object strings in messages as well

Signed-off-by: Joas Schilling <coding@schilljs.com>
---
 lib/private/Notification/Notification.php | 53 +++++++++++++++++++++++
 lib/public/Notification/INotification.php | 21 +++++++++
 2 files changed, 74 insertions(+)

diff --git a/lib/private/Notification/Notification.php b/lib/private/Notification/Notification.php
index 7346f35f966..39fc6ab9465 100644
--- a/lib/private/Notification/Notification.php
+++ b/lib/private/Notification/Notification.php
@@ -73,6 +73,12 @@ class Notification implements INotification {
 	/** @var string */
 	protected $messageParsed;
 
+	/** @var string */
+	protected $messageRich;
+
+	/** @var array */
+	protected $messageRichParameters;
+
 	/** @var string */
 	protected $link;
 
@@ -112,6 +118,8 @@ class Notification implements INotification {
 		$this->message = '';
 		$this->messageParameters = [];
 		$this->messageParsed = '';
+		$this->messageRich = '';
+		$this->messageRichParameters = [];
 		$this->link = '';
 		$this->icon = '';
 		$this->actions = [];
@@ -373,6 +381,43 @@ class Notification implements INotification {
 		return $this->messageParsed;
 	}
 
+	/**
+	 * @param string $message
+	 * @param array $parameters
+	 * @return $this
+	 * @throws \InvalidArgumentException if the message or parameters are invalid
+	 * @since 9.2.0
+	 */
+	public function setRichMessage($message, array $parameters = []) {
+		if (!is_string($message) || $message === '') {
+			throw new \InvalidArgumentException('The given parsed message is invalid');
+		}
+		$this->messageRich = $message;
+
+		if (!is_array($parameters)) {
+			throw new \InvalidArgumentException('The given message parameters are invalid');
+		}
+		$this->messageRichParameters = $parameters;
+
+		return $this;
+	}
+
+	/**
+	 * @return string
+	 * @since 9.2.0
+	 */
+	public function getRichMessage() {
+		return $this->messageRich;
+	}
+
+	/**
+	 * @return array[]
+	 * @since 9.2.0
+	 */
+	public function getRichMessageParameters() {
+		return $this->messageRichParameters;
+	}
+
 	/**
 	 * @param string $link
 	 * @return $this
@@ -516,6 +561,14 @@ class Notification implements INotification {
 			}
 		}
 
+		if ($this->getRichMessage() !== '' || !empty($this->getRichMessageParameters())) {
+			try {
+				$this->richValidator->validate($this->getRichMessage(), $this->getRichMessageParameters());
+			} catch (InvalidObjectExeption $e) {
+				return false;
+			}
+		}
+
 		return
 			$this->isValidCommon()
 			&&
diff --git a/lib/public/Notification/INotification.php b/lib/public/Notification/INotification.php
index 3a8bde0a375..55109a5ee2e 100644
--- a/lib/public/Notification/INotification.php
+++ b/lib/public/Notification/INotification.php
@@ -183,6 +183,27 @@ interface INotification {
 	 */
 	public function getParsedMessage();
 
+	/**
+	 * @param string $message
+	 * @param array $parameters
+	 * @return $this
+	 * @throws \InvalidArgumentException if the message or parameters are invalid
+	 * @since 9.2.0
+	 */
+	public function setRichMessage($message, array $parameters = []);
+
+	/**
+	 * @return string
+	 * @since 9.2.0
+	 */
+	public function getRichMessage();
+
+	/**
+	 * @return array[]
+	 * @since 9.2.0
+	 */
+	public function getRichMessageParameters();
+
 	/**
 	 * @param string $link
 	 * @return $this
-- 
GitLab