mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
96 lines
3.3 KiB
PHP
96 lines
3.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Chill is a software for social workers
|
|
*
|
|
* For the full copyright and license information, please view
|
|
* the LICENSE file that was distributed with this source code.
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Chill\CalendarBundle\RemoteCalendar\Connector;
|
|
|
|
use Chill\CalendarBundle\RemoteCalendar\Connector\MSGraph\MachineHttpClient;
|
|
use Chill\CalendarBundle\RemoteCalendar\Connector\MSGraph\OnBehalfOfUserHttpClient;
|
|
use Chill\CalendarBundle\RemoteCalendar\Connector\MSGraph\OnBehalfOfUserTokenStorage;
|
|
use Chill\CalendarBundle\RemoteCalendar\Connector\MSGraph\RemoteEventConverter;
|
|
use Chill\MainBundle\Entity\User;
|
|
use DateTimeImmutable;
|
|
use Symfony\Component\HttpFoundation\RedirectResponse;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
|
|
|
class MSGraphRemoteCalendarConnector implements RemoteCalendarConnectorInterface
|
|
{
|
|
private MachineHttpClient $machineHttpClient;
|
|
|
|
private RemoteEventConverter $remoteEventConverter;
|
|
|
|
private OnBehalfOfUserTokenStorage $tokenStorage;
|
|
|
|
private UrlGeneratorInterface $urlGenerator;
|
|
|
|
private OnBehalfOfUserHttpClient $userHttpClient;
|
|
|
|
public function __construct(
|
|
MachineHttpClient $machineHttpClient,
|
|
OnBehalfOfUserTokenStorage $tokenStorage,
|
|
OnBehalfOfUserHttpClient $userHttpClient,
|
|
RemoteEventConverter $remoteEventConverter,
|
|
UrlGeneratorInterface $urlGenerator
|
|
) {
|
|
$this->machineHttpClient = $machineHttpClient;
|
|
$this->remoteEventConverter = $remoteEventConverter;
|
|
$this->tokenStorage = $tokenStorage;
|
|
$this->urlGenerator = $urlGenerator;
|
|
$this->userHttpClient = $userHttpClient;
|
|
}
|
|
|
|
public function getDefaultUserCalendar(string $idOrUserPrincipalName): ?array
|
|
{
|
|
$value = $this->machineHttpClient->request('GET', "users/{$idOrUserPrincipalName}/calendars", [
|
|
'query' => ['$filter' => 'isDefaultCalendar eq true'],
|
|
])->toArray()['value'];
|
|
|
|
return $value[0] ?? null;
|
|
}
|
|
|
|
public function getMakeReadyResponse(string $returnPath): Response
|
|
{
|
|
return new RedirectResponse($this->urlGenerator
|
|
->generate('chill_calendar_remote_connect_azure', ['returnPath' => $returnPath]));
|
|
}
|
|
|
|
public function getUserByEmail(string $email): ?array
|
|
{
|
|
$value = $this->machineHttpClient->request('GET', 'users', [
|
|
'query' => ['$filter' => "mail eq '{$email}'"],
|
|
])->toArray()['value'];
|
|
|
|
return $value[0] ?? null;
|
|
}
|
|
|
|
public function isReady(): bool
|
|
{
|
|
return $this->tokenStorage->hasToken();
|
|
}
|
|
|
|
public function listEventsForUser(User $user, DateTimeImmutable $startDate, DateTimeImmutable $endDate): array
|
|
{
|
|
$bareEvents = $this->userHttpClient->request(
|
|
'GET',
|
|
'users/c4f1fcc7-10e4-4ea9-89ac-c89a00e0a51a/calendarView',
|
|
[
|
|
'query' => [
|
|
'startDateTime' => $startDate->format(DateTimeImmutable::ATOM),
|
|
'endDateTime' => $endDate->format(DateTimeImmutable::ATOM),
|
|
'$select' => 'id,subject,start,end',
|
|
],
|
|
]
|
|
)->toArray();
|
|
|
|
return array_map(function ($item) { return $this->remoteEventConverter->convertToRemote($item); }, $bareEvents['value']);
|
|
}
|
|
}
|