summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Molakvoæ <skjnldsv@protonmail.com>2021-10-18 18:19:37 +0200
committerJohn Molakvoæ <skjnldsv@protonmail.com>2021-10-20 11:53:45 +0200
commit873e8e219cb7d9c0651260a3b4f138618a22f31e (patch)
treeda2ffc73b5c6f9255d60f84eb2cbe73a7cdefc60
parent3ce3c0f117e7f5b02e55eb2c9aa0a1e7f7fe3508 (diff)
downloadnextcloud-server-873e8e219cb7d9c0651260a3b4f138618a22f31e.tar.gz
nextcloud-server-873e8e219cb7d9c0651260a3b4f138618a22f31e.zip
Add appName to contactsmenu action API
Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>
-rw-r--r--lib/private/Contacts/ContactsMenu/ActionFactory.php9
-rw-r--r--lib/private/Contacts/ContactsMenu/Actions/LinkAction.php20
-rw-r--r--lib/public/Contacts/ContactsMenu/IAction.php12
-rw-r--r--lib/public/Contacts/ContactsMenu/IActionFactory.php6
-rw-r--r--tests/lib/Contacts/ContactsMenu/Actions/LinkActionTest.php19
5 files changed, 61 insertions, 5 deletions
diff --git a/lib/private/Contacts/ContactsMenu/ActionFactory.php b/lib/private/Contacts/ContactsMenu/ActionFactory.php
index 8e139f6486c..5218582802c 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 @@ class ActionFactory implements IActionFactory {
* @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 a50318903ac..a38bad9d82f 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
*/
@@ -88,6 +91,22 @@ class LinkAction implements ILinkAction {
}
/**
+ * @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
*/
public function jsonSerialize() {
@@ -95,6 +114,7 @@ class LinkAction implements ILinkAction {
'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 1a2bc9b33b5..7c9db063975 100644
--- a/lib/public/Contacts/ContactsMenu/IAction.php
+++ b/lib/public/Contacts/ContactsMenu/IAction.php
@@ -60,4 +60,16 @@ interface IAction extends JsonSerializable {
* @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 f454ea117d2..393c9eb487a 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
+ * @param string $appName the appName registering the action
* @return ILinkAction
*/
- public function newLinkAction($icon, $name, $href);
+ public function newLinkAction(string $icon, string $name, string $href, string $appName = ''): ILinkAction;
/**
* Construct and return a new email action for the contacts menu
@@ -47,7 +48,8 @@ interface IActionFactory {
* @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
+ * @param string $appName the appName registering the action
* @return ILinkAction
*/
- public function newEMailAction($icon, $name, $email);
+ public function newEMailAction(string $icon, string $name, string $email, string $appName = ''): ILinkAction;
}
diff --git a/tests/lib/Contacts/ContactsMenu/Actions/LinkActionTest.php b/tests/lib/Contacts/ContactsMenu/Actions/LinkActionTest.php
index ed6e9ace403..a2530084442 100644
--- a/tests/lib/Contacts/ContactsMenu/Actions/LinkActionTest.php
+++ b/tests/lib/Contacts/ContactsMenu/Actions/LinkActionTest.php
@@ -75,10 +75,29 @@ class LinkActionTest extends TestCase {
$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();