mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
fix loading of kernel if ms calendar is not created
This commit is contained in:
parent
93a598b549
commit
d3251075e9
@ -1,84 +0,0 @@
|
|||||||
<?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);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Chill\CalendarBundle\RemoteCalendar\Connector\MSGraph;
|
|
||||||
|
|
||||||
use Chill\MainBundle\Entity\User;
|
|
||||||
use DateInterval;
|
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
|
||||||
use Doctrine\ORM\Query\ResultSetMapping;
|
|
||||||
use Doctrine\ORM\Query\ResultSetMappingBuilder;
|
|
||||||
use function strtr;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Contains classes and methods for fetching users with some calendar metadatas.
|
|
||||||
*/
|
|
||||||
class MSGraphUserRepository
|
|
||||||
{
|
|
||||||
private const MOST_OLD_SUBSCRIPTION_OR_ANY_MS_GRAPH = <<<'SQL'
|
|
||||||
select
|
|
||||||
{select}
|
|
||||||
from users u
|
|
||||||
where
|
|
||||||
NOT attributes ?? 'msgraph'
|
|
||||||
OR NOT attributes->'msgraph' ?? 'subscription_events_expiration'
|
|
||||||
OR (attributes->'msgraph' ?? 'subscription_events_expiration' AND (attributes->'msgraph'->>'subscription_events_expiration')::int < EXTRACT(EPOCH FROM (NOW() + :interval::interval)))
|
|
||||||
LIMIT :limit OFFSET :offset
|
|
||||||
;
|
|
||||||
SQL;
|
|
||||||
|
|
||||||
private EntityManagerInterface $entityManager;
|
|
||||||
|
|
||||||
public function __construct(EntityManagerInterface $entityManager)
|
|
||||||
{
|
|
||||||
$this->entityManager = $entityManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function countByMostOldSubscriptionOrWithoutSubscriptionOrData(DateInterval $interval): int
|
|
||||||
{
|
|
||||||
$rsm = new ResultSetMapping();
|
|
||||||
$rsm->addScalarResult('c', 'c');
|
|
||||||
|
|
||||||
$sql = strtr(self::MOST_OLD_SUBSCRIPTION_OR_ANY_MS_GRAPH, [
|
|
||||||
'{select}' => 'COUNT(u) AS c',
|
|
||||||
'LIMIT :limit OFFSET :offset' => '',
|
|
||||||
]);
|
|
||||||
|
|
||||||
return $this->entityManager->createNativeQuery($sql, $rsm)->setParameters([
|
|
||||||
'interval' => $interval,
|
|
||||||
])->getSingleScalarResult();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return array<User>
|
|
||||||
*/
|
|
||||||
public function findByMostOldSubscriptionOrWithoutSubscriptionOrData(DateInterval $interval, int $limit = 50, int $offset = 0): array
|
|
||||||
{
|
|
||||||
$rsm = new ResultSetMappingBuilder($this->entityManager);
|
|
||||||
$rsm->addRootEntityFromClassMetadata(User::class, 'u');
|
|
||||||
|
|
||||||
return $this->entityManager->createNativeQuery(
|
|
||||||
strtr(self::MOST_OLD_SUBSCRIPTION_OR_ANY_MS_GRAPH, ['{select}' => $rsm->generateSelectClause()]),
|
|
||||||
$rsm
|
|
||||||
)->setParameters([
|
|
||||||
'interval' => $interval,
|
|
||||||
'limit' => $limit,
|
|
||||||
'offset' => $offset,
|
|
||||||
])->getResult();
|
|
||||||
}
|
|
||||||
}
|
|
@ -23,6 +23,8 @@ use Chill\CalendarBundle\Command\MapAndSubscribeUserCalendarCommand;
|
|||||||
use Chill\CalendarBundle\Controller\RemoteCalendarConnectAzureController;
|
use Chill\CalendarBundle\Controller\RemoteCalendarConnectAzureController;
|
||||||
use Chill\CalendarBundle\RemoteCalendar\Connector\MSGraph\MachineHttpClient;
|
use Chill\CalendarBundle\RemoteCalendar\Connector\MSGraph\MachineHttpClient;
|
||||||
use Chill\CalendarBundle\RemoteCalendar\Connector\MSGraph\MachineTokenStorage;
|
use Chill\CalendarBundle\RemoteCalendar\Connector\MSGraph\MachineTokenStorage;
|
||||||
|
use Chill\CalendarBundle\RemoteCalendar\Connector\MSGraph\MSUserAbsenceReaderInterface;
|
||||||
|
use Chill\CalendarBundle\RemoteCalendar\Connector\MSGraph\MSUserAbsenceSync;
|
||||||
use Chill\CalendarBundle\RemoteCalendar\Connector\MSGraphRemoteCalendarConnector;
|
use Chill\CalendarBundle\RemoteCalendar\Connector\MSGraphRemoteCalendarConnector;
|
||||||
use Chill\CalendarBundle\RemoteCalendar\Connector\NullRemoteCalendarConnector;
|
use Chill\CalendarBundle\RemoteCalendar\Connector\NullRemoteCalendarConnector;
|
||||||
use Chill\CalendarBundle\RemoteCalendar\Connector\RemoteCalendarConnectorInterface;
|
use Chill\CalendarBundle\RemoteCalendar\Connector\RemoteCalendarConnectorInterface;
|
||||||
@ -37,17 +39,13 @@ class RemoteCalendarCompilerPass implements CompilerPassInterface
|
|||||||
public function process(ContainerBuilder $container)
|
public function process(ContainerBuilder $container)
|
||||||
{
|
{
|
||||||
$config = $container->getParameter('chill_calendar');
|
$config = $container->getParameter('chill_calendar');
|
||||||
$connector = null;
|
|
||||||
|
|
||||||
if (!$config['remote_calendars_sync']['enabled']) {
|
if (true === $config['remote_calendars_sync']['microsoft_graph']['enabled']) {
|
||||||
$connector = NullRemoteCalendarConnector::class;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($config['remote_calendars_sync']['microsoft_graph']['enabled']) {
|
|
||||||
$connector = MSGraphRemoteCalendarConnector::class;
|
$connector = MSGraphRemoteCalendarConnector::class;
|
||||||
|
|
||||||
$container->setAlias(HttpClientInterface::class . ' $machineHttpClient', MachineHttpClient::class);
|
$container->setAlias(HttpClientInterface::class . ' $machineHttpClient', MachineHttpClient::class);
|
||||||
} else {
|
} else {
|
||||||
|
$connector = NullRemoteCalendarConnector::class;
|
||||||
// remove services which cannot be loaded
|
// remove services which cannot be loaded
|
||||||
$container->removeDefinition(MapAndSubscribeUserCalendarCommand::class);
|
$container->removeDefinition(MapAndSubscribeUserCalendarCommand::class);
|
||||||
$container->removeDefinition(AzureGrantAdminConsentAndAcquireToken::class);
|
$container->removeDefinition(AzureGrantAdminConsentAndAcquireToken::class);
|
||||||
@ -55,16 +53,14 @@ class RemoteCalendarCompilerPass implements CompilerPassInterface
|
|||||||
$container->removeDefinition(MachineTokenStorage::class);
|
$container->removeDefinition(MachineTokenStorage::class);
|
||||||
$container->removeDefinition(MachineHttpClient::class);
|
$container->removeDefinition(MachineHttpClient::class);
|
||||||
$container->removeDefinition(MSGraphRemoteCalendarConnector::class);
|
$container->removeDefinition(MSGraphRemoteCalendarConnector::class);
|
||||||
|
$container->removeDefinition(MSUserAbsenceReaderInterface::class);
|
||||||
|
$container->removeDefinition(MSUserAbsenceSync::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$container->hasAlias(Azure::class) && $container->hasDefinition('knpu.oauth2.client.azure')) {
|
if (!$container->hasAlias(Azure::class) && $container->hasDefinition('knpu.oauth2.client.azure')) {
|
||||||
$container->setAlias(Azure::class, 'knpu.oauth2.provider.azure');
|
$container->setAlias(Azure::class, 'knpu.oauth2.provider.azure');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null === $connector) {
|
|
||||||
throw new RuntimeException('Could not configure remote calendar');
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ([
|
foreach ([
|
||||||
NullRemoteCalendarConnector::class,
|
NullRemoteCalendarConnector::class,
|
||||||
MSGraphRemoteCalendarConnector::class, ] as $serviceId) {
|
MSGraphRemoteCalendarConnector::class, ] as $serviceId) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user