mirror of
https://github.com/nextcloud/server.git
synced 2026-04-29 18:11:41 -04:00
fix(dav): Fix user status "Undefined array key 0 at StatusService.php#98"
Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
73b14a28f2
commit
e981619c01
2 changed files with 52 additions and 5 deletions
|
|
@ -94,12 +94,15 @@ class StatusService {
|
|||
}
|
||||
|
||||
// Filter events to see if we have any that apply to the calendar status
|
||||
$applicableEvents = array_filter($calendarEvents, function (array $calendarEvent) use ($userStatusTimestamp) {
|
||||
$component = $calendarEvent['objects'][0];
|
||||
if(isset($component['X-NEXTCLOUD-OUT-OF-OFFICE'])) {
|
||||
$applicableEvents = array_filter($calendarEvents, static function (array $calendarEvent) use ($userStatusTimestamp): bool {
|
||||
if (empty($calendarEvent['objects'])) {
|
||||
return false;
|
||||
}
|
||||
if(isset($component['DTSTART']) && $userStatusTimestamp !== null) {
|
||||
$component = $calendarEvent['objects'][0];
|
||||
if (isset($component['X-NEXTCLOUD-OUT-OF-OFFICE'])) {
|
||||
return false;
|
||||
}
|
||||
if (isset($component['DTSTART']) && $userStatusTimestamp !== null) {
|
||||
/** @var DateTimeImmutable $dateTime */
|
||||
$dateTime = $component['DTSTART'][0];
|
||||
$timestamp = $dateTime->getTimestamp();
|
||||
|
|
@ -108,7 +111,7 @@ class StatusService {
|
|||
}
|
||||
}
|
||||
// Ignore events that are transparent
|
||||
if(isset($component['TRANSP']) && strcasecmp($component['TRANSP'][0], 'TRANSPARENT') === 0) {
|
||||
if (isset($component['TRANSP']) && strcasecmp($component['TRANSP'][0], 'TRANSPARENT') === 0) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -229,6 +229,50 @@ class StatusServiceTest extends TestCase {
|
|||
$this->service->processCalendarStatus('admin');
|
||||
}
|
||||
|
||||
public function testCalendarNoEventObjects(): void {
|
||||
$user = $this->createConfiguredMock(IUser::class, [
|
||||
'getUID' => 'admin',
|
||||
]);
|
||||
|
||||
$this->userManager->expects(self::once())
|
||||
->method('get')
|
||||
->willReturn($user);
|
||||
$this->availabilityCoordinator->expects(self::once())
|
||||
->method('getCurrentOutOfOfficeData')
|
||||
->willReturn(null);
|
||||
$this->availabilityCoordinator->expects(self::never())
|
||||
->method('isInEffect');
|
||||
$this->cache->expects(self::once())
|
||||
->method('get')
|
||||
->willReturn(null);
|
||||
$this->cache->expects(self::once())
|
||||
->method('set');
|
||||
$this->calendarManager->expects(self::once())
|
||||
->method('getCalendarsForPrincipal')
|
||||
->willReturn([$this->createMock(CalendarImpl::class)]);
|
||||
$this->calendarManager->expects(self::once())
|
||||
->method('newQuery')
|
||||
->willReturn(new CalendarQuery('admin'));
|
||||
$this->timeFactory->expects(self::exactly(2))
|
||||
->method('getDateTime')
|
||||
->willReturn(new \DateTime());
|
||||
$this->userStatusService->expects(self::once())
|
||||
->method('findByUserId')
|
||||
->willThrowException(new DoesNotExistException(''));
|
||||
$this->calendarManager->expects(self::once())
|
||||
->method('searchForPrincipal')
|
||||
->willReturn([['objects' => []]]);
|
||||
$this->userStatusService->expects(self::once())
|
||||
->method('revertUserStatus');
|
||||
$this->logger->expects(self::once())
|
||||
->method('debug');
|
||||
$this->userStatusService->expects(self::never())
|
||||
->method('setUserStatus');
|
||||
|
||||
|
||||
$this->service->processCalendarStatus('admin');
|
||||
}
|
||||
|
||||
public function testCalendarEvent(): void {
|
||||
$user = $this->createConfiguredMock(IUser::class, [
|
||||
'getUID' => 'admin',
|
||||
|
|
|
|||
Loading…
Reference in a new issue