From 2384e2d4334e7a5222d8a2d745cc0568aedf453e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Molakvo=C3=A6?= Date: Mon, 18 Oct 2021 18:19:37 +0200 Subject: [PATCH] Add appName to contactsmenu action API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: John Molakvoæ --- .../Contacts/ContactsMenu/ActionFactory.php | 9 ++++++--- .../ContactsMenu/Actions/LinkAction.php | 20 +++++++++++++++++++ lib/public/Contacts/ContactsMenu/IAction.php | 12 +++++++++++ .../Contacts/ContactsMenu/IActionFactory.php | 10 ++++++---- .../ContactsMenu/Actions/LinkActionTest.php | 19 ++++++++++++++++++ 5 files changed, 63 insertions(+), 7 deletions(-) diff --git a/lib/private/Contacts/ContactsMenu/ActionFactory.php b/lib/private/Contacts/ContactsMenu/ActionFactory.php index 8e139f6486ca3..5218582802cf9 100644 --- a/lib/private/Contacts/ContactsMenu/ActionFactory.php +++ b/lib/private/Contacts/ContactsMenu/ActionFactory.php @@ -32,13 +32,15 @@ class ActionFactory implements IActionFactory { * @param string $icon * @param string $name * @param string $href + * @param string $appName * @return ILinkAction */ - public function newLinkAction($icon, $name, $href) { + public function newLinkAction(string $icon, string $name, string $href, string $appName = ''): ILinkAction { $action = new LinkAction(); $action->setName($name); $action->setIcon($icon); $action->setHref($href); + $action->setAppName($appName); return $action; } @@ -46,9 +48,10 @@ public function newLinkAction($icon, $name, $href) { * @param string $icon * @param string $name * @param string $email + * @param string $appName * @return ILinkAction */ - public function newEMailAction($icon, $name, $email) { - return $this->newLinkAction($icon, $name, 'mailto:' . $email); + public function newEMailAction(string $icon, string $name, string $email, string $appName = ''): ILinkAction { + return $this->newLinkAction($icon, $name, 'mailto:' . $email, $appName); } } diff --git a/lib/private/Contacts/ContactsMenu/Actions/LinkAction.php b/lib/private/Contacts/ContactsMenu/Actions/LinkAction.php index a50318903acf8..a38bad9d82f60 100644 --- a/lib/private/Contacts/ContactsMenu/Actions/LinkAction.php +++ b/lib/private/Contacts/ContactsMenu/Actions/LinkAction.php @@ -38,6 +38,9 @@ class LinkAction implements ILinkAction { /** @var int */ private $priority = 10; + /** @var string */ + private $appName; + /** * @param string $icon absolute URI to an icon */ @@ -87,6 +90,22 @@ public function getHref() { return $this->href; } + /** + * @param string $appName + * @since 23.0.0 + */ + public function setAppName(string $appName) { + $this->appName = $appName; + } + + /** + * @return string + * @since 23.0.0 + */ + public function getAppName(): string { + return $this->appName; + } + /** * @return array */ @@ -95,6 +114,7 @@ public function jsonSerialize() { 'title' => $this->name, 'icon' => $this->icon, 'hyperlink' => $this->href, + 'appName' => $this->appName, ]; } } diff --git a/lib/public/Contacts/ContactsMenu/IAction.php b/lib/public/Contacts/ContactsMenu/IAction.php index 1a2bc9b33b547..7c9db06397560 100644 --- a/lib/public/Contacts/ContactsMenu/IAction.php +++ b/lib/public/Contacts/ContactsMenu/IAction.php @@ -60,4 +60,16 @@ public function setPriority($priority); * @since 12.0 */ public function getPriority(); + + /** + * @param string $appName + * @since 23.0.0 + */ + public function setAppName(string $appName); + + /** + * @return string + * @since 23.0.0 + */ + public function getAppName(): string; } diff --git a/lib/public/Contacts/ContactsMenu/IActionFactory.php b/lib/public/Contacts/ContactsMenu/IActionFactory.php index f454ea117d285..f0c079021f38b 100644 --- a/lib/public/Contacts/ContactsMenu/IActionFactory.php +++ b/lib/public/Contacts/ContactsMenu/IActionFactory.php @@ -35,9 +35,10 @@ interface IActionFactory { * @param string $icon full path to the action's icon * @param string $name localized name of the action * @param string $href target URL - * @return ILinkAction + * @param string $appName the appName registering the action + * @return IAction */ - public function newLinkAction($icon, $name, $href); + public function newLinkAction(string $icon, string $name, string $href, string $appName = ''): IAction; /** * Construct and return a new email action for the contacts menu @@ -47,7 +48,8 @@ public function newLinkAction($icon, $name, $href); * @param string $icon full path to the action's icon * @param string $name localized name of the action * @param string $email target e-mail address - * @return ILinkAction + * @param string $appName the appName registering the action + * @return IAction */ - public function newEMailAction($icon, $name, $email); + public function newEMailAction(string $icon, string $name, string $email, string $appName = ''): IAction; } diff --git a/tests/lib/Contacts/ContactsMenu/Actions/LinkActionTest.php b/tests/lib/Contacts/ContactsMenu/Actions/LinkActionTest.php index ed6e9ace403ff..a2530084442c2 100644 --- a/tests/lib/Contacts/ContactsMenu/Actions/LinkActionTest.php +++ b/tests/lib/Contacts/ContactsMenu/Actions/LinkActionTest.php @@ -75,10 +75,29 @@ public function testJsonSerialize() { $this->action->setName('Nickie Works'); $this->action->setPriority(33); $this->action->setHref('example.com'); + $this->action->setAppName('contacts'); $expected = [ 'title' => 'Nickie Works', 'icon' => 'icon-contacts', 'hyperlink' => 'example.com', + 'appName' => 'contacts', + ]; + + $json = $this->action->jsonSerialize(); + + $this->assertEquals($expected, $json); + } + + public function testJsonSerializeNoAppName() { + $this->action->setIcon('icon-contacts'); + $this->action->setName('Nickie Works'); + $this->action->setPriority(33); + $this->action->setHref('example.com'); + $expected = [ + 'title' => 'Nickie Works', + 'icon' => 'icon-contacts', + 'hyperlink' => 'example.com', + 'appName' => '', ]; $json = $this->action->jsonSerialize();