============= 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.