aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/accessibility/l10n/de.js2
-rw-r--r--apps/accessibility/l10n/de.json2
-rw-r--r--apps/accessibility/l10n/sv.js6
-rw-r--r--apps/accessibility/l10n/sv.json6
-rw-r--r--apps/admin_audit/l10n/ko.js3
-rw-r--r--apps/admin_audit/l10n/ko.json3
-rw-r--r--apps/contactsinteraction/l10n/nl.js8
-rw-r--r--apps/contactsinteraction/l10n/nl.json6
-rw-r--r--apps/dashboard/l10n/nl.js3
-rw-r--r--apps/dashboard/l10n/nl.json3
-rw-r--r--apps/dav/lib/BackgroundJob/RefreshWebcalJob.php6
-rw-r--r--apps/dav/lib/Connector/Sabre/Principal.php7
-rw-r--r--apps/dav/tests/unit/BackgroundJob/RefreshWebcalJobTest.php4
-rw-r--r--apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php7
-rw-r--r--apps/federation/lib/BackgroundJob/GetSharedSecret.php7
-rw-r--r--apps/federation/lib/BackgroundJob/RequestSharedSecret.php7
-rw-r--r--apps/files/l10n/de.js4
-rw-r--r--apps/files/l10n/de.json4
-rw-r--r--apps/files/l10n/de_DE.js4
-rw-r--r--apps/files/l10n/de_DE.json4
-rw-r--r--apps/files_sharing/l10n/cs.js1
-rw-r--r--apps/files_sharing/l10n/cs.json1
-rw-r--r--apps/files_sharing/tests/SharedStorageTest.php4
-rw-r--r--apps/lookup_server_connector/l10n/nl.js3
-rw-r--r--apps/lookup_server_connector/l10n/nl.json3
-rw-r--r--apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php2
-rw-r--r--apps/settings/l10n/ko.js5
-rw-r--r--apps/settings/l10n/ko.json5
-rw-r--r--apps/settings/lib/BackgroundJobs/VerifyUserData.php7
-rw-r--r--apps/theming/l10n/de.js2
-rw-r--r--apps/theming/l10n/de.json2
-rw-r--r--apps/twofactor_backupcodes/l10n/de.js2
-rw-r--r--apps/twofactor_backupcodes/l10n/de.json2
-rw-r--r--apps/user_ldap/l10n/de.js2
-rw-r--r--apps/user_ldap/l10n/de.json2
-rw-r--r--apps/user_status/l10n/cs.js4
-rw-r--r--apps/user_status/l10n/cs.json4
-rw-r--r--apps/user_status/l10n/ko.js29
-rw-r--r--apps/user_status/l10n/ko.json27
-rw-r--r--apps/user_status/l10n/nl.js10
-rw-r--r--apps/user_status/l10n/nl.json10
-rw-r--r--build/psalm-baseline.xml3
-rw-r--r--core/l10n/nl.js1
-rw-r--r--core/l10n/nl.json1
-rw-r--r--core/l10n/ru.js4
-rw-r--r--core/l10n/ru.json4
-rw-r--r--lib/private/Share/Helper.php145
-rw-r--r--lib/private/Share/Share.php270
-rw-r--r--lib/public/Share.php5
-rw-r--r--tests/lib/Files/ViewTest.php4
-rw-r--r--tests/lib/Share/HelperTest.php73
51 files changed, 198 insertions, 535 deletions
diff --git a/apps/accessibility/l10n/de.js b/apps/accessibility/l10n/de.js
index bc1ad76d0f6..620d7ea98c0 100644
--- a/apps/accessibility/l10n/de.js
+++ b/apps/accessibility/l10n/de.js
@@ -6,7 +6,7 @@ OC.L10N.register(
"A dark theme to ease your eyes by reducing the overall luminosity and brightness. It is still under development, so please report any issues you may find." : "Ein dunkles Design, das die Augen entspannt, indem es die allgemeine Lichtstärke und Helligkeit reduziert. Es befindet sich noch in der Entwicklung, also melde bitte alle Probleme, die Du findest.",
"High contrast mode" : "Kontrastreicher Modus",
"Enable high contrast mode" : "Kontrastreichen Modus aktivieren",
- "A high contrast mode to ease your navigation. Visual quality will be reduced but clarity will be increased." : "Ein kontrastreicher Modus, der die Navigation erleichtert. Die Bildqualität wird reduziert, die Übersichtlichkeit jedoch erhöht.",
+ "A high contrast mode to ease your navigation. Visual quality will be reduced but clarity will be increased." : "Ein kontrastreicher Modus, der die Navigation erleichtert. Die Bildqualität wird reduziert, die Klarheit jedoch erhöht.",
"Dyslexia font" : "Legasthenie-Schriftart",
"Enable dyslexia font" : "Legasthenie-Schriftart aktivieren",
"OpenDyslexic is a free typeface/font designed to mitigate some of the common reading errors caused by dyslexia." : "OpenDyslexic ist eine freie Schriftart, die entwickelt wurde, um einige der häufigsten Lesefehler, die durch Legasthenie verursacht werden, zu reduzieren.",
diff --git a/apps/accessibility/l10n/de.json b/apps/accessibility/l10n/de.json
index 8c19a386a9b..b04a03ca19c 100644
--- a/apps/accessibility/l10n/de.json
+++ b/apps/accessibility/l10n/de.json
@@ -4,7 +4,7 @@
"A dark theme to ease your eyes by reducing the overall luminosity and brightness. It is still under development, so please report any issues you may find." : "Ein dunkles Design, das die Augen entspannt, indem es die allgemeine Lichtstärke und Helligkeit reduziert. Es befindet sich noch in der Entwicklung, also melde bitte alle Probleme, die Du findest.",
"High contrast mode" : "Kontrastreicher Modus",
"Enable high contrast mode" : "Kontrastreichen Modus aktivieren",
- "A high contrast mode to ease your navigation. Visual quality will be reduced but clarity will be increased." : "Ein kontrastreicher Modus, der die Navigation erleichtert. Die Bildqualität wird reduziert, die Übersichtlichkeit jedoch erhöht.",
+ "A high contrast mode to ease your navigation. Visual quality will be reduced but clarity will be increased." : "Ein kontrastreicher Modus, der die Navigation erleichtert. Die Bildqualität wird reduziert, die Klarheit jedoch erhöht.",
"Dyslexia font" : "Legasthenie-Schriftart",
"Enable dyslexia font" : "Legasthenie-Schriftart aktivieren",
"OpenDyslexic is a free typeface/font designed to mitigate some of the common reading errors caused by dyslexia." : "OpenDyslexic ist eine freie Schriftart, die entwickelt wurde, um einige der häufigsten Lesefehler, die durch Legasthenie verursacht werden, zu reduzieren.",
diff --git a/apps/accessibility/l10n/sv.js b/apps/accessibility/l10n/sv.js
index 45e0d188341..f6cfd39f372 100644
--- a/apps/accessibility/l10n/sv.js
+++ b/apps/accessibility/l10n/sv.js
@@ -7,9 +7,9 @@ OC.L10N.register(
"High contrast mode" : "Läge med hög kontrast",
"Enable high contrast mode" : "Aktivera läge med hög kontrast",
"A high contrast mode to ease your navigation. Visual quality will be reduced but clarity will be increased." : "Ett läge med hög kontrast för att underlätta din navigering. Visuell kvalitet kommer att minska men tydligheten ökar.",
- "Dyslexia font" : "Dyslexi-typsnitt",
- "Enable dyslexia font" : "Aktivera dyslexi-typsnitt",
- "OpenDyslexic is a free typeface/font designed to mitigate some of the common reading errors caused by dyslexia." : "OpenDyslexic är ett fritt typsnitt/font som är utformat för att mildra några av de vanligaste lässvårigheterna som orsakas av dyslexi.",
+ "Dyslexia font" : "Dyslexi-teckensnitt",
+ "Enable dyslexia font" : "Aktivera dyslexi-teckensnitt",
+ "OpenDyslexic is a free typeface/font designed to mitigate some of the common reading errors caused by dyslexia." : "OpenDyslexic är ett fritt teckensnitt/font som är utformat för att mildra några av de vanligaste lässvårigheterna som orsakas av dyslexi.",
"Accessibility" : "Tillgänglighet",
"Accessibility options for nextcloud" : "Tillgänglighetsalternativ för Nextcloud",
"Provides multiple accessibilities options to ease your use of Nextcloud" : "Ger flera tillgänglighetsalternativ för att underlätta din användning av Nextcloud",
diff --git a/apps/accessibility/l10n/sv.json b/apps/accessibility/l10n/sv.json
index 215a3da371a..eca4fecb66a 100644
--- a/apps/accessibility/l10n/sv.json
+++ b/apps/accessibility/l10n/sv.json
@@ -5,9 +5,9 @@
"High contrast mode" : "Läge med hög kontrast",
"Enable high contrast mode" : "Aktivera läge med hög kontrast",
"A high contrast mode to ease your navigation. Visual quality will be reduced but clarity will be increased." : "Ett läge med hög kontrast för att underlätta din navigering. Visuell kvalitet kommer att minska men tydligheten ökar.",
- "Dyslexia font" : "Dyslexi-typsnitt",
- "Enable dyslexia font" : "Aktivera dyslexi-typsnitt",
- "OpenDyslexic is a free typeface/font designed to mitigate some of the common reading errors caused by dyslexia." : "OpenDyslexic är ett fritt typsnitt/font som är utformat för att mildra några av de vanligaste lässvårigheterna som orsakas av dyslexi.",
+ "Dyslexia font" : "Dyslexi-teckensnitt",
+ "Enable dyslexia font" : "Aktivera dyslexi-teckensnitt",
+ "OpenDyslexic is a free typeface/font designed to mitigate some of the common reading errors caused by dyslexia." : "OpenDyslexic är ett fritt teckensnitt/font som är utformat för att mildra några av de vanligaste lässvårigheterna som orsakas av dyslexi.",
"Accessibility" : "Tillgänglighet",
"Accessibility options for nextcloud" : "Tillgänglighetsalternativ för Nextcloud",
"Provides multiple accessibilities options to ease your use of Nextcloud" : "Ger flera tillgänglighetsalternativ för att underlätta din användning av Nextcloud",
diff --git a/apps/admin_audit/l10n/ko.js b/apps/admin_audit/l10n/ko.js
index b7535b0d787..cdea6b953e8 100644
--- a/apps/admin_audit/l10n/ko.js
+++ b/apps/admin_audit/l10n/ko.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"admin_audit",
{
- "Auditing / Logging" : "감시 / 로깅"
+ "Auditing / Logging" : "감시 / 로깅",
+ "Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Nextcloud는 파일 접근 로깅 및 기타 민감한 작업들에 대해 로깅을 제공합니다. "
},
"nplurals=1; plural=0;");
diff --git a/apps/admin_audit/l10n/ko.json b/apps/admin_audit/l10n/ko.json
index 7e1548c1bb6..04169ae45bc 100644
--- a/apps/admin_audit/l10n/ko.json
+++ b/apps/admin_audit/l10n/ko.json
@@ -1,4 +1,5 @@
{ "translations": {
- "Auditing / Logging" : "감시 / 로깅"
+ "Auditing / Logging" : "감시 / 로깅",
+ "Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Nextcloud는 파일 접근 로깅 및 기타 민감한 작업들에 대해 로깅을 제공합니다. "
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/contactsinteraction/l10n/nl.js b/apps/contactsinteraction/l10n/nl.js
new file mode 100644
index 00000000000..624855d3b65
--- /dev/null
+++ b/apps/contactsinteraction/l10n/nl.js
@@ -0,0 +1,8 @@
+OC.L10N.register(
+ "contactsinteraction",
+ {
+ "Recently contacted" : "Recentelijk gecontacteerd",
+ "Contacts Interaction" : "Contactpersoneninteractie",
+ "Manages interaction between users and contacts" : "Beheert interactie tussen gebruikers en contactpersonen"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/contactsinteraction/l10n/nl.json b/apps/contactsinteraction/l10n/nl.json
new file mode 100644
index 00000000000..0d3a4c0427f
--- /dev/null
+++ b/apps/contactsinteraction/l10n/nl.json
@@ -0,0 +1,6 @@
+{ "translations": {
+ "Recently contacted" : "Recentelijk gecontacteerd",
+ "Contacts Interaction" : "Contactpersoneninteractie",
+ "Manages interaction between users and contacts" : "Beheert interactie tussen gebruikers en contactpersonen"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/dashboard/l10n/nl.js b/apps/dashboard/l10n/nl.js
index 75e6cb5030a..06011045ef7 100644
--- a/apps/dashboard/l10n/nl.js
+++ b/apps/dashboard/l10n/nl.js
@@ -5,11 +5,14 @@ OC.L10N.register(
"Dashboard app" : "Dashboard app",
"Show something" : "Toon iets",
"Customize" : "Aanpassen",
+ "Edit widgets" : "Bewerken widgets",
"Get more widgets from the app store" : "Krijg meer widgets vanuit de appstore",
"Change background image" : "Wijzigen achtergrondafbeelding",
"Weather service" : "Weerberichten",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Voor je privacy worden de weergegevens namens jou opgevraagd door je Nextcloud-server, zodat de weerservice geen persoonlijke informatie ontvangt.",
"Weather data from Met.no" : "Weerbericht via Met.no",
+ "geocoding with Nominatim" : "geocoding met Nominatim",
+ "elevation data from OpenTopoData" : "hellingsdata via OpenTopoData",
"Weather" : "Weer",
"Status" : "Status",
"Good evening, {name}" : "Goedenavond, {name}",
diff --git a/apps/dashboard/l10n/nl.json b/apps/dashboard/l10n/nl.json
index cc6582084ef..a5f6dc97b07 100644
--- a/apps/dashboard/l10n/nl.json
+++ b/apps/dashboard/l10n/nl.json
@@ -3,11 +3,14 @@
"Dashboard app" : "Dashboard app",
"Show something" : "Toon iets",
"Customize" : "Aanpassen",
+ "Edit widgets" : "Bewerken widgets",
"Get more widgets from the app store" : "Krijg meer widgets vanuit de appstore",
"Change background image" : "Wijzigen achtergrondafbeelding",
"Weather service" : "Weerberichten",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Voor je privacy worden de weergegevens namens jou opgevraagd door je Nextcloud-server, zodat de weerservice geen persoonlijke informatie ontvangt.",
"Weather data from Met.no" : "Weerbericht via Met.no",
+ "geocoding with Nominatim" : "geocoding met Nominatim",
+ "elevation data from OpenTopoData" : "hellingsdata via OpenTopoData",
"Weather" : "Weer",
"Status" : "Status",
"Good evening, {name}" : "Goedenavond, {name}",
diff --git a/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php b/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php
index 47dbbcbcaa1..32a48919868 100644
--- a/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php
+++ b/apps/dav/lib/BackgroundJob/RefreshWebcalJob.php
@@ -30,9 +30,10 @@ declare(strict_types=1);
namespace OCA\DAV\BackgroundJob;
use DateInterval;
-use OC\BackgroundJob\Job;
use OCA\DAV\CalDAV\WebcalCaching\RefreshWebcalService;
use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\BackgroundJob\IJobList;
+use OCP\BackgroundJob\Job;
use OCP\IConfig;
use OCP\ILogger;
use Sabre\VObject\DateTimeParser;
@@ -65,6 +66,7 @@ class RefreshWebcalJob extends Job {
* @param ITimeFactory $timeFactory
*/
public function __construct(RefreshWebcalService $refreshWebcalService, IConfig $config, ILogger $logger, ITimeFactory $timeFactory) {
+ parent::__construct($timeFactory);
$this->refreshWebcalService = $refreshWebcalService;
$this->config = $config;
$this->logger = $logger;
@@ -76,7 +78,7 @@ class RefreshWebcalJob extends Job {
*
* @inheritdoc
*/
- public function execute($jobList, ILogger $logger = null) {
+ public function execute(IJobList $jobList, ILogger $logger = null) {
$subscription = $this->refreshWebcalService->getSubscription($this->argument['principaluri'], $this->argument['uri']);
if (!$subscription) {
return;
diff --git a/apps/dav/lib/Connector/Sabre/Principal.php b/apps/dav/lib/Connector/Sabre/Principal.php
index 1ddbc1a6083..5dedb0a7d7b 100644
--- a/apps/dav/lib/Connector/Sabre/Principal.php
+++ b/apps/dav/lib/Connector/Sabre/Principal.php
@@ -178,10 +178,8 @@ class Principal implements BackendInterface {
return $this->userToPrincipal($user);
}
} elseif ($prefix === 'principals/circles') {
- try {
+ if ($this->userSession->getUser() !== null) {
return $this->circleToPrincipal($name);
- } catch (QueryException $e) {
- return null;
}
}
return null;
@@ -471,9 +469,6 @@ class Principal implements BackendInterface {
/**
* @param string $circleUniqueId
* @return array|null
- * @throws \OCP\AppFramework\QueryException
- * @suppress PhanUndeclaredClassMethod
- * @suppress PhanUndeclaredClassCatch
*/
protected function circleToPrincipal($circleUniqueId) {
if (!$this->appManager->isEnabledForUser('circles') || !class_exists('\OCA\Circles\Api\v1\Circles')) {
diff --git a/apps/dav/tests/unit/BackgroundJob/RefreshWebcalJobTest.php b/apps/dav/tests/unit/BackgroundJob/RefreshWebcalJobTest.php
index f65675bccb3..c4cb52370ae 100644
--- a/apps/dav/tests/unit/BackgroundJob/RefreshWebcalJobTest.php
+++ b/apps/dav/tests/unit/BackgroundJob/RefreshWebcalJobTest.php
@@ -74,6 +74,7 @@ class RefreshWebcalJobTest extends TestCase {
*/
public function testRun(int $lastRun, int $time, bool $process) {
$backgroundJob = new RefreshWebcalJob($this->refreshWebcalService, $this->config, $this->logger, $this->timeFactory);
+ $backgroundJob->setId(42);
$backgroundJob->setArgument([
'principaluri' => 'principals/users/testuser',
@@ -99,8 +100,7 @@ class RefreshWebcalJobTest extends TestCase {
->with('dav', 'calendarSubscriptionRefreshRate', 'P1W')
->willReturn('P1W');
- $this->timeFactory->expects($this->once())
- ->method('getTime')
+ $this->timeFactory->method('getTime')
->willReturn($time);
if ($process) {
diff --git a/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php b/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php
index 8af2d587fae..4949e5794b4 100644
--- a/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php
+++ b/apps/federatedfilesharing/lib/BackgroundJob/RetryJob.php
@@ -27,11 +27,10 @@
namespace OCA\FederatedFileSharing\BackgroundJob;
-use OC\BackgroundJob\Job;
-use OC\BackgroundJob\JobList;
use OCA\FederatedFileSharing\AddressHandler;
use OCA\FederatedFileSharing\Notifications;
use OCP\BackgroundJob\IJobList;
+use OCP\BackgroundJob\Job;
use OCP\ILogger;
/**
@@ -84,10 +83,10 @@ class RetryJob extends Job {
/**
* run the job, then remove it from the jobList
*
- * @param JobList $jobList
+ * @param IJobList $jobList
* @param ILogger|null $logger
*/
- public function execute($jobList, ILogger $logger = null) {
+ public function execute(IJobList $jobList, ILogger $logger = null) {
if ($this->shouldRun($this->argument)) {
parent::execute($jobList, $logger);
$jobList->remove($this, $this->argument);
diff --git a/apps/federation/lib/BackgroundJob/GetSharedSecret.php b/apps/federation/lib/BackgroundJob/GetSharedSecret.php
index 669de02ec5c..71ea5417dd0 100644
--- a/apps/federation/lib/BackgroundJob/GetSharedSecret.php
+++ b/apps/federation/lib/BackgroundJob/GetSharedSecret.php
@@ -32,12 +32,11 @@ namespace OCA\Federation\BackgroundJob;
use GuzzleHttp\Exception\ClientException;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Ring\Exception\RingException;
-use OC\BackgroundJob\Job;
-use OC\BackgroundJob\JobList;
use OCA\Federation\TrustedServers;
use OCP\AppFramework\Http;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\BackgroundJob\IJobList;
+use OCP\BackgroundJob\Job;
use OCP\Http\Client\IClient;
use OCP\Http\Client\IClientService;
use OCP\Http\Client\IResponse;
@@ -115,7 +114,7 @@ class GetSharedSecret extends Job {
/**
* run the job, then remove it from the joblist
*
- * @param JobList $jobList
+ * @param IJobList $jobList
* @param ILogger|null $logger
*/
public function execute(IJobList $jobList, ILogger $logger = null) {
@@ -135,7 +134,7 @@ class GetSharedSecret extends Job {
/**
* call execute() method of parent
*
- * @param JobList $jobList
+ * @param IJobList $jobList
* @param ILogger $logger
*/
protected function parentExecute($jobList, $logger = null) {
diff --git a/apps/federation/lib/BackgroundJob/RequestSharedSecret.php b/apps/federation/lib/BackgroundJob/RequestSharedSecret.php
index f577372bbae..1c9b2539b3d 100644
--- a/apps/federation/lib/BackgroundJob/RequestSharedSecret.php
+++ b/apps/federation/lib/BackgroundJob/RequestSharedSecret.php
@@ -31,12 +31,11 @@ namespace OCA\Federation\BackgroundJob;
use GuzzleHttp\Exception\ClientException;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Ring\Exception\RingException;
-use OC\BackgroundJob\Job;
-use OC\BackgroundJob\JobList;
use OCA\Federation\TrustedServers;
use OCP\AppFramework\Http;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\BackgroundJob\IJobList;
+use OCP\BackgroundJob\Job;
use OCP\Http\Client\IClient;
use OCP\Http\Client\IClientService;
use OCP\ILogger;
@@ -114,7 +113,7 @@ class RequestSharedSecret extends Job {
/**
* run the job, then remove it from the joblist
*
- * @param JobList $jobList
+ * @param IJobList $jobList
* @param ILogger|null $logger
*/
public function execute(IJobList $jobList, ILogger $logger = null) {
@@ -134,7 +133,7 @@ class RequestSharedSecret extends Job {
/**
* call execute() method of parent
*
- * @param JobList $jobList
+ * @param IJobList $jobList
* @param ILogger $logger
*/
protected function parentExecute($jobList, $logger) {
diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js
index a125aa2f353..8a3829a868e 100644
--- a/apps/files/l10n/de.js
+++ b/apps/files/l10n/de.js
@@ -52,14 +52,14 @@ OC.L10N.register(
"Copied {origin} inside {destination}" : "{origin} wurde nach {destination} kopiert",
"Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} und {nbfiles} weitere Dateien wurden nach {destination} kopiert",
"{newName} already exists" : "{newName} existiert bereits",
- "Could not rename \"{fileName}\", it does not exist any more" : "\"{fileName}\" konnte nicht umbenannt werden, da sie nicht mehr existiert",
+ "Could not rename \"{fileName}\", it does not exist any more" : "Die Datei \"{fileName}\" konnte nicht umbenannt werden, da sie nicht mehr existiert",
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Der Name „{targetName}“ wird bereits im Ordner „{dir}“ benutzt. Bitte einen anderen Namen verwenden.",
"Could not rename \"{fileName}\"" : "Die Datei konnte nicht umbenannt werden \"{fileName}\"",
"Could not create file \"{file}\"" : "Die Datei konnte nicht erstellt werden \"{file}\"",
"Could not create file \"{file}\" because it already exists" : "Die Datei \"{file}\" konnte nicht erstellt werden, da diese bereits existiert.",
"Could not create folder \"{dir}\" because it already exists" : "Der Ordner \"{dir}\" konnte nicht erstellt werden, da dieser bereits existiert",
"Could not fetch file details \"{file}\"" : "Details zu \"{file}\" konnten nicht ermittelt werden",
- "Error deleting file \"{fileName}\"." : "Fehler beim Löschen der Datei \"{fileName}\"",
+ "Error deleting file \"{fileName}\"." : "Fehler beim Löschen der Datei \"{fileName}\".",
"No search results in other folders for {tag}{filter}{endtag}" : "Keine Suchergebnisse in anderen Ordnern für {tag}{filter}{endtag}",
"Enter more than two characters to search in other folders" : "Gebe mehr als zwei Zeichen ein, um in anderen Ordnern zu suchen",
"Name" : "Name",
diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json
index 91ac0b9de3f..cc3f8ce9586 100644
--- a/apps/files/l10n/de.json
+++ b/apps/files/l10n/de.json
@@ -50,14 +50,14 @@
"Copied {origin} inside {destination}" : "{origin} wurde nach {destination} kopiert",
"Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} und {nbfiles} weitere Dateien wurden nach {destination} kopiert",
"{newName} already exists" : "{newName} existiert bereits",
- "Could not rename \"{fileName}\", it does not exist any more" : "\"{fileName}\" konnte nicht umbenannt werden, da sie nicht mehr existiert",
+ "Could not rename \"{fileName}\", it does not exist any more" : "Die Datei \"{fileName}\" konnte nicht umbenannt werden, da sie nicht mehr existiert",
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Der Name „{targetName}“ wird bereits im Ordner „{dir}“ benutzt. Bitte einen anderen Namen verwenden.",
"Could not rename \"{fileName}\"" : "Die Datei konnte nicht umbenannt werden \"{fileName}\"",
"Could not create file \"{file}\"" : "Die Datei konnte nicht erstellt werden \"{file}\"",
"Could not create file \"{file}\" because it already exists" : "Die Datei \"{file}\" konnte nicht erstellt werden, da diese bereits existiert.",
"Could not create folder \"{dir}\" because it already exists" : "Der Ordner \"{dir}\" konnte nicht erstellt werden, da dieser bereits existiert",
"Could not fetch file details \"{file}\"" : "Details zu \"{file}\" konnten nicht ermittelt werden",
- "Error deleting file \"{fileName}\"." : "Fehler beim Löschen der Datei \"{fileName}\"",
+ "Error deleting file \"{fileName}\"." : "Fehler beim Löschen der Datei \"{fileName}\".",
"No search results in other folders for {tag}{filter}{endtag}" : "Keine Suchergebnisse in anderen Ordnern für {tag}{filter}{endtag}",
"Enter more than two characters to search in other folders" : "Gebe mehr als zwei Zeichen ein, um in anderen Ordnern zu suchen",
"Name" : "Name",
diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js
index 2e99ebd752d..aaa36a02f4c 100644
--- a/apps/files/l10n/de_DE.js
+++ b/apps/files/l10n/de_DE.js
@@ -52,7 +52,7 @@ OC.L10N.register(
"Copied {origin} inside {destination}" : "{origin} wurde nach {destination} kopiert",
"Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} und {nbfiles} weitere Dateien wurden nach {destination} kopiert",
"{newName} already exists" : "{newName} existiert bereits",
- "Could not rename \"{fileName}\", it does not exist any more" : "Die Datei konnte nicht umbenannt werden \"{fileName}\", da die Datei nicht mehr existiert",
+ "Could not rename \"{fileName}\", it does not exist any more" : "Die Datei \"{fileName}\" konnte nicht umbenannt werden, da sie nicht mehr existiert",
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Der Name „{targetName}“ wird bereits im Ordner „{dir}“ benutzt. Bitte wählen Sie einen anderen Namen.",
"Could not rename \"{fileName}\"" : "Die Datei konnte nicht umbenannt werden \"{fileName}\"",
"Could not create file \"{file}\"" : "Die Datei konnte nicht erstellt werden \"{file}\"",
@@ -166,7 +166,7 @@ OC.L10N.register(
"Tags" : "Tags",
"Unable to change the favourite state of the file" : "Der favorisierte Status der Datei kann nicht geändert werden",
"Error while loading the file data" : "Fehler beim Laden der Datei-Daten",
- "%s used" : " %s verwendet",
+ "%s used" : "%s verwendet",
"%s%% of %s used" : "%s%% von %s verwendet",
"%1$s of %2$s used" : "%1$s von %2$s verwendet",
"Settings" : "Einstellungen",
diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json
index 34d6f4e0adf..708472c6500 100644
--- a/apps/files/l10n/de_DE.json
+++ b/apps/files/l10n/de_DE.json
@@ -50,7 +50,7 @@
"Copied {origin} inside {destination}" : "{origin} wurde nach {destination} kopiert",
"Copied {origin} and {nbfiles} other files inside {destination}" : "{origin} und {nbfiles} weitere Dateien wurden nach {destination} kopiert",
"{newName} already exists" : "{newName} existiert bereits",
- "Could not rename \"{fileName}\", it does not exist any more" : "Die Datei konnte nicht umbenannt werden \"{fileName}\", da die Datei nicht mehr existiert",
+ "Could not rename \"{fileName}\", it does not exist any more" : "Die Datei \"{fileName}\" konnte nicht umbenannt werden, da sie nicht mehr existiert",
"The name \"{targetName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Der Name „{targetName}“ wird bereits im Ordner „{dir}“ benutzt. Bitte wählen Sie einen anderen Namen.",
"Could not rename \"{fileName}\"" : "Die Datei konnte nicht umbenannt werden \"{fileName}\"",
"Could not create file \"{file}\"" : "Die Datei konnte nicht erstellt werden \"{file}\"",
@@ -164,7 +164,7 @@
"Tags" : "Tags",
"Unable to change the favourite state of the file" : "Der favorisierte Status der Datei kann nicht geändert werden",
"Error while loading the file data" : "Fehler beim Laden der Datei-Daten",
- "%s used" : " %s verwendet",
+ "%s used" : "%s verwendet",
"%s%% of %s used" : "%s%% von %s verwendet",
"%1$s of %2$s used" : "%1$s von %2$s verwendet",
"Settings" : "Einstellungen",
diff --git a/apps/files_sharing/l10n/cs.js b/apps/files_sharing/l10n/cs.js
index 8e550314c8c..83b688b0b60 100644
--- a/apps/files_sharing/l10n/cs.js
+++ b/apps/files_sharing/l10n/cs.js
@@ -188,6 +188,7 @@ OC.L10N.register(
"No recommendations. Start typing." : "Žádná doporučení. Pište",
"Resharing is not allowed" : "Příjemcům tohoto sdílení není dovoleno ho nasdílet dál dalším",
"Name or email …" : "Jméno nebo e-mail…",
+ "Name, email, or Federated Cloud ID …" : "Jméno, e-mail nebo identifikátor ve federovaném cloudu …",
"Searching …" : "Hledání...",
"No elements found." : "Nenalezeny žádné prvky.",
"Search globally" : "Hledat všude",
diff --git a/apps/files_sharing/l10n/cs.json b/apps/files_sharing/l10n/cs.json
index 289f5aac0e6..a019b55f715 100644
--- a/apps/files_sharing/l10n/cs.json
+++ b/apps/files_sharing/l10n/cs.json
@@ -186,6 +186,7 @@
"No recommendations. Start typing." : "Žádná doporučení. Pište",
"Resharing is not allowed" : "Příjemcům tohoto sdílení není dovoleno ho nasdílet dál dalším",
"Name or email …" : "Jméno nebo e-mail…",
+ "Name, email, or Federated Cloud ID …" : "Jméno, e-mail nebo identifikátor ve federovaném cloudu …",
"Searching …" : "Hledání...",
"No elements found." : "Nenalezeny žádné prvky.",
"Search globally" : "Hledat všude",
diff --git a/apps/files_sharing/tests/SharedStorageTest.php b/apps/files_sharing/tests/SharedStorageTest.php
index 74975e7cf31..bd8b18f2b89 100644
--- a/apps/files_sharing/tests/SharedStorageTest.php
+++ b/apps/files_sharing/tests/SharedStorageTest.php
@@ -302,9 +302,7 @@ class SharedStorageTest extends TestCase {
//cleanup
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
- $result = \OC\Share\Share::unshare('folder', $fileinfoFolder['fileid'], IShare::TYPE_USER,
- self::TEST_FILES_SHARING_API_USER2);
- $this->assertTrue($result);
+ $this->shareManager->deleteShare($share);
}
public function testFopenWithUpdateOnlyPermission() {
diff --git a/apps/lookup_server_connector/l10n/nl.js b/apps/lookup_server_connector/l10n/nl.js
index e6ecaec12c2..d8ed4e9f348 100644
--- a/apps/lookup_server_connector/l10n/nl.js
+++ b/apps/lookup_server_connector/l10n/nl.js
@@ -1,6 +1,7 @@
OC.L10N.register(
"lookup_server_connector",
{
- "Lookup Server Connector" : "Lookup Server Connector"
+ "Lookup Server Connector" : "Lookup Server Connector",
+ "Sync public user information with the lookup server" : "Sync openbare gebruikersinformatie met de opzoekserver"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/lookup_server_connector/l10n/nl.json b/apps/lookup_server_connector/l10n/nl.json
index 667007cc6ff..c08feb67169 100644
--- a/apps/lookup_server_connector/l10n/nl.json
+++ b/apps/lookup_server_connector/l10n/nl.json
@@ -1,4 +1,5 @@
{ "translations": {
- "Lookup Server Connector" : "Lookup Server Connector"
+ "Lookup Server Connector" : "Lookup Server Connector",
+ "Sync public user information with the lookup server" : "Sync openbare gebruikersinformatie met de opzoekserver"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php b/apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php
index 272d66e9491..889fcfd6277 100644
--- a/apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php
+++ b/apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php
@@ -95,7 +95,7 @@ class RetryJob extends Job {
* @param IJobList $jobList
* @param ILogger|null $logger
*/
- public function execute($jobList, ILogger $logger = null): void {
+ public function execute(IJobList $jobList, ILogger $logger = null): void {
if (!isset($this->argument['userId'])) {
// Old background job without user id, just drop it.
$jobList->remove($this, $this->argument);
diff --git a/apps/settings/l10n/ko.js b/apps/settings/l10n/ko.js
index da7ded526d9..d68c5685599 100644
--- a/apps/settings/l10n/ko.js
+++ b/apps/settings/l10n/ko.js
@@ -105,6 +105,7 @@ OC.L10N.register(
"Create" : "생성",
"Change" : "변경",
"Delete" : "삭제",
+ "Reshare" : "재공유",
"Unlimited" : "무제한",
"Verifying" : "검사",
"Nextcloud settings" : "Nextcloud 환경설정",
@@ -131,6 +132,7 @@ OC.L10N.register(
"Developer documentation" : "개발자 문서",
"Featured" : "추천",
"No apps found for your version" : "설치된 버전에 대한 앱 없음",
+ "Disable all" : "전체 비활성화",
"Enable all" : "모두 활성화",
"_%n app has an update available_::_%n apps have an update available_" : ["%n앱을 업데이트 할 수 있습니다."],
"Device settings" : "디바이스 설정",
@@ -170,6 +172,7 @@ OC.L10N.register(
"You do not have permissions to see the details of this user" : "사용자의 상세정보를 볼 권한이 없습니다",
"Add new password" : "새로운 비밀번호를 입력하시오",
"Add new email address" : "새로운 이메일 추가하기",
+ "Add user in group" : "그룹에 사용자 추가",
"Delete user" : "유저 지우기",
"Disable user" : "유저 비활성화하기",
"Enable user" : "유저 활성화하기",
@@ -204,6 +207,7 @@ OC.L10N.register(
"Disabled apps" : "비활성화된 앱",
"Updates" : "업데이트",
"App bundles" : "앱 번들",
+ "{license}-licensed" : "{license} 라이선스",
"Details" : "자세히",
"Changelog" : "변경 기록",
"New user" : "새 사용자",
@@ -303,6 +307,7 @@ OC.L10N.register(
"Exclude groups from sharing" : "공유에서 그룹 제외",
"These groups will still be able to receive shares, but not to initiate them." : "이 그룹의 사용자들은 다른 사용자가 공유한 파일을 받을 수는 있지만, 자기 파일을 공유할 수는 없습니다.",
"This text will be shown on the public link upload page when the file list is hidden." : "파일 목록이 숨겨져 있으면 이 텍스트는 공개 링크 업로드 페이지에 표시됩니다.",
+ "Default share permissions" : "기본 공유 권한",
"Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "{communityopen}Nextcloud 커뮤니티{linkclose}에서 개발, {githubopen}소스 코드{linkclose}는 {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} 라이선스를 따릅니다.",
"Like our Facebook page" : "Facebook 페이지에서 좋아요 누르기",
"Follow us on Twitter" : "트위터에서 팔로하기",
diff --git a/apps/settings/l10n/ko.json b/apps/settings/l10n/ko.json
index f4e31e600c1..488cc2e10c9 100644
--- a/apps/settings/l10n/ko.json
+++ b/apps/settings/l10n/ko.json
@@ -103,6 +103,7 @@
"Create" : "생성",
"Change" : "변경",
"Delete" : "삭제",
+ "Reshare" : "재공유",
"Unlimited" : "무제한",
"Verifying" : "검사",
"Nextcloud settings" : "Nextcloud 환경설정",
@@ -129,6 +130,7 @@
"Developer documentation" : "개발자 문서",
"Featured" : "추천",
"No apps found for your version" : "설치된 버전에 대한 앱 없음",
+ "Disable all" : "전체 비활성화",
"Enable all" : "모두 활성화",
"_%n app has an update available_::_%n apps have an update available_" : ["%n앱을 업데이트 할 수 있습니다."],
"Device settings" : "디바이스 설정",
@@ -168,6 +170,7 @@
"You do not have permissions to see the details of this user" : "사용자의 상세정보를 볼 권한이 없습니다",
"Add new password" : "새로운 비밀번호를 입력하시오",
"Add new email address" : "새로운 이메일 추가하기",
+ "Add user in group" : "그룹에 사용자 추가",
"Delete user" : "유저 지우기",
"Disable user" : "유저 비활성화하기",
"Enable user" : "유저 활성화하기",
@@ -202,6 +205,7 @@
"Disabled apps" : "비활성화된 앱",
"Updates" : "업데이트",
"App bundles" : "앱 번들",
+ "{license}-licensed" : "{license} 라이선스",
"Details" : "자세히",
"Changelog" : "변경 기록",
"New user" : "새 사용자",
@@ -301,6 +305,7 @@
"Exclude groups from sharing" : "공유에서 그룹 제외",
"These groups will still be able to receive shares, but not to initiate them." : "이 그룹의 사용자들은 다른 사용자가 공유한 파일을 받을 수는 있지만, 자기 파일을 공유할 수는 없습니다.",
"This text will be shown on the public link upload page when the file list is hidden." : "파일 목록이 숨겨져 있으면 이 텍스트는 공개 링크 업로드 페이지에 표시됩니다.",
+ "Default share permissions" : "기본 공유 권한",
"Developed by the {communityopen}Nextcloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}AGPL{linkclose}." : "{communityopen}Nextcloud 커뮤니티{linkclose}에서 개발, {githubopen}소스 코드{linkclose}는 {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose} 라이선스를 따릅니다.",
"Like our Facebook page" : "Facebook 페이지에서 좋아요 누르기",
"Follow us on Twitter" : "트위터에서 팔로하기",
diff --git a/apps/settings/lib/BackgroundJobs/VerifyUserData.php b/apps/settings/lib/BackgroundJobs/VerifyUserData.php
index e77d95ff4d9..0faa9b56e82 100644
--- a/apps/settings/lib/BackgroundJobs/VerifyUserData.php
+++ b/apps/settings/lib/BackgroundJobs/VerifyUserData.php
@@ -30,10 +30,9 @@
namespace OCA\Settings\BackgroundJobs;
use OC\Accounts\AccountManager;
-use OC\BackgroundJob\Job;
-use OC\BackgroundJob\JobList;
use OCP\AppFramework\Http;
use OCP\BackgroundJob\IJobList;
+use OCP\BackgroundJob\Job;
use OCP\Http\Client\IClientService;
use OCP\IConfig;
use OCP\ILogger;
@@ -96,10 +95,10 @@ class VerifyUserData extends Job {
/**
* run the job, then remove it from the jobList
*
- * @param JobList $jobList
+ * @param IJobList $jobList
* @param ILogger|null $logger
*/
- public function execute($jobList, ILogger $logger = null) {
+ public function execute(IJobList $jobList, ILogger $logger = null) {
if ($this->shouldRun($this->argument)) {
parent::execute($jobList, $logger);
$jobList->remove($this, $this->argument);
diff --git a/apps/theming/l10n/de.js b/apps/theming/l10n/de.js
index 477ad909b37..ad7436f1d33 100644
--- a/apps/theming/l10n/de.js
+++ b/apps/theming/l10n/de.js
@@ -49,7 +49,7 @@ OC.L10N.register(
"Upload new header logo" : "Neues Kopfbereichs-Logo hochladen",
"Favicon" : "Favicon",
"Upload new favicon" : "Neues Favicon hochladen",
- "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Installiere die Imagemagick PHP-Erweiterung mit Unterstützung für SVG-Bilder, um automatisch Favicons auf Basis des hochgeladenen Icons und der Farbe zu erstellen.",
+ "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Installiere die Imagemagick PHP-Erweiterung mit Unterstützung für SVG-Bilder, um automatisch Favicons auf Basis des hochgeladenen Logos und der Farbe zu erstellen.",
"Unsupported image type" : "Nicht unterstütztes Bild-Format"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/theming/l10n/de.json b/apps/theming/l10n/de.json
index a08d9eb81e5..9caadb57bc8 100644
--- a/apps/theming/l10n/de.json
+++ b/apps/theming/l10n/de.json
@@ -47,7 +47,7 @@
"Upload new header logo" : "Neues Kopfbereichs-Logo hochladen",
"Favicon" : "Favicon",
"Upload new favicon" : "Neues Favicon hochladen",
- "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Installiere die Imagemagick PHP-Erweiterung mit Unterstützung für SVG-Bilder, um automatisch Favicons auf Basis des hochgeladenen Icons und der Farbe zu erstellen.",
+ "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Installiere die Imagemagick PHP-Erweiterung mit Unterstützung für SVG-Bilder, um automatisch Favicons auf Basis des hochgeladenen Logos und der Farbe zu erstellen.",
"Unsupported image type" : "Nicht unterstütztes Bild-Format"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/twofactor_backupcodes/l10n/de.js b/apps/twofactor_backupcodes/l10n/de.js
index 3fdf192bcc1..612aa389dfd 100644
--- a/apps/twofactor_backupcodes/l10n/de.js
+++ b/apps/twofactor_backupcodes/l10n/de.js
@@ -10,7 +10,7 @@ OC.L10N.register(
"Two factor backup codes" : "Zweifaktor-Backup-Codes",
"A two-factor auth backup codes provider" : "Ein Anbieter für Zweifaktor-Backup-Codes",
"Backup codes have been generated. {used} of {total} codes have been used." : "Backup-Codes wurden erzeugt. {used} von {total} Codes wurden benutzt.",
- "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dies sind Deine Backup-Codes. Bitte speichere und/oder drucke diese aus, da diese Codes später nicht mehr gelesen werden können",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dies sind Deine Backup-Codes. Bitte speichere und/oder drucke diese aus, da diese Codes später nicht mehr angezeigt werden können",
"Save backup codes" : "Backup-Codes speichern",
"Print backup codes" : "Backup-Codes drucken",
"Regenerate backup codes" : "Backup-Codes erneuern",
diff --git a/apps/twofactor_backupcodes/l10n/de.json b/apps/twofactor_backupcodes/l10n/de.json
index 0999a82baba..29c8b016a32 100644
--- a/apps/twofactor_backupcodes/l10n/de.json
+++ b/apps/twofactor_backupcodes/l10n/de.json
@@ -8,7 +8,7 @@
"Two factor backup codes" : "Zweifaktor-Backup-Codes",
"A two-factor auth backup codes provider" : "Ein Anbieter für Zweifaktor-Backup-Codes",
"Backup codes have been generated. {used} of {total} codes have been used." : "Backup-Codes wurden erzeugt. {used} von {total} Codes wurden benutzt.",
- "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dies sind Deine Backup-Codes. Bitte speichere und/oder drucke diese aus, da diese Codes später nicht mehr gelesen werden können",
+ "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later" : "Dies sind Deine Backup-Codes. Bitte speichere und/oder drucke diese aus, da diese Codes später nicht mehr angezeigt werden können",
"Save backup codes" : "Backup-Codes speichern",
"Print backup codes" : "Backup-Codes drucken",
"Regenerate backup codes" : "Backup-Codes erneuern",
diff --git a/apps/user_ldap/l10n/de.js b/apps/user_ldap/l10n/de.js
index 95cd6661f32..ebd379a2b87 100644
--- a/apps/user_ldap/l10n/de.js
+++ b/apps/user_ldap/l10n/de.js
@@ -158,7 +158,7 @@ OC.L10N.register(
"Group Search Attributes" : "Gruppensucheigenschaften",
"Group-Member association" : "Assoziation zwischen Gruppe und Benutzer",
"Dynamic Group Member URL" : "Dynamische Gruppenmitglied URL",
- "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Ein LDAP-Attribut von Gruppenobjekten, das eine LDAP Such-URL enthält die festlegt welche Objekte zu der Gruppe gehören. (Ein leeres Feld deaktiviert die Funktion \"Dynamisch Gruppenzugehörigkeit\".)",
+ "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Ein LDAP-Attribut von Gruppenobjekten, das eine LDAP Such-URL enthält die festlegt welche Objekte zu der Gruppe gehören. (Ein leeres Feld deaktiviert die Funktion \"Dynamisch Gruppenzugehörigkeit\")",
"Nested Groups" : "Verschachtelte Gruppen",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Wenn aktiviert, werden Gruppen, die Gruppen enthalten, unterstützt. (Funktioniert nur, wenn das Merkmal des Gruppenmitgliedes den Domain-Namen enthält.)",
"Paging chunksize" : "Seitenstücke (Paging chunksize)",
diff --git a/apps/user_ldap/l10n/de.json b/apps/user_ldap/l10n/de.json
index 247b0ecf994..5aa9508257c 100644
--- a/apps/user_ldap/l10n/de.json
+++ b/apps/user_ldap/l10n/de.json
@@ -156,7 +156,7 @@
"Group Search Attributes" : "Gruppensucheigenschaften",
"Group-Member association" : "Assoziation zwischen Gruppe und Benutzer",
"Dynamic Group Member URL" : "Dynamische Gruppenmitglied URL",
- "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Ein LDAP-Attribut von Gruppenobjekten, das eine LDAP Such-URL enthält die festlegt welche Objekte zu der Gruppe gehören. (Ein leeres Feld deaktiviert die Funktion \"Dynamisch Gruppenzugehörigkeit\".)",
+ "The LDAP attribute that on group objects contains an LDAP search URL that determines what objects belong to the group. (An empty setting disables dynamic group membership functionality.)" : "Ein LDAP-Attribut von Gruppenobjekten, das eine LDAP Such-URL enthält die festlegt welche Objekte zu der Gruppe gehören. (Ein leeres Feld deaktiviert die Funktion \"Dynamisch Gruppenzugehörigkeit\")",
"Nested Groups" : "Verschachtelte Gruppen",
"When switched on, groups that contain groups are supported. (Only works if the group member attribute contains DNs.)" : "Wenn aktiviert, werden Gruppen, die Gruppen enthalten, unterstützt. (Funktioniert nur, wenn das Merkmal des Gruppenmitgliedes den Domain-Namen enthält.)",
"Paging chunksize" : "Seitenstücke (Paging chunksize)",
diff --git a/apps/user_status/l10n/cs.js b/apps/user_status/l10n/cs.js
index bd010e8f7b8..e3b7fd3b2d8 100644
--- a/apps/user_status/l10n/cs.js
+++ b/apps/user_status/l10n/cs.js
@@ -4,7 +4,7 @@ OC.L10N.register(
"Recent statuses" : "Nedávné stavy",
"In a meeting" : "Na poradě",
"Commuting" : "Dojíždění",
- "Out sick" : "Nemocný",
+ "Out sick" : "Nemoc",
"Vacationing" : "Dovolená",
"Working remotely" : "Pracuje na dálku",
"User status" : "Stav uživatele",
@@ -21,7 +21,7 @@ OC.L10N.register(
"Away" : "Pryč",
"Do not disturb" : "Nerušit",
"{status}, {timestamp}" : "{status}, {timestamp}",
- "Don't clear" : "Nečistit",
+ "Don't clear" : "Nikdy",
"Today" : "Dnes",
"This week" : "Tento týden",
"Online" : "Online",
diff --git a/apps/user_status/l10n/cs.json b/apps/user_status/l10n/cs.json
index 2397a3b3de4..acd2eae3004 100644
--- a/apps/user_status/l10n/cs.json
+++ b/apps/user_status/l10n/cs.json
@@ -2,7 +2,7 @@
"Recent statuses" : "Nedávné stavy",
"In a meeting" : "Na poradě",
"Commuting" : "Dojíždění",
- "Out sick" : "Nemocný",
+ "Out sick" : "Nemoc",
"Vacationing" : "Dovolená",
"Working remotely" : "Pracuje na dálku",
"User status" : "Stav uživatele",
@@ -19,7 +19,7 @@
"Away" : "Pryč",
"Do not disturb" : "Nerušit",
"{status}, {timestamp}" : "{status}, {timestamp}",
- "Don't clear" : "Nečistit",
+ "Don't clear" : "Nikdy",
"Today" : "Dnes",
"This week" : "Tento týden",
"Online" : "Online",
diff --git a/apps/user_status/l10n/ko.js b/apps/user_status/l10n/ko.js
new file mode 100644
index 00000000000..4edb7b76c15
--- /dev/null
+++ b/apps/user_status/l10n/ko.js
@@ -0,0 +1,29 @@
+OC.L10N.register(
+ "user_status",
+ {
+ "In a meeting" : "회의 중",
+ "Commuting" : "이동 중",
+ "Out sick" : "병가",
+ "Vacationing" : "휴가 중",
+ "Working remotely" : "원격 근무 중",
+ "What's your status?" : "지금 무엇을 하나요?",
+ "Online status" : "접속 상태",
+ "Status message" : "상태 메시지",
+ "Clear status message" : "상태 메시지 지움",
+ "Set status message" : "상태 메시지 설정",
+ "Away" : "자리 비움",
+ "Do not disturb" : "방해 금지",
+ "Don't clear" : "지우지 않음",
+ "Today" : "오늘",
+ "This week" : "이번 주",
+ "Online" : "접속 중",
+ "Invisible" : "숨어있기",
+ "Offline" : "오프라인",
+ "30 minutes" : "30 분",
+ "1 hour" : "한 시간",
+ "4 hours" : "4 시간",
+ "Mute all notifications" : "모든 알림을 무시합니다",
+ "Appear offline" : "접속 안함으로 표시",
+ "Clear status after" : "상태 메시지 지우기 예약"
+},
+"nplurals=1; plural=0;");
diff --git a/apps/user_status/l10n/ko.json b/apps/user_status/l10n/ko.json
new file mode 100644
index 00000000000..059ffd3e16a
--- /dev/null
+++ b/apps/user_status/l10n/ko.json
@@ -0,0 +1,27 @@
+{ "translations": {
+ "In a meeting" : "회의 중",
+ "Commuting" : "이동 중",
+ "Out sick" : "병가",
+ "Vacationing" : "휴가 중",
+ "Working remotely" : "원격 근무 중",
+ "What's your status?" : "지금 무엇을 하나요?",
+ "Online status" : "접속 상태",
+ "Status message" : "상태 메시지",
+ "Clear status message" : "상태 메시지 지움",
+ "Set status message" : "상태 메시지 설정",
+ "Away" : "자리 비움",
+ "Do not disturb" : "방해 금지",
+ "Don't clear" : "지우지 않음",
+ "Today" : "오늘",
+ "This week" : "이번 주",
+ "Online" : "접속 중",
+ "Invisible" : "숨어있기",
+ "Offline" : "오프라인",
+ "30 minutes" : "30 분",
+ "1 hour" : "한 시간",
+ "4 hours" : "4 시간",
+ "Mute all notifications" : "모든 알림을 무시합니다",
+ "Appear offline" : "접속 안함으로 표시",
+ "Clear status after" : "상태 메시지 지우기 예약"
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/apps/user_status/l10n/nl.js b/apps/user_status/l10n/nl.js
index 077c9e12a16..e576aa8236f 100644
--- a/apps/user_status/l10n/nl.js
+++ b/apps/user_status/l10n/nl.js
@@ -7,19 +7,27 @@ OC.L10N.register(
"Out sick" : "Ziek",
"Vacationing" : "vakantie",
"Working remotely" : "Thuiswerken",
+ "User status" : "Gebruikersstatus",
"What's your status?" : "Wat is je status?",
"Set status" : "Instellen status",
"Status message" : "Statusbericht",
+ "There was an error saving the status" : "Er is een fout opgetreden bij het bewaren van de status",
+ "There was an error clearing the status" : "Er is een fout opgetreden bij het leegmaken van de status",
+ "No recent status changes" : "Geen recente statuswijzigingen",
"Away" : "Afwezig",
"Do not disturb" : "Niet storen",
"{status}, {timestamp}" : "{status}, {timestamp}",
+ "Don't clear" : "Niet schoonmaken",
"Today" : "Vandaag",
"This week" : "Deze week",
"Online" : "Online",
"Invisible" : "Verborgen",
"Offline" : "Off-line",
+ "There was an error saving the new status" : "Er is een fout opgetreden bij het bewaren van de nieuwe status",
"30 minutes" : "30 minuten",
"1 hour" : "1 uur",
- "4 hours" : "4 uur"
+ "4 hours" : "4 uur",
+ "Mute all notifications" : "Onderdruk alle meldingen",
+ "Clear status after" : "Maak de status leeg na"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/user_status/l10n/nl.json b/apps/user_status/l10n/nl.json
index 4413518a3ff..f8b232d4a5d 100644
--- a/apps/user_status/l10n/nl.json
+++ b/apps/user_status/l10n/nl.json
@@ -5,19 +5,27 @@
"Out sick" : "Ziek",
"Vacationing" : "vakantie",
"Working remotely" : "Thuiswerken",
+ "User status" : "Gebruikersstatus",
"What's your status?" : "Wat is je status?",
"Set status" : "Instellen status",
"Status message" : "Statusbericht",
+ "There was an error saving the status" : "Er is een fout opgetreden bij het bewaren van de status",
+ "There was an error clearing the status" : "Er is een fout opgetreden bij het leegmaken van de status",
+ "No recent status changes" : "Geen recente statuswijzigingen",
"Away" : "Afwezig",
"Do not disturb" : "Niet storen",
"{status}, {timestamp}" : "{status}, {timestamp}",
+ "Don't clear" : "Niet schoonmaken",
"Today" : "Vandaag",
"This week" : "Deze week",
"Online" : "Online",
"Invisible" : "Verborgen",
"Offline" : "Off-line",
+ "There was an error saving the new status" : "Er is een fout opgetreden bij het bewaren van de nieuwe status",
"30 minutes" : "30 minuten",
"1 hour" : "1 uur",
- "4 hours" : "4 uur"
+ "4 hours" : "4 uur",
+ "Mute all notifications" : "Onderdruk alle meldingen",
+ "Clear status after" : "Maak de status leeg na"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/build/psalm-baseline.xml b/build/psalm-baseline.xml
index 4a06056de02..ab3e9426b7e 100644
--- a/build/psalm-baseline.xml
+++ b/build/psalm-baseline.xml
@@ -5237,9 +5237,6 @@
<code>1</code>
<code>1</code>
</InvalidScalarArgument>
- <UndefinedMethod occurrences="1">
- <code>\OC_DB::simulateUpdateDbFromStructure(\OC_App::getAppPath($appId) . '/appinfo/database.xml')</code>
- </UndefinedMethod>
</file>
<file src="lib/private/Updater/VersionCheck.php">
<InvalidScalarArgument occurrences="2">
diff --git a/core/l10n/nl.js b/core/l10n/nl.js
index d64091674d6..5fac5d085e3 100644
--- a/core/l10n/nl.js
+++ b/core/l10n/nl.js
@@ -170,6 +170,7 @@ OC.L10N.register(
"Start typing to search" : "Begin met typen om te zoeken",
"Loading more results …" : "Meer resultaten laden ...",
"Load more results" : "Laad meer resultaten",
+ "An error occurred while searching for {type}" : "Er trad een fout op bij het zoeken naar {type}",
"_Please enter {minSearchLength} character or more to search_::_Please enter {minSearchLength} characters or more to search_" : ["Voer {minSearchLength} tekens of meer in om te zoeken","Voer alstublieft {minSearchLength} tekens of meer in om te zoeken"],
"Search {types} …" : "Zoeken naar {types}…",
"Settings" : "Instellingen",
diff --git a/core/l10n/nl.json b/core/l10n/nl.json
index f9d1679cddb..6386bc386db 100644
--- a/core/l10n/nl.json
+++ b/core/l10n/nl.json
@@ -168,6 +168,7 @@
"Start typing to search" : "Begin met typen om te zoeken",
"Loading more results …" : "Meer resultaten laden ...",
"Load more results" : "Laad meer resultaten",
+ "An error occurred while searching for {type}" : "Er trad een fout op bij het zoeken naar {type}",
"_Please enter {minSearchLength} character or more to search_::_Please enter {minSearchLength} characters or more to search_" : ["Voer {minSearchLength} tekens of meer in om te zoeken","Voer alstublieft {minSearchLength} tekens of meer in om te zoeken"],
"Search {types} …" : "Zoeken naar {types}…",
"Settings" : "Instellingen",
diff --git a/core/l10n/ru.js b/core/l10n/ru.js
index 68c5efc2645..9cc3663c83b 100644
--- a/core/l10n/ru.js
+++ b/core/l10n/ru.js
@@ -86,9 +86,12 @@ OC.L10N.register(
"Your PHP does not have FreeType support, resulting in breakage of profile pictures and the settings interface." : "Установленная версия PHP не поддерживает библиотеку FreeType, что приводит к неверному отображению изображений профиля и интерфейса настроек.",
"Missing index \"{indexName}\" in table \"{tableName}\"." : "В таблице «{tableName}» отсутствует индекс «{indexName}».",
"The database is missing some indexes. Due to the fact that adding indexes on big tables could take some time they were not added automatically. By running \"occ db:add-missing-indices\" those missing indexes could be added manually while the instance keeps running. Once the indexes are added queries to those tables are usually much faster." : "В базе данных отсутствуют некоторые индексы. Так как создание таких индексов может занять достаточно продолжительное время, оно должно быть запущено вручную. Для создания индексов необходимо запустить команду «occ db:add-missing-indices» во время работы сервера Nextcloud. При созданных индексах, как правило, запросы к базе данных выполняются значительно быстрее.",
+ "Missing primary key on table \"{tableName}\"." : "Отсутствует первичный ключ в таблице \"{tableName}\".",
+ "The database is missing some primary keys. Due to the fact that adding primary keys on big tables could take some time they were not added automatically. By running \"occ db:add-missing-primary-keys\" those missing primary keys could be added manually while the instance keeps running." : "В базе данных отсутствуют некоторые первичные ключи. Поскольку добавление первичных ключей в большие таблицы могло занять некоторое время, они не добавлялись автоматически. Запустив команду «occ db: add-missing-primary-keys», эти недостающие первичные ключи можно добавить вручную, пока экземпляр продолжает работать.",
"Missing optional column \"{columnName}\" in table \"{tableName}\"." : "Отсутствует необязательный столбец \"{columnName}\" в таблице \"{tableName}\".",
"The database is missing some optional columns. Due to the fact that adding columns on big tables could take some time they were not added automatically when they can be optional. By running \"occ db:add-missing-columns\" those missing columns could be added manually while the instance keeps running. Once the columns are added some features might improve responsiveness or usability." : "В базе данных отсутствуют некоторые необязательные столбцы. Из-за того, что добавление столбцов в больших таблицах может занять некоторое время, они не добавляются автоматически, если они могут быть необязательными. Запустив «occ db:add-missing-columns», эти недостающие столбцы можно добавить вручную, пока экземпляр продолжает работать. После добавления столбцов некоторые функции могут улучшить отзывчивость или удобство использования.",
"This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them." : "В системе не установлены рекомендуемые модули PHP. Для улучшения производительности и совместимости рекомендуется установить эти модули.",
+ "Module php-imagick in this instance has no SVG support. For better compatibility it is recommended to install it." : "Модуль php-imagick в этом случае не поддерживает SVG. Для лучшей совместимости рекомендуется установить его.",
"Some columns in the database are missing a conversion to big int. Due to the fact that changing column types on big tables could take some time they were not changed automatically. By running 'occ db:convert-filecache-bigint' those pending changes could be applied manually. This operation needs to be made while the instance is offline. For further details read <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">the documentation page about this</a>." : "Некоторые индексы базы данных не были преобразованы в тип big int. Так как преобразование таких индексов может занять продолжительное время, оно должно быть запущенно вручную. Чтобы выполнить преобразование, необходимо включить режим обслуживания и запустить в терминале команду «occ db:convert-filecache-bigint». Дополнительные сведения приведены <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">на соответствующей странице документации</a>.",
"SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "В настоящее время в качестве механизма БД используется SQLite. Для более крупных развёртываний рекомендуется перейти к использованию других баз данных.",
"This is particularly recommended when using the desktop client for file synchronisation." : "Такой переход рекомендован и при использовании приложений-клиентов для синхронизации файлов.",
@@ -259,6 +262,7 @@ OC.L10N.register(
"Too many requests" : "Превышено количество запросов",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Превышено количество запросов из вашей сети. Попробуйте позднее или сообщите администратору об этой ошибке.",
"Error" : "Ошибка",
+ "Previous" : "Предыдущий",
"Internal Server Error" : "Внутренняя ошибка сервера",
"The server was unable to complete your request." : "Запрос не может быть обработан сервером.",
"If this happens again, please send the technical details below to the server administrator." : "Если это случится ещё раз, отправьте администратору сервера подробное сообщение о произошедшем, приведённое ниже.",
diff --git a/core/l10n/ru.json b/core/l10n/ru.json
index dfe2fabf928..b44a9d92f39 100644
--- a/core/l10n/ru.json
+++ b/core/l10n/ru.json
@@ -84,9 +84,12 @@
"Your PHP does not have FreeType support, resulting in breakage of profile pictures and the settings interface." : "Установленная версия PHP не поддерживает библиотеку FreeType, что приводит к неверному отображению изображений профиля и интерфейса настроек.",
"Missing index \"{indexName}\" in table \"{tableName}\"." : "В таблице «{tableName}» отсутствует индекс «{indexName}».",
"The database is missing some indexes. Due to the fact that adding indexes on big tables could take some time they were not added automatically. By running \"occ db:add-missing-indices\" those missing indexes could be added manually while the instance keeps running. Once the indexes are added queries to those tables are usually much faster." : "В базе данных отсутствуют некоторые индексы. Так как создание таких индексов может занять достаточно продолжительное время, оно должно быть запущено вручную. Для создания индексов необходимо запустить команду «occ db:add-missing-indices» во время работы сервера Nextcloud. При созданных индексах, как правило, запросы к базе данных выполняются значительно быстрее.",
+ "Missing primary key on table \"{tableName}\"." : "Отсутствует первичный ключ в таблице \"{tableName}\".",
+ "The database is missing some primary keys. Due to the fact that adding primary keys on big tables could take some time they were not added automatically. By running \"occ db:add-missing-primary-keys\" those missing primary keys could be added manually while the instance keeps running." : "В базе данных отсутствуют некоторые первичные ключи. Поскольку добавление первичных ключей в большие таблицы могло занять некоторое время, они не добавлялись автоматически. Запустив команду «occ db: add-missing-primary-keys», эти недостающие первичные ключи можно добавить вручную, пока экземпляр продолжает работать.",
"Missing optional column \"{columnName}\" in table \"{tableName}\"." : "Отсутствует необязательный столбец \"{columnName}\" в таблице \"{tableName}\".",
"The database is missing some optional columns. Due to the fact that adding columns on big tables could take some time they were not added automatically when they can be optional. By running \"occ db:add-missing-columns\" those missing columns could be added manually while the instance keeps running. Once the columns are added some features might improve responsiveness or usability." : "В базе данных отсутствуют некоторые необязательные столбцы. Из-за того, что добавление столбцов в больших таблицах может занять некоторое время, они не добавляются автоматически, если они могут быть необязательными. Запустив «occ db:add-missing-columns», эти недостающие столбцы можно добавить вручную, пока экземпляр продолжает работать. После добавления столбцов некоторые функции могут улучшить отзывчивость или удобство использования.",
"This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them." : "В системе не установлены рекомендуемые модули PHP. Для улучшения производительности и совместимости рекомендуется установить эти модули.",
+ "Module php-imagick in this instance has no SVG support. For better compatibility it is recommended to install it." : "Модуль php-imagick в этом случае не поддерживает SVG. Для лучшей совместимости рекомендуется установить его.",
"Some columns in the database are missing a conversion to big int. Due to the fact that changing column types on big tables could take some time they were not changed automatically. By running 'occ db:convert-filecache-bigint' those pending changes could be applied manually. This operation needs to be made while the instance is offline. For further details read <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">the documentation page about this</a>." : "Некоторые индексы базы данных не были преобразованы в тип big int. Так как преобразование таких индексов может занять продолжительное время, оно должно быть запущенно вручную. Чтобы выполнить преобразование, необходимо включить режим обслуживания и запустить в терминале команду «occ db:convert-filecache-bigint». Дополнительные сведения приведены <a target=\"_blank\" rel=\"noreferrer noopener\" href=\"{docLink}\">на соответствующей странице документации</a>.",
"SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "В настоящее время в качестве механизма БД используется SQLite. Для более крупных развёртываний рекомендуется перейти к использованию других баз данных.",
"This is particularly recommended when using the desktop client for file synchronisation." : "Такой переход рекомендован и при использовании приложений-клиентов для синхронизации файлов.",
@@ -257,6 +260,7 @@
"Too many requests" : "Превышено количество запросов",
"There were too many requests from your network. Retry later or contact your administrator if this is an error." : "Превышено количество запросов из вашей сети. Попробуйте позднее или сообщите администратору об этой ошибке.",
"Error" : "Ошибка",
+ "Previous" : "Предыдущий",
"Internal Server Error" : "Внутренняя ошибка сервера",
"The server was unable to complete your request." : "Запрос не может быть обработан сервером.",
"If this happens again, please send the technical details below to the server administrator." : "Если это случится ещё раз, отправьте администратору сервера подробное сообщение о произошедшем, приведённое ниже.",
diff --git a/lib/private/Share/Helper.php b/lib/private/Share/Helper.php
index a992330b577..191e410d990 100644
--- a/lib/private/Share/Helper.php
+++ b/lib/private/Share/Helper.php
@@ -30,136 +30,9 @@
namespace OC\Share;
-use OC\HintException;
-use OCP\DB\QueryBuilder\IQueryBuilder;
-use OCP\Share\IShare;
-
class Helper extends \OC\Share\Constants {
/**
- * Generate a unique target for the item
- * @param string $itemType
- * @param string $itemSource
- * @param int $shareType SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK
- * @param string $shareWith User or group the item is being shared with
- * @param string $uidOwner User that is the owner of shared item
- * @param string $suggestedTarget The suggested target originating from a reshare (optional)
- * @param int $groupParent The id of the parent group share (optional)
- * @throws \Exception
- * @return string Item target
- */
- public static function generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $suggestedTarget = null, $groupParent = null) {
- // FIXME: $uidOwner and $groupParent seems to be unused
- $backend = \OC\Share\Share::getBackend($itemType);
- if ($shareType === IShare::TYPE_LINK || $shareType === IShare::TYPE_REMOTE) {
- if (isset($suggestedTarget)) {
- return $suggestedTarget;
- }
- return $backend->generateTarget($itemSource, false);
- } else {
- if ($shareType == IShare::TYPE_USER) {
- // Share with is a user, so set share type to user and groups
- $shareType = self::$shareTypeUserAndGroups;
- }
-
- // Check if suggested target exists first
- if (!isset($suggestedTarget)) {
- $suggestedTarget = $itemSource;
- }
- if ($shareType == IShare::TYPE_GROUP) {
- $target = $backend->generateTarget($suggestedTarget, false);
- } else {
- $target = $backend->generateTarget($suggestedTarget, $shareWith);
- }
-
- return $target;
- }
- }
-
- /**
- * Delete all reshares and group share children of an item
- * @param int $parent Id of item to delete
- * @param bool $excludeParent If true, exclude the parent from the delete (optional)
- * @param string $uidOwner The user that the parent was shared with (optional)
- * @param int $newParent new parent for the childrens
- * @param bool $excludeGroupChildren exclude group children elements
- */
- public static function delete($parent, $excludeParent = false, $uidOwner = null, $newParent = null, $excludeGroupChildren = false) {
- $ids = [$parent];
- $deletedItems = [];
- $changeParent = [];
- $parents = [$parent];
- while (!empty($parents)) {
- $query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
- $query->select(
- 'id', 'share_with', 'item_type', 'share_type',
- 'item_target', 'file_target', 'parent'
- )
- ->from('share')
- ->where($query->expr()->in('parent', $query->createNamedParameter(
- $parents, IQueryBuilder::PARAM_INT_ARRAY
- )));
-
- if (count($ids) === 1 && isset($uidOwner)) {
- // Check the owner on the first search of reshares, useful for
- // finding and deleting the reshares by a single user of a group share
- $query->andWhere($query->expr()->eq('uid_owner', $uidOwner));
- }
-
- if ($excludeGroupChildren) {
- $query->andWhere($query->expr()->eq('share_type', self::$shareTypeGroupUserUnique));
- }
-
- $result = $query->execute();
- // Reset parents array, only go through loop again if items are found
- $parents = [];
- while ($item = $result->fetch()) {
- $tmpItem = [
- 'id' => $item['id'],
- 'shareWith' => $item['share_with'],
- 'itemTarget' => $item['item_target'],
- 'itemType' => $item['item_type'],
- 'shareType' => (int)$item['share_type'],
- ];
- if (isset($item['file_target'])) {
- $tmpItem['fileTarget'] = $item['file_target'];
- }
- // if we have a new parent for the child we remember the child
- // to update the parent, if not we add it to the list of items
- // which should be deleted
- if ($newParent !== null) {
- $changeParent[] = $item['id'];
- } else {
- $deletedItems[] = $tmpItem;
- $ids[] = $item['id'];
- $parents[] = $item['id'];
- }
- }
- $result->closeCursor();
- }
- if ($excludeParent) {
- unset($ids[0]);
- }
-
- if (!empty($changeParent)) {
- $query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
- $query->update('share')
- ->set('parent', $query->createNamedParameter($newParent, IQueryBuilder::PARAM_INT))
- ->where($query->expr()->in('id', $query->createNamedParameter($changeParent, IQueryBuilder::PARAM_INT_ARRAY)));
- $query->execute();
- }
-
- if (!empty($ids)) {
- $query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
- $query->delete('share')
- ->where($query->expr()->in('id', $query->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY)));
- $query->execute();
- }
-
- return $deletedItems;
- }
-
- /**
* get default expire settings defined by the admin
* @return array contains 'defaultExpireDateSet', 'enforceExpireDate', 'expireAfterDays'
*/
@@ -245,24 +118,6 @@ class Helper extends \OC\Share\Constants {
}
/**
- * split user and remote from federated cloud id
- *
- * @param string $id
- * @return string[]
- * @throws HintException
- */
- public static function splitUserRemote($id) {
- try {
- $cloudId = \OC::$server->getCloudIdManager()->resolveCloudId($id);
- return [$cloudId->getUser(), $cloudId->getRemote()];
- } catch (\InvalidArgumentException $e) {
- $l = \OC::$server->getL10N('core');
- $hint = $l->t('Invalid Federated Cloud ID');
- throw new HintException('Invalid Federated Cloud ID', $hint, 0, $e);
- }
- }
-
- /**
* check if two federated cloud IDs refer to the same user
*
* @param string $user1
diff --git a/lib/private/Share/Share.php b/lib/private/Share/Share.php
index d898254938e..fdefb3bf259 100644
--- a/lib/private/Share/Share.php
+++ b/lib/private/Share/Share.php
@@ -104,8 +104,7 @@ class Share extends Constants {
* \OC\Share\Share::getItemsSharedWith('folder'); (apps/files_sharing/tests/UpdaterTest.php)
*/
public static function getItemsSharedWith() {
- return self::getItems('folder', null, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, self::FORMAT_NONE,
- null, -1, false);
+ return self::getItems('folder', null, self::$shareTypeUserAndGroups, \OC_User::getUser());
}
/**
@@ -117,11 +116,12 @@ class Share extends Constants {
* @param int $limit Number of items to return (optional) Returns all by default
* @param boolean $includeCollections (optional)
* @return mixed Return depends on format
+ * @deprecated TESTS ONLY - this methods is only used by tests
+ * called like this:
+ * \OC\Share\Share::getItemsSharedWithUser('test', $shareWith); (tests/lib/Share/Backend.php)
*/
- public static function getItemsSharedWithUser($itemType, $user, $format = self::FORMAT_NONE,
- $parameters = null, $limit = -1, $includeCollections = false) {
- return self::getItems($itemType, null, self::$shareTypeUserAndGroups, $user, null, $format,
- $parameters, $limit, $includeCollections);
+ public static function getItemsSharedWithUser($itemType, $user) {
+ return self::getItems('test', null, self::$shareTypeUserAndGroups, $user);
}
/**
@@ -234,23 +234,6 @@ class Share extends Constants {
}
/**
- * Get the item of item type shared with the current user by source
- * @param string $itemType
- * @param string $itemSource
- * @param int $format (optional) Format type must be defined by the backend
- * @param mixed $parameters
- * @param boolean $includeCollections
- * @param string $shareWith (optional) define against which user should be checked, default: current user
- * @return array
- */
- public static function getItemSharedWithBySource($itemType, $itemSource, $format = self::FORMAT_NONE,
- $parameters = null, $includeCollections = false, $shareWith = null) {
- $shareWith = ($shareWith === null) ? \OC_User::getUser() : $shareWith;
- return self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, $shareWith, null, $format,
- $parameters, 1, $includeCollections, true);
- }
-
- /**
* Get the shared item of item type owned by the current user
* @param string $itemType
* @param string $itemSource
@@ -258,126 +241,14 @@ class Share extends Constants {
* @param mixed $parameters
* @param boolean $includeCollections
* @return mixed Return depends on format
+ *
+ * Refactoring notes:
+ * * defacto $parameters and $format is always the default and therefore is removed in the subsequent call
*/
public static function getItemShared($itemType, $itemSource, $format = self::FORMAT_NONE,
$parameters = null, $includeCollections = false) {
- return self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(), $format,
- $parameters, -1, $includeCollections);
- }
-
- /**
- * Unshare an item from a user, group, or delete a private link
- * @param string $itemType
- * @param string $itemSource
- * @param int $shareType SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_LINK
- * @param string $shareWith User or group the item is being shared with
- * @param string $owner owner of the share, if null the current user is used
- * @return boolean true on success or false on failure
- */
- public static function unshare($itemType, $itemSource, $shareType, $shareWith, $owner = null) {
-
- // check if it is a valid itemType
- self::getBackend($itemType);
-
- $items = self::getItemSharedWithUser($itemType, $itemSource, $shareWith, $owner, $shareType);
-
- $toDelete = [];
- $newParent = null;
- $currentUser = $owner ? $owner : \OC_User::getUser();
- foreach ($items as $item) {
- // delete the item with the expected share_type and owner
- if ((int)$item['share_type'] === (int)$shareType && $item['uid_owner'] === $currentUser) {
- $toDelete = $item;
- // if there is more then one result we don't have to delete the children
- // but update their parent. For group shares the new parent should always be
- // the original group share and not the db entry with the unique name
- } elseif ((int)$item['share_type'] === self::$shareTypeGroupUserUnique) {
- $newParent = $item['parent'];
- } else {
- $newParent = $item['id'];
- }
- }
-
- if (!empty($toDelete)) {
- self::unshareItem($toDelete, $newParent);
- return true;
- }
- return false;
- }
-
- /**
- * Checks whether a share has expired, calls unshareItem() if yes.
- * @param array $item Share data (usually database row)
- * @return boolean True if item was expired, false otherwise.
- */
- protected static function expireItem(array $item) {
- $result = false;
-
- // only use default expiration date for link shares
- if ((int) $item['share_type'] === IShare::TYPE_LINK) {
-
- // calculate expiration date
- if (!empty($item['expiration'])) {
- $userDefinedExpire = new \DateTime($item['expiration']);
- $expires = $userDefinedExpire->getTimestamp();
- } else {
- $expires = null;
- }
-
-
- // get default expiration settings
- $defaultSettings = Helper::getDefaultExpireSetting();
- $expires = Helper::calculateExpireDate($defaultSettings, $item['stime'], $expires);
-
-
- if (is_int($expires)) {
- $now = time();
- if ($now > $expires) {
- self::unshareItem($item);
- $result = true;
- }
- }
- }
- return $result;
- }
-
- /**
- * Unshares a share given a share data array
- * @param array $item Share data (usually database row)
- * @param int $newParent parent ID
- * @return null
- */
- protected static function unshareItem(array $item, $newParent = null) {
- $shareType = (int)$item['share_type'];
- $shareWith = null;
- if ($shareType !== IShare::TYPE_LINK) {
- $shareWith = $item['share_with'];
- }
-
- // Pass all the vars we have for now, they may be useful
- $hookParams = [
- 'id' => $item['id'],
- 'itemType' => $item['item_type'],
- 'itemSource' => $item['item_source'],
- 'shareType' => $shareType,
- 'shareWith' => $shareWith,
- 'itemParent' => $item['parent'],
- 'uidOwner' => $item['uid_owner'],
- ];
- if ($item['item_type'] === 'file' || $item['item_type'] === 'folder') {
- $hookParams['fileSource'] = $item['file_source'];
- $hookParams['fileTarget'] = $item['file_target'];
- }
-
- \OC_Hook::emit(\OCP\Share::class, 'pre_unshare', $hookParams);
- $deletedShares = Helper::delete($item['id'], false, null, $newParent);
- $deletedShares[] = $hookParams;
- $hookParams['deletedShares'] = $deletedShares;
- \OC_Hook::emit(\OCP\Share::class, 'post_unshare', $hookParams);
- if ((int)$item['share_type'] === IShare::TYPE_REMOTE && \OC::$server->getUserSession()->getUser()) {
- list(, $remote) = Helper::splitUserRemote($item['share_with']);
- self::sendRemoteUnshare($remote, $item['id'], $item['token']);
- }
+ return self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(), self::FORMAT_NONE,
+ null, -1, $includeCollections);
}
/**
@@ -472,6 +343,8 @@ class Share extends Constants {
*
* See public functions getItem(s)... for parameter usage
*
+ * Refactoring notes:
+ * * defacto $limit, $itemsShareWithBySource, $checkExpireDate, $parameters and $format is always the default and therefore is removed in the subsequent call
*/
public static function getItems($itemType, $item = null, $shareType = null, $shareWith = null,
$uidOwner = null, $format = self::FORMAT_NONE, $parameters = null, $limit = -1,
@@ -579,7 +452,7 @@ class Share extends Constants {
$where .= ' AND';
}
// If looking for own shared items, check item_source else check item_target
- if (isset($uidOwner) || $itemShareWithBySource) {
+ if (isset($uidOwner)) {
// If item type is a file, file source needs to be checked in case the item was converted
if ($fileDependent) {
$where .= ' `file_source` = ?';
@@ -604,26 +477,10 @@ class Share extends Constants {
}
}
- if ($shareType == self::$shareTypeUserAndGroups && $limit === 1) {
- // Make sure the unique user target is returned if it exists,
- // unique targets should follow the group share in the database
- // If the limit is not 1, the filtering can be done later
- $where .= ' ORDER BY `*PREFIX*share`.`id` DESC';
- } else {
- $where .= ' ORDER BY `*PREFIX*share`.`id` ASC';
- }
+ $where .= ' ORDER BY `*PREFIX*share`.`id` ASC';
- if ($limit != -1 && !$includeCollections) {
- // The limit must be at least 3, because filtering needs to be done
- if ($limit < 3) {
- $queryLimit = 3;
- } else {
- $queryLimit = $limit;
- }
- } else {
- $queryLimit = null;
- }
- $select = self::createSelectStatement($format, $fileDependent, $uidOwner);
+ $queryLimit = null;
+ $select = self::createSelectStatement(self::FORMAT_NONE, $fileDependent, $uidOwner);
$root = strlen($root);
$query = \OC_DB::prepare('SELECT '.$select.' FROM `*PREFIX*share` '.$where, $queryLimit);
$result = $query->execute($queryArgs);
@@ -727,11 +584,6 @@ class Share extends Constants {
}
}
- if ($checkExpireDate) {
- if (self::expireItem($row)) {
- continue;
- }
- }
// Check if resharing is allowed, if not remove share permission
if (isset($row['permissions']) && (!self::isResharingAllowed() | \OCP\Util::isSharingDisabledForUser())) {
$row['permissions'] &= ~\OCP\Constants::PERMISSION_SHARE;
@@ -771,14 +623,6 @@ class Share extends Constants {
if (!empty($items)) {
$collectionItems = [];
foreach ($items as &$row) {
- // Return only the item instead of a 2-dimensional array
- if ($limit == 1 && $row[$column] == $item && ($row['item_type'] == $itemType || $itemType == 'file')) {
- if ($format == self::FORMAT_NONE) {
- return $row;
- } else {
- break;
- }
- }
// Check if this is a collection of the requested item type
if ($includeCollections && $collectionTypes && $row['item_type'] !== 'folder' && in_array($row['item_type'], $collectionTypes)) {
if (($collectionBackend = self::getBackend($row['item_type']))
@@ -814,19 +658,7 @@ class Share extends Constants {
}
if (isset($item)) {
if ($childItem[$column] == $item) {
- // Return only the item instead of a 2-dimensional array
- if ($limit == 1) {
- if ($format == self::FORMAT_NONE) {
- return $childItem;
- } else {
- // Unset the items array and break out of both loops
- $items = [];
- $items[] = $childItem;
- break 2;
- }
- } else {
- $collectionItems[] = $childItem;
- }
+ $collectionItems[] = $childItem;
}
} else {
$collectionItems[] = $childItem;
@@ -862,7 +694,7 @@ class Share extends Constants {
return $item['share_type'] !== self::$shareTypeGroupUserUnique;
});
- return self::formatResult($items, $column, $backend, $format, $parameters);
+ return self::formatResult($items, $column, $backend);
} elseif ($includeCollections && $collectionTypes && in_array('folder', $collectionTypes)) {
// FIXME: Thats a dirty hack to improve file sharing performance,
// see github issue #10588 for more details
@@ -873,10 +705,7 @@ class Share extends Constants {
foreach ($sharedParents as $parent) {
$collectionItems[] = $parent;
}
- if ($limit === 1) {
- return reset($collectionItems);
- }
- return self::formatResult($collectionItems, $column, $backend, $format, $parameters);
+ return self::formatResult($collectionItems, $column, $backend);
}
return [];
@@ -1056,65 +885,6 @@ class Share extends Constants {
return $url;
}
- /**
- * try http post first with https and then with http as a fallback
- *
- * @param string $remoteDomain
- * @param string $urlSuffix
- * @param array $fields post parameters
- * @return array
- */
- private static function tryHttpPostToShareEndpoint($remoteDomain, $urlSuffix, array $fields) {
- $protocol = 'https://';
- $result = [
- 'success' => false,
- 'result' => '',
- ];
- $try = 0;
- $discoveryService = \OC::$server->query(\OCP\OCS\IDiscoveryService::class);
- while ($result['success'] === false && $try < 2) {
- $federationEndpoints = $discoveryService->discover($protocol . $remoteDomain, 'FEDERATED_SHARING');
- $endpoint = isset($federationEndpoints['share']) ? $federationEndpoints['share'] : '/ocs/v2.php/cloud/shares';
- $client = \OC::$server->getHTTPClientService()->newClient();
-
- try {
- $response = $client->post(
- $protocol . $remoteDomain . $endpoint . $urlSuffix . '?format=' . self::RESPONSE_FORMAT,
- [
- 'body' => $fields,
- 'connect_timeout' => 10,
- ]
- );
-
- $result = ['success' => true, 'result' => $response->getBody()];
- } catch (\Exception $e) {
- $result = ['success' => false, 'result' => $e->getMessage()];
- }
-
- $try++;
- $protocol = 'http://';
- }
-
- return $result;
- }
-
- /**
- * send server-to-server unshare to remote server
- *
- * @param string $remote url
- * @param int $id share id
- * @param string $token
- * @return bool
- */
- private static function sendRemoteUnshare($remote, $id, $token) {
- $url = rtrim($remote, '/');
- $fields = ['token' => $token, 'format' => 'json'];
- $url = self::removeProtocolFromUrl($url);
- $result = self::tryHttpPostToShareEndpoint($url, '/'.$id.'/unshare', $fields);
- $status = json_decode($result['result'], true);
-
- return ($result['success'] && ($status['ocs']['meta']['statuscode'] === 100 || $status['ocs']['meta']['statuscode'] === 200));
- }
/**
* @return int
diff --git a/lib/public/Share.php b/lib/public/Share.php
index 9ecfccf0d1f..7ce294b614d 100644
--- a/lib/public/Share.php
+++ b/lib/public/Share.php
@@ -120,10 +120,13 @@ class Share extends \OC\Share\Constants {
* @return mixed Return depends on format
* @since 5.0.0
* @deprecated 17.0.0
+ *
+ * Refactoring notes:
+ * * defacto $parameters and $format is always the default and therefore is removed in the subsequent call
*/
public static function getItemShared($itemType, $itemSource, $format = self::FORMAT_NONE,
$parameters = null, $includeCollections = false) {
- return \OC\Share\Share::getItemShared($itemType, $itemSource, $format, $parameters, $includeCollections);
+ return \OC\Share\Share::getItemShared($itemType, $itemSource, self::FORMAT_NONE, null, $includeCollections);
}
/**
diff --git a/tests/lib/Files/ViewTest.php b/tests/lib/Files/ViewTest.php
index 139516ba374..f18af484f87 100644
--- a/tests/lib/Files/ViewTest.php
+++ b/tests/lib/Files/ViewTest.php
@@ -1674,6 +1674,8 @@ class ViewTest extends \Test\TestCase {
->setSharedBy($this->user)
->setShareType(IShare::TYPE_USER)
->setPermissions(\OCP\Constants::PERMISSION_READ)
+ ->setId(42)
+ ->setProviderId('foo')
->setNode($shareDir);
$shareManager->createShare($share);
@@ -1681,7 +1683,7 @@ class ViewTest extends \Test\TestCase {
$this->assertFalse($view->rename('mount1', 'shareddir/sub'), 'Cannot move mount point into shared folder');
$this->assertFalse($view->rename('mount1', 'shareddir/sub/sub2'), 'Cannot move mount point into shared subfolder');
- $this->assertTrue(\OC\Share\Share::unshare('folder', $fileId, IShare::TYPE_USER, 'test2'));
+ $shareManager->deleteShare($share);
$userObject->delete();
}
diff --git a/tests/lib/Share/HelperTest.php b/tests/lib/Share/HelperTest.php
index 44bd70e7e29..8d010400273 100644
--- a/tests/lib/Share/HelperTest.php
+++ b/tests/lib/Share/HelperTest.php
@@ -55,79 +55,6 @@ class HelperTest extends \Test\TestCase {
$this->assertSame($expected, $result);
}
- public function dataTestSplitUserRemote() {
- $userPrefix = ['user@name', 'username'];
- $protocols = ['', 'http://', 'https://'];
- $remotes = [
- 'localhost',
- 'local.host',
- 'dev.local.host',
- 'dev.local.host/path',
- 'dev.local.host/at@inpath',
- '127.0.0.1',
- '::1',
- '::192.0.2.128',
- '::192.0.2.128/at@inpath',
- ];
-
- $testCases = [];
- foreach ($userPrefix as $user) {
- foreach ($remotes as $remote) {
- foreach ($protocols as $protocol) {
- $baseUrl = $user . '@' . $protocol . $remote;
-
- $testCases[] = [$baseUrl, $user, $protocol . $remote];
- $testCases[] = [$baseUrl . '/', $user, $protocol . $remote];
- $testCases[] = [$baseUrl . '/index.php', $user, $protocol . $remote];
- $testCases[] = [$baseUrl . '/index.php/s/token', $user, $protocol . $remote];
- }
- }
- }
- return $testCases;
- }
-
- /**
- * @dataProvider dataTestSplitUserRemote
- *
- * @param string $remote
- * @param string $expectedUser
- * @param string $expectedUrl
- */
- public function testSplitUserRemote($remote, $expectedUser, $expectedUrl) {
- list($remoteUser, $remoteUrl) = \OC\Share\Helper::splitUserRemote($remote);
- $this->assertSame($expectedUser, $remoteUser);
- $this->assertSame($expectedUrl, $remoteUrl);
- }
-
- public function dataTestSplitUserRemoteError() {
- return [
- // Invalid path
- ['user@'],
-
- // Invalid user
- ['@server'],
- ['us/er@server'],
- ['us:er@server'],
-
- // Invalid splitting
- ['user'],
- [''],
- ['us/erserver'],
- ['us:erserver'],
- ];
- }
-
- /**
- * @dataProvider dataTestSplitUserRemoteError
- *
- * @param string $id
- */
- public function testSplitUserRemoteError($id) {
- $this->expectException(\OC\HintException::class);
-
- \OC\Share\Helper::splitUserRemote($id);
- }
-
/**
* @dataProvider dataTestCompareServerAddresses
*