aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/dav/lib/CalDAV/CalendarHome.php11
-rw-r--r--apps/dav/lib/CalDAV/CalendarImpl.php32
-rw-r--r--apps/dav/tests/unit/CalDAV/CalendarHomeTest.php48
-rw-r--r--apps/files/lib/Controller/ViewController.php2
-rw-r--r--apps/files_sharing/css/public.css8
-rw-r--r--apps/files_sharing/css/public.css.map2
-rw-r--r--apps/files_sharing/css/public.scss9
-rw-r--r--apps/files_sharing/css/publicView.css8
-rw-r--r--apps/files_sharing/css/publicView.css.map2
-rw-r--r--apps/settings/l10n/eu.js1
-rw-r--r--apps/settings/l10n/eu.json1
-rw-r--r--apps/theming/l10n/eu.js1
-rw-r--r--apps/theming/l10n/eu.json1
-rw-r--r--apps/theming/l10n/pl.js2
-rw-r--r--apps/theming/l10n/pl.json2
-rw-r--r--build/psalm-baseline.xml21
-rw-r--r--config/config.sample.php6
-rw-r--r--core/Controller/ReferenceApiController.php2
-rw-r--r--core/css/public.css2
-rw-r--r--core/css/public.scss2
-rw-r--r--core/css/server.css2
-rw-r--r--core/l10n/fr.js2
-rw-r--r--core/l10n/fr.json2
-rw-r--r--lib/l10n/zh_TW.js4
-rw-r--r--lib/l10n/zh_TW.json4
-rw-r--r--lib/private/Collaboration/Collaborators/MailPlugin.php16
-rw-r--r--lib/private/DB/ConnectionFactory.php4
-rw-r--r--lib/public/Calendar/ICalendar.php16
28 files changed, 115 insertions, 98 deletions
diff --git a/apps/dav/lib/CalDAV/CalendarHome.php b/apps/dav/lib/CalDAV/CalendarHome.php
index cd6ae1c2f7f..a59e76d121f 100644
--- a/apps/dav/lib/CalDAV/CalendarHome.php
+++ b/apps/dav/lib/CalDAV/CalendarHome.php
@@ -159,7 +159,16 @@ class CalendarHome extends \Sabre\CalDAV\CalendarHome {
return new TrashbinHome($this->caldavBackend, $this->principalInfo);
}
- // Calendars
+ // Calendar - this covers all "regular" calendars, but not shared
+ // only check if the method is available
+ if($this->caldavBackend instanceof CalDavBackend) {
+ $calendar = $this->caldavBackend->getCalendarByUri($this->principalInfo['uri'], $name);
+ if(!empty($calendar)) {
+ return new Calendar($this->caldavBackend, $calendar, $this->l10n, $this->config, $this->logger);
+ }
+ }
+
+ // Fallback to cover shared calendars
foreach ($this->caldavBackend->getCalendarsForUser($this->principalInfo['uri']) as $calendar) {
if ($calendar['uri'] === $name) {
return new Calendar($this->caldavBackend, $calendar, $this->l10n, $this->config, $this->logger);
diff --git a/apps/dav/lib/CalDAV/CalendarImpl.php b/apps/dav/lib/CalDAV/CalendarImpl.php
index a04e520c6bc..4eef1e7f8d3 100644
--- a/apps/dav/lib/CalDAV/CalendarImpl.php
+++ b/apps/dav/lib/CalDAV/CalendarImpl.php
@@ -46,14 +46,10 @@ use function Sabre\Uri\split as uriSplit;
class CalendarImpl implements ICreateFromString {
- /** @var CalDavBackend */
- private $backend;
-
- /** @var Calendar */
- private $calendar;
-
- /** @var array */
- private $calendarInfo;
+ private CalDavBackend $backend;
+ private Calendar $calendar;
+ /** @var array<string, mixed> */
+ private array $calendarInfo;
public function __construct(Calendar $calendar,
array $calendarInfo,
@@ -67,8 +63,8 @@ class CalendarImpl implements ICreateFromString {
* @return string defining the technical unique key
* @since 13.0.0
*/
- public function getKey() {
- return $this->calendarInfo['id'];
+ public function getKey(): string {
+ return (string) $this->calendarInfo['id'];
}
/**
@@ -80,19 +76,17 @@ class CalendarImpl implements ICreateFromString {
/**
* In comparison to getKey() this function returns a human readable (maybe translated) name
- * @return null|string
* @since 13.0.0
*/
- public function getDisplayName() {
+ public function getDisplayName(): ?string {
return $this->calendarInfo['{DAV:}displayname'];
}
/**
* Calendar color
- * @return null|string
* @since 13.0.0
*/
- public function getDisplayColor() {
+ public function getDisplayColor(): ?string {
return $this->calendarInfo['{http://apple.com/ns/ical/}calendar-color'];
}
@@ -101,21 +95,21 @@ class CalendarImpl implements ICreateFromString {
* @param array $searchProperties defines the properties within the query pattern should match
* @param array $options - optional parameters:
* ['timerange' => ['start' => new DateTime(...), 'end' => new DateTime(...)]]
- * @param integer|null $limit - limit number of search results
- * @param integer|null $offset - offset for paging of search results
+ * @param int|null $limit - limit number of search results
+ * @param int|null $offset - offset for paging of search results
* @return array an array of events/journals/todos which are arrays of key-value-pairs
* @since 13.0.0
*/
- public function search($pattern, array $searchProperties = [], array $options = [], $limit = null, $offset = null) {
+ public function search(string $pattern, array $searchProperties = [], array $options = [], $limit = null, $offset = null): array {
return $this->backend->search($this->calendarInfo, $pattern,
$searchProperties, $options, $limit, $offset);
}
/**
- * @return integer build up using \OCP\Constants
+ * @return int build up using \OCP\Constants
* @since 13.0.0
*/
- public function getPermissions() {
+ public function getPermissions(): int {
$permissions = $this->calendar->getACL();
$result = 0;
foreach ($permissions as $permission) {
diff --git a/apps/dav/tests/unit/CalDAV/CalendarHomeTest.php b/apps/dav/tests/unit/CalDAV/CalendarHomeTest.php
index ee3bc2b0859..3128e753daa 100644
--- a/apps/dav/tests/unit/CalDAV/CalendarHomeTest.php
+++ b/apps/dav/tests/unit/CalDAV/CalendarHomeTest.php
@@ -88,7 +88,7 @@ class CalendarHomeTest extends TestCase {
$mkCol->method('getRemainingValues')
->willReturn(['... properties ...']);
- $this->backend->expects($this->once())
+ $this->backend->expects(self::once())
->method('createCalendar')
->with('user-principal-123', 'name123', ['... properties ...']);
@@ -117,33 +117,33 @@ class CalendarHomeTest extends TestCase {
public function testGetChildren():void {
$this->backend
- ->expects($this->at(0))
+ ->expects(self::once())
->method('getCalendarsForUser')
->with('user-principal-123')
->willReturn([]);
$this->backend
- ->expects($this->at(1))
+ ->expects(self::once())
->method('getSubscriptionsForUser')
->with('user-principal-123')
->willReturn([]);
$calendarPlugin1 = $this->createMock(ICalendarProvider::class);
$calendarPlugin1
- ->expects($this->once())
+ ->expects(self::once())
->method('fetchAllForCalendarHome')
->with('user-principal-123')
->willReturn(['plugin1calendar1', 'plugin1calendar2']);
$calendarPlugin2 = $this->createMock(ICalendarProvider::class);
$calendarPlugin2
- ->expects($this->once())
+ ->expects(self::once())
->method('fetchAllForCalendarHome')
->with('user-principal-123')
->willReturn(['plugin2calendar1', 'plugin2calendar2']);
$this->pluginManager
- ->expects($this->once())
+ ->expects(self::once())
->method('getCalendarPlugins')
->with()
->willReturn([$calendarPlugin1, $calendarPlugin2]);
@@ -162,19 +162,25 @@ class CalendarHomeTest extends TestCase {
public function testGetChildNonAppGenerated():void {
$this->backend
- ->expects($this->at(0))
+ ->expects(self::once())
+ ->method('getCalendarByUri')
+ ->with('user-principal-123')
+ ->willReturn([]);
+
+ $this->backend
+ ->expects(self::once())
->method('getCalendarsForUser')
->with('user-principal-123')
->willReturn([]);
$this->backend
- ->expects($this->at(1))
+ ->expects(self::once())
->method('getSubscriptionsForUser')
->with('user-principal-123')
->willReturn([]);
$this->pluginManager
- ->expects($this->never())
+ ->expects(self::never())
->method('getCalendarPlugins');
$this->expectException(\Sabre\DAV\Exception\NotFound::class);
@@ -185,51 +191,57 @@ class CalendarHomeTest extends TestCase {
public function testGetChildAppGenerated():void {
$this->backend
- ->expects($this->at(0))
+ ->expects(self::once())
+ ->method('getCalendarByUri')
+ ->with('user-principal-123')
+ ->willReturn([]);
+
+ $this->backend
+ ->expects(self::once())
->method('getCalendarsForUser')
->with('user-principal-123')
->willReturn([]);
$this->backend
- ->expects($this->at(1))
+ ->expects(self::once())
->method('getSubscriptionsForUser')
->with('user-principal-123')
->willReturn([]);
$calendarPlugin1 = $this->createMock(ICalendarProvider::class);
$calendarPlugin1
- ->expects($this->once())
+ ->expects(self::once())
->method('getAppId')
->with()
->willReturn('calendar_plugin_1');
$calendarPlugin1
- ->expects($this->never())
+ ->expects(self::never())
->method('hasCalendarInCalendarHome');
$calendarPlugin1
- ->expects($this->never())
+ ->expects(self::never())
->method('getCalendarInCalendarHome');
$externalCalendarMock = $this->createMock(ExternalCalendar::class);
$calendarPlugin2 = $this->createMock(ICalendarProvider::class);
$calendarPlugin2
- ->expects($this->once())
+ ->expects(self::once())
->method('getAppId')
->with()
->willReturn('calendar_plugin_2');
$calendarPlugin2
- ->expects($this->once())
+ ->expects(self::once())
->method('hasCalendarInCalendarHome')
->with('user-principal-123', 'calendar-uri-from-backend')
->willReturn(true);
$calendarPlugin2
- ->expects($this->once())
+ ->expects(self::once())
->method('getCalendarInCalendarHome')
->with('user-principal-123', 'calendar-uri-from-backend')
->willReturn($externalCalendarMock);
$this->pluginManager
- ->expects($this->once())
+ ->expects(self::once())
->method('getCalendarPlugins')
->with()
->willReturn([$calendarPlugin1, $calendarPlugin2]);
diff --git a/apps/files/lib/Controller/ViewController.php b/apps/files/lib/Controller/ViewController.php
index 82f56be9f18..cfbc9afce2b 100644
--- a/apps/files/lib/Controller/ViewController.php
+++ b/apps/files/lib/Controller/ViewController.php
@@ -266,7 +266,7 @@ class ViewController extends Controller {
$nav->assign('quota', $storageInfo['quota']);
$nav->assign('usage_relative', $storageInfo['relative']);
- $nav->assign('webdav_url', \OCP\Util::linkToRemote('dav/files/' . $user));
+ $nav->assign('webdav_url', \OCP\Util::linkToRemote('dav/files/' . rawurlencode($user)));
$contentItems = [];
diff --git a/apps/files_sharing/css/public.css b/apps/files_sharing/css/public.css
index 662e6003ff1..79c5fe9c04d 100644
--- a/apps/files_sharing/css/public.css
+++ b/apps/files_sharing/css/public.css
@@ -52,6 +52,10 @@
width: unset !important;
}
+#imgframe :not(#viewer) img {
+ min-width: 100px;
+}
+
#imgframe video {
max-height: calc(100vh - var(--header-height) - 65px - 200px);
}
@@ -94,10 +98,6 @@
max-height: 100%;
}
-.app-files_sharing #app-content {
- max-height: calc(100vh - var(--header-height) - 65px);
-}
-
/* fix multiselect bar offset on shared page */
thead {
left: 0 !important;
diff --git a/apps/files_sharing/css/public.css.map b/apps/files_sharing/css/public.css.map
index 12e6c87421e..909bcc0dd97 100644
--- a/apps/files_sharing/css/public.css.map
+++ b/apps/files_sharing/css/public.css.map
@@ -1 +1 @@
-{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","public.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACKA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EAEI;;;AAGJ;EACI;;;AAGJ;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAID;EACI;;;AAGJ;AACA;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;;;AAED;AAAA;AAAA;EAGC;EACA;;;AAED;AAAA;AAAA;AAGC;EACA;;;AAGD;EACC;;;AAIA;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;AACA;EACC;EACA;;;AAIF;EACC;EACA;;;AAKD;EAII;IACC;;;AAQL;EAGG;IACC","file":"public.css"} \ No newline at end of file
+{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","public.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACKA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACI;;;AAGJ;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EAEI;;;AAGJ;EACI;;;AAGJ;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;;;AAED;AAAA;AAAA;EAGC;EACA;;;AAED;AAAA;AAAA;AAGC;EACA;;;AAGD;EACC;;;AAIA;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;AACA;EACC;EACA;;;AAIF;EACC;EACA;;;AAKD;EAII;IACC;;;AAQL;EAGG;IACC","file":"public.css"} \ No newline at end of file
diff --git a/apps/files_sharing/css/public.scss b/apps/files_sharing/css/public.scss
index 72762bd3bcd..1e5e6ee229e 100644
--- a/apps/files_sharing/css/public.scss
+++ b/apps/files_sharing/css/public.scss
@@ -35,6 +35,10 @@ $download-button-section-height: 200px;
width: unset !important;
}
+#imgframe :not(#viewer) img {
+ min-width: 100px;
+}
+
#imgframe video {
max-height: calc(100vh - var(--header-height) - #{$footer-height} - #{$download-button-section-height});
}
@@ -78,11 +82,6 @@ $download-button-section-height: 200px;
max-height: 100%;
}
-// Fix footer overlapping with app-content
-.app-files_sharing #app-content {
- max-height: calc(100vh - var(--header-height) - #{$footer-height});
-}
-
/* fix multiselect bar offset on shared page */
thead {
left: 0 !important;
diff --git a/apps/files_sharing/css/publicView.css b/apps/files_sharing/css/publicView.css
index 6e3b5f5a003..87065766e4b 100644
--- a/apps/files_sharing/css/publicView.css
+++ b/apps/files_sharing/css/publicView.css
@@ -52,6 +52,10 @@
width: unset !important;
}
+#imgframe :not(#viewer) img {
+ min-width: 100px;
+}
+
#imgframe video {
max-height: calc(100vh - var(--header-height) - 65px - 200px);
}
@@ -94,10 +98,6 @@
max-height: 100%;
}
-.app-files_sharing #app-content {
- max-height: calc(100vh - var(--header-height) - 65px);
-}
-
/* fix multiselect bar offset on shared page */
thead {
left: 0 !important;
diff --git a/apps/files_sharing/css/publicView.css.map b/apps/files_sharing/css/publicView.css.map
index d83879232ae..3ac8588952c 100644
--- a/apps/files_sharing/css/publicView.css.map
+++ b/apps/files_sharing/css/publicView.css.map
@@ -1 +1 @@
-{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","public.scss","mobile.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACKA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EAEI;;;AAGJ;EACI;;;AAGJ;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAID;EACI;;;AAGJ;AACA;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;;;AAED;AAAA;AAAA;EAGC;EACA;;;AAED;AAAA;AAAA;AAGC;EACA;;;AAGD;EACC;;;AAIA;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;AACA;EACC;EACA;;;AAIF;EACC;EACA;;;AAKD;EAII;IACC;;;AAQL;EAGG;IACC;;;ADpQJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AEEA;AAEA;EACA;IACC;;;AAGD;EACA;AAAA;AAAA;AAAA;IAIC;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;IACA;;;AAED;EACA;IACC;;;AAGD;EACA;IACC;;;AAED;EACA;IACC;;;AAGD;EACA;IACC;IACA;IACA;IACA;;;EAGD;IACI;IACA;;;EAEJ;IACC;;;EAGD;IACC","file":"publicView.css"} \ No newline at end of file
+{"version":3,"sourceRoot":"","sources":["../../../core/css/variables.scss","public.scss","mobile.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACKA;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACI;;;AAGJ;EACC;;;AAGD;EACC;EACA;EACA;;;AAGD;EAEI;;;AAGJ;EACI;;;AAGJ;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;EACC;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AACA;EACC;;;AAED;AAAA;AAAA;EAGC;EACA;;;AAED;AAAA;AAAA;AAGC;EACA;;;AAGD;EACC;;;AAIA;EACC;;;AAIF;EACC;;;AAGD;EACC;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;EACC;EACA;;;AAGD;EACC;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAGD;AAAA;EAEC;EACA;EACA;;;AAGD;EACC;EACA;EACA;;AACA;EACC;EACA;;;AAIF;EACC;EACA;;;AAKD;EAII;IACC;;;AAQL;EAGG;IACC;;;ADnQJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AEEA;AAEA;EACA;IACC;;;AAGD;EACA;AAAA;AAAA;AAAA;IAIC;;;AAGD;EACA;IACC;;;AAGD;EACA;IACC;IACA;;;AAED;EACA;IACC;;;AAGD;EACA;IACC;;;AAED;EACA;IACC;;;AAGD;EACA;IACC;IACA;IACA;IACA;;;EAGD;IACI;IACA;;;EAEJ;IACC;;;EAGD;IACC","file":"publicView.css"} \ No newline at end of file
diff --git a/apps/settings/l10n/eu.js b/apps/settings/l10n/eu.js
index 44d4ab1c09b..1b079f4405e 100644
--- a/apps/settings/l10n/eu.js
+++ b/apps/settings/l10n/eu.js
@@ -282,6 +282,7 @@ OC.L10N.register(
"Details" : "Xehetasunak",
"You are a member of the following groups:" : "Honako taldeetako kide zara:",
"You are using <strong>{usage}</strong>" : "<strong>{usage}</strong> erabiltzen ari zara",
+ "You are using <strong>{usage}</strong> of <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)" : "<strong>{usage}</strong>/<strong>{totalSpace}</strong> erabiltzen ari zara (<strong>{usageRelative}%</strong>)",
"Your full name" : "Zure izen osoa",
"Email options" : "Posta elektronikoaren aukerak",
"Primary email for password reset and notifications" : "Pasahitz berrezartzeko eta jakinarazpenetarako posta elektroniko nagusia",
diff --git a/apps/settings/l10n/eu.json b/apps/settings/l10n/eu.json
index 300a527a1bb..5423a17c846 100644
--- a/apps/settings/l10n/eu.json
+++ b/apps/settings/l10n/eu.json
@@ -280,6 +280,7 @@
"Details" : "Xehetasunak",
"You are a member of the following groups:" : "Honako taldeetako kide zara:",
"You are using <strong>{usage}</strong>" : "<strong>{usage}</strong> erabiltzen ari zara",
+ "You are using <strong>{usage}</strong> of <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)" : "<strong>{usage}</strong>/<strong>{totalSpace}</strong> erabiltzen ari zara (<strong>{usageRelative}%</strong>)",
"Your full name" : "Zure izen osoa",
"Email options" : "Posta elektronikoaren aukerak",
"Primary email for password reset and notifications" : "Pasahitz berrezartzeko eta jakinarazpenetarako posta elektroniko nagusia",
diff --git a/apps/theming/l10n/eu.js b/apps/theming/l10n/eu.js
index 83bae63943d..b92f8a9ec05 100644
--- a/apps/theming/l10n/eu.js
+++ b/apps/theming/l10n/eu.js
@@ -50,6 +50,7 @@ OC.L10N.register(
"Privacy policy" : "Pribatutasun politika",
"Adjust the Nextcloud theme" : "Doitu Nextcloud gaia",
"Keyboard shortcuts" : "Teklatuaren lasterbideak",
+ "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "Zenbait kasutan, teklatuko lasterbideek erabilerraztasun-tresnekin oztopatu dezakete. Zure tresna behar bezala zentratu ahal izateko, hemen teklatuko lasterbide guztiak desgaitu ditzakezu. Honek aplikazioetan erabilgarri dauden lasterbide guztiak ere desgaituko ditu.",
"Disable all keyboard shortcuts" : "Desgaitu teklatuaren lasterbide guztiak",
"Background" : "Atzeko planoa",
"Set a custom background" : "Ezarri atzeko planoko irudi pertsonalizatua",
diff --git a/apps/theming/l10n/eu.json b/apps/theming/l10n/eu.json
index ac708ca8951..508c58ef1ea 100644
--- a/apps/theming/l10n/eu.json
+++ b/apps/theming/l10n/eu.json
@@ -48,6 +48,7 @@
"Privacy policy" : "Pribatutasun politika",
"Adjust the Nextcloud theme" : "Doitu Nextcloud gaia",
"Keyboard shortcuts" : "Teklatuaren lasterbideak",
+ "In some cases keyboard shortcuts can interfer with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "Zenbait kasutan, teklatuko lasterbideek erabilerraztasun-tresnekin oztopatu dezakete. Zure tresna behar bezala zentratu ahal izateko, hemen teklatuko lasterbide guztiak desgaitu ditzakezu. Honek aplikazioetan erabilgarri dauden lasterbide guztiak ere desgaituko ditu.",
"Disable all keyboard shortcuts" : "Desgaitu teklatuaren lasterbide guztiak",
"Background" : "Atzeko planoa",
"Set a custom background" : "Ezarri atzeko planoko irudi pertsonalizatua",
diff --git a/apps/theming/l10n/pl.js b/apps/theming/l10n/pl.js
index f1207148fc5..31d4cd0bf15 100644
--- a/apps/theming/l10n/pl.js
+++ b/apps/theming/l10n/pl.js
@@ -33,7 +33,7 @@ OC.L10N.register(
"Similar to the high contrast mode, but with dark colours." : "Podobny do trybu wysokiego kontrastu, ale z ciemnymi kolorami.",
"Dark theme" : "Ciemny motyw",
"Enable dark theme" : "Włącz ciemny motyw",
- "A dark theme to ease your eyes by reducing the overall luminosity and brightness." : "Ciemny motyw łagodny dla Twoich oczów, redukując ogólną luminancję i jasność.",
+ "A dark theme to ease your eyes by reducing the overall luminosity and brightness." : "Ciemny motyw łagodny dla Twoich oczu, redukując ogólną luminancję i jasność.",
"System default theme" : "Domyślny motyw systemu",
"Enable the system default" : "Włącz domyślne ustawienia systemu",
"Using the default system appearance." : "Korzystanie z domyślnego wyglądu systemu.",
diff --git a/apps/theming/l10n/pl.json b/apps/theming/l10n/pl.json
index d99ade56568..3f2e4e1b4d5 100644
--- a/apps/theming/l10n/pl.json
+++ b/apps/theming/l10n/pl.json
@@ -31,7 +31,7 @@
"Similar to the high contrast mode, but with dark colours." : "Podobny do trybu wysokiego kontrastu, ale z ciemnymi kolorami.",
"Dark theme" : "Ciemny motyw",
"Enable dark theme" : "Włącz ciemny motyw",
- "A dark theme to ease your eyes by reducing the overall luminosity and brightness." : "Ciemny motyw łagodny dla Twoich oczów, redukując ogólną luminancję i jasność.",
+ "A dark theme to ease your eyes by reducing the overall luminosity and brightness." : "Ciemny motyw łagodny dla Twoich oczu, redukując ogólną luminancję i jasność.",
"System default theme" : "Domyślny motyw systemu",
"Enable the system default" : "Włącz domyślne ustawienia systemu",
"Using the default system appearance." : "Korzystanie z domyślnego wyglądu systemu.",
diff --git a/build/psalm-baseline.xml b/build/psalm-baseline.xml
index efcf731e24f..ac4a7fafcdf 100644
--- a/build/psalm-baseline.xml
+++ b/build/psalm-baseline.xml
@@ -2092,10 +2092,8 @@
<code>getAppsNeedingUpgrade</code>
<code>getIncompatibleApps</code>
</InternalMethod>
- <InvalidArgument occurrences="3">
+ <InvalidArgument occurrences="1">
<code>$restrictions</code>
- <code>addServiceListener</code>
- <code>addServiceListener</code>
</InvalidArgument>
<RedundantCondition occurrences="1">
<code>((array)$request-&gt;getParam('appid')) !== ''</code>
@@ -3668,12 +3666,6 @@
</UndefinedThisPropertyFetch>
</file>
<file src="lib/private/Share/Share.php">
- <FalsableReturnStatement occurrences="1">
- <code>false</code>
- </FalsableReturnStatement>
- <InvalidArgument occurrences="1">
- <code>$arguments</code>
- </InvalidArgument>
<InvalidOperand occurrences="1">
<code>!self::isResharingAllowed()</code>
</InvalidOperand>
@@ -3825,9 +3817,6 @@
</NullableReturnStatement>
</file>
<file src="lib/private/Tags.php">
- <InvalidArgument occurrences="1">
- <code>[$this-&gt;user, $this-&gt;type, $chunk]</code>
- </InvalidArgument>
<InvalidScalarArgument occurrences="2">
<code>$from</code>
<code>$names</code>
@@ -3974,14 +3963,6 @@
<code>$appId === null</code>
</TypeDoesNotContainNull>
</file>
- <file src="lib/private/legacy/OC_DB.php">
- <InvalidReturnStatement occurrences="1">
- <code>$result</code>
- </InvalidReturnStatement>
- <InvalidReturnType occurrences="1">
- <code>OC_DB_StatementWrapper</code>
- </InvalidReturnType>
- </file>
<file src="lib/private/legacy/OC_FileChunking.php">
<UndefinedDocblockClass occurrences="1">
<code>\OC\InsufficientStorageException</code>
diff --git a/config/config.sample.php b/config/config.sample.php
index 104b3e32546..3e65008ed3b 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -138,6 +138,12 @@ $CONFIG = [
*/
'dbtableprefix' => '',
+/**
+ * Enable persistent connexions to the database.
+ * This setting uses the "persistent" option from doctrine dbal, wich in turns
+ * uses the PDO::ATTR_PERSISTENT option from de pdo driver.
+ */
+'dbpersistent' => '',
/**
* Indicates whether the Nextcloud instance was installed successfully; ``true``
diff --git a/core/Controller/ReferenceApiController.php b/core/Controller/ReferenceApiController.php
index b9706796460..266532113d8 100644
--- a/core/Controller/ReferenceApiController.php
+++ b/core/Controller/ReferenceApiController.php
@@ -61,7 +61,7 @@ class ReferenceApiController extends \OCP\AppFramework\OCSController {
* @NoAdminRequired
*/
public function resolveOne(string $reference): DataResponse {
- $resolvedReference = $this->referenceManager->resolveReference($reference);
+ $resolvedReference = $this->referenceManager->resolveReference(trim($reference));
$response = new DataResponse(['references' => [ $reference => $resolvedReference ]]);
$response->cacheFor(3600, false, true);
diff --git a/core/css/public.css b/core/css/public.css
index 3e8ca2bbb34..2ad3b80c52f 100644
--- a/core/css/public.css
+++ b/core/css/public.css
@@ -49,7 +49,7 @@
text-align: center;
}
#body-public footer {
- position: fixed;
+ position: sticky !important;
display: flex;
align-items: center;
justify-content: center;
diff --git a/core/css/public.scss b/core/css/public.scss
index 0e75a938cfa..514c3fbba70 100644
--- a/core/css/public.scss
+++ b/core/css/public.scss
@@ -69,7 +69,7 @@ $footer-height: 65px;
/* public footer */
footer {
- position: fixed;
+ position: sticky !important;
display: flex;
align-items: center;
justify-content: center;
diff --git a/core/css/server.css b/core/css/server.css
index da94d3e21eb..014897459dd 100644
--- a/core/css/server.css
+++ b/core/css/server.css
@@ -4998,7 +4998,7 @@ kbd {
text-align: center;
}
#body-public footer {
- position: fixed;
+ position: sticky !important;
display: flex;
align-items: center;
justify-content: center;
diff --git a/core/l10n/fr.js b/core/l10n/fr.js
index a9785354b8e..b9c84fc70c2 100644
--- a/core/l10n/fr.js
+++ b/core/l10n/fr.js
@@ -98,7 +98,7 @@ OC.L10N.register(
"The database is missing some optional columns. Due to the fact that adding columns on big tables could take some time they were not added automatically when they can be optional. By running \"occ db:add-missing-columns\" those missing columns could be added manually while the instance keeps running. Once the columns are added some features might improve responsiveness or usability." : "Certaines colonnes facultatives sont manquantes dans la base de données. Étant donné qu'ajouter des colonnes sur des grandes tables peut prendre du temps, elles n'ont pas été ajoutées automatiquement lorsqu'elles sont facultatives. En exécutant \"occ db:add-missing-columns\" ces colonnes manquantes peuvent être ajoutées manuellement alors que l'instance continue de fonctionner. Une fois que les colonnes sont ajoutées, la performance ou l'utilisabilité de certaines fonctionnalités pourraient être améliorées.",
"This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them." : "Cette instance ne dispose pas de plusieurs modules PHP recommandés. Il est recommandé de les installer pour améliorer les performances, et la compatibilité.",
"The PHP module \"imagick\" is not enabled although the theming app is. For favicon generation to work correctly, you need to install and enable this module." : "Le module PHP \"imagick\" n'est pas actif mais l'application Theming est activée. Pour que la génération du Favicon fonctionne correctement, ce module doit être installé et actif.",
- "The PHP modules \"gmp\" and/or \"bcmath\" are not enabled. If you use WebAuthn passwordless authentication, these modules are required." : "Les modules PHP \"gmp\" et/ou \"bcmatch\" ne sont pas actifs. Si vous utilisez l'authentification sans mot de passe WebAuthn, ces modules sont requis.",
+ "The PHP modules \"gmp\" and/or \"bcmath\" are not enabled. If you use WebAuthn passwordless authentication, these modules are required." : "Les modules PHP \"gmp\" et/ou \"bcmath\" ne sont pas actifs. Si vous utilisez l'authentification sans mot de passe WebAuthn, ces modules sont requis.",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Il semble que vous utilisez une version 32-bits de PHP. Nextcloud nécessite une version 64-bits pour bien fonctionner. Merci de mettre à niveau votre système d'exploitation et PHP en 64-bits. Pour plus de détails consultez {linkstart}the documentation page about this ↗{linkend}.",
"Module php-imagick in this instance has no SVG support. For better compatibility it is recommended to install it." : "Le module php-imagick n’a aucun support SVG dans cette instance. Pour une meilleure compatibilité, il est recommandé de l’installer.",
"Some columns in the database are missing a conversion to big int. Due to the fact that changing column types on big tables could take some time they were not changed automatically. By running \"occ db:convert-filecache-bigint\" those pending changes could be applied manually. This operation needs to be made while the instance is offline. For further details read {linkstart}the documentation page about this ↗{linkend}." : "Certaines colonnes de la base de données n'ont pas été converties en 'big int'. Changer le type de colonne dans de grandes tables peut prendre beaucoup de temps, elles n'ont donc pas été converties automatiquement. En exécutant la commande 'occ db:convert-filecache-bigint', ces changements en suspens peuvent être déclenchés manuellement. Cette opération doit être exécutée pendant que l'instance est hors ligne. Pour plus d'information, consulter {linkstart}la page de documentation à ce propos ↗{linkend}.",
diff --git a/core/l10n/fr.json b/core/l10n/fr.json
index 24278419c76..dcb1dc6944c 100644
--- a/core/l10n/fr.json
+++ b/core/l10n/fr.json
@@ -96,7 +96,7 @@
"The database is missing some optional columns. Due to the fact that adding columns on big tables could take some time they were not added automatically when they can be optional. By running \"occ db:add-missing-columns\" those missing columns could be added manually while the instance keeps running. Once the columns are added some features might improve responsiveness or usability." : "Certaines colonnes facultatives sont manquantes dans la base de données. Étant donné qu'ajouter des colonnes sur des grandes tables peut prendre du temps, elles n'ont pas été ajoutées automatiquement lorsqu'elles sont facultatives. En exécutant \"occ db:add-missing-columns\" ces colonnes manquantes peuvent être ajoutées manuellement alors que l'instance continue de fonctionner. Une fois que les colonnes sont ajoutées, la performance ou l'utilisabilité de certaines fonctionnalités pourraient être améliorées.",
"This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them." : "Cette instance ne dispose pas de plusieurs modules PHP recommandés. Il est recommandé de les installer pour améliorer les performances, et la compatibilité.",
"The PHP module \"imagick\" is not enabled although the theming app is. For favicon generation to work correctly, you need to install and enable this module." : "Le module PHP \"imagick\" n'est pas actif mais l'application Theming est activée. Pour que la génération du Favicon fonctionne correctement, ce module doit être installé et actif.",
- "The PHP modules \"gmp\" and/or \"bcmath\" are not enabled. If you use WebAuthn passwordless authentication, these modules are required." : "Les modules PHP \"gmp\" et/ou \"bcmatch\" ne sont pas actifs. Si vous utilisez l'authentification sans mot de passe WebAuthn, ces modules sont requis.",
+ "The PHP modules \"gmp\" and/or \"bcmath\" are not enabled. If you use WebAuthn passwordless authentication, these modules are required." : "Les modules PHP \"gmp\" et/ou \"bcmath\" ne sont pas actifs. Si vous utilisez l'authentification sans mot de passe WebAuthn, ces modules sont requis.",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read {linkstart}the documentation page about this ↗{linkend}." : "Il semble que vous utilisez une version 32-bits de PHP. Nextcloud nécessite une version 64-bits pour bien fonctionner. Merci de mettre à niveau votre système d'exploitation et PHP en 64-bits. Pour plus de détails consultez {linkstart}the documentation page about this ↗{linkend}.",
"Module php-imagick in this instance has no SVG support. For better compatibility it is recommended to install it." : "Le module php-imagick n’a aucun support SVG dans cette instance. Pour une meilleure compatibilité, il est recommandé de l’installer.",
"Some columns in the database are missing a conversion to big int. Due to the fact that changing column types on big tables could take some time they were not changed automatically. By running \"occ db:convert-filecache-bigint\" those pending changes could be applied manually. This operation needs to be made while the instance is offline. For further details read {linkstart}the documentation page about this ↗{linkend}." : "Certaines colonnes de la base de données n'ont pas été converties en 'big int'. Changer le type de colonne dans de grandes tables peut prendre beaucoup de temps, elles n'ont donc pas été converties automatiquement. En exécutant la commande 'occ db:convert-filecache-bigint', ces changements en suspens peuvent être déclenchés manuellement. Cette opération doit être exécutée pendant que l'instance est hors ligne. Pour plus d'information, consulter {linkstart}la page de documentation à ce propos ↗{linkend}.",
diff --git a/lib/l10n/zh_TW.js b/lib/l10n/zh_TW.js
index 57595b46556..d37d3ad1166 100644
--- a/lib/l10n/zh_TW.js
+++ b/lib/l10n/zh_TW.js
@@ -114,6 +114,10 @@ OC.L10N.register(
"Role" : "角色",
"Unknown user" : "未知的使用者",
"Additional settings" : "其他設定",
+ "Enter the database username and name for %s" : "輸入 %s 的資料庫名稱及使用者名稱",
+ "Enter the database username for %s" : "輸入 %s 的資料庫使用者暱稱",
+ "Enter the database name for %s" : "輸入 %s 的資料庫名稱",
+ "You cannot use dots in the database name %s" : "資料庫名稱 %s 不能包含小數點",
"MySQL username and/or password not valid" : "MySQL 使用者名稱或密碼不正確",
"You need to enter details of an existing account." : "您必須輸入現有帳號的資訊",
"Oracle connection could not be established" : "無法建立 Oracle 資料庫連線",
diff --git a/lib/l10n/zh_TW.json b/lib/l10n/zh_TW.json
index 20a8f86161b..9d2f50f9fa8 100644
--- a/lib/l10n/zh_TW.json
+++ b/lib/l10n/zh_TW.json
@@ -112,6 +112,10 @@
"Role" : "角色",
"Unknown user" : "未知的使用者",
"Additional settings" : "其他設定",
+ "Enter the database username and name for %s" : "輸入 %s 的資料庫名稱及使用者名稱",
+ "Enter the database username for %s" : "輸入 %s 的資料庫使用者暱稱",
+ "Enter the database name for %s" : "輸入 %s 的資料庫名稱",
+ "You cannot use dots in the database name %s" : "資料庫名稱 %s 不能包含小數點",
"MySQL username and/or password not valid" : "MySQL 使用者名稱或密碼不正確",
"You need to enter details of an existing account." : "您必須輸入現有帳號的資訊",
"Oracle connection could not be established" : "無法建立 Oracle 資料庫連線",
diff --git a/lib/private/Collaboration/Collaborators/MailPlugin.php b/lib/private/Collaboration/Collaborators/MailPlugin.php
index 8c2efce6f0d..d34d9fb0087 100644
--- a/lib/private/Collaboration/Collaborators/MailPlugin.php
+++ b/lib/private/Collaboration/Collaborators/MailPlugin.php
@@ -165,8 +165,8 @@ class MailPlugin implements ISearchPlugin {
if (!$this->isCurrentUser($cloud) && !$searchResult->hasResult($userType, $cloud->getUser())) {
$singleResult = [[
'label' => $displayName,
- 'uuid' => $contact['UID'],
- 'name' => $contact['FN'],
+ 'uuid' => $contact['UID'] ?? $emailAddress,
+ 'name' => $contact['FN'] ?? $displayName,
'value' => [
'shareType' => IShare::TYPE_USER,
'shareWith' => $cloud->getUser(),
@@ -205,8 +205,8 @@ class MailPlugin implements ISearchPlugin {
if ($addToWide && !$this->isCurrentUser($cloud) && !$searchResult->hasResult($userType, $cloud->getUser())) {
$userResults['wide'][] = [
'label' => $displayName,
- 'uuid' => $contact['UID'],
- 'name' => $contact['FN'],
+ 'uuid' => $contact['UID'] ?? $emailAddress,
+ 'name' => $contact['FN'] ?? $displayName,
'value' => [
'shareType' => IShare::TYPE_USER,
'shareWith' => $cloud->getUser(),
@@ -226,8 +226,8 @@ class MailPlugin implements ISearchPlugin {
}
$result['exact'][] = [
'label' => $displayName,
- 'uuid' => $contact['UID'],
- 'name' => $contact['FN'],
+ 'uuid' => $contact['UID'] ?? $emailAddress,
+ 'name' => $contact['FN'] ?? $displayName,
'type' => $emailAddressType ?? '',
'value' => [
'shareType' => IShare::TYPE_EMAIL,
@@ -237,8 +237,8 @@ class MailPlugin implements ISearchPlugin {
} else {
$result['wide'][] = [
'label' => $displayName,
- 'uuid' => $contact['UID'],
- 'name' => $contact['FN'],
+ 'uuid' => $contact['UID'] ?? $emailAddress,
+ 'name' => $contact['FN'] ?? $displayName,
'type' => $emailAddressType ?? '',
'value' => [
'shareType' => IShare::TYPE_EMAIL,
diff --git a/lib/private/DB/ConnectionFactory.php b/lib/private/DB/ConnectionFactory.php
index 95f3185bcdb..1b0ac436364 100644
--- a/lib/private/DB/ConnectionFactory.php
+++ b/lib/private/DB/ConnectionFactory.php
@@ -233,6 +233,10 @@ class ConnectionFactory {
];
}
+ if ($this->config->getValue('dbpersistent', false)) {
+ $connectionParams['persistent'] = true;
+ }
+
return $connectionParams;
}
diff --git a/lib/public/Calendar/ICalendar.php b/lib/public/Calendar/ICalendar.php
index 0d08e2ba268..f1f2d5eb6f1 100644
--- a/lib/public/Calendar/ICalendar.php
+++ b/lib/public/Calendar/ICalendar.php
@@ -37,7 +37,7 @@ interface ICalendar {
* @return string defining the technical unique key
* @since 13.0.0
*/
- public function getKey();
+ public function getKey(): string;
/**
* @since 24.0.0
@@ -49,30 +49,30 @@ interface ICalendar {
* @return null|string
* @since 13.0.0
*/
- public function getDisplayName();
+ public function getDisplayName(): ?string;
/**
* Calendar color
* @return null|string
* @since 13.0.0
*/
- public function getDisplayColor();
+ public function getDisplayColor(): ?string;
/**
* @param string $pattern which should match within the $searchProperties
* @param array $searchProperties defines the properties within the query pattern should match
* @param array $options - optional parameters:
* ['timerange' => ['start' => new DateTime(...), 'end' => new DateTime(...)]]
- * @param integer|null $limit - limit number of search results
- * @param integer|null $offset - offset for paging of search results
+ * @param int|null $limit - limit number of search results
+ * @param int|null $offset - offset for paging of search results
* @return array an array of events/journals/todos which are arrays of key-value-pairs
* @since 13.0.0
*/
- public function search($pattern, array $searchProperties = [], array $options = [], $limit = null, $offset = null);
+ public function search(string $pattern, array $searchProperties = [], array $options = [], ?int $limit = null, ?int $offset = null): array;
/**
- * @return integer build up using \OCP\Constants
+ * @return int build up using \OCP\Constants
* @since 13.0.0
*/
- public function getPermissions();
+ public function getPermissions(): int;
}