diff options
Diffstat (limited to 'apps')
162 files changed, 812 insertions, 272 deletions
diff --git a/apps/dashboard/l10n/es.js b/apps/dashboard/l10n/es.js index e8c266813f6..06a26af9975 100644 --- a/apps/dashboard/l10n/es.js +++ b/apps/dashboard/l10n/es.js @@ -19,8 +19,8 @@ OC.L10N.register( "Customize" : "Personalizar", "Edit widgets" : "Editar widgets", "Get more widgets from the App Store" : "Conseguir más widgets desde la tienda de Apps", - "Weather service" : "Servicio metereológico", - "For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Por privacidad, los datos meteorológicos son solicitados por tu servidor Nextcloud en tu nombre de tal forma que el servicio no recibe información personal.", + "Weather service" : "Servicio meteorológico", + "For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Para su privacidad, los datos meteorológicos son solicitados por su servidor Nextcloud en su nombre, de tal forma que el servicio no reciba información personal.", "Weather data from Met.no" : "Datos meteorológicos de Met.no", "geocoding with Nominatim" : "geocoding con Nominatim", "elevation data from OpenTopoData" : "datos de elevación de OpenTopoData" diff --git a/apps/dashboard/l10n/es.json b/apps/dashboard/l10n/es.json index 07776366228..3629d632d0e 100644 --- a/apps/dashboard/l10n/es.json +++ b/apps/dashboard/l10n/es.json @@ -17,8 +17,8 @@ "Customize" : "Personalizar", "Edit widgets" : "Editar widgets", "Get more widgets from the App Store" : "Conseguir más widgets desde la tienda de Apps", - "Weather service" : "Servicio metereológico", - "For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Por privacidad, los datos meteorológicos son solicitados por tu servidor Nextcloud en tu nombre de tal forma que el servicio no recibe información personal.", + "Weather service" : "Servicio meteorológico", + "For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Para su privacidad, los datos meteorológicos son solicitados por su servidor Nextcloud en su nombre, de tal forma que el servicio no reciba información personal.", "Weather data from Met.no" : "Datos meteorológicos de Met.no", "geocoding with Nominatim" : "geocoding con Nominatim", "elevation data from OpenTopoData" : "datos de elevación de OpenTopoData" diff --git a/apps/dav/l10n/pl.js b/apps/dav/l10n/pl.js index 3edcbb7447f..3c9929cc943 100644 --- a/apps/dav/l10n/pl.js +++ b/apps/dav/l10n/pl.js @@ -78,6 +78,11 @@ OC.L10N.register( "_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["Za jeden dzień, dnia %1$s, przez cały dzień","Za %n dni, dnia %1$s, przez cały dzień","Za %n dni, dnia %1$s, przez cały dzień","Za %n dni, dnia %1$s, przez cały dzień"], "_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Za tydzień, dnia %1$s, przez cały dzień","Za %n tygodnie, dnia %1$s, przez cały dzień","Za %n tygodni, dnia %1$s, przez cały dzień","Za %n tygodni, dnia %1$s, przez cały dzień"], "_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["W ciągu miesiąca, dnia %1$s przez cały dzień","W ciągu %n miesięcy, dnia %1$s przez cały dzień","W ciągu %n miesięcy, dnia %1$s przez cały dzień","W ciągu %n miesięcy, dnia %1$s przez cały dzień"], + "_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Za rok dnia %1$s przez cały dzień","Za %n lata dnia %1$s przez cały dzień","Za %n lat dnia %1$s przez cały dzień","Za %n lat dnia %1$s przez cały dzień"], + "_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["Za dzień, dnia %1$s między %2$s - %3$s","Za %n dni dnia %1$s między %2$s - %3$s","Za %n dni dnia %1$s między %2$s - %3$s","Za %n dni dnia %1$s między %2$s - %3$s"], + "_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["Za tydzień dnia %1$s między %2$s - %3$s","Za %n tygodnie dnia %1$s między %2$s - %3$s","Za %n tygodni dnia %1$s między %2$s - %3$s","Za %n tygodni dnia %1$s między %2$s - %3$s"], + "_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["Za miesiąc dnia %1$s między %2$s - %3$s","Za %n miesięcy dnia %1$s między %2$s - %3$s","Za %n miesięcy dnia %1$s między %2$s - %3$s","Za %n miesięcy dnia %1$s między %2$s - %3$s"], + "_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["Za rok dnia %1$s między %2$s - %3$s","Za %n lata dnia %1$s między %2$s - %3$s","Za %n lat dnia %1$s między %2$s - %3$s","Za %n lat dnia %1$s między %2$s - %3$s"], "Could not generate when statement" : "Nie można wygenerować instrukcji when", "Every Day for the entire day" : "Codziennie przez cały dzień", "Every Day for the entire day until %1$s" : "Codziennie przez cały dzień do %1$s", @@ -88,15 +93,21 @@ OC.L10N.register( "Every %1$d Days between %2$s - %3$s until %4$s" : "Co %1$d dni, pomiędzy %2$s - %3$s aż do %4$s", "Could not generate event recurrence statement" : "Nie można wygenerować zestawienia powtórzeń zdarzenia", "Every Week on %1$s for the entire day" : "Każdego tygodnia w %1$s przez cały dzień", + "Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Każdego %1$d miesiąca dnia %2$s między %3$s - %4$s do %5$s", + "Every Year in %1$s on the %2$s for the entire day" : "Co rok w %1$s dnia %2$s przez cały dzień", + "Every Year in %1$s on the %2$s for the entire day until %3$s" : "Co rok w %1$s dnia %2$s przez cały dzień do %3$s", + "Every Year in %1$s on the %2$s between %3$s - %4$s" : "Co roku za %1$s dnia %2$s między %3$s - %4$s", + "Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Co roku za %1$s dnia %2$s między %3$s - %4$s do %5$s", + "Every %1$d Years in %2$s on the %3$s for the entire day" : "Co %1$d lat dnia %2$s o %3$s przez cały dzień", "In the past on %1$s" : "W przeszłości dnia %1$s", - "_In a minute on %1$s_::_In %n minutes on %1$s_" : ["Za minutę dnia %2$s","Za %1$n minuty dnia %2$s","Za %1$n minut dnia %2$s","Za %1$n minut dnia %2$s"], - "_In a hour on %1$s_::_In %n hours on %1$s_" : ["Za godzinę dnia %2$s","Za %1$n godziny dnia %2$s","Za %1$n godzin dnia %2$s","Za %1$n godzin dnia %2$s"], - "_In a day on %1$s_::_In %n days on %1$s_" : ["Za dzień, dnia %2$s","Za %1$n dni dnia %2$s","Za %1$n dni dnia %2$s","Za %1$n dni dnia %2$s"], - "_In a week on %1$s_::_In %n weeks on %1$s_" : ["Za tydzień dnia %2$s","Za %1$n tygodnie dnia %2$s","Za %1$n tygodni dnia %2$s","Za %1$n tygodni dnia %2$s"], - "_In a month on %1$s_::_In %n months on %1$s_" : ["Za miesiąc dnia %2$s","W ciągu %1$n miesięcy dnia %2$s","W ciągu %1$n miesięcy dnia %2$s","W ciągu %1$n miesięcy dnia %2$s"], - "_In a year on %1$s_::_In %n years on %1$s_" : ["Za rok dnia %2$s","Za %1$n lata dnia %2$s","Za %1$n lat dnia %2$s","Za %1$n lat dnia %2$s"], + "_In a minute on %1$s_::_In %n minutes on %1$s_" : ["Za minutę dnia %1$s","Za %n minut dnia %1$s","Za %n minut dnia %1$s","Za %n minut dnia %1$s"], + "_In a hour on %1$s_::_In %n hours on %1$s_" : ["Za godzinę dnia %1$s","Za %n godziny dnia %1$s","Za %n godzin dnia %1$s","Za %n godzin dnia %1$s"], + "_In a day on %1$s_::_In %n days on %1$s_" : ["Za dzień, dnia %1$s","Za %n dni dnia %1$s","Za %n dni dnia %1$s","Za %n dni dnia %1$s"], + "_In a week on %1$s_::_In %n weeks on %1$s_" : ["Za tydzień dnia %1$s","Za %n tygodnie dnia %1$s","Za %n tygodni dnia %1$s","Za %n tygodni dnia %1$s"], + "_In a month on %1$s_::_In %n months on %1$s_" : ["Za miesiąc dnia %1$s","W ciągu %n miesięcy dnia %1$s","W ciągu %n miesięcy dnia %1$s","W ciągu %n miesięcy dnia %1$s"], + "_In a year on %1$s_::_In %n years on %1$s_" : ["Za rok dnia %1$s","Za %n lat dnia %1$s","Za %n lat dnia %1$s","Za %n lat dnia %1$s"], "In the past on %1$s then on %2$s" : "W przeszłości dnia %1$s, a następnie %2$s", - "_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Za minutę dnia %2$s, a następnie %3$s","Za %1$n minuty dnia %2$s, a następnie %3$s","Za %1$n minut dnia %2$s, a następnie %3$s","Za %1$n minut dnia %2$s, a następnie %3$s"], + "_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Za minutę dnia %1$s, a następnie %2$s","Za %n minuty dnia %1$s, a następnie %2$s","Za %n minut dnia %1$s, a następnie %2$s","Za %n minut dnia %1$s, a następnie %2$s"], "Could not generate next recurrence statement" : "Nie można wygenerować następnej instrukcji powtarzania", "Cancelled: %1$s" : "Anulowane: %1$s", "\"%1$s\" has been canceled" : "\"%1$s\" zostało anulowane", diff --git a/apps/dav/l10n/pl.json b/apps/dav/l10n/pl.json index 8a35719cf92..4b2ffc40dc0 100644 --- a/apps/dav/l10n/pl.json +++ b/apps/dav/l10n/pl.json @@ -76,6 +76,11 @@ "_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["Za jeden dzień, dnia %1$s, przez cały dzień","Za %n dni, dnia %1$s, przez cały dzień","Za %n dni, dnia %1$s, przez cały dzień","Za %n dni, dnia %1$s, przez cały dzień"], "_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Za tydzień, dnia %1$s, przez cały dzień","Za %n tygodnie, dnia %1$s, przez cały dzień","Za %n tygodni, dnia %1$s, przez cały dzień","Za %n tygodni, dnia %1$s, przez cały dzień"], "_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["W ciągu miesiąca, dnia %1$s przez cały dzień","W ciągu %n miesięcy, dnia %1$s przez cały dzień","W ciągu %n miesięcy, dnia %1$s przez cały dzień","W ciągu %n miesięcy, dnia %1$s przez cały dzień"], + "_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Za rok dnia %1$s przez cały dzień","Za %n lata dnia %1$s przez cały dzień","Za %n lat dnia %1$s przez cały dzień","Za %n lat dnia %1$s przez cały dzień"], + "_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["Za dzień, dnia %1$s między %2$s - %3$s","Za %n dni dnia %1$s między %2$s - %3$s","Za %n dni dnia %1$s między %2$s - %3$s","Za %n dni dnia %1$s między %2$s - %3$s"], + "_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["Za tydzień dnia %1$s między %2$s - %3$s","Za %n tygodnie dnia %1$s między %2$s - %3$s","Za %n tygodni dnia %1$s między %2$s - %3$s","Za %n tygodni dnia %1$s między %2$s - %3$s"], + "_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["Za miesiąc dnia %1$s między %2$s - %3$s","Za %n miesięcy dnia %1$s między %2$s - %3$s","Za %n miesięcy dnia %1$s między %2$s - %3$s","Za %n miesięcy dnia %1$s między %2$s - %3$s"], + "_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["Za rok dnia %1$s między %2$s - %3$s","Za %n lata dnia %1$s między %2$s - %3$s","Za %n lat dnia %1$s między %2$s - %3$s","Za %n lat dnia %1$s między %2$s - %3$s"], "Could not generate when statement" : "Nie można wygenerować instrukcji when", "Every Day for the entire day" : "Codziennie przez cały dzień", "Every Day for the entire day until %1$s" : "Codziennie przez cały dzień do %1$s", @@ -86,15 +91,21 @@ "Every %1$d Days between %2$s - %3$s until %4$s" : "Co %1$d dni, pomiędzy %2$s - %3$s aż do %4$s", "Could not generate event recurrence statement" : "Nie można wygenerować zestawienia powtórzeń zdarzenia", "Every Week on %1$s for the entire day" : "Każdego tygodnia w %1$s przez cały dzień", + "Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Każdego %1$d miesiąca dnia %2$s między %3$s - %4$s do %5$s", + "Every Year in %1$s on the %2$s for the entire day" : "Co rok w %1$s dnia %2$s przez cały dzień", + "Every Year in %1$s on the %2$s for the entire day until %3$s" : "Co rok w %1$s dnia %2$s przez cały dzień do %3$s", + "Every Year in %1$s on the %2$s between %3$s - %4$s" : "Co roku za %1$s dnia %2$s między %3$s - %4$s", + "Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Co roku za %1$s dnia %2$s między %3$s - %4$s do %5$s", + "Every %1$d Years in %2$s on the %3$s for the entire day" : "Co %1$d lat dnia %2$s o %3$s przez cały dzień", "In the past on %1$s" : "W przeszłości dnia %1$s", - "_In a minute on %1$s_::_In %n minutes on %1$s_" : ["Za minutę dnia %2$s","Za %1$n minuty dnia %2$s","Za %1$n minut dnia %2$s","Za %1$n minut dnia %2$s"], - "_In a hour on %1$s_::_In %n hours on %1$s_" : ["Za godzinę dnia %2$s","Za %1$n godziny dnia %2$s","Za %1$n godzin dnia %2$s","Za %1$n godzin dnia %2$s"], - "_In a day on %1$s_::_In %n days on %1$s_" : ["Za dzień, dnia %2$s","Za %1$n dni dnia %2$s","Za %1$n dni dnia %2$s","Za %1$n dni dnia %2$s"], - "_In a week on %1$s_::_In %n weeks on %1$s_" : ["Za tydzień dnia %2$s","Za %1$n tygodnie dnia %2$s","Za %1$n tygodni dnia %2$s","Za %1$n tygodni dnia %2$s"], - "_In a month on %1$s_::_In %n months on %1$s_" : ["Za miesiąc dnia %2$s","W ciągu %1$n miesięcy dnia %2$s","W ciągu %1$n miesięcy dnia %2$s","W ciągu %1$n miesięcy dnia %2$s"], - "_In a year on %1$s_::_In %n years on %1$s_" : ["Za rok dnia %2$s","Za %1$n lata dnia %2$s","Za %1$n lat dnia %2$s","Za %1$n lat dnia %2$s"], + "_In a minute on %1$s_::_In %n minutes on %1$s_" : ["Za minutę dnia %1$s","Za %n minut dnia %1$s","Za %n minut dnia %1$s","Za %n minut dnia %1$s"], + "_In a hour on %1$s_::_In %n hours on %1$s_" : ["Za godzinę dnia %1$s","Za %n godziny dnia %1$s","Za %n godzin dnia %1$s","Za %n godzin dnia %1$s"], + "_In a day on %1$s_::_In %n days on %1$s_" : ["Za dzień, dnia %1$s","Za %n dni dnia %1$s","Za %n dni dnia %1$s","Za %n dni dnia %1$s"], + "_In a week on %1$s_::_In %n weeks on %1$s_" : ["Za tydzień dnia %1$s","Za %n tygodnie dnia %1$s","Za %n tygodni dnia %1$s","Za %n tygodni dnia %1$s"], + "_In a month on %1$s_::_In %n months on %1$s_" : ["Za miesiąc dnia %1$s","W ciągu %n miesięcy dnia %1$s","W ciągu %n miesięcy dnia %1$s","W ciągu %n miesięcy dnia %1$s"], + "_In a year on %1$s_::_In %n years on %1$s_" : ["Za rok dnia %1$s","Za %n lat dnia %1$s","Za %n lat dnia %1$s","Za %n lat dnia %1$s"], "In the past on %1$s then on %2$s" : "W przeszłości dnia %1$s, a następnie %2$s", - "_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Za minutę dnia %2$s, a następnie %3$s","Za %1$n minuty dnia %2$s, a następnie %3$s","Za %1$n minut dnia %2$s, a następnie %3$s","Za %1$n minut dnia %2$s, a następnie %3$s"], + "_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Za minutę dnia %1$s, a następnie %2$s","Za %n minuty dnia %1$s, a następnie %2$s","Za %n minut dnia %1$s, a następnie %2$s","Za %n minut dnia %1$s, a następnie %2$s"], "Could not generate next recurrence statement" : "Nie można wygenerować następnej instrukcji powtarzania", "Cancelled: %1$s" : "Anulowane: %1$s", "\"%1$s\" has been canceled" : "\"%1$s\" zostało anulowane", diff --git a/apps/dav/lib/CalDAV/UpcomingEventsService.php b/apps/dav/lib/CalDAV/UpcomingEventsService.php index 6614d937ff7..1a8aed5bd71 100644 --- a/apps/dav/lib/CalDAV/UpcomingEventsService.php +++ b/apps/dav/lib/CalDAV/UpcomingEventsService.php @@ -47,7 +47,7 @@ class UpcomingEventsService { $this->userManager->get($userId), ); - return array_map(function (array $event) use ($userId, $calendarAppEnabled) { + return array_filter(array_map(function (array $event) use ($userId, $calendarAppEnabled) { $calendarAppUrl = null; if ($calendarAppEnabled) { @@ -67,6 +67,10 @@ class UpcomingEventsService { $calendarAppUrl = $this->urlGenerator->linkToRouteAbsolute('calendar.view.indexdirect.edit', $arguments); } + if (isset($event['objects'][0]['STATUS']) && $event['objects'][0]['STATUS'][0] === 'CANCELLED') { + return false; + } + return new UpcomingEvent( $event['uri'], ($event['objects'][0]['RECURRENCE-ID'][0] ?? null)?->getTimeStamp(), @@ -76,7 +80,7 @@ class UpcomingEventsService { $event['objects'][0]['LOCATION'][0] ?? null, $calendarAppUrl, ); - }, $events); + }, $events)); } } diff --git a/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php b/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php index 9e625ce3184..b59d1373af5 100644 --- a/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php +++ b/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php @@ -156,7 +156,7 @@ class FilesReportPlugin extends ServerPlugin { // to user backends. I.e. the final result may return more results than requested. $resultNodes = $this->processFilterRulesForFileNodes($filterRules, $limit ?? null, $offset ?? null); } catch (TagNotFoundException $e) { - throw new PreconditionFailed('Cannot filter by non-existing tag', 0, $e); + throw new PreconditionFailed('Cannot filter by non-existing tag'); } $results = []; diff --git a/apps/dav/lib/Connector/Sabre/ServerFactory.php b/apps/dav/lib/Connector/Sabre/ServerFactory.php index 214412e1744..3749b506d16 100644 --- a/apps/dav/lib/Connector/Sabre/ServerFactory.php +++ b/apps/dav/lib/Connector/Sabre/ServerFactory.php @@ -184,7 +184,7 @@ class ServerFactory { !$this->config->getSystemValue('debug', false) ) ); - $server->addPlugin(new QuotaPlugin($view, true)); + $server->addPlugin(new QuotaPlugin($view)); $server->addPlugin(new ChecksumUpdatePlugin()); // Allow view-only plugin for webdav requests diff --git a/apps/encryption/lib/Session.php b/apps/encryption/lib/Session.php index e2731d9611d..df1e5d664ad 100644 --- a/apps/encryption/lib/Session.php +++ b/apps/encryption/lib/Session.php @@ -66,7 +66,7 @@ class Session { public function getPrivateKey() { $key = $this->session->get('privateKey'); if (is_null($key)) { - throw new PrivateKeyMissingException('please try to log-out and log-in again', 0); + throw new PrivateKeyMissingException('please try to log-out and log-in again'); } return $key; } diff --git a/apps/federatedfilesharing/lib/FederatedShareProvider.php b/apps/federatedfilesharing/lib/FederatedShareProvider.php index e3731ac3ecf..8a2c12e0ac8 100644 --- a/apps/federatedfilesharing/lib/FederatedShareProvider.php +++ b/apps/federatedfilesharing/lib/FederatedShareProvider.php @@ -431,13 +431,7 @@ class FederatedShareProvider implements IShareProvider, IShareProviderSupportsAl return $share; } - /** - * Get all children of this share - * - * @param IShare $parent - * @return IShare[] - */ - public function getChildren(IShare $parent) { + public function getChildren(IShare $parent): array { $children = []; $qb = $this->dbConnection->getQueryBuilder(); diff --git a/apps/federatedfilesharing/tests/AddressHandlerTest.php b/apps/federatedfilesharing/tests/AddressHandlerTest.php index 9b67e3e1848..279bf485145 100644 --- a/apps/federatedfilesharing/tests/AddressHandlerTest.php +++ b/apps/federatedfilesharing/tests/AddressHandlerTest.php @@ -34,11 +34,11 @@ class AddressHandlerTest extends \Test\TestCase { $this->contactsManager = $this->createMock(IManager::class); $this->cloudIdManager = new CloudIdManager( + $this->createMock(ICacheFactory::class), + $this->createMock(IEventDispatcher::class), $this->contactsManager, $this->urlGenerator, $this->createMock(IUserManager::class), - $this->createMock(ICacheFactory::class), - $this->createMock(IEventDispatcher::class) ); $this->addressHandler = new AddressHandler($this->urlGenerator, $this->il10n, $this->cloudIdManager); diff --git a/apps/federatedfilesharing/tests/Controller/MountPublicLinkControllerTest.php b/apps/federatedfilesharing/tests/Controller/MountPublicLinkControllerTest.php index cb890417d0b..e99b59e82b8 100644 --- a/apps/federatedfilesharing/tests/Controller/MountPublicLinkControllerTest.php +++ b/apps/federatedfilesharing/tests/Controller/MountPublicLinkControllerTest.php @@ -64,11 +64,11 @@ class MountPublicLinkControllerTest extends \Test\TestCase { $this->clientService = $this->createMock(IClientService::class); $this->contactsManager = $this->createMock(IContactsManager::class); $this->cloudIdManager = new CloudIdManager( + $this->createMock(ICacheFactory::class), + $this->createMock(IEventDispatcher::class), $this->contactsManager, $this->createMock(IURLGenerator::class), $this->userManager, - $this->createMock(ICacheFactory::class), - $this->createMock(IEventDispatcher::class) ); $this->controller = new MountPublicLinkController( diff --git a/apps/federatedfilesharing/tests/FederatedShareProviderTest.php b/apps/federatedfilesharing/tests/FederatedShareProviderTest.php index 4d6add962fe..7e97510af22 100644 --- a/apps/federatedfilesharing/tests/FederatedShareProviderTest.php +++ b/apps/federatedfilesharing/tests/FederatedShareProviderTest.php @@ -74,11 +74,11 @@ class FederatedShareProviderTest extends \Test\TestCase { $this->addressHandler = $this->createMock(AddressHandler::class); $this->contactsManager = $this->createMock(IContactsManager::class); $this->cloudIdManager = new CloudIdManager( + $this->createMock(ICacheFactory::class), + $this->createMock(IEventDispatcher::class), $this->contactsManager, $this->createMock(IURLGenerator::class), $this->userManager, - $this->createMock(ICacheFactory::class), - $this->createMock(IEventDispatcher::class) ); $this->gsConfig = $this->createMock(\OCP\GlobalScale\IConfig::class); diff --git a/apps/federation/l10n/es.js b/apps/federation/l10n/es.js index 35faca370f3..83e1acb38f8 100644 --- a/apps/federation/l10n/es.js +++ b/apps/federation/l10n/es.js @@ -11,9 +11,9 @@ OC.L10N.register( "Federation" : "Federación", "Federation allows you to connect with other trusted servers to exchange the account directory." : "La federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios.", "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "La Federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se utilizará para auto-completar a los usuarios externos para el intercambio federado.", - "External documentation for Federated Cloud Sharing" : "Documentación externa sobre Compartir con Nube Federada", + "External documentation for Federated Cloud Sharing" : "Documentación externa para Compartir con Nube Federada", "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La Federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se utilizará para auto-completar a los usuarios externos para el intercambio federado. No es necesario añadir un servidor como servidor de confianza para crear una recurso compartido federado.", - "Each server must validate the other. This process may require a few cron cycles." : "Cada servidor debe validar al otro. Este proceso puede necesitar varios ciclos de cron.", + "Each server must validate the other. This process may require a few cron cycles." : "Cada servidor debe validar al otro. Este proceso puede necesitar algunos ciclos de cron.", "+ Add trusted server" : "+ Añadir servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Añadir" diff --git a/apps/federation/l10n/es.json b/apps/federation/l10n/es.json index f5aea9ed58b..3c07677f806 100644 --- a/apps/federation/l10n/es.json +++ b/apps/federation/l10n/es.json @@ -9,9 +9,9 @@ "Federation" : "Federación", "Federation allows you to connect with other trusted servers to exchange the account directory." : "La federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios.", "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing." : "La Federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se utilizará para auto-completar a los usuarios externos para el intercambio federado.", - "External documentation for Federated Cloud Sharing" : "Documentación externa sobre Compartir con Nube Federada", + "External documentation for Federated Cloud Sharing" : "Documentación externa para Compartir con Nube Federada", "Federation allows you to connect with other trusted servers to exchange the account directory. For example this will be used to auto-complete external accounts for federated sharing. It is not necessary to add a server as trusted server in order to create a federated share." : "La Federación le permite conectarse con otros servidores de confianza para intercambiar el directorio de usuarios. Por ejemplo, esto se utilizará para auto-completar a los usuarios externos para el intercambio federado. No es necesario añadir un servidor como servidor de confianza para crear una recurso compartido federado.", - "Each server must validate the other. This process may require a few cron cycles." : "Cada servidor debe validar al otro. Este proceso puede necesitar varios ciclos de cron.", + "Each server must validate the other. This process may require a few cron cycles." : "Cada servidor debe validar al otro. Este proceso puede necesitar algunos ciclos de cron.", "+ Add trusted server" : "+ Añadir servidor de confianza", "Trusted server" : "Servidor de confianza", "Add" : "Añadir" diff --git a/apps/files/l10n/ar.js b/apps/files/l10n/ar.js index e0a8772785d..2dc128b293a 100644 --- a/apps/files/l10n/ar.js +++ b/apps/files/l10n/ar.js @@ -189,10 +189,10 @@ OC.L10N.register( "Personal files" : "ملفات شخصية", "Sort favorites first" : "فرز المفضلة أولا", "Sort folders before files" : "فرز المجلدات قبل الملفات", + "Enable folder tree" : "تمكين شجرة المجلدات", "Show hidden files" : "عرض الملفات المخفية", "Show file type column" : "عرض عمود نوع الملف", "Crop image previews" : "اقتصاص صورة العروض", - "Enable folder tree" : "تمكين شجرة المجلدات", "Additional settings" : "الإعدادات المتقدمة", "WebDAV" : "WebDAV", "WebDAV URL" : "عنوان URL لـ WebDAV", diff --git a/apps/files/l10n/ar.json b/apps/files/l10n/ar.json index 998beb44656..5cc3eaf082f 100644 --- a/apps/files/l10n/ar.json +++ b/apps/files/l10n/ar.json @@ -187,10 +187,10 @@ "Personal files" : "ملفات شخصية", "Sort favorites first" : "فرز المفضلة أولا", "Sort folders before files" : "فرز المجلدات قبل الملفات", + "Enable folder tree" : "تمكين شجرة المجلدات", "Show hidden files" : "عرض الملفات المخفية", "Show file type column" : "عرض عمود نوع الملف", "Crop image previews" : "اقتصاص صورة العروض", - "Enable folder tree" : "تمكين شجرة المجلدات", "Additional settings" : "الإعدادات المتقدمة", "WebDAV" : "WebDAV", "WebDAV URL" : "عنوان URL لـ WebDAV", diff --git a/apps/files/l10n/be.js b/apps/files/l10n/be.js index 724afef3781..ecb1653e560 100644 --- a/apps/files/l10n/be.js +++ b/apps/files/l10n/be.js @@ -100,6 +100,7 @@ OC.L10N.register( "WebDAV URL copied to clipboard" : "URL-адрас WebDAV скапіяваны ў буфер абмену", "All files" : "Усе файлы", "Personal files" : "Асабістыя файлы", + "Show files extensions" : "Паказваць пашырэнні файлаў", "WebDAV" : "WebDAV", "WebDAV URL" : "URL-адрас WebDAV", "Copy to clipboard" : "Капіяваць у буфер абмену", diff --git a/apps/files/l10n/be.json b/apps/files/l10n/be.json index 9f7fcbb4b4c..0f08320db21 100644 --- a/apps/files/l10n/be.json +++ b/apps/files/l10n/be.json @@ -98,6 +98,7 @@ "WebDAV URL copied to clipboard" : "URL-адрас WebDAV скапіяваны ў буфер абмену", "All files" : "Усе файлы", "Personal files" : "Асабістыя файлы", + "Show files extensions" : "Паказваць пашырэнні файлаў", "WebDAV" : "WebDAV", "WebDAV URL" : "URL-адрас WebDAV", "Copy to clipboard" : "Капіяваць у буфер абмену", diff --git a/apps/files/l10n/ca.js b/apps/files/l10n/ca.js index fd082302975..9c4bdf01e35 100644 --- a/apps/files/l10n/ca.js +++ b/apps/files/l10n/ca.js @@ -184,9 +184,9 @@ OC.L10N.register( "Personal files" : "Fitxers personals", "Sort favorites first" : "Ordena primer els preferits", "Sort folders before files" : "Ordena les carpetes abans dels fitxers", + "Enable folder tree" : "Habilita l'arbre de carpetes", "Show hidden files" : "Mostra els fitxers ocults", "Crop image previews" : "Retalla les previsualitzacions de les imatges", - "Enable folder tree" : "Habilita l'arbre de carpetes", "Additional settings" : "Paràmetres addicionals", "WebDAV" : "WebDAV", "WebDAV URL" : "URL de WebDAV", diff --git a/apps/files/l10n/ca.json b/apps/files/l10n/ca.json index b939f7885f4..a82a75344ed 100644 --- a/apps/files/l10n/ca.json +++ b/apps/files/l10n/ca.json @@ -182,9 +182,9 @@ "Personal files" : "Fitxers personals", "Sort favorites first" : "Ordena primer els preferits", "Sort folders before files" : "Ordena les carpetes abans dels fitxers", + "Enable folder tree" : "Habilita l'arbre de carpetes", "Show hidden files" : "Mostra els fitxers ocults", "Crop image previews" : "Retalla les previsualitzacions de les imatges", - "Enable folder tree" : "Habilita l'arbre de carpetes", "Additional settings" : "Paràmetres addicionals", "WebDAV" : "WebDAV", "WebDAV URL" : "URL de WebDAV", diff --git a/apps/files/l10n/cs.js b/apps/files/l10n/cs.js index 885f07457fb..0fdf7d0ce12 100644 --- a/apps/files/l10n/cs.js +++ b/apps/files/l10n/cs.js @@ -201,10 +201,10 @@ OC.L10N.register( "Personal files" : "Osobní soubory", "Sort favorites first" : "Seřadit od oblíbených", "Sort folders before files" : "Při řazení zobrazovat složky a pak až soubory", + "Enable folder tree" : "Zapnout strom složek", "Show hidden files" : "Zobrazit skryté soubory", "Show file type column" : "Zobrazovat sloupec Typ souboru", "Crop image previews" : "Oříznout náhledy obrázků", - "Enable folder tree" : "Zapnout strom složek", "Additional settings" : "Další nastavení", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/cs.json b/apps/files/l10n/cs.json index bc3302d9a74..10b1bae0e2b 100644 --- a/apps/files/l10n/cs.json +++ b/apps/files/l10n/cs.json @@ -199,10 +199,10 @@ "Personal files" : "Osobní soubory", "Sort favorites first" : "Seřadit od oblíbených", "Sort folders before files" : "Při řazení zobrazovat složky a pak až soubory", + "Enable folder tree" : "Zapnout strom složek", "Show hidden files" : "Zobrazit skryté soubory", "Show file type column" : "Zobrazovat sloupec Typ souboru", "Crop image previews" : "Oříznout náhledy obrázků", - "Enable folder tree" : "Zapnout strom složek", "Additional settings" : "Další nastavení", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/da.js b/apps/files/l10n/da.js index 66f57c2eb9b..8ca94ca8edf 100644 --- a/apps/files/l10n/da.js +++ b/apps/files/l10n/da.js @@ -184,9 +184,9 @@ OC.L10N.register( "Personal files" : "Personlige filer", "Sort favorites first" : "Vis favoritter først", "Sort folders before files" : "Sorter mapper før filer", + "Enable folder tree" : "Aktiver mappetræ", "Show hidden files" : "Vis skjulte filer", "Crop image previews" : "Beskær forhåndsvisninger af billeder", - "Enable folder tree" : "Aktiver mappetræ", "Additional settings" : "Yderligere indstillinger", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/da.json b/apps/files/l10n/da.json index 2b78a72ee5f..0c6588ba055 100644 --- a/apps/files/l10n/da.json +++ b/apps/files/l10n/da.json @@ -182,9 +182,9 @@ "Personal files" : "Personlige filer", "Sort favorites first" : "Vis favoritter først", "Sort folders before files" : "Sorter mapper før filer", + "Enable folder tree" : "Aktiver mappetræ", "Show hidden files" : "Vis skjulte filer", "Crop image previews" : "Beskær forhåndsvisninger af billeder", - "Enable folder tree" : "Aktiver mappetræ", "Additional settings" : "Yderligere indstillinger", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js index ee8e63f4ea1..e215a0fc3b1 100644 --- a/apps/files/l10n/de.js +++ b/apps/files/l10n/de.js @@ -201,10 +201,12 @@ OC.L10N.register( "Personal files" : "Persönliche Dateien", "Sort favorites first" : "Favoriten zuerst sortieren", "Sort folders before files" : "Ordner vor Dateien sortieren", + "Enable folder tree" : "Ordnerstruktur aktivieren", + "Visual settings" : "Anzeigeeinstellungen", "Show hidden files" : "Versteckte Dateien anzeigen", "Show file type column" : "Dateityp-Spalte anzeigen", "Crop image previews" : "Bildvorschauen zuschneiden", - "Enable folder tree" : "Ordnerstruktur aktivieren", + "Show files extensions" : "Dateierweiterungen anzeigen", "Additional settings" : "Zusätzliche Einstellungen", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV-URL", diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json index fb1de7ae7ee..c8001b76dd1 100644 --- a/apps/files/l10n/de.json +++ b/apps/files/l10n/de.json @@ -199,10 +199,12 @@ "Personal files" : "Persönliche Dateien", "Sort favorites first" : "Favoriten zuerst sortieren", "Sort folders before files" : "Ordner vor Dateien sortieren", + "Enable folder tree" : "Ordnerstruktur aktivieren", + "Visual settings" : "Anzeigeeinstellungen", "Show hidden files" : "Versteckte Dateien anzeigen", "Show file type column" : "Dateityp-Spalte anzeigen", "Crop image previews" : "Bildvorschauen zuschneiden", - "Enable folder tree" : "Ordnerstruktur aktivieren", + "Show files extensions" : "Dateierweiterungen anzeigen", "Additional settings" : "Zusätzliche Einstellungen", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV-URL", diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js index 8d1f54d2a91..293bc9121c8 100644 --- a/apps/files/l10n/de_DE.js +++ b/apps/files/l10n/de_DE.js @@ -201,10 +201,12 @@ OC.L10N.register( "Personal files" : "Persönliche Dateien", "Sort favorites first" : "Favoriten zuerst sortieren", "Sort folders before files" : "Ordner vor Dateien sortieren", + "Enable folder tree" : "Ordnerstruktur aktivieren", + "Visual settings" : "Anzeigeeinstellungen", "Show hidden files" : "Versteckte Dateien anzeigen", "Show file type column" : "Dateityp-Spalte anzeigen", "Crop image previews" : "Bildvorschauen zuschneiden", - "Enable folder tree" : "Ordnerstruktur aktivieren", + "Show files extensions" : "Dateierweiterungen anzeigen", "Additional settings" : "Zusätzliche Einstellungen", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV-URL", diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json index 7af1d9b684e..5d487a11127 100644 --- a/apps/files/l10n/de_DE.json +++ b/apps/files/l10n/de_DE.json @@ -199,10 +199,12 @@ "Personal files" : "Persönliche Dateien", "Sort favorites first" : "Favoriten zuerst sortieren", "Sort folders before files" : "Ordner vor Dateien sortieren", + "Enable folder tree" : "Ordnerstruktur aktivieren", + "Visual settings" : "Anzeigeeinstellungen", "Show hidden files" : "Versteckte Dateien anzeigen", "Show file type column" : "Dateityp-Spalte anzeigen", "Crop image previews" : "Bildvorschauen zuschneiden", - "Enable folder tree" : "Ordnerstruktur aktivieren", + "Show files extensions" : "Dateierweiterungen anzeigen", "Additional settings" : "Zusätzliche Einstellungen", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV-URL", diff --git a/apps/files/l10n/en_GB.js b/apps/files/l10n/en_GB.js index 7a153836de8..52a3e47e262 100644 --- a/apps/files/l10n/en_GB.js +++ b/apps/files/l10n/en_GB.js @@ -201,10 +201,10 @@ OC.L10N.register( "Personal files" : "Personal files", "Sort favorites first" : "Sort favourites first", "Sort folders before files" : "Sort folders before files", + "Enable folder tree" : "Enable folder tree", "Show hidden files" : "Show hidden files", "Show file type column" : "Show file type column", "Crop image previews" : "Crop image previews", - "Enable folder tree" : "Enable folder tree", "Additional settings" : "Additional settings", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json index 1712d5476f0..5bb5f095240 100644 --- a/apps/files/l10n/en_GB.json +++ b/apps/files/l10n/en_GB.json @@ -199,10 +199,10 @@ "Personal files" : "Personal files", "Sort favorites first" : "Sort favourites first", "Sort folders before files" : "Sort folders before files", + "Enable folder tree" : "Enable folder tree", "Show hidden files" : "Show hidden files", "Show file type column" : "Show file type column", "Crop image previews" : "Crop image previews", - "Enable folder tree" : "Enable folder tree", "Additional settings" : "Additional settings", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js index 7803b55ed56..eb7bd9723cc 100644 --- a/apps/files/l10n/es.js +++ b/apps/files/l10n/es.js @@ -199,10 +199,10 @@ OC.L10N.register( "Personal files" : "Archivos personales", "Sort favorites first" : "Ordenar los favoritos primero", "Sort folders before files" : "Ordenar carpetas antes que archivos", + "Enable folder tree" : "Habilitar el árbol de carpetas", "Show hidden files" : "Mostrar archivos ocultos", "Show file type column" : "Mostrar la columna de tipo de archivo", "Crop image previews" : "Recortar la previsualización de las imágenes", - "Enable folder tree" : "Habilitar el árbol de carpetas", "Additional settings" : "Ajustes adicionales", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json index f8208ae14fe..4e639341be7 100644 --- a/apps/files/l10n/es.json +++ b/apps/files/l10n/es.json @@ -197,10 +197,10 @@ "Personal files" : "Archivos personales", "Sort favorites first" : "Ordenar los favoritos primero", "Sort folders before files" : "Ordenar carpetas antes que archivos", + "Enable folder tree" : "Habilitar el árbol de carpetas", "Show hidden files" : "Mostrar archivos ocultos", "Show file type column" : "Mostrar la columna de tipo de archivo", "Crop image previews" : "Recortar la previsualización de las imágenes", - "Enable folder tree" : "Habilitar el árbol de carpetas", "Additional settings" : "Ajustes adicionales", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/es_MX.js b/apps/files/l10n/es_MX.js index 1249d0da979..9155789cad9 100644 --- a/apps/files/l10n/es_MX.js +++ b/apps/files/l10n/es_MX.js @@ -168,9 +168,9 @@ OC.L10N.register( "Personal files" : "Archivos personales", "Sort favorites first" : "Ordenar los favoritos primero", "Sort folders before files" : "Ordenar carpetas antes que archivos", + "Enable folder tree" : "Habilitar el árbol de carpetas", "Show hidden files" : "Mostrar archivos ocultos", "Crop image previews" : "Recortar la previsualización de las imágenes", - "Enable folder tree" : "Habilitar el árbol de carpetas", "Additional settings" : "Configuraciones adicionales", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/es_MX.json b/apps/files/l10n/es_MX.json index ee67b370f05..e43aa6e8e16 100644 --- a/apps/files/l10n/es_MX.json +++ b/apps/files/l10n/es_MX.json @@ -166,9 +166,9 @@ "Personal files" : "Archivos personales", "Sort favorites first" : "Ordenar los favoritos primero", "Sort folders before files" : "Ordenar carpetas antes que archivos", + "Enable folder tree" : "Habilitar el árbol de carpetas", "Show hidden files" : "Mostrar archivos ocultos", "Crop image previews" : "Recortar la previsualización de las imágenes", - "Enable folder tree" : "Habilitar el árbol de carpetas", "Additional settings" : "Configuraciones adicionales", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/et_EE.js b/apps/files/l10n/et_EE.js index 130fb7abb12..b08513128a6 100644 --- a/apps/files/l10n/et_EE.js +++ b/apps/files/l10n/et_EE.js @@ -201,10 +201,12 @@ OC.L10N.register( "Personal files" : "Isiklikud failid", "Sort favorites first" : "Järjesta lemmikud esimesena", "Sort folders before files" : "Järjesta kaustad enne faile", + "Enable folder tree" : "Võta kasutusele kaustapuu", + "Visual settings" : "Visuaalsed seadistused", "Show hidden files" : "Näita peidetud faile", "Show file type column" : "Näita failitüübi veergu", "Crop image previews" : "Kadreeri piltide eelvaated", - "Enable folder tree" : "Võta kasutusele kaustapuu", + "Show files extensions" : "Näita failide laiendusi", "Additional settings" : "Lisaseadistused", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV-i võrguaadress", diff --git a/apps/files/l10n/et_EE.json b/apps/files/l10n/et_EE.json index 94994e8cf3c..70298aaafb7 100644 --- a/apps/files/l10n/et_EE.json +++ b/apps/files/l10n/et_EE.json @@ -199,10 +199,12 @@ "Personal files" : "Isiklikud failid", "Sort favorites first" : "Järjesta lemmikud esimesena", "Sort folders before files" : "Järjesta kaustad enne faile", + "Enable folder tree" : "Võta kasutusele kaustapuu", + "Visual settings" : "Visuaalsed seadistused", "Show hidden files" : "Näita peidetud faile", "Show file type column" : "Näita failitüübi veergu", "Crop image previews" : "Kadreeri piltide eelvaated", - "Enable folder tree" : "Võta kasutusele kaustapuu", + "Show files extensions" : "Näita failide laiendusi", "Additional settings" : "Lisaseadistused", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV-i võrguaadress", diff --git a/apps/files/l10n/eu.js b/apps/files/l10n/eu.js index 33aa6b9299e..4dba1c45621 100644 --- a/apps/files/l10n/eu.js +++ b/apps/files/l10n/eu.js @@ -175,9 +175,9 @@ OC.L10N.register( "Personal files" : "Fitxategi pertsonalak", "Sort favorites first" : "Ordenatu gogokoak lehenengo", "Sort folders before files" : "Ordenatu karpetak fitxategien aurretik", + "Enable folder tree" : "Gaitu karpeta-zuhaitza", "Show hidden files" : "Erakutsi ezkutuko fitxategiak", "Crop image previews" : "Moztu irudien aurrebistak", - "Enable folder tree" : "Gaitu karpeta-zuhaitza", "Additional settings" : "Ezarpen gehiago", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URLa", diff --git a/apps/files/l10n/eu.json b/apps/files/l10n/eu.json index 9418f992d92..84ef3467e9b 100644 --- a/apps/files/l10n/eu.json +++ b/apps/files/l10n/eu.json @@ -173,9 +173,9 @@ "Personal files" : "Fitxategi pertsonalak", "Sort favorites first" : "Ordenatu gogokoak lehenengo", "Sort folders before files" : "Ordenatu karpetak fitxategien aurretik", + "Enable folder tree" : "Gaitu karpeta-zuhaitza", "Show hidden files" : "Erakutsi ezkutuko fitxategiak", "Crop image previews" : "Moztu irudien aurrebistak", - "Enable folder tree" : "Gaitu karpeta-zuhaitza", "Additional settings" : "Ezarpen gehiago", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URLa", diff --git a/apps/files/l10n/fa.js b/apps/files/l10n/fa.js index a5133fbde39..859c70717d7 100644 --- a/apps/files/l10n/fa.js +++ b/apps/files/l10n/fa.js @@ -192,10 +192,10 @@ OC.L10N.register( "Personal files" : "فایلهای شخصی", "Sort favorites first" : "ابتدا موارد دلخواه را مرتب کنید", "Sort folders before files" : "Sort folders before files", + "Enable folder tree" : "Enable folder tree", "Show hidden files" : "نمایش پروندههای مخفی", "Show file type column" : "Show file type column", "Crop image previews" : "پیش نمایش تصویر برش", - "Enable folder tree" : "Enable folder tree", "Additional settings" : "تنظیمات اضافی", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/fa.json b/apps/files/l10n/fa.json index 5bd713b5c17..c92d393b608 100644 --- a/apps/files/l10n/fa.json +++ b/apps/files/l10n/fa.json @@ -190,10 +190,10 @@ "Personal files" : "فایلهای شخصی", "Sort favorites first" : "ابتدا موارد دلخواه را مرتب کنید", "Sort folders before files" : "Sort folders before files", + "Enable folder tree" : "Enable folder tree", "Show hidden files" : "نمایش پروندههای مخفی", "Show file type column" : "Show file type column", "Crop image previews" : "پیش نمایش تصویر برش", - "Enable folder tree" : "Enable folder tree", "Additional settings" : "تنظیمات اضافی", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/fi.js b/apps/files/l10n/fi.js index 4b85491deda..85b728b48f0 100644 --- a/apps/files/l10n/fi.js +++ b/apps/files/l10n/fi.js @@ -171,10 +171,10 @@ OC.L10N.register( "Personal files" : "Henkilökohtaiset tiedostot", "Sort favorites first" : "Järjestä suosikit ensiksi", "Sort folders before files" : "Järjestä kansiot ennen tiedostoja", + "Enable folder tree" : "Ota kansiopuu käyttöön", "Show hidden files" : "Näytä piilotetut tiedostot", "Show file type column" : "Näytä tiedostotyypin sarake", "Crop image previews" : "Rajaa kuvien esikatseluja", - "Enable folder tree" : "Ota kansiopuu käyttöön", "Additional settings" : "Lisäasetukset", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV:in URL-osoite", diff --git a/apps/files/l10n/fi.json b/apps/files/l10n/fi.json index efde7297802..035811928ef 100644 --- a/apps/files/l10n/fi.json +++ b/apps/files/l10n/fi.json @@ -169,10 +169,10 @@ "Personal files" : "Henkilökohtaiset tiedostot", "Sort favorites first" : "Järjestä suosikit ensiksi", "Sort folders before files" : "Järjestä kansiot ennen tiedostoja", + "Enable folder tree" : "Ota kansiopuu käyttöön", "Show hidden files" : "Näytä piilotetut tiedostot", "Show file type column" : "Näytä tiedostotyypin sarake", "Crop image previews" : "Rajaa kuvien esikatseluja", - "Enable folder tree" : "Ota kansiopuu käyttöön", "Additional settings" : "Lisäasetukset", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV:in URL-osoite", diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js index 388d1a9f569..e526e1c7926 100644 --- a/apps/files/l10n/fr.js +++ b/apps/files/l10n/fr.js @@ -197,10 +197,10 @@ OC.L10N.register( "Personal files" : "Fichiers personnels", "Sort favorites first" : "Trier les favoris en premier", "Sort folders before files" : "Trier les dossiers avant les fichiers", + "Enable folder tree" : "Activer l'arborescence des dossiers", "Show hidden files" : "Montrer les fichiers masqués", "Show file type column" : "Afficher la colonne du type de fichier", "Crop image previews" : "Afficher en miniatures carrées", - "Enable folder tree" : "Activer l'arborescence des dossiers", "Additional settings" : "Paramètres supplémentaires", "WebDAV" : "WebDAV", "WebDAV URL" : "URL WebDAV", diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json index a16ef07e09f..b09ae33d0b9 100644 --- a/apps/files/l10n/fr.json +++ b/apps/files/l10n/fr.json @@ -195,10 +195,10 @@ "Personal files" : "Fichiers personnels", "Sort favorites first" : "Trier les favoris en premier", "Sort folders before files" : "Trier les dossiers avant les fichiers", + "Enable folder tree" : "Activer l'arborescence des dossiers", "Show hidden files" : "Montrer les fichiers masqués", "Show file type column" : "Afficher la colonne du type de fichier", "Crop image previews" : "Afficher en miniatures carrées", - "Enable folder tree" : "Activer l'arborescence des dossiers", "Additional settings" : "Paramètres supplémentaires", "WebDAV" : "WebDAV", "WebDAV URL" : "URL WebDAV", diff --git a/apps/files/l10n/ga.js b/apps/files/l10n/ga.js index 41656beeacb..54d6d4dcf72 100644 --- a/apps/files/l10n/ga.js +++ b/apps/files/l10n/ga.js @@ -201,10 +201,10 @@ OC.L10N.register( "Personal files" : "Comhaid phearsanta", "Sort favorites first" : "Sórtáil na cinn is ansa leat ar dtús", "Sort folders before files" : "Sórtáil fillteáin roimh chomhaid", + "Enable folder tree" : "Cumasaigh crann fillteáin", "Show hidden files" : "Taispeáin comhaid i bhfolach", "Show file type column" : "Taispeáin colún cineál comhaid", "Crop image previews" : "Réamhamhairc íomhá barr", - "Enable folder tree" : "Cumasaigh crann fillteáin", "Additional settings" : "Socruithe breise", "WebDAV" : "WebDAV", "WebDAV URL" : "URL WebDAV", diff --git a/apps/files/l10n/ga.json b/apps/files/l10n/ga.json index 61cb8bee8b4..486707178b9 100644 --- a/apps/files/l10n/ga.json +++ b/apps/files/l10n/ga.json @@ -199,10 +199,10 @@ "Personal files" : "Comhaid phearsanta", "Sort favorites first" : "Sórtáil na cinn is ansa leat ar dtús", "Sort folders before files" : "Sórtáil fillteáin roimh chomhaid", + "Enable folder tree" : "Cumasaigh crann fillteáin", "Show hidden files" : "Taispeáin comhaid i bhfolach", "Show file type column" : "Taispeáin colún cineál comhaid", "Crop image previews" : "Réamhamhairc íomhá barr", - "Enable folder tree" : "Cumasaigh crann fillteáin", "Additional settings" : "Socruithe breise", "WebDAV" : "WebDAV", "WebDAV URL" : "URL WebDAV", diff --git a/apps/files/l10n/gl.js b/apps/files/l10n/gl.js index d591191d12e..b7536174fe8 100644 --- a/apps/files/l10n/gl.js +++ b/apps/files/l10n/gl.js @@ -185,9 +185,9 @@ OC.L10N.register( "Personal files" : "Ficheiros persoais", "Sort favorites first" : "Ordene antes os favoritos", "Sort folders before files" : "Ordenar os cartafoles diante dos ficheiros", + "Enable folder tree" : "Activar a árbore de cartafoles", "Show hidden files" : "Amosar os ficheiros agochados", "Crop image previews" : "Recortar a vista previa das imaxes", - "Enable folder tree" : "Activar a árbore de cartafoles", "Additional settings" : "Axustes adicionais", "WebDAV" : "WebDAV", "WebDAV URL" : "URL de WebDAV", diff --git a/apps/files/l10n/gl.json b/apps/files/l10n/gl.json index 7a1cf90d439..3f99b0356b0 100644 --- a/apps/files/l10n/gl.json +++ b/apps/files/l10n/gl.json @@ -183,9 +183,9 @@ "Personal files" : "Ficheiros persoais", "Sort favorites first" : "Ordene antes os favoritos", "Sort folders before files" : "Ordenar os cartafoles diante dos ficheiros", + "Enable folder tree" : "Activar a árbore de cartafoles", "Show hidden files" : "Amosar os ficheiros agochados", "Crop image previews" : "Recortar a vista previa das imaxes", - "Enable folder tree" : "Activar a árbore de cartafoles", "Additional settings" : "Axustes adicionais", "WebDAV" : "WebDAV", "WebDAV URL" : "URL de WebDAV", diff --git a/apps/files/l10n/hu.js b/apps/files/l10n/hu.js index 43ba9ed5058..884f1fee21c 100644 --- a/apps/files/l10n/hu.js +++ b/apps/files/l10n/hu.js @@ -193,10 +193,10 @@ OC.L10N.register( "Personal files" : "Személyes fájlok", "Sort favorites first" : "Kedvencek előre rendezése", "Sort folders before files" : "Mappák fájlok elé rendezése", + "Enable folder tree" : "Mappafa engedélyezése", "Show hidden files" : "Rejtett fájlok megjelenítése", "Show file type column" : "Fájltípus oszlop megjelenítése", "Crop image previews" : "Kép előnézetek vágása", - "Enable folder tree" : "Mappafa engedélyezése", "Additional settings" : "További beállítások", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV-webcím", diff --git a/apps/files/l10n/hu.json b/apps/files/l10n/hu.json index 030c1bc9a6b..236e7d922c6 100644 --- a/apps/files/l10n/hu.json +++ b/apps/files/l10n/hu.json @@ -191,10 +191,10 @@ "Personal files" : "Személyes fájlok", "Sort favorites first" : "Kedvencek előre rendezése", "Sort folders before files" : "Mappák fájlok elé rendezése", + "Enable folder tree" : "Mappafa engedélyezése", "Show hidden files" : "Rejtett fájlok megjelenítése", "Show file type column" : "Fájltípus oszlop megjelenítése", "Crop image previews" : "Kép előnézetek vágása", - "Enable folder tree" : "Mappafa engedélyezése", "Additional settings" : "További beállítások", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV-webcím", diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js index afa3a0cb3fe..47c165a4246 100644 --- a/apps/files/l10n/is.js +++ b/apps/files/l10n/is.js @@ -176,9 +176,9 @@ OC.L10N.register( "Personal files" : "Einkaskrár", "Sort favorites first" : "Raða eftirlætum fremst", "Sort folders before files" : "Raða möppum á undan skrám", + "Enable folder tree" : "Virkja möppugreinar", "Show hidden files" : "Sýna faldar skrár", "Crop image previews" : "Skera utan af forskoðun mynda", - "Enable folder tree" : "Virkja möppugreinar", "Additional settings" : "Valfrjálsar stillingar", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV-slóð", diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json index dd374dd45b7..71191eb3d93 100644 --- a/apps/files/l10n/is.json +++ b/apps/files/l10n/is.json @@ -174,9 +174,9 @@ "Personal files" : "Einkaskrár", "Sort favorites first" : "Raða eftirlætum fremst", "Sort folders before files" : "Raða möppum á undan skrám", + "Enable folder tree" : "Virkja möppugreinar", "Show hidden files" : "Sýna faldar skrár", "Crop image previews" : "Skera utan af forskoðun mynda", - "Enable folder tree" : "Virkja möppugreinar", "Additional settings" : "Valfrjálsar stillingar", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV-slóð", diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js index edd6cf69da1..55790ea82f9 100644 --- a/apps/files/l10n/it.js +++ b/apps/files/l10n/it.js @@ -201,10 +201,10 @@ OC.L10N.register( "Personal files" : "File personali", "Sort favorites first" : "Ordina prima i preferiti", "Sort folders before files" : "Ordina cartelle prima dei files", + "Enable folder tree" : "Abilita l'albero delle cartelle", "Show hidden files" : "Mostra i file nascosti", "Show file type column" : "Mostra colonna tipo di file", "Crop image previews" : "Ritaglia le anteprime delle immagini", - "Enable folder tree" : "Abilita l'albero delle cartelle", "Additional settings" : "Impostazioni aggiuntive", "WebDAV" : "WebDAV", "WebDAV URL" : "URL WebDAV", diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json index 2afbf4ca9f1..07b8d760ff7 100644 --- a/apps/files/l10n/it.json +++ b/apps/files/l10n/it.json @@ -199,10 +199,10 @@ "Personal files" : "File personali", "Sort favorites first" : "Ordina prima i preferiti", "Sort folders before files" : "Ordina cartelle prima dei files", + "Enable folder tree" : "Abilita l'albero delle cartelle", "Show hidden files" : "Mostra i file nascosti", "Show file type column" : "Mostra colonna tipo di file", "Crop image previews" : "Ritaglia le anteprime delle immagini", - "Enable folder tree" : "Abilita l'albero delle cartelle", "Additional settings" : "Impostazioni aggiuntive", "WebDAV" : "WebDAV", "WebDAV URL" : "URL WebDAV", diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js index 57a8793673b..be3bf30fb98 100644 --- a/apps/files/l10n/ja.js +++ b/apps/files/l10n/ja.js @@ -201,10 +201,10 @@ OC.L10N.register( "Personal files" : "個人ファイル", "Sort favorites first" : "お気に入りを最初に並べる", "Sort folders before files" : "ファイルよりもフォルダを先に並べ替えます", + "Enable folder tree" : "フォルダーツリーを有効にする", "Show hidden files" : "隠しファイルを表示", "Show file type column" : "ファイルの種類のカラムを表示する", "Crop image previews" : "プレビュー画像を切り抜く", - "Enable folder tree" : "フォルダーツリーを有効にする", "Additional settings" : "追加設定", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json index cdc4b3fa1e0..0cb0109bf69 100644 --- a/apps/files/l10n/ja.json +++ b/apps/files/l10n/ja.json @@ -199,10 +199,10 @@ "Personal files" : "個人ファイル", "Sort favorites first" : "お気に入りを最初に並べる", "Sort folders before files" : "ファイルよりもフォルダを先に並べ替えます", + "Enable folder tree" : "フォルダーツリーを有効にする", "Show hidden files" : "隠しファイルを表示", "Show file type column" : "ファイルの種類のカラムを表示する", "Crop image previews" : "プレビュー画像を切り抜く", - "Enable folder tree" : "フォルダーツリーを有効にする", "Additional settings" : "追加設定", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/ko.js b/apps/files/l10n/ko.js index 010ef8c5e96..33cfc8a2c52 100644 --- a/apps/files/l10n/ko.js +++ b/apps/files/l10n/ko.js @@ -184,9 +184,9 @@ OC.L10N.register( "Personal files" : "개인 파일", "Sort favorites first" : "즐겨찾기를 처음에 나열", "Sort folders before files" : "폴더를 파일보다 먼저 정렬", + "Enable folder tree" : "폴더 트리 활성화", "Show hidden files" : "숨김 파일 보이기", "Crop image previews" : "이미지 미리보기 확대", - "Enable folder tree" : "폴더 트리 활성화", "Additional settings" : "고급 설정", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/ko.json b/apps/files/l10n/ko.json index 7f8fd3943c0..2a059b545b1 100644 --- a/apps/files/l10n/ko.json +++ b/apps/files/l10n/ko.json @@ -182,9 +182,9 @@ "Personal files" : "개인 파일", "Sort favorites first" : "즐겨찾기를 처음에 나열", "Sort folders before files" : "폴더를 파일보다 먼저 정렬", + "Enable folder tree" : "폴더 트리 활성화", "Show hidden files" : "숨김 파일 보이기", "Crop image previews" : "이미지 미리보기 확대", - "Enable folder tree" : "폴더 트리 활성화", "Additional settings" : "고급 설정", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/lt_LT.js b/apps/files/l10n/lt_LT.js index 9cdafab38bb..bfa25a5efa6 100644 --- a/apps/files/l10n/lt_LT.js +++ b/apps/files/l10n/lt_LT.js @@ -135,9 +135,9 @@ OC.L10N.register( "WebDAV URL copied to clipboard" : "WebDAV URL nukopijuotas į iškarpinę", "All files" : "Visi failai", "Personal files" : "Asmeniniai failai", + "Enable folder tree" : "Įjungti direktorijų medį", "Show hidden files" : "Rodyti paslėptus failus", "Crop image previews" : "Apkirpti paveikslėlių peržiūras", - "Enable folder tree" : "Įjungti direktorijų medį", "Additional settings" : "Papildomi nustatymai", "WebDAV" : "WebDAV", "Copy to clipboard" : "Kopijuoti į iškarpinę", diff --git a/apps/files/l10n/lt_LT.json b/apps/files/l10n/lt_LT.json index 4ad21e0a1e7..ca7adc3638c 100644 --- a/apps/files/l10n/lt_LT.json +++ b/apps/files/l10n/lt_LT.json @@ -133,9 +133,9 @@ "WebDAV URL copied to clipboard" : "WebDAV URL nukopijuotas į iškarpinę", "All files" : "Visi failai", "Personal files" : "Asmeniniai failai", + "Enable folder tree" : "Įjungti direktorijų medį", "Show hidden files" : "Rodyti paslėptus failus", "Crop image previews" : "Apkirpti paveikslėlių peržiūras", - "Enable folder tree" : "Įjungti direktorijų medį", "Additional settings" : "Papildomi nustatymai", "WebDAV" : "WebDAV", "Copy to clipboard" : "Kopijuoti į iškarpinę", diff --git a/apps/files/l10n/mk.js b/apps/files/l10n/mk.js index 744246016d7..e869de2b765 100644 --- a/apps/files/l10n/mk.js +++ b/apps/files/l10n/mk.js @@ -183,10 +183,10 @@ OC.L10N.register( "Personal files" : "Лични датотеки", "Sort favorites first" : "Прво омилените", "Sort folders before files" : "Подреди ги папките пред датотеките", + "Enable folder tree" : "Овозможи поглед на дрво", "Show hidden files" : "Прикажи сокриени датотеки", "Show file type column" : "Прикажи колона за тип на датотека", "Crop image previews" : "Исечи ја сликата за преглед", - "Enable folder tree" : "Овозможи поглед на дрво", "Additional settings" : "Дополнителни параметри", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV адреса", diff --git a/apps/files/l10n/mk.json b/apps/files/l10n/mk.json index 7c1795017e5..4bff6ca193b 100644 --- a/apps/files/l10n/mk.json +++ b/apps/files/l10n/mk.json @@ -181,10 +181,10 @@ "Personal files" : "Лични датотеки", "Sort favorites first" : "Прво омилените", "Sort folders before files" : "Подреди ги папките пред датотеките", + "Enable folder tree" : "Овозможи поглед на дрво", "Show hidden files" : "Прикажи сокриени датотеки", "Show file type column" : "Прикажи колона за тип на датотека", "Crop image previews" : "Исечи ја сликата за преглед", - "Enable folder tree" : "Овозможи поглед на дрво", "Additional settings" : "Дополнителни параметри", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV адреса", diff --git a/apps/files/l10n/nb.js b/apps/files/l10n/nb.js index 9cf039d0fe4..2b30edeae6d 100644 --- a/apps/files/l10n/nb.js +++ b/apps/files/l10n/nb.js @@ -174,9 +174,9 @@ OC.L10N.register( "Personal files" : "Personlige filer", "Sort favorites first" : "Sorter favoritter først", "Sort folders before files" : "Sorter mapper før filer", + "Enable folder tree" : "Aktiver mappetre", "Show hidden files" : "Vis skjulte filer", "Crop image previews" : "Beskjær forhåndsvisninger av bilder", - "Enable folder tree" : "Aktiver mappetre", "Additional settings" : "Flere innstillinger", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/nb.json b/apps/files/l10n/nb.json index 83cedb128ff..1c1429abe62 100644 --- a/apps/files/l10n/nb.json +++ b/apps/files/l10n/nb.json @@ -172,9 +172,9 @@ "Personal files" : "Personlige filer", "Sort favorites first" : "Sorter favoritter først", "Sort folders before files" : "Sorter mapper før filer", + "Enable folder tree" : "Aktiver mappetre", "Show hidden files" : "Vis skjulte filer", "Crop image previews" : "Beskjær forhåndsvisninger av bilder", - "Enable folder tree" : "Aktiver mappetre", "Additional settings" : "Flere innstillinger", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js index 305545c1308..c2b4bec6650 100644 --- a/apps/files/l10n/nl.js +++ b/apps/files/l10n/nl.js @@ -200,10 +200,10 @@ OC.L10N.register( "Personal files" : "Persoonlijke bestanden", "Sort favorites first" : "Sorteer eerst favorieten", "Sort folders before files" : "Sorteer mappen voor bestanden", + "Enable folder tree" : "Mappenboom inschakelen", "Show hidden files" : "Toon verborgen bestanden", "Show file type column" : "Toon bestandstypekolom", "Crop image previews" : "Snij afbeeldingvoorbeelden bij", - "Enable folder tree" : "Mappenboom inschakelen", "Additional settings" : "Aanvullende instellingen", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json index fb0846b8cf9..37cbf200cf7 100644 --- a/apps/files/l10n/nl.json +++ b/apps/files/l10n/nl.json @@ -198,10 +198,10 @@ "Personal files" : "Persoonlijke bestanden", "Sort favorites first" : "Sorteer eerst favorieten", "Sort folders before files" : "Sorteer mappen voor bestanden", + "Enable folder tree" : "Mappenboom inschakelen", "Show hidden files" : "Toon verborgen bestanden", "Show file type column" : "Toon bestandstypekolom", "Crop image previews" : "Snij afbeeldingvoorbeelden bij", - "Enable folder tree" : "Mappenboom inschakelen", "Additional settings" : "Aanvullende instellingen", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js index 239fd196fdd..a4ffa0d0785 100644 --- a/apps/files/l10n/pl.js +++ b/apps/files/l10n/pl.js @@ -201,10 +201,10 @@ OC.L10N.register( "Personal files" : "Pliki osobiste", "Sort favorites first" : "Najpierw sortuj ulubione", "Sort folders before files" : "Sortuj katalogi przed plikami", + "Enable folder tree" : "Włącz drzewo katalogów", "Show hidden files" : "Pokaż ukryte pliki", "Show file type column" : "Pokaż kolumnę typu pliku", "Crop image previews" : "Przytnij podglądy obrazów", - "Enable folder tree" : "Włącz drzewo katalogów", "Additional settings" : "Ustawienia dodatkowe", "WebDAV" : "WebDAV", "WebDAV URL" : "URL WebDAV", diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json index de42acd829b..0ee4112f44d 100644 --- a/apps/files/l10n/pl.json +++ b/apps/files/l10n/pl.json @@ -199,10 +199,10 @@ "Personal files" : "Pliki osobiste", "Sort favorites first" : "Najpierw sortuj ulubione", "Sort folders before files" : "Sortuj katalogi przed plikami", + "Enable folder tree" : "Włącz drzewo katalogów", "Show hidden files" : "Pokaż ukryte pliki", "Show file type column" : "Pokaż kolumnę typu pliku", "Crop image previews" : "Przytnij podglądy obrazów", - "Enable folder tree" : "Włącz drzewo katalogów", "Additional settings" : "Ustawienia dodatkowe", "WebDAV" : "WebDAV", "WebDAV URL" : "URL WebDAV", diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js index 1ad71ce49f3..de21c8848ac 100644 --- a/apps/files/l10n/pt_BR.js +++ b/apps/files/l10n/pt_BR.js @@ -201,14 +201,18 @@ OC.L10N.register( "Personal files" : "Arquivos pessoais", "Sort favorites first" : "Ordenar favoritos primeiro", "Sort folders before files" : "Ordenar pastas antes de arquivos", + "Enable folder tree" : "Ativar árvore de pastas", + "Visual settings" : "Configurações visuais", "Show hidden files" : "Mostrar arquivos ocultos", "Show file type column" : "Mostrar coluna de tipo de arquivo", "Crop image previews" : "Cortar visualizações de imagem", - "Enable folder tree" : "Ativar árvore de pastas", + "Show files extensions" : "Mostrar extensões de arquivos", "Additional settings" : "Configurações adicionais", "WebDAV" : "WebDAV", "WebDAV URL" : "URL WebDAV", "Copy to clipboard" : "Copiar para área de transferência", + "Use this address to access your Files via WebDAV." : "Use este endereço para acessar seus arquivos via WebDAV.", + "Two-Factor Authentication is enabled for your account, and therefore you need to use an app password to connect an external WebDAV client." : "A Autenticação de Dois Fatores está ativada para sua conta e, portanto, você precisa usar uma senha de aplicativo para conectar um cliente WebDAV externo.", "Warnings" : "Avisos", "Prevent warning dialogs from open or reenable them." : "Impedir que as caixas de diálogo de aviso sejam abertas ou reativá-las.", "Show a warning dialog when changing a file extension." : "Mostrar uma caixa de diálogo de aviso ao alterar uma extensão de arquivo.", diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json index 5d39b0a141a..3306233b643 100644 --- a/apps/files/l10n/pt_BR.json +++ b/apps/files/l10n/pt_BR.json @@ -199,14 +199,18 @@ "Personal files" : "Arquivos pessoais", "Sort favorites first" : "Ordenar favoritos primeiro", "Sort folders before files" : "Ordenar pastas antes de arquivos", + "Enable folder tree" : "Ativar árvore de pastas", + "Visual settings" : "Configurações visuais", "Show hidden files" : "Mostrar arquivos ocultos", "Show file type column" : "Mostrar coluna de tipo de arquivo", "Crop image previews" : "Cortar visualizações de imagem", - "Enable folder tree" : "Ativar árvore de pastas", + "Show files extensions" : "Mostrar extensões de arquivos", "Additional settings" : "Configurações adicionais", "WebDAV" : "WebDAV", "WebDAV URL" : "URL WebDAV", "Copy to clipboard" : "Copiar para área de transferência", + "Use this address to access your Files via WebDAV." : "Use este endereço para acessar seus arquivos via WebDAV.", + "Two-Factor Authentication is enabled for your account, and therefore you need to use an app password to connect an external WebDAV client." : "A Autenticação de Dois Fatores está ativada para sua conta e, portanto, você precisa usar uma senha de aplicativo para conectar um cliente WebDAV externo.", "Warnings" : "Avisos", "Prevent warning dialogs from open or reenable them." : "Impedir que as caixas de diálogo de aviso sejam abertas ou reativá-las.", "Show a warning dialog when changing a file extension." : "Mostrar uma caixa de diálogo de aviso ao alterar uma extensão de arquivo.", diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js index 59c535d1429..579ced09c6a 100644 --- a/apps/files/l10n/ru.js +++ b/apps/files/l10n/ru.js @@ -200,10 +200,10 @@ OC.L10N.register( "Personal files" : "Личные файлы", "Sort favorites first" : "Сначала избранное", "Sort folders before files" : "Начинать список с папок", + "Enable folder tree" : "Включить дерево папок", "Show hidden files" : "Показывать скрытые файлы", "Show file type column" : "Показать колонку с типом файла", "Crop image previews" : "Обрезать пред. просмотр", - "Enable folder tree" : "Включить дерево папок", "Additional settings" : "Дополнительные параметры", "WebDAV" : "WebDAV", "WebDAV URL" : "Ссылка WebDAV", @@ -334,11 +334,11 @@ OC.L10N.register( "Your browser does not support the Filesystem API. Directories will not be uploaded" : "Папки не будут загружены, так как используемый браузер не поддерживает работу с файловой системой.", "No files to upload" : "Не выбрано ни одного файла для передачи на сервер", "Unable to create the directory {directory}" : "Не удалось создать папку «{directory}»", - "Some files could not be uploaded" : "Некоторые файлы не могут быть загружены", + "Some files could not be uploaded" : "Не удалось загрузить некоторые файлы", "Files uploaded successfully" : "Файлы успешно обновлены", - "No files to process" : "Не ни одного файла для обработки", - "Some files could not be copied" : "Некоторые файлы не могут быть скопированы", - "Some files could not be moved" : "Некоторые файлы не могут быть перемещены", + "No files to process" : "Нет файлов для обработки", + "Some files could not be copied" : "Не удалось скопировать некоторые файлы", + "Some files could not be moved" : "Не удалось переместить некоторые файлы", "Files copied successfully" : "Файлы успешно скопированы", "Files moved successfully" : "Файлы успешно перемещены", "Conflicts resolution skipped" : "Разрешение конфликтов пропущено", diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json index f5bd8f31ca3..53e64a0a5b6 100644 --- a/apps/files/l10n/ru.json +++ b/apps/files/l10n/ru.json @@ -198,10 +198,10 @@ "Personal files" : "Личные файлы", "Sort favorites first" : "Сначала избранное", "Sort folders before files" : "Начинать список с папок", + "Enable folder tree" : "Включить дерево папок", "Show hidden files" : "Показывать скрытые файлы", "Show file type column" : "Показать колонку с типом файла", "Crop image previews" : "Обрезать пред. просмотр", - "Enable folder tree" : "Включить дерево папок", "Additional settings" : "Дополнительные параметры", "WebDAV" : "WebDAV", "WebDAV URL" : "Ссылка WebDAV", @@ -332,11 +332,11 @@ "Your browser does not support the Filesystem API. Directories will not be uploaded" : "Папки не будут загружены, так как используемый браузер не поддерживает работу с файловой системой.", "No files to upload" : "Не выбрано ни одного файла для передачи на сервер", "Unable to create the directory {directory}" : "Не удалось создать папку «{directory}»", - "Some files could not be uploaded" : "Некоторые файлы не могут быть загружены", + "Some files could not be uploaded" : "Не удалось загрузить некоторые файлы", "Files uploaded successfully" : "Файлы успешно обновлены", - "No files to process" : "Не ни одного файла для обработки", - "Some files could not be copied" : "Некоторые файлы не могут быть скопированы", - "Some files could not be moved" : "Некоторые файлы не могут быть перемещены", + "No files to process" : "Нет файлов для обработки", + "Some files could not be copied" : "Не удалось скопировать некоторые файлы", + "Some files could not be moved" : "Не удалось переместить некоторые файлы", "Files copied successfully" : "Файлы успешно скопированы", "Files moved successfully" : "Файлы успешно перемещены", "Conflicts resolution skipped" : "Разрешение конфликтов пропущено", diff --git a/apps/files/l10n/sk.js b/apps/files/l10n/sk.js index 028d65d35f1..9ff736fc16e 100644 --- a/apps/files/l10n/sk.js +++ b/apps/files/l10n/sk.js @@ -185,9 +185,9 @@ OC.L10N.register( "Personal files" : "Osobné súbory", "Sort favorites first" : "Zoradiť od najobľúbenejších", "Sort folders before files" : "Zoradiť adresáre pred súbormi", + "Enable folder tree" : "Povoliť adresárový strom", "Show hidden files" : "Zobraziť skryté súbory", "Crop image previews" : "Orezať náhľady obrázkov", - "Enable folder tree" : "Povoliť adresárový strom", "Additional settings" : "Ďalšie nastavenia", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/sk.json b/apps/files/l10n/sk.json index 868a36ffef6..6e12bc9b0a4 100644 --- a/apps/files/l10n/sk.json +++ b/apps/files/l10n/sk.json @@ -183,9 +183,9 @@ "Personal files" : "Osobné súbory", "Sort favorites first" : "Zoradiť od najobľúbenejších", "Sort folders before files" : "Zoradiť adresáre pred súbormi", + "Enable folder tree" : "Povoliť adresárový strom", "Show hidden files" : "Zobraziť skryté súbory", "Crop image previews" : "Orezať náhľady obrázkov", - "Enable folder tree" : "Povoliť adresárový strom", "Additional settings" : "Ďalšie nastavenia", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/sl.js b/apps/files/l10n/sl.js index 09f70c09254..b2b83a2bea1 100644 --- a/apps/files/l10n/sl.js +++ b/apps/files/l10n/sl.js @@ -186,9 +186,9 @@ OC.L10N.register( "Personal files" : "Osebne datoteke", "Sort favorites first" : "Razvrsti najprej priljubljene", "Sort folders before files" : "Razvrsti mape pred datotekami", + "Enable folder tree" : "Omogoči drevesno strukturo map", "Show hidden files" : "Pokaži skrite datoteke", "Crop image previews" : "Obreži slike predogleda", - "Enable folder tree" : "Omogoči drevesno strukturo map", "Additional settings" : "Dodatne nastavitve", "WebDAV" : "WebDAV", "WebDAV URL" : "Naslov URL WebDAV", diff --git a/apps/files/l10n/sl.json b/apps/files/l10n/sl.json index e77258a44a1..7ea477d6ee1 100644 --- a/apps/files/l10n/sl.json +++ b/apps/files/l10n/sl.json @@ -184,9 +184,9 @@ "Personal files" : "Osebne datoteke", "Sort favorites first" : "Razvrsti najprej priljubljene", "Sort folders before files" : "Razvrsti mape pred datotekami", + "Enable folder tree" : "Omogoči drevesno strukturo map", "Show hidden files" : "Pokaži skrite datoteke", "Crop image previews" : "Obreži slike predogleda", - "Enable folder tree" : "Omogoči drevesno strukturo map", "Additional settings" : "Dodatne nastavitve", "WebDAV" : "WebDAV", "WebDAV URL" : "Naslov URL WebDAV", diff --git a/apps/files/l10n/sr.js b/apps/files/l10n/sr.js index fb5e65e9629..b507d844521 100644 --- a/apps/files/l10n/sr.js +++ b/apps/files/l10n/sr.js @@ -200,10 +200,10 @@ OC.L10N.register( "Personal files" : "Лични фајлови", "Sort favorites first" : "Сортирај прво омиљене", "Sort folders before files" : "Поређај фолдере испред фајлова", + "Enable folder tree" : "Укључи стабло фолдера", "Show hidden files" : "Прикажи скривене фајлове", "Show file type column" : "Прикажи колону са типом фајла", "Crop image previews" : "Опсецање прегледа слика", - "Enable folder tree" : "Укључи стабло фолдера", "Additional settings" : "Додатне поставке", "WebDAV" : "ВебДАВ", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/sr.json b/apps/files/l10n/sr.json index 4f60f847237..f32bbb8a77e 100644 --- a/apps/files/l10n/sr.json +++ b/apps/files/l10n/sr.json @@ -198,10 +198,10 @@ "Personal files" : "Лични фајлови", "Sort favorites first" : "Сортирај прво омиљене", "Sort folders before files" : "Поређај фолдере испред фајлова", + "Enable folder tree" : "Укључи стабло фолдера", "Show hidden files" : "Прикажи скривене фајлове", "Show file type column" : "Прикажи колону са типом фајла", "Crop image previews" : "Опсецање прегледа слика", - "Enable folder tree" : "Укључи стабло фолдера", "Additional settings" : "Додатне поставке", "WebDAV" : "ВебДАВ", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js index bdd5d9cfba3..f677fe02ba6 100644 --- a/apps/files/l10n/sv.js +++ b/apps/files/l10n/sv.js @@ -142,6 +142,7 @@ OC.L10N.register( "Create new folder" : "Skapa ny mapp", "This name is already in use." : "Namnet används redan.", "Create" : "Skapa", + "Files starting with a dot are hidden by default" : "Filer som börjar med en punkt är dolda som standard", "Fill template fields" : "Fyll mallfält", "Submitting fields …" : "Skickar fält ...", "Submit" : "Skicka", @@ -200,14 +201,18 @@ OC.L10N.register( "Personal files" : "Personliga filer", "Sort favorites first" : "Sortera favoriter först", "Sort folders before files" : "Sortera mappar före filer", + "Enable folder tree" : "Aktivera mappträd", + "Visual settings" : "Visuella inställningar", "Show hidden files" : "Visa dolda filer", "Show file type column" : "Visa kolumn för filtyp", "Crop image previews" : "Beskär förhandsgranskningar för bilder", - "Enable folder tree" : "Aktivera mappträd", + "Show files extensions" : "Visa filändelser", "Additional settings" : "Övriga inställningar", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", "Copy to clipboard" : "Kopiera till urklipp", + "Use this address to access your Files via WebDAV." : "Använd denna adress för att komma åt dina filer med WebDAV.", + "Two-Factor Authentication is enabled for your account, and therefore you need to use an app password to connect an external WebDAV client." : "Tvåfaktorsautentisering är aktiverad för ditt konto och därför måste du använda ett applösenord för att ansluta en extern WebDAV-klient.", "Warnings" : "Varningar", "Prevent warning dialogs from open or reenable them." : "Förhindra varningsdialoger från att öppnas eller aktivera dem igen.", "Show a warning dialog when changing a file extension." : "Visa en varningsdialog vid ändring av filändelse.", diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json index 3a3e7d82c71..6b7bf31e2f1 100644 --- a/apps/files/l10n/sv.json +++ b/apps/files/l10n/sv.json @@ -140,6 +140,7 @@ "Create new folder" : "Skapa ny mapp", "This name is already in use." : "Namnet används redan.", "Create" : "Skapa", + "Files starting with a dot are hidden by default" : "Filer som börjar med en punkt är dolda som standard", "Fill template fields" : "Fyll mallfält", "Submitting fields …" : "Skickar fält ...", "Submit" : "Skicka", @@ -198,14 +199,18 @@ "Personal files" : "Personliga filer", "Sort favorites first" : "Sortera favoriter först", "Sort folders before files" : "Sortera mappar före filer", + "Enable folder tree" : "Aktivera mappträd", + "Visual settings" : "Visuella inställningar", "Show hidden files" : "Visa dolda filer", "Show file type column" : "Visa kolumn för filtyp", "Crop image previews" : "Beskär förhandsgranskningar för bilder", - "Enable folder tree" : "Aktivera mappträd", + "Show files extensions" : "Visa filändelser", "Additional settings" : "Övriga inställningar", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", "Copy to clipboard" : "Kopiera till urklipp", + "Use this address to access your Files via WebDAV." : "Använd denna adress för att komma åt dina filer med WebDAV.", + "Two-Factor Authentication is enabled for your account, and therefore you need to use an app password to connect an external WebDAV client." : "Tvåfaktorsautentisering är aktiverad för ditt konto och därför måste du använda ett applösenord för att ansluta en extern WebDAV-klient.", "Warnings" : "Varningar", "Prevent warning dialogs from open or reenable them." : "Förhindra varningsdialoger från att öppnas eller aktivera dem igen.", "Show a warning dialog when changing a file extension." : "Visa en varningsdialog vid ändring av filändelse.", diff --git a/apps/files/l10n/sw.js b/apps/files/l10n/sw.js index 98e5f6a5926..a96ebd2fde5 100644 --- a/apps/files/l10n/sw.js +++ b/apps/files/l10n/sw.js @@ -201,10 +201,10 @@ OC.L10N.register( "Personal files" : "Faili binafsi", "Sort favorites first" : "Chagua za upendeleo kwanza", "Sort folders before files" : "Chagua vikasha kabla ya mafaili", + "Enable folder tree" : "Wezesha faili la tatu", "Show hidden files" : "Onesha mafaili yaliyofichwa", "Show file type column" : "Onyesha safu wima ya aina ya faili", "Crop image previews" : "Punguza onyesho la kukagua picha", - "Enable folder tree" : "Wezesha faili la tatu", "Additional settings" : "Mipangilio ya nyongeza", "WebDAV" : "WavutiDAV", "WebDAV URL" : "WavutiDAV URL", diff --git a/apps/files/l10n/sw.json b/apps/files/l10n/sw.json index 5636a28522f..d42ffe63b14 100644 --- a/apps/files/l10n/sw.json +++ b/apps/files/l10n/sw.json @@ -199,10 +199,10 @@ "Personal files" : "Faili binafsi", "Sort favorites first" : "Chagua za upendeleo kwanza", "Sort folders before files" : "Chagua vikasha kabla ya mafaili", + "Enable folder tree" : "Wezesha faili la tatu", "Show hidden files" : "Onesha mafaili yaliyofichwa", "Show file type column" : "Onyesha safu wima ya aina ya faili", "Crop image previews" : "Punguza onyesho la kukagua picha", - "Enable folder tree" : "Wezesha faili la tatu", "Additional settings" : "Mipangilio ya nyongeza", "WebDAV" : "WavutiDAV", "WebDAV URL" : "WavutiDAV URL", diff --git a/apps/files/l10n/tr.js b/apps/files/l10n/tr.js index c1303165161..2080d884150 100644 --- a/apps/files/l10n/tr.js +++ b/apps/files/l10n/tr.js @@ -201,10 +201,10 @@ OC.L10N.register( "Personal files" : "Kişisel dosyalar", "Sort favorites first" : "Sık kullanılanlar üstte sıralansın", "Sort folders before files" : "Klasörler dosyaların üzerinde sıralansın", + "Enable folder tree" : "Klasör ağacını aç", "Show hidden files" : "Gizli dosyaları görüntüle", "Show file type column" : "Dosya türü sütunu görüntülensin", "Crop image previews" : "Görsel ön izlemeleri kırpılsın", - "Enable folder tree" : "Klasör ağacını aç", "Additional settings" : "Ek ayarlar", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV adresi", diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json index aed656f5d4c..365aa79c914 100644 --- a/apps/files/l10n/tr.json +++ b/apps/files/l10n/tr.json @@ -199,10 +199,10 @@ "Personal files" : "Kişisel dosyalar", "Sort favorites first" : "Sık kullanılanlar üstte sıralansın", "Sort folders before files" : "Klasörler dosyaların üzerinde sıralansın", + "Enable folder tree" : "Klasör ağacını aç", "Show hidden files" : "Gizli dosyaları görüntüle", "Show file type column" : "Dosya türü sütunu görüntülensin", "Crop image previews" : "Görsel ön izlemeleri kırpılsın", - "Enable folder tree" : "Klasör ağacını aç", "Additional settings" : "Ek ayarlar", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV adresi", diff --git a/apps/files/l10n/ug.js b/apps/files/l10n/ug.js index 2b757d0b58a..96bf944eb2b 100644 --- a/apps/files/l10n/ug.js +++ b/apps/files/l10n/ug.js @@ -161,9 +161,9 @@ OC.L10N.register( "Personal files" : "شەخسىي ھۆججەتلەر", "Sort favorites first" : "ياقتۇرىدىغانلارنى رەتلەڭ", "Sort folders before files" : "ھۆججەتلەرنى ھۆججەتتىن بۇرۇن تەرتىپلەڭ", + "Enable folder tree" : "ھۆججەت قىسقۇچنى قوزغىتىڭ", "Show hidden files" : "يوشۇرۇن ھۆججەتلەرنى كۆرسەت", "Crop image previews" : "رەسىمنى ئالدىن كۆرۈش", - "Enable folder tree" : "ھۆججەت قىسقۇچنى قوزغىتىڭ", "Additional settings" : "قوشۇمچە تەڭشەكلەر", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/ug.json b/apps/files/l10n/ug.json index 16f5156dbcc..cfb1b0bd53c 100644 --- a/apps/files/l10n/ug.json +++ b/apps/files/l10n/ug.json @@ -159,9 +159,9 @@ "Personal files" : "شەخسىي ھۆججەتلەر", "Sort favorites first" : "ياقتۇرىدىغانلارنى رەتلەڭ", "Sort folders before files" : "ھۆججەتلەرنى ھۆججەتتىن بۇرۇن تەرتىپلەڭ", + "Enable folder tree" : "ھۆججەت قىسقۇچنى قوزغىتىڭ", "Show hidden files" : "يوشۇرۇن ھۆججەتلەرنى كۆرسەت", "Crop image previews" : "رەسىمنى ئالدىن كۆرۈش", - "Enable folder tree" : "ھۆججەت قىسقۇچنى قوزغىتىڭ", "Additional settings" : "قوشۇمچە تەڭشەكلەر", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/uk.js b/apps/files/l10n/uk.js index 738729de998..aa4c22ba21c 100644 --- a/apps/files/l10n/uk.js +++ b/apps/files/l10n/uk.js @@ -201,10 +201,12 @@ OC.L10N.register( "Personal files" : "Мої документи", "Sort favorites first" : "Спочатку показувати із зірочкою", "Sort folders before files" : "Показувати каталоги перед файлами", + "Enable folder tree" : "Увімкнути дерево каталогів", + "Visual settings" : "Візуальні налаштування", "Show hidden files" : "Показувати приховані файли", "Show file type column" : "Показувати стовпець з типом файлу", "Crop image previews" : "Попередній перегляд перед кадруванням", - "Enable folder tree" : "Увімкнути дерево каталогів", + "Show files extensions" : "Показати розширення файлів", "Additional settings" : "Додатково", "WebDAV" : "WebDAV", "WebDAV URL" : "URL-адреса WebDAV", diff --git a/apps/files/l10n/uk.json b/apps/files/l10n/uk.json index 8b11c01d9f7..515543b040a 100644 --- a/apps/files/l10n/uk.json +++ b/apps/files/l10n/uk.json @@ -199,10 +199,12 @@ "Personal files" : "Мої документи", "Sort favorites first" : "Спочатку показувати із зірочкою", "Sort folders before files" : "Показувати каталоги перед файлами", + "Enable folder tree" : "Увімкнути дерево каталогів", + "Visual settings" : "Візуальні налаштування", "Show hidden files" : "Показувати приховані файли", "Show file type column" : "Показувати стовпець з типом файлу", "Crop image previews" : "Попередній перегляд перед кадруванням", - "Enable folder tree" : "Увімкнути дерево каталогів", + "Show files extensions" : "Показати розширення файлів", "Additional settings" : "Додатково", "WebDAV" : "WebDAV", "WebDAV URL" : "URL-адреса WebDAV", diff --git a/apps/files/l10n/vi.js b/apps/files/l10n/vi.js index 74e9c23c317..41aa3c15960 100644 --- a/apps/files/l10n/vi.js +++ b/apps/files/l10n/vi.js @@ -161,9 +161,9 @@ OC.L10N.register( "All files" : "Tất cả tệp tin", "Sort favorites first" : "Sắp xếp mục yêu thích trước", "Sort folders before files" : "Sắp xếp thư mục trước tập tin", + "Enable folder tree" : "Bật cây thư mục", "Show hidden files" : "Hiển thị các tệp ẩn", "Crop image previews" : "Xén ảnh xem trước", - "Enable folder tree" : "Bật cây thư mục", "Additional settings" : "Cài đặt bổ sung", "Copy to clipboard" : "Sao chép vào bộ nhớ tạm", "Keyboard shortcuts" : "Phím tắt", diff --git a/apps/files/l10n/vi.json b/apps/files/l10n/vi.json index d9f06c48f17..374dd8a087b 100644 --- a/apps/files/l10n/vi.json +++ b/apps/files/l10n/vi.json @@ -159,9 +159,9 @@ "All files" : "Tất cả tệp tin", "Sort favorites first" : "Sắp xếp mục yêu thích trước", "Sort folders before files" : "Sắp xếp thư mục trước tập tin", + "Enable folder tree" : "Bật cây thư mục", "Show hidden files" : "Hiển thị các tệp ẩn", "Crop image previews" : "Xén ảnh xem trước", - "Enable folder tree" : "Bật cây thư mục", "Additional settings" : "Cài đặt bổ sung", "Copy to clipboard" : "Sao chép vào bộ nhớ tạm", "Keyboard shortcuts" : "Phím tắt", diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js index 3bafcd1f367..cb7c93be64f 100644 --- a/apps/files/l10n/zh_CN.js +++ b/apps/files/l10n/zh_CN.js @@ -200,10 +200,10 @@ OC.L10N.register( "Personal files" : "个人文件", "Sort favorites first" : "收藏排序优先", "Sort folders before files" : "将文件夹排在文件前面", + "Enable folder tree" : "启用文件夹树", "Show hidden files" : "显示隐藏文件", "Show file type column" : "显示文件类型列", "Crop image previews" : "裁剪图片预览", - "Enable folder tree" : "启用文件夹树", "Additional settings" : "其他设置", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json index 8ac82309e85..2d9ce91e525 100644 --- a/apps/files/l10n/zh_CN.json +++ b/apps/files/l10n/zh_CN.json @@ -198,10 +198,10 @@ "Personal files" : "个人文件", "Sort favorites first" : "收藏排序优先", "Sort folders before files" : "将文件夹排在文件前面", + "Enable folder tree" : "启用文件夹树", "Show hidden files" : "显示隐藏文件", "Show file type column" : "显示文件类型列", "Crop image previews" : "裁剪图片预览", - "Enable folder tree" : "启用文件夹树", "Additional settings" : "其他设置", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/zh_HK.js b/apps/files/l10n/zh_HK.js index 8a62fedc45f..6517c07f74f 100644 --- a/apps/files/l10n/zh_HK.js +++ b/apps/files/l10n/zh_HK.js @@ -201,10 +201,10 @@ OC.L10N.register( "Personal files" : "個人檔案", "Sort favorites first" : "先排序最愛", "Sort folders before files" : "將資料夾在檔案之前排序", + "Enable folder tree" : "啟用資料夾樹狀結構", "Show hidden files" : "顯示隱藏檔案", "Show file type column" : "顯示檔案類型縱列", "Crop image previews" : "圖片裁剪預覽", - "Enable folder tree" : "啟用資料夾樹狀結構", "Additional settings" : "其他設定", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/zh_HK.json b/apps/files/l10n/zh_HK.json index 89f1b32322c..fe2a1f1b7f6 100644 --- a/apps/files/l10n/zh_HK.json +++ b/apps/files/l10n/zh_HK.json @@ -199,10 +199,10 @@ "Personal files" : "個人檔案", "Sort favorites first" : "先排序最愛", "Sort folders before files" : "將資料夾在檔案之前排序", + "Enable folder tree" : "啟用資料夾樹狀結構", "Show hidden files" : "顯示隱藏檔案", "Show file type column" : "顯示檔案類型縱列", "Crop image previews" : "圖片裁剪預覽", - "Enable folder tree" : "啟用資料夾樹狀結構", "Additional settings" : "其他設定", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js index 45614f8a7ed..f296bc166cb 100644 --- a/apps/files/l10n/zh_TW.js +++ b/apps/files/l10n/zh_TW.js @@ -201,10 +201,12 @@ OC.L10N.register( "Personal files" : "個人檔案", "Sort favorites first" : "先排序喜愛", "Sort folders before files" : "將資料夾排序在檔案前", + "Enable folder tree" : "啟用資料夾樹", + "Visual settings" : "視覺設定", "Show hidden files" : "顯示隱藏檔", "Show file type column" : "顯示檔案類型欄位", "Crop image previews" : "圖片裁剪預覽", - "Enable folder tree" : "啟用資料夾樹", + "Show files extensions" : "顯示副檔名", "Additional settings" : "其他設定", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json index 46d708d037f..276b4cec7fe 100644 --- a/apps/files/l10n/zh_TW.json +++ b/apps/files/l10n/zh_TW.json @@ -199,10 +199,12 @@ "Personal files" : "個人檔案", "Sort favorites first" : "先排序喜愛", "Sort folders before files" : "將資料夾排序在檔案前", + "Enable folder tree" : "啟用資料夾樹", + "Visual settings" : "視覺設定", "Show hidden files" : "顯示隱藏檔", "Show file type column" : "顯示檔案類型欄位", "Crop image previews" : "圖片裁剪預覽", - "Enable folder tree" : "啟用資料夾樹", + "Show files extensions" : "顯示副檔名", "Additional settings" : "其他設定", "WebDAV" : "WebDAV", "WebDAV URL" : "WebDAV URL", diff --git a/apps/files/lib/Service/UserConfig.php b/apps/files/lib/Service/UserConfig.php index 4dae198ee55..dcf30b7796d 100644 --- a/apps/files/lib/Service/UserConfig.php +++ b/apps/files/lib/Service/UserConfig.php @@ -50,6 +50,12 @@ class UserConfig { 'allowed' => [true, false], ], [ + // Whether to show the files extensions in the files list or not + 'key' => 'show_files_extensions', + 'default' => true, + 'allowed' => [true, false], + ], + [ // Whether to show the hidden files or not in the files list 'key' => 'show_hidden', 'default' => false, diff --git a/apps/files/src/components/FileEntry/FileEntryName.vue b/apps/files/src/components/FileEntry/FileEntryName.vue index 2fec9e5d556..418f9581eb6 100644 --- a/apps/files/src/components/FileEntry/FileEntryName.vue +++ b/apps/files/src/components/FileEntry/FileEntryName.vue @@ -30,7 +30,7 @@ <span class="files-list__row-name-text" dir="auto"> <!-- Keep the filename stuck to the extension to avoid whitespace rendering issues--> <span class="files-list__row-name-" v-text="basename" /> - <span class="files-list__row-name-ext" v-text="extension" /> + <span v-if="userConfigStore.userConfig.show_files_extensions" class="files-list__row-name-ext" v-text="extension" /> </span> </component> </template> @@ -46,11 +46,12 @@ import { defineComponent, inject } from 'vue' import NcTextField from '@nextcloud/vue/components/NcTextField' -import { useNavigation } from '../../composables/useNavigation' +import { getFilenameValidity } from '../../utils/filenameValidity.ts' import { useFileListWidth } from '../../composables/useFileListWidth.ts' -import { useRouteParameters } from '../../composables/useRouteParameters.ts' +import { useNavigation } from '../../composables/useNavigation.ts' import { useRenamingStore } from '../../store/renaming.ts' -import { getFilenameValidity } from '../../utils/filenameValidity.ts' +import { useRouteParameters } from '../../composables/useRouteParameters.ts' +import { useUserConfigStore } from '../../store/userconfig.ts' import logger from '../../logger.ts' export default defineComponent({ @@ -95,6 +96,7 @@ export default defineComponent({ const { directory } = useRouteParameters() const filesListWidth = useFileListWidth() const renamingStore = useRenamingStore() + const userConfigStore = useUserConfigStore() const defaultFileAction = inject<FileAction | undefined>('defaultFileAction') @@ -105,6 +107,7 @@ export default defineComponent({ filesListWidth, renamingStore, + userConfigStore, } }, diff --git a/apps/files/src/composables/useNavigation.spec.ts b/apps/files/src/composables/useNavigation.spec.ts index 569e61825e1..b9eb671a181 100644 --- a/apps/files/src/composables/useNavigation.spec.ts +++ b/apps/files/src/composables/useNavigation.spec.ts @@ -29,6 +29,7 @@ describe('Composables: useNavigation', () => { describe('currentView', () => { beforeEach(() => { + // eslint-disable-next-line import/namespace navigation = new nextcloudFiles.Navigation() spy.mockImplementation(() => navigation) }) @@ -39,6 +40,7 @@ describe('Composables: useNavigation', () => { }) it('should return already active navigation', async () => { + // eslint-disable-next-line import/namespace const view = new nextcloudFiles.View({ getContents: () => Promise.reject(new Error()), icon: '<svg></svg>', id: 'view-1', name: 'My View 1', order: 0 }) navigation.register(view) navigation.setActive(view) @@ -48,6 +50,7 @@ describe('Composables: useNavigation', () => { }) it('should be reactive on updating active navigation', async () => { + // eslint-disable-next-line import/namespace const view = new nextcloudFiles.View({ getContents: () => Promise.reject(new Error()), icon: '<svg></svg>', id: 'view-1', name: 'My View 1', order: 0 }) navigation.register(view) const wrapper = mount(TestComponent) @@ -63,6 +66,7 @@ describe('Composables: useNavigation', () => { describe('views', () => { beforeEach(() => { + // eslint-disable-next-line import/namespace navigation = new nextcloudFiles.Navigation() spy.mockImplementation(() => navigation) }) @@ -73,6 +77,7 @@ describe('Composables: useNavigation', () => { }) it('should return already registered views', () => { + // eslint-disable-next-line import/namespace const view = new nextcloudFiles.View({ getContents: () => Promise.reject(new Error()), icon: '<svg></svg>', id: 'view-1', name: 'My View 1', order: 0 }) // register before mount navigation.register(view) @@ -82,7 +87,9 @@ describe('Composables: useNavigation', () => { }) it('should be reactive on registering new views', () => { + // eslint-disable-next-line import/namespace const view = new nextcloudFiles.View({ getContents: () => Promise.reject(new Error()), icon: '<svg></svg>', id: 'view-1', name: 'My View 1', order: 0 }) + // eslint-disable-next-line import/namespace const view2 = new nextcloudFiles.View({ getContents: () => Promise.reject(new Error()), icon: '<svg></svg>', id: 'view-2', name: 'My View 2', order: 1 }) // register before mount diff --git a/apps/files/src/plugins/search/folderSearch.ts b/apps/files/src/plugins/search/folderSearch.ts index 626b1daa72b..6aabefbfc9d 100644 --- a/apps/files/src/plugins/search/folderSearch.ts +++ b/apps/files/src/plugins/search/folderSearch.ts @@ -36,12 +36,15 @@ function init() { callback: (nodes: Node[]) => { logger.info('Folder picked', { folder: nodes[0] }) const folder = nodes[0] + const filterUpdateText = (folder.root === '/files/' + folder.basename) + ? t('files', 'Search in all files') + : t('files', 'Search in folder: {folder}', { folder: folder.basename }) emit('nextcloud:unified-search:add-filter', { id: 'in-folder', appId: 'files', searchFrom: 'files', payload: folder, - filterUpdateText: t('files', 'Search in folder: {folder}', { folder: folder.basename }), + filterUpdateText, filterParams: { path: folder.path }, }) }, diff --git a/apps/files/src/store/userconfig.ts b/apps/files/src/store/userconfig.ts index 54e9a75eb8b..48fe01d5134 100644 --- a/apps/files/src/store/userconfig.ts +++ b/apps/files/src/store/userconfig.ts @@ -15,6 +15,7 @@ const initialUserConfig = loadState<UserConfig>('files', 'config', { crop_image_previews: true, default_view: 'files', grid_view: false, + show_files_extensions: true, show_hidden: false, show_mime_column: true, sort_favorites_first: true, diff --git a/apps/files/src/types.ts b/apps/files/src/types.ts index 6757b7f1f45..0096ecc0fdb 100644 --- a/apps/files/src/types.ts +++ b/apps/files/src/types.ts @@ -55,6 +55,7 @@ export interface UserConfig { crop_image_previews: boolean default_view: 'files' | 'personal' grid_view: boolean + show_files_extensions: boolean show_hidden: boolean show_mime_column: boolean sort_favorites_first: boolean diff --git a/apps/files/src/views/Settings.vue b/apps/files/src/views/Settings.vue index f347f842c22..0838d308af9 100644 --- a/apps/files/src/views/Settings.vue +++ b/apps/files/src/views/Settings.vue @@ -29,7 +29,6 @@ {{ t('files', 'Personal files') }} </NcCheckboxRadioSwitch> </fieldset> - <NcCheckboxRadioSwitch data-cy-files-settings-setting="sort_favorites_first" :checked="userConfig.sort_favorites_first" @update:checked="setConfig('sort_favorites_first', $event)"> @@ -40,6 +39,15 @@ @update:checked="setConfig('sort_folders_first', $event)"> {{ t('files', 'Sort folders before files') }} </NcCheckboxRadioSwitch> + <NcCheckboxRadioSwitch data-cy-files-settings-setting="folder_tree" + :checked="userConfig.folder_tree" + @update:checked="setConfig('folder_tree', $event)"> + {{ t('files', 'Enable folder tree') }} + </NcCheckboxRadioSwitch> + </NcAppSettingsSection> + + <!-- Visual settings --> + <NcAppSettingsSection id="settings" :name="t('files', 'Visual settings')"> <NcCheckboxRadioSwitch data-cy-files-settings-setting="show_hidden" :checked="userConfig.show_hidden" @update:checked="setConfig('show_hidden', $event)"> @@ -55,10 +63,10 @@ @update:checked="setConfig('crop_image_previews', $event)"> {{ t('files', 'Crop image previews') }} </NcCheckboxRadioSwitch> - <NcCheckboxRadioSwitch data-cy-files-settings-setting="folder_tree" - :checked="userConfig.folder_tree" - @update:checked="setConfig('folder_tree', $event)"> - {{ t('files', 'Enable folder tree') }} + <NcCheckboxRadioSwitch data-cy-files-settings-setting="show_files_extensions" + :checked="userConfig.show_files_extensions" + @update:checked="setConfig('show_files_extensions', $event)"> + {{ t('files', 'Show files extensions') }} </NcCheckboxRadioSwitch> </NcAppSettingsSection> diff --git a/apps/files/src/views/favorites.spec.ts b/apps/files/src/views/favorites.spec.ts index e73279f2b31..f793eb9f54c 100644 --- a/apps/files/src/views/favorites.spec.ts +++ b/apps/files/src/views/favorites.spec.ts @@ -17,6 +17,7 @@ import { action } from '../actions/favoriteAction' import * as favoritesService from '../services/Favorites' import { registerFavoritesView } from './favorites' +// eslint-disable-next-line import/namespace const { Folder, getNavigation } = filesUtils vi.mock('@nextcloud/axios') diff --git a/apps/files_external/lib/Command/Verify.php b/apps/files_external/lib/Command/Verify.php index 18cbc5a6774..ecebbe0f7e6 100644 --- a/apps/files_external/lib/Command/Verify.php +++ b/apps/files_external/lib/Command/Verify.php @@ -97,7 +97,6 @@ class Verify extends Base { MountConfig::getBackendStatus( $backend->getStorageClass(), $storage->getBackendOptions(), - false ) ); } catch (InsufficientDataForMeaningfulAnswerException $e) { diff --git a/apps/files_external/lib/Controller/GlobalStoragesController.php b/apps/files_external/lib/Controller/GlobalStoragesController.php index 132295f6b35..e7274c9cfb6 100644 --- a/apps/files_external/lib/Controller/GlobalStoragesController.php +++ b/apps/files_external/lib/Controller/GlobalStoragesController.php @@ -133,7 +133,6 @@ class GlobalStoragesController extends StoragesController { * @param array $applicableUsers users for which to mount the storage * @param array $applicableGroups groups for which to mount the storage * @param int $priority priority - * @param bool $testOnly whether to storage should only test the connection or do more things * * @return DataResponse */ @@ -148,7 +147,6 @@ class GlobalStoragesController extends StoragesController { $applicableUsers, $applicableGroups, $priority, - $testOnly = true, ) { $storage = $this->createStorage( $mountPoint, @@ -181,7 +179,7 @@ class GlobalStoragesController extends StoragesController { ); } - $this->updateStorageStatus($storage, $testOnly); + $this->updateStorageStatus($storage); return new DataResponse( $storage->jsonSerialize(true), diff --git a/apps/files_external/lib/Controller/StoragesController.php b/apps/files_external/lib/Controller/StoragesController.php index 18f8d3164b7..df3a4528054 100644 --- a/apps/files_external/lib/Controller/StoragesController.php +++ b/apps/files_external/lib/Controller/StoragesController.php @@ -213,9 +213,8 @@ abstract class StoragesController extends Controller { * on whether the remote storage is available or not. * * @param StorageConfig $storage storage configuration - * @param bool $testOnly whether to storage should only test the connection or do more things */ - protected function updateStorageStatus(StorageConfig &$storage, $testOnly = true) { + protected function updateStorageStatus(StorageConfig &$storage) { try { $this->manipulateStorageConfig($storage); @@ -226,8 +225,6 @@ abstract class StoragesController extends Controller { MountConfig::getBackendStatus( $backend->getStorageClass(), $storage->getBackendOptions(), - false, - $testOnly ) ); } catch (InsufficientDataForMeaningfulAnswerException $e) { @@ -268,15 +265,14 @@ abstract class StoragesController extends Controller { * Get an external storage entry. * * @param int $id storage id - * @param bool $testOnly whether to storage should only test the connection or do more things * * @return DataResponse */ - public function show(int $id, $testOnly = true) { + public function show(int $id) { try { $storage = $this->service->getStorage($id); - $this->updateStorageStatus($storage, $testOnly); + $this->updateStorageStatus($storage); } catch (NotFoundException $e) { return new DataResponse( [ diff --git a/apps/files_external/lib/Controller/UserGlobalStoragesController.php b/apps/files_external/lib/Controller/UserGlobalStoragesController.php index 5f428db9661..88a9f936401 100644 --- a/apps/files_external/lib/Controller/UserGlobalStoragesController.php +++ b/apps/files_external/lib/Controller/UserGlobalStoragesController.php @@ -97,15 +97,14 @@ class UserGlobalStoragesController extends StoragesController { * Get an external storage entry. * * @param int $id storage id - * @param bool $testOnly whether to storage should only test the connection or do more things * @return DataResponse */ #[NoAdminRequired] - public function show($id, $testOnly = true) { + public function show($id) { try { $storage = $this->service->getStorage($id); - $this->updateStorageStatus($storage, $testOnly); + $this->updateStorageStatus($storage); } catch (NotFoundException $e) { return new DataResponse( [ @@ -133,7 +132,6 @@ class UserGlobalStoragesController extends StoragesController { * * @param int $id storage id * @param array $backendOptions backend-specific options - * @param bool $testOnly whether to storage should only test the connection or do more things * * @return DataResponse */ @@ -142,7 +140,6 @@ class UserGlobalStoragesController extends StoragesController { public function update( $id, $backendOptions, - $testOnly = true, ) { try { $storage = $this->service->getStorage($id); @@ -167,7 +164,7 @@ class UserGlobalStoragesController extends StoragesController { ); } - $this->updateStorageStatus($storage, $testOnly); + $this->updateStorageStatus($storage); $this->sanitizeStorage($storage); return new DataResponse( diff --git a/apps/files_external/lib/Controller/UserStoragesController.php b/apps/files_external/lib/Controller/UserStoragesController.php index 7b0c858e51b..7b564d57f7e 100644 --- a/apps/files_external/lib/Controller/UserStoragesController.php +++ b/apps/files_external/lib/Controller/UserStoragesController.php @@ -85,8 +85,8 @@ class UserStoragesController extends StoragesController { * {@inheritdoc} */ #[NoAdminRequired] - public function show(int $id, $testOnly = true) { - return parent::show($id, $testOnly); + public function show(int $id) { + return parent::show($id); } /** @@ -152,7 +152,6 @@ class UserStoragesController extends StoragesController { * @param string $authMechanism authentication mechanism identifier * @param array $backendOptions backend-specific options * @param array $mountOptions backend-specific mount options - * @param bool $testOnly whether to storage should only test the connection or do more things * * @return DataResponse */ @@ -165,7 +164,6 @@ class UserStoragesController extends StoragesController { $authMechanism, $backendOptions, $mountOptions, - $testOnly = true, ) { $storage = $this->createStorage( $mountPoint, @@ -195,7 +193,7 @@ class UserStoragesController extends StoragesController { ); } - $this->updateStorageStatus($storage, $testOnly); + $this->updateStorageStatus($storage); return new DataResponse( $storage->jsonSerialize(true), diff --git a/apps/files_external/lib/MountConfig.php b/apps/files_external/lib/MountConfig.php index a7d9e6f2603..5637ee71ec1 100644 --- a/apps/files_external/lib/MountConfig.php +++ b/apps/files_external/lib/MountConfig.php @@ -76,7 +76,7 @@ class MountConfig { * @return int see self::STATUS_* * @throws \Exception */ - public static function getBackendStatus($class, $options, $isPersonal, $testOnly = true) { + public static function getBackendStatus($class, $options) { if (self::$skipTest) { return StorageNotAvailableException::STATUS_SUCCESS; } @@ -93,7 +93,7 @@ class MountConfig { $storage = new $class($options); try { - $result = $storage->test($isPersonal, $testOnly); + $result = $storage->test(); $storage->setAvailability($result); if ($result) { return StorageNotAvailableException::STATUS_SUCCESS; diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js index 20d4a9b9ee1..552ddc7dfeb 100644 --- a/apps/files_sharing/l10n/de.js +++ b/apps/files_sharing/l10n/de.js @@ -210,9 +210,9 @@ OC.L10N.register( "Shared via link by {initiator}" : "Geteilt mittels Link von {initiator}", "File request ({label})" : "Dateianfrage ({label})", "Mail share ({label})" : "Mail teilen ({label})", - "Share link ({label})" : "Link teilen ({label})", + "Share link ({label})" : "Externer Link ({label})", "Mail share" : "E-Mail-Freigabe", - "Share link ({index})" : "Link teilen ({index})", + "Share link ({index})" : "Externer Link ({index})", "Create public link" : "Öffentlichen Link erstellen", "Actions for \"{title}\"" : "Aktionen für \"{title}\"", "Copy public link of \"{title}\" to clipboard" : "Öffentlichen Link von \"{title}\" in die Zwischenablage kopieren", diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json index d7561764bd8..99df8ab199c 100644 --- a/apps/files_sharing/l10n/de.json +++ b/apps/files_sharing/l10n/de.json @@ -208,9 +208,9 @@ "Shared via link by {initiator}" : "Geteilt mittels Link von {initiator}", "File request ({label})" : "Dateianfrage ({label})", "Mail share ({label})" : "Mail teilen ({label})", - "Share link ({label})" : "Link teilen ({label})", + "Share link ({label})" : "Externer Link ({label})", "Mail share" : "E-Mail-Freigabe", - "Share link ({index})" : "Link teilen ({index})", + "Share link ({index})" : "Externer Link ({index})", "Create public link" : "Öffentlichen Link erstellen", "Actions for \"{title}\"" : "Aktionen für \"{title}\"", "Copy public link of \"{title}\" to clipboard" : "Öffentlichen Link von \"{title}\" in die Zwischenablage kopieren", diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js index 599859b6be9..5d02bef1e15 100644 --- a/apps/files_sharing/l10n/ru.js +++ b/apps/files_sharing/l10n/ru.js @@ -368,6 +368,7 @@ OC.L10N.register( "List of unapproved shares." : "Список ресурсов общего доступа, которые вы еще не приняли", "No pending shares" : "Ожидающие общие ресурсы отсуствуют", "Shares you have received but not approved will show up here" : "Здесь появятся ресурсы общего доступа, которые Вам предоставлены, но еще не подтверждены с Вашей стороны", + "Error deleting the share: {errorMessage}" : "Ошибка при удалении общего ресурса: {errorMessage}", "Error deleting the share" : "Ошибка прекращения общего доступа", "Error updating the share: {errorMessage}" : "Не удалось изменить общий ресурс: {errorMessage}", "Error updating the share" : "Ошибка изменения параметров общего доступа", diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json index f570c39184c..9b6b0154230 100644 --- a/apps/files_sharing/l10n/ru.json +++ b/apps/files_sharing/l10n/ru.json @@ -366,6 +366,7 @@ "List of unapproved shares." : "Список ресурсов общего доступа, которые вы еще не приняли", "No pending shares" : "Ожидающие общие ресурсы отсуствуют", "Shares you have received but not approved will show up here" : "Здесь появятся ресурсы общего доступа, которые Вам предоставлены, но еще не подтверждены с Вашей стороны", + "Error deleting the share: {errorMessage}" : "Ошибка при удалении общего ресурса: {errorMessage}", "Error deleting the share" : "Ошибка прекращения общего доступа", "Error updating the share: {errorMessage}" : "Не удалось изменить общий ресурс: {errorMessage}", "Error updating the share" : "Ошибка изменения параметров общего доступа", diff --git a/apps/files_sharing/lib/Config/ConfigLexicon.php b/apps/files_sharing/lib/Config/ConfigLexicon.php index 3211c755fc7..c2743a2c4ce 100644 --- a/apps/files_sharing/lib/Config/ConfigLexicon.php +++ b/apps/files_sharing/lib/Config/ConfigLexicon.php @@ -22,6 +22,7 @@ use OCP\Config\ValueType; */ class ConfigLexicon implements ILexicon { public const SHOW_FEDERATED_AS_INTERNAL = 'show_federated_shares_as_internal'; + public const SHOW_FEDERATED_TO_TRUSTED_AS_INTERNAL = 'show_federated_shares_to_trusted_servers_as_internal'; public function getStrictness(): Strictness { return Strictness::IGNORE; @@ -30,6 +31,7 @@ class ConfigLexicon implements ILexicon { public function getAppConfigs(): array { return [ new Entry(self::SHOW_FEDERATED_AS_INTERNAL, ValueType::BOOL, false, 'shows federated shares as internal shares', true), + new Entry(self::SHOW_FEDERATED_TO_TRUSTED_AS_INTERNAL, ValueType::BOOL, false, 'shows federated shares to trusted servers as internal shares', true), ]; } diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php index 7591493167f..095a8a75963 100644 --- a/apps/files_sharing/lib/Controller/ShareAPIController.php +++ b/apps/files_sharing/lib/Controller/ShareAPIController.php @@ -15,6 +15,7 @@ use OC\Files\FileInfo; use OC\Files\Storage\Wrapper\Wrapper; use OCA\Circles\Api\v1\Circles; use OCA\Deck\Sharing\ShareAPIHelper; +use OCA\Federation\TrustedServers; use OCA\Files\Helper; use OCA\Files_Sharing\Exceptions\SharingRightsException; use OCA\Files_Sharing\External\Storage; @@ -76,6 +77,7 @@ use Psr\Log\LoggerInterface; class ShareAPIController extends OCSController { private ?Node $lockedNode = null; + private array $trustedServerCache = []; /** * Share20OCS constructor. @@ -100,6 +102,7 @@ class ShareAPIController extends OCSController { private IProviderFactory $factory, private IMailer $mailer, private ITagManager $tagManager, + private ?TrustedServers $trustedServers, private ?string $userId = null, ) { parent::__construct($appName, $request); @@ -202,6 +205,32 @@ class ShareAPIController extends OCSController { $result['item_size'] = $node->getSize(); $result['item_mtime'] = $node->getMTime(); + if ($this->trustedServers !== null && in_array($share->getShareType(), [IShare::TYPE_REMOTE, IShare::TYPE_REMOTE_GROUP], true)) { + $result['is_trusted_server'] = false; + $sharedWith = $share->getSharedWith(); + $remoteIdentifier = is_string($sharedWith) ? strrchr($sharedWith, '@') : false; + if ($remoteIdentifier !== false) { + $remote = substr($remoteIdentifier, 1); + + if (isset($this->trustedServerCache[$remote])) { + $result['is_trusted_server'] = $this->trustedServerCache[$remote]; + } else { + try { + $isTrusted = $this->trustedServers->isTrustedServer($remote); + $this->trustedServerCache[$remote] = $isTrusted; + $result['is_trusted_server'] = $isTrusted; + } catch (\Exception $e) { + // Server not found or other issue, we consider it not trusted + $this->trustedServerCache[$remote] = false; + $this->logger->error( + 'Error checking if remote server is trusted (treating as untrusted): ' . $e->getMessage(), + ['exception' => $e] + ); + } + } + } + } + $expiration = $share->getExpirationDate(); if ($expiration !== null) { $expiration->setTimezone($this->dateTimeZone->getTimeZone()); diff --git a/apps/files_sharing/lib/Listener/LoadSidebarListener.php b/apps/files_sharing/lib/Listener/LoadSidebarListener.php index 9f0eee9159a..88c39f38545 100644 --- a/apps/files_sharing/lib/Listener/LoadSidebarListener.php +++ b/apps/files_sharing/lib/Listener/LoadSidebarListener.php @@ -38,6 +38,7 @@ class LoadSidebarListener implements IEventListener { $appConfig = Server::get(IAppConfig::class); $this->initialState->provideInitialState('showFederatedSharesAsInternal', $appConfig->getValueBool('files_sharing', ConfigLexicon::SHOW_FEDERATED_AS_INTERNAL)); + $this->initialState->provideInitialState('showFederatedSharesToTrustedServersAsInternal', $appConfig->getValueBool('files_sharing', ConfigLexicon::SHOW_FEDERATED_TO_TRUSTED_AS_INTERNAL)); Util::addScript(Application::APP_ID, 'files_sharing_tab', 'files'); } } diff --git a/apps/files_sharing/lib/ResponseDefinitions.php b/apps/files_sharing/lib/ResponseDefinitions.php index 6b6b0fcc4b6..71a2b25a70c 100644 --- a/apps/files_sharing/lib/ResponseDefinitions.php +++ b/apps/files_sharing/lib/ResponseDefinitions.php @@ -22,6 +22,7 @@ namespace OCA\Files_Sharing; * file_target: string, * has_preview: bool, * hide_download: 0|1, + * is_trusted_server?: bool, * is-mount-root: bool, * id: string, * item_mtime: int, diff --git a/apps/files_sharing/openapi.json b/apps/files_sharing/openapi.json index 627c25ce8ea..b2df1ecb7b3 100644 --- a/apps/files_sharing/openapi.json +++ b/apps/files_sharing/openapi.json @@ -548,6 +548,9 @@ 1 ] }, + "is_trusted_server": { + "type": "boolean" + }, "is-mount-root": { "type": "boolean" }, @@ -897,40 +900,76 @@ "type": "string" }, "name": { - "$ref": "#/components/schemas/Lookup", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Lookup" + } + ] }, "email": { - "$ref": "#/components/schemas/Lookup", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Lookup" + } + ] }, "address": { - "$ref": "#/components/schemas/Lookup", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Lookup" + } + ] }, "website": { - "$ref": "#/components/schemas/Lookup", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Lookup" + } + ] }, "twitter": { - "$ref": "#/components/schemas/Lookup", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Lookup" + } + ] }, "phone": { - "$ref": "#/components/schemas/Lookup", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Lookup" + } + ] }, "twitter_signature": { - "$ref": "#/components/schemas/Lookup", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Lookup" + } + ] }, "website_signature": { - "$ref": "#/components/schemas/Lookup", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Lookup" + } + ] }, "userid": { - "$ref": "#/components/schemas/Lookup", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Lookup" + } + ] } } }, diff --git a/apps/files_sharing/src/components/SharingEntry.vue b/apps/files_sharing/src/components/SharingEntry.vue index 4ff5fae364b..1fbe740cb11 100644 --- a/apps/files_sharing/src/components/SharingEntry.vue +++ b/apps/files_sharing/src/components/SharingEntry.vue @@ -77,9 +77,9 @@ export default { title += ` (${t('files_sharing', 'group')})` } else if (this.share.type === ShareType.Room) { title += ` (${t('files_sharing', 'conversation')})` - } else if (this.share.type === ShareType.Remote) { + } else if (this.share.type === ShareType.Remote && !this.share.isTrustedServer) { title += ` (${t('files_sharing', 'remote')})` - } else if (this.share.type === ShareType.RemoteGroup) { + } else if (this.share.type === ShareType.RemoteGroup && !this.share.isTrustedServer) { title += ` (${t('files_sharing', 'remote group')})` } else if (this.share.type === ShareType.Guest) { title += ` (${t('files_sharing', 'guest')})` diff --git a/apps/files_sharing/src/components/SharingInput.vue b/apps/files_sharing/src/components/SharingInput.vue index b886ba95a17..f50dc96fc08 100644 --- a/apps/files_sharing/src/components/SharingInput.vue +++ b/apps/files_sharing/src/components/SharingInput.vue @@ -192,14 +192,27 @@ export default { lookup = true } - let shareType = [] - const remoteTypes = [ShareType.Remote, ShareType.RemoteGroup] - - if (this.isExternal && !this.config.showFederatedSharesAsInternal) { - shareType.push(...remoteTypes) + const shareType = [] + + const showFederatedAsInternal + = this.config.showFederatedSharesAsInternal + || this.config.showFederatedSharesToTrustedServersAsInternal + + const shouldAddRemoteTypes + // For internal users, add remote types if config says to show them as internal + = (!this.isExternal && showFederatedAsInternal) + // For external users, add them if config *doesn't* say to show them as internal + || (this.isExternal && !showFederatedAsInternal) + // Edge case: federated-to-trusted is a separate "add" trigger for external users + || (this.isExternal && this.config.showFederatedSharesToTrustedServersAsInternal) + + if (this.isExternal) { + if (getCapabilities().files_sharing.public.enabled === true) { + shareType.push(ShareType.Email) + } } else { - shareType = shareType.concat([ + shareType.push( ShareType.User, ShareType.Group, ShareType.Team, @@ -207,15 +220,11 @@ export default { ShareType.Guest, ShareType.Deck, ShareType.ScienceMesh, - ]) - - if (this.config.showFederatedSharesAsInternal) { - shareType.push(...remoteTypes) - } + ) } - if (getCapabilities().files_sharing.public.enabled === true && this.isExternal) { - shareType.push(ShareType.Email) + if (shouldAddRemoteTypes) { + shareType.push(...remoteTypes) } let request = null @@ -366,6 +375,11 @@ export default { // filter out existing mail shares if (share.value.shareType === ShareType.Email) { + // When sharing internally, we don't want to suggest email addresses + // that the user previously created shares to + if (!this.isExternal) { + return arr + } const emails = this.linkShares.map(elem => elem.shareWith) if (emails.indexOf(share.value.shareWith.trim()) !== -1) { return arr diff --git a/apps/files_sharing/src/models/Share.ts b/apps/files_sharing/src/models/Share.ts index fb76a655d53..b0638b29448 100644 --- a/apps/files_sharing/src/models/Share.ts +++ b/apps/files_sharing/src/models/Share.ts @@ -486,4 +486,11 @@ export default class Share { return this._share.status } + /** + * Is the share from a trusted server + */ + get isTrustedServer(): boolean { + return !!this._share.is_trusted_server + } + } diff --git a/apps/files_sharing/src/services/ConfigService.ts b/apps/files_sharing/src/services/ConfigService.ts index 2114e2d1bae..f75f34c7936 100644 --- a/apps/files_sharing/src/services/ConfigService.ts +++ b/apps/files_sharing/src/services/ConfigService.ts @@ -315,4 +315,12 @@ export default class Config { return loadState('files_sharing', 'showFederatedSharesAsInternal', false) } + /** + * Show federated shares to trusted servers as internal shares + * @return {boolean} + */ + get showFederatedSharesToTrustedServersAsInternal(): boolean { + return loadState('files_sharing', 'showFederatedSharesToTrustedServersAsInternal', false) + } + } diff --git a/apps/files_sharing/src/utils/GeneratePassword.ts b/apps/files_sharing/src/utils/GeneratePassword.ts index 2f3f65c51d8..82efaaa69d4 100644 --- a/apps/files_sharing/src/utils/GeneratePassword.ts +++ b/apps/files_sharing/src/utils/GeneratePassword.ts @@ -38,10 +38,29 @@ export default async function(verbose = false): Promise<string> { const array = new Uint8Array(10) const ratio = passwordSet.length / 255 - self.crypto.getRandomValues(array) + getRandomValues(array) let password = '' for (let i = 0; i < array.length; i++) { password += passwordSet.charAt(array[i] * ratio) } return password } + +/** + * Fills the given array with cryptographically secure random values. + * If the crypto API is not available, it falls back to less secure Math.random(). + * Crypto API is available in modern browsers on secure contexts (HTTPS). + * + * @param {Uint8Array} array - The array to fill with random values. + */ +function getRandomValues(array: Uint8Array): void { + if (self?.crypto?.getRandomValues) { + self.crypto.getRandomValues(array) + return + } + + let len = array.length + while (len--) { + array[len] = Math.floor(Math.random() * 256) + } +} diff --git a/apps/files_sharing/src/views/SharingLinkList.vue b/apps/files_sharing/src/views/SharingLinkList.vue index 3dd6fdf317b..c3d9a7f83dc 100644 --- a/apps/files_sharing/src/views/SharingLinkList.vue +++ b/apps/files_sharing/src/views/SharingLinkList.vue @@ -7,12 +7,6 @@ <ul v-if="canLinkShare" :aria-label="t('files_sharing', 'Link shares')" class="sharing-link-list"> - <!-- If no link shares, show the add link default entry --> - <SharingEntryLink v-if="!hasLinkShares && canReshare" - :can-reshare="canReshare" - :file-info="fileInfo" - @add:share="addShare" /> - <!-- Else we display the list --> <template v-if="hasShares"> <!-- using shares[index] to work with .sync --> @@ -27,6 +21,12 @@ @remove:share="removeShare" @open-sharing-details="openSharingDetails(share)" /> </template> + + <!-- If no link shares, show the add link default entry --> + <SharingEntryLink v-if="!hasLinkShares && canReshare" + :can-reshare="canReshare" + :file-info="fileInfo" + @add:share="addShare" /> </ul> </template> diff --git a/apps/files_sharing/src/views/SharingTab.vue b/apps/files_sharing/src/views/SharingTab.vue index e56201f6e06..e6acf33e04d 100644 --- a/apps/files_sharing/src/views/SharingTab.vue +++ b/apps/files_sharing/src/views/SharingTab.vue @@ -402,7 +402,13 @@ export default { if ([ShareType.Link, ShareType.Email].includes(share.type)) { this.linkShares.push(share) } else if ([ShareType.Remote, ShareType.RemoteGroup].includes(share.type)) { - if (this.config.showFederatedSharesAsInternal) { + if (this.config.showFederatedSharesToTrustedServersAsInternal) { + if (share.isTrustedServer) { + this.shares.push(share) + } else { + this.externalShares.push(share) + } + } else if (this.config.showFederatedSharesAsInternal) { this.shares.push(share) } else { this.externalShares.push(share) @@ -478,6 +484,10 @@ export default { } else if ([ShareType.Remote, ShareType.RemoteGroup].includes(share.type)) { if (this.config.showFederatedSharesAsInternal) { this.shares.unshift(share) + } if (this.config.showFederatedSharesToTrustedServersAsInternal) { + if (share.isTrustedServer) { + this.shares.unshift(share) + } } else { this.externalShares.unshift(share) } diff --git a/apps/files_sharing/tests/ApiTest.php b/apps/files_sharing/tests/ApiTest.php index 676809eebff..960f29224bb 100644 --- a/apps/files_sharing/tests/ApiTest.php +++ b/apps/files_sharing/tests/ApiTest.php @@ -13,6 +13,7 @@ use OC\Files\FileInfo; use OC\Files\Filesystem; use OC\Files\Storage\Temporary; use OC\Files\View; +use OCA\Federation\TrustedServers; use OCA\Files_Sharing\Controller\ShareAPIController; use OCP\App\IAppManager; use OCP\AppFramework\OCS\OCSBadRequestException; @@ -117,6 +118,7 @@ class ApiTest extends TestCase { $providerFactory = $this->createMock(IProviderFactory::class); $mailer = $this->createMock(IMailer::class); $tagManager = $this->createMock(ITagManager::class); + $trustedServers = $this->createMock(TrustedServers::class); $dateTimeZone->method('getTimeZone')->willReturn(new \DateTimeZone(date_default_timezone_get())); return new ShareAPIController( @@ -139,6 +141,7 @@ class ApiTest extends TestCase { $providerFactory, $mailer, $tagManager, + $trustedServers, $userId, ); } diff --git a/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php b/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php index abc405fc21c..e6be0342c26 100644 --- a/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php +++ b/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php @@ -7,6 +7,7 @@ */ namespace OCA\Files_Sharing\Tests\Controller; +use OCA\Federation\TrustedServers; use OCA\Files_Sharing\Controller\ShareAPIController; use OCP\App\IAppManager; use OCP\AppFramework\Http\DataResponse; @@ -82,6 +83,7 @@ class ShareAPIControllerTest extends TestCase { private IProviderFactory&MockObject $factory; private IMailer&MockObject $mailer; private ITagManager&MockObject $tagManager; + private TrustedServers&MockObject $trustedServers; protected function setUp(): void { $this->shareManager = $this->createMock(IManager::class); @@ -119,6 +121,7 @@ class ShareAPIControllerTest extends TestCase { $this->factory = $this->createMock(IProviderFactory::class); $this->mailer = $this->createMock(IMailer::class); $this->tagManager = $this->createMock(ITagManager::class); + $this->trustedServers = $this->createMock(TrustedServers::class); $this->ocs = new ShareAPIController( $this->appName, @@ -140,8 +143,10 @@ class ShareAPIControllerTest extends TestCase { $this->factory, $this->mailer, $this->tagManager, - $this->currentUser, + $this->trustedServers, + $this->currentUser ); + } /** @@ -169,6 +174,7 @@ class ShareAPIControllerTest extends TestCase { $this->factory, $this->mailer, $this->tagManager, + $this->trustedServers, $this->currentUser, ])->onlyMethods(['formatShare']) ->getMock(); @@ -853,6 +859,7 @@ class ShareAPIControllerTest extends TestCase { $this->factory, $this->mailer, $this->tagManager, + $this->trustedServers, $this->currentUser, ]) ->onlyMethods(['canAccessShare']) @@ -1485,6 +1492,7 @@ class ShareAPIControllerTest extends TestCase { $this->factory, $this->mailer, $this->tagManager, + $this->trustedServers, $this->currentUser, ]) ->onlyMethods(['formatShare']) @@ -1873,6 +1881,7 @@ class ShareAPIControllerTest extends TestCase { $this->factory, $this->mailer, $this->tagManager, + $this->trustedServers, $this->currentUser, ])->onlyMethods(['formatShare']) ->getMock(); @@ -1972,6 +1981,7 @@ class ShareAPIControllerTest extends TestCase { $this->factory, $this->mailer, $this->tagManager, + $this->trustedServers, $this->currentUser, ])->onlyMethods(['formatShare']) ->getMock(); @@ -2399,6 +2409,7 @@ class ShareAPIControllerTest extends TestCase { $this->factory, $this->mailer, $this->tagManager, + $this->trustedServers, $this->currentUser, ])->onlyMethods(['formatShare']) ->getMock(); @@ -2471,6 +2482,7 @@ class ShareAPIControllerTest extends TestCase { $this->factory, $this->mailer, $this->tagManager, + $this->trustedServers, $this->currentUser, ])->onlyMethods(['formatShare']) ->getMock(); @@ -2710,6 +2722,7 @@ class ShareAPIControllerTest extends TestCase { $this->factory, $this->mailer, $this->tagManager, + $this->trustedServers, $this->currentUser, ])->onlyMethods(['formatShare']) ->getMock(); @@ -4492,6 +4505,7 @@ class ShareAPIControllerTest extends TestCase { 'mount-type' => '', 'attributes' => null, 'item_permissions' => 1, + 'is_trusted_server' => false, ], $share, [], false ]; @@ -4545,6 +4559,7 @@ class ShareAPIControllerTest extends TestCase { 'mount-type' => '', 'attributes' => null, 'item_permissions' => 1, + 'is_trusted_server' => false, ], $share, [], false ]; @@ -5228,4 +5243,138 @@ class ShareAPIControllerTest extends TestCase { ['file_source' => 42, 'x' => 'y', 'tags' => ['tag1', 'tag2']], ], $result); } + + public function trustedServerProvider(): array { + return [ + 'Trusted server' => [true, true], + 'Untrusted server' => [false, false], + ]; + } + + /** + * @dataProvider trustedServerProvider + */ + public function testFormatShareWithFederatedShare(bool $isKnownServer, bool $isTrusted): void { + $nodeId = 12; + $nodePath = '/test.txt'; + $share = $this->createShare( + 1, + IShare::TYPE_REMOTE, + 'recipient@remoteserver.com', // shared with + 'sender@testserver.com', // shared by + 'shareOwner', // share owner + $nodePath, // path + Constants::PERMISSION_READ, + time(), + null, + null, + $nodePath, + $nodeId + ); + + $node = $this->createMock(\OCP\Files\File::class); + $node->method('getId')->willReturn($nodeId); + $node->method('getPath')->willReturn($nodePath); + $node->method('getInternalPath')->willReturn(ltrim($nodePath, '/')); + $mountPoint = $this->createMock(\OCP\Files\Mount\IMountPoint::class); + $mountPoint->method('getMountType')->willReturn('local'); + $node->method('getMountPoint')->willReturn($mountPoint); + $node->method('getMimetype')->willReturn('text/plain'); + $storage = $this->createMock(\OCP\Files\Storage\IStorage::class); + $storageCache = $this->createMock(\OCP\Files\Cache\ICache::class); + $storageCache->method('getNumericStorageId')->willReturn(1); + $storage->method('getCache')->willReturn($storageCache); + $storage->method('getId')->willReturn('home::shareOwner'); + $node->method('getStorage')->willReturn($storage); + $parent = $this->createMock(\OCP\Files\Folder::class); + $parent->method('getId')->willReturn(2); + $node->method('getParent')->willReturn($parent); + $node->method('getSize')->willReturn(1234); + $node->method('getMTime')->willReturn(1234567890); + + $this->previewManager->method('isAvailable')->with($node)->willReturn(false); + + $this->rootFolder->method('getUserFolder') + ->with($this->currentUser) + ->willReturnSelf(); + + $this->rootFolder->method('getFirstNodeById') + ->with($share->getNodeId()) + ->willReturn($node); + + $this->rootFolder->method('getRelativePath') + ->with($node->getPath()) + ->willReturnArgument(0); + + $serverName = 'remoteserver.com'; + $this->trustedServers->method('isTrustedServer') + ->with($serverName) + ->willReturn($isKnownServer); + + $result = $this->invokePrivate($this->ocs, 'formatShare', [$share]); + + $this->assertSame($isTrusted, $result['is_trusted_server']); + } + + public function testFormatShareWithFederatedShareWithAtInUsername(): void { + $nodeId = 12; + $nodePath = '/test.txt'; + $share = $this->createShare( + 1, + IShare::TYPE_REMOTE, + 'recipient@domain.com@remoteserver.com', + 'sender@testserver.com', + 'shareOwner', + $nodePath, + Constants::PERMISSION_READ, + time(), + null, + null, + $nodePath, + $nodeId + ); + + $node = $this->createMock(\OCP\Files\File::class); + $node->method('getId')->willReturn($nodeId); + $node->method('getPath')->willReturn($nodePath); + $node->method('getInternalPath')->willReturn(ltrim($nodePath, '/')); + $mountPoint = $this->createMock(\OCP\Files\Mount\IMountPoint::class); + $mountPoint->method('getMountType')->willReturn('local'); + $node->method('getMountPoint')->willReturn($mountPoint); + $node->method('getMimetype')->willReturn('text/plain'); + $storage = $this->createMock(\OCP\Files\Storage\IStorage::class); + $storageCache = $this->createMock(\OCP\Files\Cache\ICache::class); + $storageCache->method('getNumericStorageId')->willReturn(1); + $storage->method('getCache')->willReturn($storageCache); + $storage->method('getId')->willReturn('home::shareOwner'); + $node->method('getStorage')->willReturn($storage); + $parent = $this->createMock(\OCP\Files\Folder::class); + $parent->method('getId')->willReturn(2); + $node->method('getParent')->willReturn($parent); + $node->method('getSize')->willReturn(1234); + $node->method('getMTime')->willReturn(1234567890); + + $this->previewManager->method('isAvailable')->with($node)->willReturn(false); + + $this->rootFolder->method('getUserFolder') + ->with($this->currentUser) + ->willReturnSelf(); + + $this->rootFolder->method('getFirstNodeById') + ->with($share->getNodeId()) + ->willReturn($node); + + $this->rootFolder->method('getRelativePath') + ->with($node->getPath()) + ->willReturnArgument(0); + + $serverName = 'remoteserver.com'; + $this->trustedServers->method('isTrustedServer') + ->with($serverName) + ->willReturn(true); + + $result = $this->invokePrivate($this->ocs, 'formatShare', [$share]); + + $this->assertTrue($result['is_trusted_server']); + } } diff --git a/apps/files_sharing/tests/External/CacheTest.php b/apps/files_sharing/tests/External/CacheTest.php index 60820013f11..39e2057a24c 100644 --- a/apps/files_sharing/tests/External/CacheTest.php +++ b/apps/files_sharing/tests/External/CacheTest.php @@ -54,11 +54,11 @@ class CacheTest extends TestCase { $this->contactsManager = $this->createMock(IManager::class); $this->cloudIdManager = new CloudIdManager( + $this->createMock(ICacheFactory::class), + $this->createMock(IEventDispatcher::class), $this->contactsManager, $this->createMock(IURLGenerator::class), $this->createMock(IUserManager::class), - $this->createMock(ICacheFactory::class), - $this->createMock(IEventDispatcher::class) ); $this->remoteUser = $this->getUniqueID('remoteuser'); diff --git a/apps/files_sharing/tests/External/ManagerTest.php b/apps/files_sharing/tests/External/ManagerTest.php index fbe6eb1e85b..14c6afec4d8 100644 --- a/apps/files_sharing/tests/External/ManagerTest.php +++ b/apps/files_sharing/tests/External/ManagerTest.php @@ -90,11 +90,11 @@ class ManagerTest extends TestCase { $this->testMountProvider = new MountProvider(Server::get(IDBConnection::class), function () { return $this->manager; }, new CloudIdManager( + $this->createMock(ICacheFactory::class), + $this->createMock(IEventDispatcher::class), $this->contactsManager, $this->createMock(IURLGenerator::class), $this->userManager, - $this->createMock(ICacheFactory::class), - $this->createMock(IEventDispatcher::class) )); $group1 = $this->createMock(IGroup::class); diff --git a/apps/files_versions/composer/composer/autoload_classmap.php b/apps/files_versions/composer/composer/autoload_classmap.php index 9c83924ab7c..27e68decdcc 100644 --- a/apps/files_versions/composer/composer/autoload_classmap.php +++ b/apps/files_versions/composer/composer/autoload_classmap.php @@ -17,6 +17,7 @@ return array( 'OCA\\Files_Versions\\Db\\VersionEntity' => $baseDir . '/../lib/Db/VersionEntity.php', 'OCA\\Files_Versions\\Db\\VersionsMapper' => $baseDir . '/../lib/Db/VersionsMapper.php', 'OCA\\Files_Versions\\Events\\CreateVersionEvent' => $baseDir . '/../lib/Events/CreateVersionEvent.php', + 'OCA\\Files_Versions\\Events\\VersionCreatedEvent' => $baseDir . '/../lib/Events/VersionCreatedEvent.php', 'OCA\\Files_Versions\\Events\\VersionRestoredEvent' => $baseDir . '/../lib/Events/VersionRestoredEvent.php', 'OCA\\Files_Versions\\Expiration' => $baseDir . '/../lib/Expiration.php', 'OCA\\Files_Versions\\Listener\\FileEventsListener' => $baseDir . '/../lib/Listener/FileEventsListener.php', diff --git a/apps/files_versions/composer/composer/autoload_static.php b/apps/files_versions/composer/composer/autoload_static.php index 1d95663ac55..8ecc1cb0137 100644 --- a/apps/files_versions/composer/composer/autoload_static.php +++ b/apps/files_versions/composer/composer/autoload_static.php @@ -32,6 +32,7 @@ class ComposerStaticInitFiles_Versions 'OCA\\Files_Versions\\Db\\VersionEntity' => __DIR__ . '/..' . '/../lib/Db/VersionEntity.php', 'OCA\\Files_Versions\\Db\\VersionsMapper' => __DIR__ . '/..' . '/../lib/Db/VersionsMapper.php', 'OCA\\Files_Versions\\Events\\CreateVersionEvent' => __DIR__ . '/..' . '/../lib/Events/CreateVersionEvent.php', + 'OCA\\Files_Versions\\Events\\VersionCreatedEvent' => __DIR__ . '/..' . '/../lib/Events/VersionCreatedEvent.php', 'OCA\\Files_Versions\\Events\\VersionRestoredEvent' => __DIR__ . '/..' . '/../lib/Events/VersionRestoredEvent.php', 'OCA\\Files_Versions\\Expiration' => __DIR__ . '/..' . '/../lib/Expiration.php', 'OCA\\Files_Versions\\Listener\\FileEventsListener' => __DIR__ . '/..' . '/../lib/Listener/FileEventsListener.php', diff --git a/apps/files_versions/l10n/ru.js b/apps/files_versions/l10n/ru.js index 9472af2f1a3..ecdf5913c52 100644 --- a/apps/files_versions/l10n/ru.js +++ b/apps/files_versions/l10n/ru.js @@ -3,7 +3,7 @@ OC.L10N.register( { "Versions" : "Версии", "This application automatically maintains older versions of files that are changed." : "Приложение служит для обработки старых версий изменённых файлов.", - "This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user's directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the account does not run out of Quota because of versions.\n\t\tIn addition to the expiry of versions, the versions app makes certain never to use more than 50% of the account's currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation." : "Это приложение автоматически поддерживает старые версии файлов, которые были изменены. Если оно включено, в каталоге каждого пользователя создается папка \"Скрытые версии\", которая используется для хранения старых версий файлов. Пользователь может в любой момент вернуться к более старой версии через веб-интерфейс, при этом замененный файл станет версией. Приложение автоматически управляет папкой версий, чтобы гарантировать, что квота учетной записи не исчерпается из-за изменений версий.\n\t\tВ дополнение к истечению срока действия версий, приложение \"Версии\" гарантирует, что вы никогда не будете использовать более 50% доступного в данный момент свободного места в учетной записи. Если сохраненные версии превысят это ограничение, приложение сначала удалит самые старые версии, пока не достигнет этого ограничения. Более подробная информация доступна в документации по версиям.", + "This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user's directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the account does not run out of Quota because of versions.\n\t\tIn addition to the expiry of versions, the versions app makes certain never to use more than 50% of the account's currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation." : "Это приложение автоматически поддерживает старые версии файлов, которые были изменены. Если оно включено, в каталоге каждого пользователя создаётся папка \"Скрытые версии\", которая используется для хранения старых версий файлов. Пользователь может в любой момент вернуться к более старой версии через веб-интерфейс, при этом заменённый файл станет версией. Приложение автоматически управляет папкой версий, чтобы гарантировать, что квота учётной записи не исчерпается из-за изменений версий.\n\t\tВ дополнение к истечению срока действия версий, приложение \"Версии\" гарантирует, что вы никогда не будете использовать более 50% доступного в данный момент свободного места в учётной записи. Если сохранённые версии превысят это ограничение, приложение сначала удалит самые старые версии, пока не достигнет этого ограничения. Более подробная информация доступна в документации по версиям.", "Current version" : "Текущая версия", "Initial version" : "Первоначальная версия", "You" : "Вы", diff --git a/apps/files_versions/l10n/ru.json b/apps/files_versions/l10n/ru.json index f0870081d62..96392c99021 100644 --- a/apps/files_versions/l10n/ru.json +++ b/apps/files_versions/l10n/ru.json @@ -1,7 +1,7 @@ { "translations": { "Versions" : "Версии", "This application automatically maintains older versions of files that are changed." : "Приложение служит для обработки старых версий изменённых файлов.", - "This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user's directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the account does not run out of Quota because of versions.\n\t\tIn addition to the expiry of versions, the versions app makes certain never to use more than 50% of the account's currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation." : "Это приложение автоматически поддерживает старые версии файлов, которые были изменены. Если оно включено, в каталоге каждого пользователя создается папка \"Скрытые версии\", которая используется для хранения старых версий файлов. Пользователь может в любой момент вернуться к более старой версии через веб-интерфейс, при этом замененный файл станет версией. Приложение автоматически управляет папкой версий, чтобы гарантировать, что квота учетной записи не исчерпается из-за изменений версий.\n\t\tВ дополнение к истечению срока действия версий, приложение \"Версии\" гарантирует, что вы никогда не будете использовать более 50% доступного в данный момент свободного места в учетной записи. Если сохраненные версии превысят это ограничение, приложение сначала удалит самые старые версии, пока не достигнет этого ограничения. Более подробная информация доступна в документации по версиям.", + "This application automatically maintains older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user's directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. The app automatically manages the versions folder to ensure the account does not run out of Quota because of versions.\n\t\tIn addition to the expiry of versions, the versions app makes certain never to use more than 50% of the account's currently available free space. If stored versions exceed this limit, the app will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation." : "Это приложение автоматически поддерживает старые версии файлов, которые были изменены. Если оно включено, в каталоге каждого пользователя создаётся папка \"Скрытые версии\", которая используется для хранения старых версий файлов. Пользователь может в любой момент вернуться к более старой версии через веб-интерфейс, при этом заменённый файл станет версией. Приложение автоматически управляет папкой версий, чтобы гарантировать, что квота учётной записи не исчерпается из-за изменений версий.\n\t\tВ дополнение к истечению срока действия версий, приложение \"Версии\" гарантирует, что вы никогда не будете использовать более 50% доступного в данный момент свободного места в учётной записи. Если сохранённые версии превысят это ограничение, приложение сначала удалит самые старые версии, пока не достигнет этого ограничения. Более подробная информация доступна в документации по версиям.", "Current version" : "Текущая версия", "Initial version" : "Первоначальная версия", "You" : "Вы", diff --git a/apps/files_versions/lib/Events/VersionCreatedEvent.php b/apps/files_versions/lib/Events/VersionCreatedEvent.php new file mode 100644 index 00000000000..4dc7a7cb505 --- /dev/null +++ b/apps/files_versions/lib/Events/VersionCreatedEvent.php @@ -0,0 +1,39 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\Files_Versions\Events; + +use OCA\Files_Versions\Versions\IVersion; +use OCP\EventDispatcher\Event; +use OCP\Files\Node; + +/** + * Event dispatched after a successful creation of a version + */ +class VersionCreatedEvent extends Event { + public function __construct( + private Node $node, + private IVersion $version, + ) { + parent::__construct(); + } + + /** + * Node of the file that has been versioned + */ + public function getNode(): Node { + return $this->node; + } + + /** + * Version of the file that was created + */ + public function getVersion(): IVersion { + return $this->version; + } +} diff --git a/apps/files_versions/lib/Versions/INeedSyncVersionBackend.php b/apps/files_versions/lib/Versions/INeedSyncVersionBackend.php index 4faeaa48513..e52e2f8e8bc 100644 --- a/apps/files_versions/lib/Versions/INeedSyncVersionBackend.php +++ b/apps/files_versions/lib/Versions/INeedSyncVersionBackend.php @@ -8,13 +8,18 @@ declare(strict_types=1); */ namespace OCA\Files_Versions\Versions; +use OCA\Files_Versions\Db\VersionEntity; use OCP\Files\File; /** * @since 28.0.0 */ interface INeedSyncVersionBackend { - public function createVersionEntity(File $file): void; + /** + * TODO: Convert return type to strong type once all implementations are fixed. + * @return null|VersionEntity + */ + public function createVersionEntity(File $file); public function updateVersionEntity(File $sourceFile, int $revision, array $properties): void; public function deleteVersionsEntity(File $file): void; } diff --git a/apps/files_versions/lib/Versions/LegacyVersionsBackend.php b/apps/files_versions/lib/Versions/LegacyVersionsBackend.php index 40180674b7c..48d69d31629 100644 --- a/apps/files_versions/lib/Versions/LegacyVersionsBackend.php +++ b/apps/files_versions/lib/Versions/LegacyVersionsBackend.php @@ -229,7 +229,7 @@ class LegacyVersionsBackend implements IVersionBackend, IDeletableVersionBackend $this->versionsMapper->delete($versionEntity); } - public function createVersionEntity(File $file): void { + public function createVersionEntity(File $file): ?VersionEntity { $versionEntity = new VersionEntity(); $versionEntity->setFileId($file->getId()); $versionEntity->setTimestamp($file->getMTime()); @@ -241,8 +241,7 @@ class LegacyVersionsBackend implements IVersionBackend, IDeletableVersionBackend while ($tries < 5) { try { $this->versionsMapper->insert($versionEntity); - /* No errors, get out of the method */ - return; + return $versionEntity; } catch (\OCP\DB\Exception $e) { if (!in_array($e->getReason(), [ \OCP\DB\Exception::REASON_CONSTRAINT_VIOLATION, @@ -257,6 +256,8 @@ class LegacyVersionsBackend implements IVersionBackend, IDeletableVersionBackend $this->logger->warning('Constraint violation while inserting version, retrying with increased timestamp', ['exception' => $e]); } } + + return null; } public function updateVersionEntity(File $sourceFile, int $revision, array $properties): void { diff --git a/apps/files_versions/lib/Versions/VersionManager.php b/apps/files_versions/lib/Versions/VersionManager.php index f72e451f368..9acea8c6513 100644 --- a/apps/files_versions/lib/Versions/VersionManager.php +++ b/apps/files_versions/lib/Versions/VersionManager.php @@ -8,6 +8,8 @@ declare(strict_types=1); */ namespace OCA\Files_Versions\Versions; +use OCA\Files_Versions\Db\VersionEntity; +use OCA\Files_Versions\Events\VersionCreatedEvent; use OCA\Files_Versions\Events\VersionRestoredEvent; use OCP\EventDispatcher\IEventDispatcher; use OCP\Files\File; @@ -129,7 +131,16 @@ class VersionManager implements IVersionManager, IDeletableVersionBackend, INeed public function createVersionEntity(File $file): void { $backend = $this->getBackendForStorage($file->getStorage()); if ($backend instanceof INeedSyncVersionBackend) { - $backend->createVersionEntity($file); + $versionEntity = $backend->createVersionEntity($file); + + if ($versionEntity instanceof VersionEntity) { + foreach ($backend->getVersionsForFile($file->getOwner(), $file) as $version) { + if ($version->getRevisionId() === $versionEntity->getTimestamp()) { + $this->dispatcher->dispatchTyped(new VersionCreatedEvent($file, $version)); + break; + } + } + } } } diff --git a/apps/provisioning_api/l10n/de.js b/apps/provisioning_api/l10n/de.js index 155d7f9c848..f4e30f174f7 100644 --- a/apps/provisioning_api/l10n/de.js +++ b/apps/provisioning_api/l10n/de.js @@ -13,6 +13,7 @@ OC.L10N.register( "Invalid password value" : "Ungültiger Passwort-Wert", "An email address is required, to send a password link to the user." : "Um dem Benutzer einen Passwortlink zu senden, ist eine E-Mail-Adresse erforderlich.", "Required email address was not provided" : "Erforderliche E-Mail-Adresse wurde nicht angegeben", + "User creation failed" : "Benutzererstellung fehlgeschlagen", "Invalid quota value: %1$s" : "Ungültiger Wert für Speicherkontigent: %1$s", "Invalid quota value. %1$s is exceeding the maximum quota" : "Ungültiger Wert für Speicherkontigent. %1$s überschreitet das maximale Kontigent", "Unlimited quota is forbidden on this instance" : "Unbegrenztes Speicherkontigent ist auf dieser Instanz unzulässig", diff --git a/apps/provisioning_api/l10n/de.json b/apps/provisioning_api/l10n/de.json index 0fa532f48cd..85c24424b21 100644 --- a/apps/provisioning_api/l10n/de.json +++ b/apps/provisioning_api/l10n/de.json @@ -11,6 +11,7 @@ "Invalid password value" : "Ungültiger Passwort-Wert", "An email address is required, to send a password link to the user." : "Um dem Benutzer einen Passwortlink zu senden, ist eine E-Mail-Adresse erforderlich.", "Required email address was not provided" : "Erforderliche E-Mail-Adresse wurde nicht angegeben", + "User creation failed" : "Benutzererstellung fehlgeschlagen", "Invalid quota value: %1$s" : "Ungültiger Wert für Speicherkontigent: %1$s", "Invalid quota value. %1$s is exceeding the maximum quota" : "Ungültiger Wert für Speicherkontigent. %1$s überschreitet das maximale Kontigent", "Unlimited quota is forbidden on this instance" : "Unbegrenztes Speicherkontigent ist auf dieser Instanz unzulässig", diff --git a/apps/provisioning_api/l10n/de_DE.js b/apps/provisioning_api/l10n/de_DE.js index b72a261fca5..0a44ee87126 100644 --- a/apps/provisioning_api/l10n/de_DE.js +++ b/apps/provisioning_api/l10n/de_DE.js @@ -13,6 +13,7 @@ OC.L10N.register( "Invalid password value" : "Ungültiger Passwort-Wert", "An email address is required, to send a password link to the user." : "Um dem Benutzer einen Passwortlink zu senden, ist eine E-Mail-Adresse erforderlich.", "Required email address was not provided" : "Erforderliche E-Mail-Adresse wurde nicht angegeben", + "User creation failed" : "Benutzererstellung fehlgeschlagen", "Invalid quota value: %1$s" : "Ungültiger Wert für Speicherkontigent: %1$s", "Invalid quota value. %1$s is exceeding the maximum quota" : "Ungültiger Wert für Speicherkontigent. %1$s überschreitet das maximale Kontigent", "Unlimited quota is forbidden on this instance" : "Unbegrenztes Speicherkontigent ist auf dieser Instanz unzulässig", diff --git a/apps/provisioning_api/l10n/de_DE.json b/apps/provisioning_api/l10n/de_DE.json index e52417da126..84036ced30b 100644 --- a/apps/provisioning_api/l10n/de_DE.json +++ b/apps/provisioning_api/l10n/de_DE.json @@ -11,6 +11,7 @@ "Invalid password value" : "Ungültiger Passwort-Wert", "An email address is required, to send a password link to the user." : "Um dem Benutzer einen Passwortlink zu senden, ist eine E-Mail-Adresse erforderlich.", "Required email address was not provided" : "Erforderliche E-Mail-Adresse wurde nicht angegeben", + "User creation failed" : "Benutzererstellung fehlgeschlagen", "Invalid quota value: %1$s" : "Ungültiger Wert für Speicherkontigent: %1$s", "Invalid quota value. %1$s is exceeding the maximum quota" : "Ungültiger Wert für Speicherkontigent. %1$s überschreitet das maximale Kontigent", "Unlimited quota is forbidden on this instance" : "Unbegrenztes Speicherkontigent ist auf dieser Instanz unzulässig", diff --git a/apps/provisioning_api/l10n/et_EE.js b/apps/provisioning_api/l10n/et_EE.js new file mode 100644 index 00000000000..2081f8c467c --- /dev/null +++ b/apps/provisioning_api/l10n/et_EE.js @@ -0,0 +1,41 @@ +OC.L10N.register( + "provisioning_api", + { + "Logged in account must be an administrator or have authorization to edit this setting." : "Sisselogitud kasutajakonto peab olema peakasutajat või omama eraldi õigust selle seadustuse muutmiseks.", + "User already exists" : "Kasutaja on juba olemas", + "Group %1$s does not exist" : "%1$s gruppi pole olemas", + "Insufficient privileges for group %1$s" : "%1$s grupi jaoks pole pole piisavalt õigusi", + "No group specified (required for sub-admins)" : "Ühtegi gruppi pole määratud (vajalik peakasutajate alamgrupi puhul)", + "Sub-admin group does not exist" : "Peakasutajate alamgruppi pole olemas", + "Cannot create sub-admins for admin group" : "Peakasutajate grupi alamgruppi loomine ei õnnestu", + "No permissions to promote sub-admins" : "Pole õigusi peakasutajat alamgruppi määramiseks", + "Invalid password value" : "Vigane salasõna väärtus", + "An email address is required, to send a password link to the user." : "Salasõnalingi saatmiseks kasutajale on vajalik e-posti aadress.", + "Required email address was not provided" : "Vajalik e-posti aadress on lisamata", + "User creation failed" : "Kasutaja loomine ei õnnestunud", + "Invalid quota value: %1$s" : "Vigane kvoodi väärtus: %1$s", + "Invalid quota value. %1$s is exceeding the maximum quota" : "Vigane kvoodi väärtus. %1$s üledab maksimumkvoodi piiri", + "Unlimited quota is forbidden on this instance" : "Piiramatu kvoodi kasutamine on selles serveris keelatud", + "Setting the password is not supported by the users backend" : "Salasõna lisamine pole kasutajate taustateenuse poolt toetatud", + "Invalid language" : "Vigane keel", + "Invalid locale" : "Vigane lokaat", + "Invalid first day of week" : "Vigane nädala esimene päev", + "Cannot remove yourself from the admin group" : "Sa ei saa end peakasutajate grupist eemaldada", + "Cannot remove yourself from this group as you are a sub-admin" : "Kuna oled peakasutajate alamgrupi liige, siis sa ei saa end eemaldada", + "Not viable to remove user from the last group you are sub-admin of" : "Pole mõistlik eemaldada kasutajat viimasest grupist, kus oled peakasutajate alamgrupi liige", + "User does not exist" : "Kasutajat pole olemas", + "Group does not exist" : "Gruppi pole olemas", + "User is not a sub-admin of this group" : "Kasutaja pole selle grupi peakasutajate alamgrupi liige", + "Email address not available" : "E-posti aadress pole saadaval", + "Sending email failed" : "E-kirja saatmine ei õnnestunud", + "Email confirmation" : "E-posti aadressi kinnitamine", + "To enable the email address %s please click the button below." : "%s e-posti aadressi kinnitamiseks palun klõpsi järgnevat nuppu.", + "Confirm" : "Kinnita", + "Email was already removed from account and cannot be confirmed anymore." : "E-posti aadress on kasutaja andmetest eemaldatud ja seda ei saa enam kinnitada.", + "Could not verify mail because the token is expired." : "Kuna tunnusluba on aegunud, siis e-posti aadressi kinnitamine pole võimalik.", + "Could not verify mail because the token is invalid." : "Kuna tunnusluba on vigane, siis e-posti aadressi kinnitamine pole võimalik.", + "An unexpected error occurred. Please contact your admin." : "Tekkis ootamatu viga. Palun võta ühendust peakasutajaga.", + "Email confirmation successful" : "E-posti aadressi kinnitamine õnnestus.", + "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "See rakendus võtab kasutusele sellised API-d mis võimaldavad välistel süsteemidel hallata kasutajakontosid, gruppe ja rakendusi." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/provisioning_api/l10n/et_EE.json b/apps/provisioning_api/l10n/et_EE.json new file mode 100644 index 00000000000..f339e224be0 --- /dev/null +++ b/apps/provisioning_api/l10n/et_EE.json @@ -0,0 +1,39 @@ +{ "translations": { + "Logged in account must be an administrator or have authorization to edit this setting." : "Sisselogitud kasutajakonto peab olema peakasutajat või omama eraldi õigust selle seadustuse muutmiseks.", + "User already exists" : "Kasutaja on juba olemas", + "Group %1$s does not exist" : "%1$s gruppi pole olemas", + "Insufficient privileges for group %1$s" : "%1$s grupi jaoks pole pole piisavalt õigusi", + "No group specified (required for sub-admins)" : "Ühtegi gruppi pole määratud (vajalik peakasutajate alamgrupi puhul)", + "Sub-admin group does not exist" : "Peakasutajate alamgruppi pole olemas", + "Cannot create sub-admins for admin group" : "Peakasutajate grupi alamgruppi loomine ei õnnestu", + "No permissions to promote sub-admins" : "Pole õigusi peakasutajat alamgruppi määramiseks", + "Invalid password value" : "Vigane salasõna väärtus", + "An email address is required, to send a password link to the user." : "Salasõnalingi saatmiseks kasutajale on vajalik e-posti aadress.", + "Required email address was not provided" : "Vajalik e-posti aadress on lisamata", + "User creation failed" : "Kasutaja loomine ei õnnestunud", + "Invalid quota value: %1$s" : "Vigane kvoodi väärtus: %1$s", + "Invalid quota value. %1$s is exceeding the maximum quota" : "Vigane kvoodi väärtus. %1$s üledab maksimumkvoodi piiri", + "Unlimited quota is forbidden on this instance" : "Piiramatu kvoodi kasutamine on selles serveris keelatud", + "Setting the password is not supported by the users backend" : "Salasõna lisamine pole kasutajate taustateenuse poolt toetatud", + "Invalid language" : "Vigane keel", + "Invalid locale" : "Vigane lokaat", + "Invalid first day of week" : "Vigane nädala esimene päev", + "Cannot remove yourself from the admin group" : "Sa ei saa end peakasutajate grupist eemaldada", + "Cannot remove yourself from this group as you are a sub-admin" : "Kuna oled peakasutajate alamgrupi liige, siis sa ei saa end eemaldada", + "Not viable to remove user from the last group you are sub-admin of" : "Pole mõistlik eemaldada kasutajat viimasest grupist, kus oled peakasutajate alamgrupi liige", + "User does not exist" : "Kasutajat pole olemas", + "Group does not exist" : "Gruppi pole olemas", + "User is not a sub-admin of this group" : "Kasutaja pole selle grupi peakasutajate alamgrupi liige", + "Email address not available" : "E-posti aadress pole saadaval", + "Sending email failed" : "E-kirja saatmine ei õnnestunud", + "Email confirmation" : "E-posti aadressi kinnitamine", + "To enable the email address %s please click the button below." : "%s e-posti aadressi kinnitamiseks palun klõpsi järgnevat nuppu.", + "Confirm" : "Kinnita", + "Email was already removed from account and cannot be confirmed anymore." : "E-posti aadress on kasutaja andmetest eemaldatud ja seda ei saa enam kinnitada.", + "Could not verify mail because the token is expired." : "Kuna tunnusluba on aegunud, siis e-posti aadressi kinnitamine pole võimalik.", + "Could not verify mail because the token is invalid." : "Kuna tunnusluba on vigane, siis e-posti aadressi kinnitamine pole võimalik.", + "An unexpected error occurred. Please contact your admin." : "Tekkis ootamatu viga. Palun võta ühendust peakasutajaga.", + "Email confirmation successful" : "E-posti aadressi kinnitamine õnnestus.", + "This application enables a set of APIs that external systems can use to manage accounts, groups and apps." : "See rakendus võtab kasutusele sellised API-d mis võimaldavad välistel süsteemidel hallata kasutajakontosid, gruppe ja rakendusi." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/provisioning_api/l10n/pt_BR.js b/apps/provisioning_api/l10n/pt_BR.js index cff70469649..4fbd4024484 100644 --- a/apps/provisioning_api/l10n/pt_BR.js +++ b/apps/provisioning_api/l10n/pt_BR.js @@ -13,6 +13,7 @@ OC.L10N.register( "Invalid password value" : "Valor de senha inválido", "An email address is required, to send a password link to the user." : "É necessário um endereço de e-mail, para enviar um link de senha para o usuário.", "Required email address was not provided" : "O endereço de e-mail obrigatório não foi fornecido", + "User creation failed" : "Falha na criação do usuário", "Invalid quota value: %1$s" : "Valor de cota inválido: %1$s", "Invalid quota value. %1$s is exceeding the maximum quota" : "Valor de cota inválido. %1$s está excedendo a cota máxima", "Unlimited quota is forbidden on this instance" : "Cota ilimitada é proibida nesta instância", diff --git a/apps/provisioning_api/l10n/pt_BR.json b/apps/provisioning_api/l10n/pt_BR.json index d074bd9e832..bb951174d30 100644 --- a/apps/provisioning_api/l10n/pt_BR.json +++ b/apps/provisioning_api/l10n/pt_BR.json @@ -11,6 +11,7 @@ "Invalid password value" : "Valor de senha inválido", "An email address is required, to send a password link to the user." : "É necessário um endereço de e-mail, para enviar um link de senha para o usuário.", "Required email address was not provided" : "O endereço de e-mail obrigatório não foi fornecido", + "User creation failed" : "Falha na criação do usuário", "Invalid quota value: %1$s" : "Valor de cota inválido: %1$s", "Invalid quota value. %1$s is exceeding the maximum quota" : "Valor de cota inválido. %1$s está excedendo a cota máxima", "Unlimited quota is forbidden on this instance" : "Cota ilimitada é proibida nesta instância", diff --git a/apps/provisioning_api/l10n/uk.js b/apps/provisioning_api/l10n/uk.js index f41d2ec4b18..11c218eea89 100644 --- a/apps/provisioning_api/l10n/uk.js +++ b/apps/provisioning_api/l10n/uk.js @@ -13,6 +13,7 @@ OC.L10N.register( "Invalid password value" : "Недійсне значення паролю", "An email address is required, to send a password link to the user." : "Для надсилання посилання на пароль користувачеві необхідна адреса електронної пошти.", "Required email address was not provided" : "Не зазначено обов'язкової ел. адреси", + "User creation failed" : "Не вдалося створити користувача", "Invalid quota value: %1$s" : "Недійсне значення квоти: %1$s", "Invalid quota value. %1$s is exceeding the maximum quota" : "Недійсне значення квоти: %1$s перебільшує максимальну квоту", "Unlimited quota is forbidden on this instance" : "Необмежену квоту заборонено на цьому примірнику", diff --git a/apps/provisioning_api/l10n/uk.json b/apps/provisioning_api/l10n/uk.json index bfd245a4a94..09884faa2e7 100644 --- a/apps/provisioning_api/l10n/uk.json +++ b/apps/provisioning_api/l10n/uk.json @@ -11,6 +11,7 @@ "Invalid password value" : "Недійсне значення паролю", "An email address is required, to send a password link to the user." : "Для надсилання посилання на пароль користувачеві необхідна адреса електронної пошти.", "Required email address was not provided" : "Не зазначено обов'язкової ел. адреси", + "User creation failed" : "Не вдалося створити користувача", "Invalid quota value: %1$s" : "Недійсне значення квоти: %1$s", "Invalid quota value. %1$s is exceeding the maximum quota" : "Недійсне значення квоти: %1$s перебільшує максимальну квоту", "Unlimited quota is forbidden on this instance" : "Необмежену квоту заборонено на цьому примірнику", diff --git a/apps/provisioning_api/l10n/zh_TW.js b/apps/provisioning_api/l10n/zh_TW.js index 038c95a537d..716e6e0ee44 100644 --- a/apps/provisioning_api/l10n/zh_TW.js +++ b/apps/provisioning_api/l10n/zh_TW.js @@ -13,6 +13,7 @@ OC.L10N.register( "Invalid password value" : "無效的密碼值", "An email address is required, to send a password link to the user." : "電子郵件地址必填,用來寄送密碼連結給使用者。", "Required email address was not provided" : "未提供必要的電子郵件地址", + "User creation failed" : "使用者建立失敗", "Invalid quota value: %1$s" : "無效的空間限額值:%1$s", "Invalid quota value. %1$s is exceeding the maximum quota" : "無效的空間限額值。%1$s 超過了最大空間限額", "Unlimited quota is forbidden on this instance" : "此站台禁止無限空間限額", diff --git a/apps/provisioning_api/l10n/zh_TW.json b/apps/provisioning_api/l10n/zh_TW.json index 91cffa5ce90..e8b80a3f1d2 100644 --- a/apps/provisioning_api/l10n/zh_TW.json +++ b/apps/provisioning_api/l10n/zh_TW.json @@ -11,6 +11,7 @@ "Invalid password value" : "無效的密碼值", "An email address is required, to send a password link to the user." : "電子郵件地址必填,用來寄送密碼連結給使用者。", "Required email address was not provided" : "未提供必要的電子郵件地址", + "User creation failed" : "使用者建立失敗", "Invalid quota value: %1$s" : "無效的空間限額值:%1$s", "Invalid quota value. %1$s is exceeding the maximum quota" : "無效的空間限額值。%1$s 超過了最大空間限額", "Unlimited quota is forbidden on this instance" : "此站台禁止無限空間限額", diff --git a/apps/provisioning_api/lib/Controller/UsersController.php b/apps/provisioning_api/lib/Controller/UsersController.php index 51b18306b51..1d1d0e8d2f9 100644 --- a/apps/provisioning_api/lib/Controller/UsersController.php +++ b/apps/provisioning_api/lib/Controller/UsersController.php @@ -542,10 +542,16 @@ class UsersController extends AUserDataOCSController { throw new OCSException($this->l10n->t('Required email address was not provided'), 110); } + // Create the user try { $newUser = $this->userManager->createUser($userid, $password); - $this->logger->info('Successful addUser call with userid: ' . $userid, ['app' => 'ocs_api']); + if (!$newUser instanceof IUser) { + // If the user is not an instance of IUser, it means the user creation failed + $this->logger->error('Failed addUser attempt: User creation failed.', ['app' => 'ocs_api']); + throw new OCSException($this->l10n->t('User creation failed'), 111); + } + $this->logger->info('Successful addUser call with userid: ' . $userid, ['app' => 'ocs_api']); foreach ($groups as $group) { $this->groupManager->get($group)->addUser($newUser); $this->logger->info('Added userid ' . $userid . ' to group ' . $group, ['app' => 'ocs_api']); diff --git a/apps/provisioning_api/tests/Controller/UsersControllerTest.php b/apps/provisioning_api/tests/Controller/UsersControllerTest.php index 85ec9e374d6..e838cd16633 100644 --- a/apps/provisioning_api/tests/Controller/UsersControllerTest.php +++ b/apps/provisioning_api/tests/Controller/UsersControllerTest.php @@ -452,7 +452,8 @@ class UsersControllerTest extends TestCase { $this->userManager ->expects($this->once()) ->method('createUser') - ->with('NewUser', 'PasswordOfTheNewUser'); + ->with('NewUser', 'PasswordOfTheNewUser') + ->willReturn($this->createMock(IUser::class)); $this->logger ->expects($this->once()) ->method('info') @@ -517,7 +518,8 @@ class UsersControllerTest extends TestCase { $this->userManager ->expects($this->once()) ->method('createUser') - ->with('NewUser', 'PasswordOfTheNewUser'); + ->with('NewUser', 'PasswordOfTheNewUser') + ->willReturn($this->createMock(IUser::class)); $this->logger ->expects($this->once()) ->method('info') @@ -567,7 +569,8 @@ class UsersControllerTest extends TestCase { $this->userManager ->expects($this->once()) ->method('createUser') - ->with($this->anything(), 'PasswordOfTheNewUser'); + ->with($this->anything(), 'PasswordOfTheNewUser') + ->willReturn($this->createMock(IUser::class)); $this->logger ->expects($this->once()) ->method('info') diff --git a/apps/settings/l10n/et_EE.js b/apps/settings/l10n/et_EE.js index ee2b8f74787..dfff7899eb5 100644 --- a/apps/settings/l10n/et_EE.js +++ b/apps/settings/l10n/et_EE.js @@ -23,13 +23,13 @@ OC.L10N.register( "{actor} added you to group {group}" : "{actor} lisas sind gruppi {group}", "You added {user} to group {group}" : "Sa lisasid kasutaja {user} gruppi {group}", "{actor} added {user} to group {group}" : "{actor} lisas kasutaja {user} gruppi {group}", - "An administrator added you to group {group}" : "Administraator lisas sind gruppi {group}", - "An administrator added {user} to group {group}" : "Administraator lisas kasutaja {user} gruppi {group}", + "An administrator added you to group {group}" : "Peakasutaja lisas sind gruppi {group}", + "An administrator added {user} to group {group}" : "Peakasutaja lisas kasutaja {user} gruppi {group}", "{actor} removed you from group {group}" : "{actor} eemaldas sind grupist {group}", "You removed {user} from group {group}" : "Sa eemaldasid kasutaja {user} grupist {group}", "{actor} removed {user} from group {group}" : "{actor} eemaldas kasutaja {user} grupist {group}", - "An administrator removed you from group {group}" : "Administraator eemaldas sind grupist {group}", - "An administrator removed {user} from group {group}" : "Administraator eemaldas kasutaja {user} grupist {group}", + "An administrator removed you from group {group}" : "Peakasutaja eemaldas sind grupist {group}", + "An administrator removed {user} from group {group}" : "Peakasutaja eemaldas kasutaja {user} grupist {group}", "Your <strong>group memberships</strong> were modified" : "Sinu <strong>grupide liikmelisus</strong> on muutunud", "{actor} changed your password" : "{actor} muutis sinu salasõna", "You changed your password" : "Sa muutsid oma salasõna", @@ -37,7 +37,7 @@ OC.L10N.register( "Your password was reset" : "Sinu salasõna on lähtestatud", "{actor} changed your email address" : "{actor} muutis sinu e-posti aadressi", "You changed your email address" : "Sa muutsid oma e-posti aadressi", - "Your email address was changed by an administrator" : "Administraator muutis sinu e-posti aadressi", + "Your email address was changed by an administrator" : "Peakasutaja muutis sinu e-posti aadressi", "You created an app password for a session named \"{token}\"" : "Tegid rakenduse salasõna sessioonile nimega „{token}“", "An administrator created an app password for a session named \"{token}\"" : "Peakasutaja tegi rakenduse salasõna sessioonile nimega „{token}“", "You deleted app password \"{token}\"" : "Sina kustutasid rakenduse salasõna „{token}“", @@ -60,9 +60,9 @@ OC.L10N.register( "Unable to change password. Password too long." : "Salasõna muutmine ei õnnestu. Salasõna on liiga pikk.", "Authentication error" : "Autentimise viga", "Please provide an admin recovery password; otherwise, all account data will be lost." : "Palun sisesta peakasutaja taastesalasõna - vastasel juhul kaotad ligipääsu kõikidele kasutajakonto andmetele.", - "Wrong admin recovery password. Please check the password and try again." : "Vale administraatori taastesalasõna. Palun kontrolli salasõna ning proovi uuesti.", + "Wrong admin recovery password. Please check the password and try again." : "Vale peakasutaja taastesalasõna. Palun kontrolli salasõna ning proovi uuesti.", "Backend does not support password change, but the encryption of the account key was updated." : "Taustateenus ei toeta salasõna muutmist, aga kasutajakonto võtme krüptimine sai uuendatud.", - "Administrator documentation" : "Administraatori dokumentatsioon", + "Administrator documentation" : "Dokumentatsioon peakasutajale", "User documentation" : "Kasutaja dokumentatsioon", "Nextcloud help overview" : "Nextcloudi abiteabe ülevaade", "Invalid SMTP password." : "Vale SMTP salasõna.", @@ -90,9 +90,9 @@ OC.L10N.register( "Your password on %s was reset." : "Sinu salasõna „%s“ sai lähtestatud.", "Password for %1$s changed on %2$s" : "%1$s salasõna teenuses %2$s on muutunud", "Password changed for %s" : "%s salasõna on muudetud", - "If you did not request this, please contact an administrator." : "Kui sa pole seda taotlenud, võta ühendust administraatoriga.", + "If you did not request this, please contact an administrator." : "Kui sa pole seda taotlenud, võta ühendust peakasutajaga.", "Your email address on %s was changed." : "Sinu %s e-posti aadressi muudeti.", - "Your email address on %s was changed by an administrator." : "Administraator muutis sinu %s e-posti aadressi.", + "Your email address on %s was changed by an administrator." : "Peakasutaja muutis sinu %s e-posti aadressi.", "Email address for %1$s changed on %2$s" : "%1$s e-posti aadress muudetud %2$s", "Email address changed for %s" : "%s e-posti aadress muudetud", "The new email address is %s" : "Uus e-posti aadress on %s", @@ -130,7 +130,7 @@ OC.L10N.register( "Background jobs" : "Taustal toimivad haldustoimingud", "Unlimited" : "Piiramatult", "Verifying" : "Kontrollin", - "Allowed admin IP ranges" : "Süsteemihalduseks lubatud IP-aadresside vahemikus", + "Allowed admin IP ranges" : "Süsteemihalduseks lubatud IP-aadresside vahemikud", "Admin IP filtering isn't applied." : "Süsteemihalduseks lubatud IP-aadresside vahemikud pole seadistatud.", "Configuration key \"%1$s\" expects an array (%2$s found). Admin IP range validation will not be applied." : "Seadistuste võtmes „%1$s“ peab olema kirjas massiiv ( aga leidsime „%2$s“). Süsteemihalduseks lubatud IP-aadresside filtreerimine hetkel ei toimi.", "Configuration key \"%1$s\" contains invalid IP range(s): \"%2$s\"" : "Seadistuste võtmes „%1$s“ on vigane IP-aadressi(de) vahemik: „%2$s“", @@ -351,7 +351,7 @@ OC.L10N.register( "View in store" : "Vaata poes", "Visit website" : "Külasta veebisaiti", "Usage documentation" : "Kasutusjuhend", - "Admin documentation" : "Administraatori dokumentatsioon", + "Admin documentation" : "Dokumentatsioon peakasutajale", "Developer documentation" : "Arendaja dokumentatsioon", "Details" : "Üksikasjad", "All" : "Kõik", @@ -563,7 +563,7 @@ OC.L10N.register( "Password or insufficient permissions message" : "Teavitus salasõna või puuduvate õiguste kohta", "Avatar" : "Tunnuspilt ehk avatar", "Account name" : "Kasutajakonto nimi", - "Group admin for" : "Grupi admin", + "Group admin for" : "Grupi peakasutaja", "Account backend" : "Kasutajakonto taustateenus", "Storage location" : "Salvestusruumi asukoht", "First login" : "Esimene sisselogimine", @@ -632,7 +632,7 @@ OC.L10N.register( "No devices configured." : "Ühtegi seadet pole seadistatud.", "The following devices are configured for your account:" : "Järgmised seadmed on seadistatud kasutama sinu kontot:", "Your browser does not support WebAuthn." : "Sinu veebibrauseril puudub WebAuthni tugi.", - "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Administraatorina saad jagamise valikuid täpselt seadistada. Lisateavet leiad dokumentatsioonist.", + "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Peakasutajana saad jagamise valikuid täpselt seadistada. Lisateavet leiad dokumentatsioonist.", "You need to enable the File sharing App." : "Sa pead kasutusele võtma Failijagamise rakenduse.", "App Store" : "Rakendustepood", "Loading app list" : "Laadin rakenduste loendit", @@ -641,7 +641,7 @@ OC.L10N.register( "Version {version}, {license}-licensed" : "Versioon {version}, avaldatud {license} litsentsi alusel", "Version {version}" : "Versioon {version}", "All accounts" : "Kõik kasutajakontod", - "Admins" : "Haldurid", + "Admins" : "Peakasutajad", "Account group: {group}" : "Kasutajakontode grupp: {group}", "Account management" : "Kasutajakontode haldus", "Sending…" : "Saadan...", @@ -704,7 +704,7 @@ OC.L10N.register( "Error while updating device token name" : "Viga seadme tunnusloa nime uuendamisel", "Error while updating device token scope" : "Viga seadme tunnusloa toimeala uuendamisel", "Could not set group sorting" : "Grupi järjestamise määramine ei õnnestunud", - "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Sinu võrgust tuli liiga palju päringuid. Proovi hiljem uuesti, või võta ühendust administraatoriga, kui tegu on veaga.", + "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Sinu võrgust tuli liiga palju päringuid. Proovi hiljem uuesti, või võta ühendust peakasutajaga, kui tegu on veaga.", "Error" : "Viga", "Account documentation" : "Kasutajakonto juhendid", "Administration documentation" : "Süsteemihalduse juhendid", @@ -748,6 +748,7 @@ OC.L10N.register( "This community release of Nextcloud is unsupported and instant notifications are unavailable." : "See Nextcloudi kogukonnaversioon pole toetatud ja kiirteavitused pole saadaval.", "Use a second factor besides your password to increase security for your account." : "Sinu kasutajakonto turvalisuse parandamiseks kasuta lisaks oma salasõnale ka teist autentimisvõimalust.", "If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Kui kasutad kolmanda osapoole rakenduses Nextcloudi ühendust, siis palun taga, et sa lood ja seadistad rakenduse salasõna enne kaheastmelise autentimise kasutusele võtmist.", + "Logged in account must be a subadmin" : "Sisselogitud kasutajakonto peab olema peakasutajate alamgrupi liige", "File locking" : "Failide lukustus", "The PHP memory limit is below the recommended value of %s." : "PHP mälukasutuse ülempiir on väiksem, kui soovitatav %s.", "for WebAuthn passwordless login" : "WebAuthn salasõnata sisselogimise jaoks", diff --git a/apps/settings/l10n/et_EE.json b/apps/settings/l10n/et_EE.json index e19887d5a3f..e642931fd77 100644 --- a/apps/settings/l10n/et_EE.json +++ b/apps/settings/l10n/et_EE.json @@ -21,13 +21,13 @@ "{actor} added you to group {group}" : "{actor} lisas sind gruppi {group}", "You added {user} to group {group}" : "Sa lisasid kasutaja {user} gruppi {group}", "{actor} added {user} to group {group}" : "{actor} lisas kasutaja {user} gruppi {group}", - "An administrator added you to group {group}" : "Administraator lisas sind gruppi {group}", - "An administrator added {user} to group {group}" : "Administraator lisas kasutaja {user} gruppi {group}", + "An administrator added you to group {group}" : "Peakasutaja lisas sind gruppi {group}", + "An administrator added {user} to group {group}" : "Peakasutaja lisas kasutaja {user} gruppi {group}", "{actor} removed you from group {group}" : "{actor} eemaldas sind grupist {group}", "You removed {user} from group {group}" : "Sa eemaldasid kasutaja {user} grupist {group}", "{actor} removed {user} from group {group}" : "{actor} eemaldas kasutaja {user} grupist {group}", - "An administrator removed you from group {group}" : "Administraator eemaldas sind grupist {group}", - "An administrator removed {user} from group {group}" : "Administraator eemaldas kasutaja {user} grupist {group}", + "An administrator removed you from group {group}" : "Peakasutaja eemaldas sind grupist {group}", + "An administrator removed {user} from group {group}" : "Peakasutaja eemaldas kasutaja {user} grupist {group}", "Your <strong>group memberships</strong> were modified" : "Sinu <strong>grupide liikmelisus</strong> on muutunud", "{actor} changed your password" : "{actor} muutis sinu salasõna", "You changed your password" : "Sa muutsid oma salasõna", @@ -35,7 +35,7 @@ "Your password was reset" : "Sinu salasõna on lähtestatud", "{actor} changed your email address" : "{actor} muutis sinu e-posti aadressi", "You changed your email address" : "Sa muutsid oma e-posti aadressi", - "Your email address was changed by an administrator" : "Administraator muutis sinu e-posti aadressi", + "Your email address was changed by an administrator" : "Peakasutaja muutis sinu e-posti aadressi", "You created an app password for a session named \"{token}\"" : "Tegid rakenduse salasõna sessioonile nimega „{token}“", "An administrator created an app password for a session named \"{token}\"" : "Peakasutaja tegi rakenduse salasõna sessioonile nimega „{token}“", "You deleted app password \"{token}\"" : "Sina kustutasid rakenduse salasõna „{token}“", @@ -58,9 +58,9 @@ "Unable to change password. Password too long." : "Salasõna muutmine ei õnnestu. Salasõna on liiga pikk.", "Authentication error" : "Autentimise viga", "Please provide an admin recovery password; otherwise, all account data will be lost." : "Palun sisesta peakasutaja taastesalasõna - vastasel juhul kaotad ligipääsu kõikidele kasutajakonto andmetele.", - "Wrong admin recovery password. Please check the password and try again." : "Vale administraatori taastesalasõna. Palun kontrolli salasõna ning proovi uuesti.", + "Wrong admin recovery password. Please check the password and try again." : "Vale peakasutaja taastesalasõna. Palun kontrolli salasõna ning proovi uuesti.", "Backend does not support password change, but the encryption of the account key was updated." : "Taustateenus ei toeta salasõna muutmist, aga kasutajakonto võtme krüptimine sai uuendatud.", - "Administrator documentation" : "Administraatori dokumentatsioon", + "Administrator documentation" : "Dokumentatsioon peakasutajale", "User documentation" : "Kasutaja dokumentatsioon", "Nextcloud help overview" : "Nextcloudi abiteabe ülevaade", "Invalid SMTP password." : "Vale SMTP salasõna.", @@ -88,9 +88,9 @@ "Your password on %s was reset." : "Sinu salasõna „%s“ sai lähtestatud.", "Password for %1$s changed on %2$s" : "%1$s salasõna teenuses %2$s on muutunud", "Password changed for %s" : "%s salasõna on muudetud", - "If you did not request this, please contact an administrator." : "Kui sa pole seda taotlenud, võta ühendust administraatoriga.", + "If you did not request this, please contact an administrator." : "Kui sa pole seda taotlenud, võta ühendust peakasutajaga.", "Your email address on %s was changed." : "Sinu %s e-posti aadressi muudeti.", - "Your email address on %s was changed by an administrator." : "Administraator muutis sinu %s e-posti aadressi.", + "Your email address on %s was changed by an administrator." : "Peakasutaja muutis sinu %s e-posti aadressi.", "Email address for %1$s changed on %2$s" : "%1$s e-posti aadress muudetud %2$s", "Email address changed for %s" : "%s e-posti aadress muudetud", "The new email address is %s" : "Uus e-posti aadress on %s", @@ -128,7 +128,7 @@ "Background jobs" : "Taustal toimivad haldustoimingud", "Unlimited" : "Piiramatult", "Verifying" : "Kontrollin", - "Allowed admin IP ranges" : "Süsteemihalduseks lubatud IP-aadresside vahemikus", + "Allowed admin IP ranges" : "Süsteemihalduseks lubatud IP-aadresside vahemikud", "Admin IP filtering isn't applied." : "Süsteemihalduseks lubatud IP-aadresside vahemikud pole seadistatud.", "Configuration key \"%1$s\" expects an array (%2$s found). Admin IP range validation will not be applied." : "Seadistuste võtmes „%1$s“ peab olema kirjas massiiv ( aga leidsime „%2$s“). Süsteemihalduseks lubatud IP-aadresside filtreerimine hetkel ei toimi.", "Configuration key \"%1$s\" contains invalid IP range(s): \"%2$s\"" : "Seadistuste võtmes „%1$s“ on vigane IP-aadressi(de) vahemik: „%2$s“", @@ -349,7 +349,7 @@ "View in store" : "Vaata poes", "Visit website" : "Külasta veebisaiti", "Usage documentation" : "Kasutusjuhend", - "Admin documentation" : "Administraatori dokumentatsioon", + "Admin documentation" : "Dokumentatsioon peakasutajale", "Developer documentation" : "Arendaja dokumentatsioon", "Details" : "Üksikasjad", "All" : "Kõik", @@ -561,7 +561,7 @@ "Password or insufficient permissions message" : "Teavitus salasõna või puuduvate õiguste kohta", "Avatar" : "Tunnuspilt ehk avatar", "Account name" : "Kasutajakonto nimi", - "Group admin for" : "Grupi admin", + "Group admin for" : "Grupi peakasutaja", "Account backend" : "Kasutajakonto taustateenus", "Storage location" : "Salvestusruumi asukoht", "First login" : "Esimene sisselogimine", @@ -630,7 +630,7 @@ "No devices configured." : "Ühtegi seadet pole seadistatud.", "The following devices are configured for your account:" : "Järgmised seadmed on seadistatud kasutama sinu kontot:", "Your browser does not support WebAuthn." : "Sinu veebibrauseril puudub WebAuthni tugi.", - "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Administraatorina saad jagamise valikuid täpselt seadistada. Lisateavet leiad dokumentatsioonist.", + "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Peakasutajana saad jagamise valikuid täpselt seadistada. Lisateavet leiad dokumentatsioonist.", "You need to enable the File sharing App." : "Sa pead kasutusele võtma Failijagamise rakenduse.", "App Store" : "Rakendustepood", "Loading app list" : "Laadin rakenduste loendit", @@ -639,7 +639,7 @@ "Version {version}, {license}-licensed" : "Versioon {version}, avaldatud {license} litsentsi alusel", "Version {version}" : "Versioon {version}", "All accounts" : "Kõik kasutajakontod", - "Admins" : "Haldurid", + "Admins" : "Peakasutajad", "Account group: {group}" : "Kasutajakontode grupp: {group}", "Account management" : "Kasutajakontode haldus", "Sending…" : "Saadan...", @@ -702,7 +702,7 @@ "Error while updating device token name" : "Viga seadme tunnusloa nime uuendamisel", "Error while updating device token scope" : "Viga seadme tunnusloa toimeala uuendamisel", "Could not set group sorting" : "Grupi järjestamise määramine ei õnnestunud", - "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Sinu võrgust tuli liiga palju päringuid. Proovi hiljem uuesti, või võta ühendust administraatoriga, kui tegu on veaga.", + "There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Sinu võrgust tuli liiga palju päringuid. Proovi hiljem uuesti, või võta ühendust peakasutajaga, kui tegu on veaga.", "Error" : "Viga", "Account documentation" : "Kasutajakonto juhendid", "Administration documentation" : "Süsteemihalduse juhendid", @@ -746,6 +746,7 @@ "This community release of Nextcloud is unsupported and instant notifications are unavailable." : "See Nextcloudi kogukonnaversioon pole toetatud ja kiirteavitused pole saadaval.", "Use a second factor besides your password to increase security for your account." : "Sinu kasutajakonto turvalisuse parandamiseks kasuta lisaks oma salasõnale ka teist autentimisvõimalust.", "If you use third party applications to connect to Nextcloud, please make sure to create and configure an app password for each before enabling second factor authentication." : "Kui kasutad kolmanda osapoole rakenduses Nextcloudi ühendust, siis palun taga, et sa lood ja seadistad rakenduse salasõna enne kaheastmelise autentimise kasutusele võtmist.", + "Logged in account must be a subadmin" : "Sisselogitud kasutajakonto peab olema peakasutajate alamgrupi liige", "File locking" : "Failide lukustus", "The PHP memory limit is below the recommended value of %s." : "PHP mälukasutuse ülempiir on väiksem, kui soovitatav %s.", "for WebAuthn passwordless login" : "WebAuthn salasõnata sisselogimise jaoks", diff --git a/apps/sharebymail/lib/ShareByMailProvider.php b/apps/sharebymail/lib/ShareByMailProvider.php index 16a13786ea1..d28f7c51327 100644 --- a/apps/sharebymail/lib/ShareByMailProvider.php +++ b/apps/sharebymail/lib/ShareByMailProvider.php @@ -637,11 +637,6 @@ class ShareByMailProvider extends DefaultShareProvider implements IShareProvider return $token; } - /** - * Get all children of this share - * - * @return IShare[] - */ public function getChildren(IShare $parent): array { $children = []; diff --git a/apps/twofactor_backupcodes/l10n/es.js b/apps/twofactor_backupcodes/l10n/es.js index 2a53036ac9d..1f0621f4a8c 100644 --- a/apps/twofactor_backupcodes/l10n/es.js +++ b/apps/twofactor_backupcodes/l10n/es.js @@ -2,22 +2,22 @@ OC.L10N.register( "twofactor_backupcodes", { "You created two-factor backup codes for your account" : "Has creado códigos de respaldo para la autenticación de dos factores para tu cuenta", - "Second-factor backup codes" : "Códigos de respaldo para verificación en dos pasos", + "Second-factor backup codes" : "Códigos de respaldo para el segundo factor", "Generate backup codes" : "Generar códigos de respaldo", "You enabled two-factor authentication but did not generate backup codes yet. They are needed to restore access to your account in case you lose your second factor." : "Ha habilitado la autenticación de dos factores pero no ha generado aún los códigos de respaldo. Estos son necesarios para acceder a su cuenta en caso de pérdida del segundo factor.", "Backup code" : "Código de respaldo", "Use backup code" : "Usar código de respaldo", - "Two factor backup codes" : "Códigos de respaldo de la verificación en dos pasos", + "Two factor backup codes" : "Códigos de respaldo para la verificación de dos factores", "A two-factor auth backup codes provider" : "Un proveedor de códigos respaldo para autenticación de dos factores", - "An error occurred while generating your backup codes" : "Ha ocurrido un error mientras se generaban los códigos de respaldo.", + "An error occurred while generating your backup codes" : "Ha ocurrido un error mientras se generaban sus códigos de respaldo.", "Backup codes have been generated. {used} of {total} codes have been used." : "Se han generado códigos de respaldo. Se han usado {used} de {total} códigos.", - "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Estos son tus códigos de respaldo. Por favor, guárdalos y/o imprímelos, porque no podrás volver a verlos más tarde.", + "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Estos son sus códigos de respaldo. Por favor, guárdelos y/o imprima los mismos, ya que no podrá volver a verlos más tarde.", "Save backup codes" : "Guardar códigos de respaldo", "Print backup codes" : "Imprimir códigos de respaldo", "Regenerate backup codes" : "Regenerar códigos de respaldo", "If you regenerate backup codes, you automatically invalidate old codes." : "Si regenera los códigos de respaldo, automáticamente invalidará los antiguos.", "{name} backup codes" : "Códigos de respaldo {name}", - "Use one of the backup codes you saved when setting up two-factor authentication." : "Usa uno de los códigos de respaldo que guardaste cuando activaste la autenticación de dos factores.", + "Use one of the backup codes you saved when setting up two-factor authentication." : "Use uno de los códigos de respaldo que guardó cuando activó la autenticación de dos factores.", "Submit" : "Enviar" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/twofactor_backupcodes/l10n/es.json b/apps/twofactor_backupcodes/l10n/es.json index da669378de8..bad78f7b72d 100644 --- a/apps/twofactor_backupcodes/l10n/es.json +++ b/apps/twofactor_backupcodes/l10n/es.json @@ -1,21 +1,21 @@ { "translations": { "You created two-factor backup codes for your account" : "Has creado códigos de respaldo para la autenticación de dos factores para tu cuenta", - "Second-factor backup codes" : "Códigos de respaldo para verificación en dos pasos", + "Second-factor backup codes" : "Códigos de respaldo para el segundo factor", "Generate backup codes" : "Generar códigos de respaldo", "You enabled two-factor authentication but did not generate backup codes yet. They are needed to restore access to your account in case you lose your second factor." : "Ha habilitado la autenticación de dos factores pero no ha generado aún los códigos de respaldo. Estos son necesarios para acceder a su cuenta en caso de pérdida del segundo factor.", "Backup code" : "Código de respaldo", "Use backup code" : "Usar código de respaldo", - "Two factor backup codes" : "Códigos de respaldo de la verificación en dos pasos", + "Two factor backup codes" : "Códigos de respaldo para la verificación de dos factores", "A two-factor auth backup codes provider" : "Un proveedor de códigos respaldo para autenticación de dos factores", - "An error occurred while generating your backup codes" : "Ha ocurrido un error mientras se generaban los códigos de respaldo.", + "An error occurred while generating your backup codes" : "Ha ocurrido un error mientras se generaban sus códigos de respaldo.", "Backup codes have been generated. {used} of {total} codes have been used." : "Se han generado códigos de respaldo. Se han usado {used} de {total} códigos.", - "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Estos son tus códigos de respaldo. Por favor, guárdalos y/o imprímelos, porque no podrás volver a verlos más tarde.", + "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Estos son sus códigos de respaldo. Por favor, guárdelos y/o imprima los mismos, ya que no podrá volver a verlos más tarde.", "Save backup codes" : "Guardar códigos de respaldo", "Print backup codes" : "Imprimir códigos de respaldo", "Regenerate backup codes" : "Regenerar códigos de respaldo", "If you regenerate backup codes, you automatically invalidate old codes." : "Si regenera los códigos de respaldo, automáticamente invalidará los antiguos.", "{name} backup codes" : "Códigos de respaldo {name}", - "Use one of the backup codes you saved when setting up two-factor authentication." : "Usa uno de los códigos de respaldo que guardaste cuando activaste la autenticación de dos factores.", + "Use one of the backup codes you saved when setting up two-factor authentication." : "Use uno de los códigos de respaldo que guardó cuando activó la autenticación de dos factores.", "Submit" : "Enviar" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/user_ldap/l10n/ru.js b/apps/user_ldap/l10n/ru.js index 30ab9ad0e15..e9abc7d540c 100644 --- a/apps/user_ldap/l10n/ru.js +++ b/apps/user_ldap/l10n/ru.js @@ -199,7 +199,7 @@ OC.L10N.register( "User Home Folder Naming Rule" : "Правило именования домашнего каталога пользователя", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Оставьте пустым для использования имени пользователя (по умолчанию) или укажите атрибут LDAP/AD.", "\"$home\" Placeholder Field" : "Поле-заполнитель \"$home\"", - "$home in an external storage configuration will be replaced with the value of the specified attribute" : "В конфигурации внешнего хранилища $home будет заменен значением указанного атрибута", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "В конфигурации внешнего хранилища $home будет заменён значением указанного атрибута", "User Profile Attributes" : "Атрибуты профиля пользователей", "Phone Field" : "Поле телефона", "User profile Phone will be set from the specified attribute" : "Телефон в профиле пользователя будет установлен из указанного атрибута", diff --git a/apps/user_ldap/l10n/ru.json b/apps/user_ldap/l10n/ru.json index eea51dcf3a7..97ac0b1eeb3 100644 --- a/apps/user_ldap/l10n/ru.json +++ b/apps/user_ldap/l10n/ru.json @@ -197,7 +197,7 @@ "User Home Folder Naming Rule" : "Правило именования домашнего каталога пользователя", "Leave empty for username (default). Otherwise, specify an LDAP/AD attribute." : "Оставьте пустым для использования имени пользователя (по умолчанию) или укажите атрибут LDAP/AD.", "\"$home\" Placeholder Field" : "Поле-заполнитель \"$home\"", - "$home in an external storage configuration will be replaced with the value of the specified attribute" : "В конфигурации внешнего хранилища $home будет заменен значением указанного атрибута", + "$home in an external storage configuration will be replaced with the value of the specified attribute" : "В конфигурации внешнего хранилища $home будет заменён значением указанного атрибута", "User Profile Attributes" : "Атрибуты профиля пользователей", "Phone Field" : "Поле телефона", "User profile Phone will be set from the specified attribute" : "Телефон в профиле пользователя будет установлен из указанного атрибута", diff --git a/apps/user_status/openapi.json b/apps/user_status/openapi.json index 65d9af59fef..d1018fa26e6 100644 --- a/apps/user_status/openapi.json +++ b/apps/user_status/openapi.json @@ -124,8 +124,12 @@ "type": "string" }, "clearAt": { - "$ref": "#/components/schemas/ClearAt", - "nullable": true + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/ClearAt" + } + ] } } }, diff --git a/apps/workflowengine/l10n/mk.js b/apps/workflowengine/l10n/mk.js index 357509f3896..a7f641f0aff 100644 --- a/apps/workflowengine/l10n/mk.js +++ b/apps/workflowengine/l10n/mk.js @@ -47,13 +47,19 @@ OC.L10N.register( "Select a file type" : "Изберете вид на датотека", "e.g. httpd/unix-directory" : "Пр. httpd/unix-directory", "Please enter a valid time span" : "Внесете валиден времески осег", + "Android client" : "Android клиент", + "iOS client" : "iOS клиент", "Desktop client" : "Клиент за компјутер", "Select groups" : "Одбери групи", "Groups" : "Групи", + "Select a trigger" : "Избери активатор", + "At least one event must be selected" : "Најмалку едно мора да биде означено", + "Add new flow" : "Додади нов проток", "Active" : "Активно", "Save" : "Зачувај", "When" : "Кога", "and" : "и", + "Add a new filter" : "Додади нов филтер", "Cancel" : "Откажи", "Delete" : "Избриши", "Available flows" : "Достапни протоци", @@ -75,6 +81,7 @@ OC.L10N.register( "less or equals" : "помалку или еднакво", "greater or equals" : "поголемо или еднакво", "greater" : "поголемо", + "Request remote address" : "Барање од надворешна адреса", "matches IPv4" : "се совпаѓањаат IPv4", "does not match IPv4" : "не се совпаѓаат IPv4", "matches IPv6" : "се совпаѓањаат IPv6", @@ -82,8 +89,11 @@ OC.L10N.register( "File system tag" : "Датотека со системска ознака", "is tagged with" : "е означена со", "is not tagged with" : "не е означена со", + "Request URL" : "Барање URL", + "Request time" : "Време на барање", "between" : "помеѓу", "not between" : "не помеѓу", + "Request user agent" : "Барање од кориснички агент", "is member of" : "е член на", "is not member of" : "не е член на" }, diff --git a/apps/workflowengine/l10n/mk.json b/apps/workflowengine/l10n/mk.json index a50e5edf93c..f2ef7213da4 100644 --- a/apps/workflowengine/l10n/mk.json +++ b/apps/workflowengine/l10n/mk.json @@ -45,13 +45,19 @@ "Select a file type" : "Изберете вид на датотека", "e.g. httpd/unix-directory" : "Пр. httpd/unix-directory", "Please enter a valid time span" : "Внесете валиден времески осег", + "Android client" : "Android клиент", + "iOS client" : "iOS клиент", "Desktop client" : "Клиент за компјутер", "Select groups" : "Одбери групи", "Groups" : "Групи", + "Select a trigger" : "Избери активатор", + "At least one event must be selected" : "Најмалку едно мора да биде означено", + "Add new flow" : "Додади нов проток", "Active" : "Активно", "Save" : "Зачувај", "When" : "Кога", "and" : "и", + "Add a new filter" : "Додади нов филтер", "Cancel" : "Откажи", "Delete" : "Избриши", "Available flows" : "Достапни протоци", @@ -73,6 +79,7 @@ "less or equals" : "помалку или еднакво", "greater or equals" : "поголемо или еднакво", "greater" : "поголемо", + "Request remote address" : "Барање од надворешна адреса", "matches IPv4" : "се совпаѓањаат IPv4", "does not match IPv4" : "не се совпаѓаат IPv4", "matches IPv6" : "се совпаѓањаат IPv6", @@ -80,8 +87,11 @@ "File system tag" : "Датотека со системска ознака", "is tagged with" : "е означена со", "is not tagged with" : "не е означена со", + "Request URL" : "Барање URL", + "Request time" : "Време на барање", "between" : "помеѓу", "not between" : "не помеѓу", + "Request user agent" : "Барање од кориснички агент", "is member of" : "е член на", "is not member of" : "не е член на" },"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" |