enh(sab): Add profileUrl to SAB

Signed-off-by: Johannes Merkel <mail@johannesgge.de>
pull/38969/head
Johannes Merkel 2023-06-23 18:40:46 +07:00 committed by Johannes
parent 646dfd2a40
commit eda3824d91
2 changed files with 28 additions and 4 deletions

@ -29,6 +29,7 @@ namespace OCA\DAV\CardDAV;
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\Component\VCard;
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 @@ class Converter {
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;

@ -34,6 +34,7 @@ use OCA\DAV\CardDAV\Converter;
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 @@ class ConverterTest extends TestCase {
$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 @@ class ConverterTest extends TestCase {
->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 @@ class ConverterTest extends TestCase {
* @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);