diff --git a/apps/dav/lib/CardDAV/Converter.php b/apps/dav/lib/CardDAV/Converter.php index b3d8b094d6931..e19b52b478362 100644 --- a/apps/dav/lib/CardDAV/Converter.php +++ b/apps/dav/lib/CardDAV/Converter.php @@ -29,6 +29,7 @@ use Exception; use OCP\Accounts\IAccountManager; +use OCP\IURLGenerator; use OCP\IImage; use OCP\IUser; use OCP\IUserManager; @@ -36,14 +37,17 @@ use Sabre\VObject\Property\Text; class Converter { + /** @var IURLGenerator */ + private $urlGenerator; /** @var IAccountManager */ private $accountManager; private IUserManager $userManager; public function __construct(IAccountManager $accountManager, - IUserManager $userManager) { + IUserManager $userManager, IURLGenerator $urlGenerator) { $this->accountManager = $accountManager; $this->userManager = $userManager; + $this->urlGenerator = $urlGenerator; } public function createCardFromUser(IUser $user): ?VCard { @@ -88,6 +92,21 @@ public function createCardFromUser(IUser $user): ?VCard { case IAccountManager::PROPERTY_WEBSITE: $vCard->add(new Text($vCard, 'URL', $property->getValue(), ['X-NC-SCOPE' => $scope])); break; + case IAccountManager::PROPERTY_PROFILE_ENABLED: + if ($property->getValue()) { + $vCard->add( + new Text( + $vCard, + 'X-SOCIALPROFILE', + $this->urlGenerator->linkToRouteAbsolute('core.ProfilePage.index', ['targetUserId' => $user->getUID()]), + [ + 'TYPE' => 'NEXTCLOUD', + 'X-NC-SCOPE' => IAccountManager::SCOPE_PUBLISHED + ] + ) + ); + } + break; case IAccountManager::PROPERTY_PHONE: $vCard->add(new Text($vCard, 'TEL', $property->getValue(), ['TYPE' => 'VOICE', 'X-NC-SCOPE' => $scope])); break; diff --git a/apps/dav/tests/unit/CardDAV/ConverterTest.php b/apps/dav/tests/unit/CardDAV/ConverterTest.php index 6b589ec38747c..7205cf5665444 100644 --- a/apps/dav/tests/unit/CardDAV/ConverterTest.php +++ b/apps/dav/tests/unit/CardDAV/ConverterTest.php @@ -34,6 +34,7 @@ use OCP\Accounts\IAccount; use OCP\Accounts\IAccountManager; use OCP\Accounts\IAccountProperty; +use OCP\IURLGenerator; use OCP\IImage; use OCP\IUser; use OCP\IUserManager; @@ -47,11 +48,15 @@ class ConverterTest extends TestCase { /** @var IUserManager|(IUserManager&MockObject)|MockObject */ private IUserManager|MockObject $userManager; + /** @var IURLGenerator */ + private $urlGenerator; + protected function setUp(): void { parent::setUp(); $this->accountManager = $this->createMock(IAccountManager::class); $this->userManager = $this->createMock(IUserManager::class); + $this->urlGenerator = $this->createMock(IURLGenerator::class); } /** @@ -103,7 +108,7 @@ public function testCreation($expectedVCard, $displayName = null, $eMailAddress $user = $this->getUserMock((string)$displayName, $eMailAddress, $cloudId); $accountManager = $this->getAccountManager($user); - $converter = new Converter($accountManager, $this->userManager); + $converter = new Converter($accountManager, $this->userManager, $this->urlGenerator); $vCard = $converter->createCardFromUser($user); if ($expectedVCard !== null) { $this->assertInstanceOf('Sabre\VObject\Component\VCard', $vCard); @@ -124,7 +129,7 @@ public function testManagerProp(): void { ->willReturn('Manager'); $accountManager = $this->getAccountManager($user); - $converter = new Converter($accountManager, $this->userManager); + $converter = new Converter($accountManager, $this->userManager, $this->urlGenerator); $vCard = $converter->createCardFromUser($user); $this->compareData( @@ -212,7 +217,7 @@ public function providesNewUsers() { * @param $fullName */ public function testNameSplitter($expected, $fullName): void { - $converter = new Converter($this->accountManager, $this->userManager); + $converter = new Converter($this->accountManager, $this->userManager, $this->urlGenerator); $r = $converter->splitFullName($fullName); $r = implode(';', $r); $this->assertEquals($expected, $r);