Files
Git'Fellow 4920bd1725 refactor: add PHP 8.3 types to BC-safe class constants
PHP 8.3 allows class constants to declare a type. Adopt it where doing so
cannot break third-party apps.

Typing an inheritable constant is a hard BC break: a subclass that
redeclares it untyped fails to load with "Type of C::FOO must be
compatible with P::FOO of type string". Changes are therefore limited to
constants that cannot be redeclared by a subclass:

  - private const (not inherited)
  - final public/protected const
  - constants declared in a final class or an enum

Interface constants, trait constants, and public/protected constants in
non-final (including abstract) classes are left untyped, as is all of
lib/public (OCP) and lib/unstable (NCU).

One review-requested exception: the public OBJECT_PREFIX/OBJECT_SUFFIX
constants of the app-internal CalDAV import helpers (TextImporter,
XmlImporter) are typed as well; these classes are not public API and
have no subclasses.

Only string, int and array are used. float is avoided because it would
silently coerce an int literal and change === comparisons. No constant
name or value is modified: every changed line adds only the type token,
so runtime behaviour is unchanged.

Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>
2026-08-11 13:52:52 +01:00

59 lines
1.4 KiB
PHP

<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\DAV\CalDAV;
use OCA\DAV\AppInfo\Application;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\IConfig;
use function max;
class RetentionService {
public const RETENTION_CONFIG_KEY = 'calendarRetentionObligation';
private const int DEFAULT_RETENTION_SECONDS = 30 * 24 * 60 * 60;
public function __construct(
private IConfig $config,
private ITimeFactory $time,
private CalDavBackend $calDavBackend,
) {
}
public function getDuration(): int {
return max(
(int)$this->config->getAppValue(
Application::APP_ID,
self::RETENTION_CONFIG_KEY,
(string)self::DEFAULT_RETENTION_SECONDS
),
0 // Just making sure we don't delete things in the future when a negative number is passed
);
}
public function cleanUp(): void {
$retentionTime = $this->getDuration();
$now = $this->time->getTime();
$calendars = $this->calDavBackend->getDeletedCalendars($now - $retentionTime);
foreach ($calendars as $calendar) {
$this->calDavBackend->deleteCalendar($calendar['id'], true);
}
$objects = $this->calDavBackend->getDeletedCalendarObjects($now - $retentionTime);
foreach ($objects as $object) {
$this->calDavBackend->deleteCalendarObject(
$object['calendarid'],
$object['uri'],
$object['calendartype'],
true
);
}
}
}