=============
Contacts Menu
=============
Nextcloud shows a *Contacts menu* in the right corner of the header. This menu lists a user's contacts. These contact entries can be extended by apps.
Apps that extend the contacts menu implement an IProvider or IBulkProvider. The ``process`` method of IProvider is called for every entry show in the contacts menu. The ``process`` method of IBulkProvider is called for all entries at once. If it's cheaper to fetch data in one operation, use the IBulkProvider.
.. code-block:: php
:caption: lib/ContactsMenu/MyProvider.php
my_app
My App
OCA\MyApp\ContactsMenu\MyProvider
OCA\MyApp\ContactsMenu\MyBulkProvider
Accessing contact info
^^^^^^^^^^^^^^^^^^^^^^
The ``IEntry`` objects offer getters to contact infos:
* ``getFullName()``: Get full name. Falls back to an empty string if no full name is set.
* ``getEMailAddresses()``: Get all email addresses.
* ``getAvatar()``: Get the avatar URI.
* ``getProperty(string $name)``: Read a `vCard property `_ of the contact. Return NULL if the property is not set.
Actions
^^^^^^^
Providers can add actions to contact entries. Right now email and link actions are supported. These are created with the help of the ``IActionFactory``.
.. code-block:: php
:caption: lib/ContactsMenu/LinkProvider.php
actionFactory = $actionFactory
}
public function process(IEntry $entry): void {
$emailAction = $this->actionFactory->newEMailAction(
'/apps/myapp/img/link.png', // icon URL
'Click me', // name
'user@domain.tld', // email address
'my_app', // app ID (optional)
);
$linkAction = $this->actionFactory->newLinkAction(
'/apps/myapp/img/link.png', // icon URL
'Click me', // name
'https://.....', // href
'my_app', // app ID (optional)
);
$entry->addAction($emailAction);
$entry->addAction($linkAction);
}
}
User status
^^^^^^^^^^^
Providers can set a user status via ``IEntry::setStatus``. This mechanism is reserved for Nextcloud's user status. Don't use it.