aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/dav/lib/DAV/CustomPropertiesBackend.php22
-rw-r--r--apps/files_external/l10n/fi.js1
-rw-r--r--apps/files_external/l10n/fi.json1
-rw-r--r--apps/files_sharing/l10n/fi.js9
-rw-r--r--apps/files_sharing/l10n/fi.json9
-rw-r--r--apps/files_sharing/lib/AppInfo/Application.php3
-rw-r--r--apps/files_sharing/lib/Cache.php30
-rw-r--r--apps/files_sharing/lib/SharedStorage.php18
-rw-r--r--apps/files_sharing/tests/TestCase.php2
-rw-r--r--apps/weather_status/l10n/eu.js12
-rw-r--r--apps/weather_status/l10n/eu.json12
-rw-r--r--core/Application.php7
-rw-r--r--core/Command/Db/AddMissingIndices.php13
-rw-r--r--core/Migrations/Version13000Date20170718121200.php1
-rw-r--r--core/l10n/cs.js2
-rw-r--r--core/l10n/cs.json2
-rw-r--r--core/l10n/de_DE.js2
-rw-r--r--core/l10n/de_DE.json2
-rw-r--r--core/l10n/fi.js10
-rw-r--r--core/l10n/fi.json10
-rw-r--r--core/l10n/pl.js2
-rw-r--r--core/l10n/pl.json2
-rw-r--r--core/l10n/tr.js2
-rw-r--r--core/l10n/tr.json2
-rw-r--r--core/l10n/zh_HK.js2
-rw-r--r--core/l10n/zh_HK.json2
-rw-r--r--core/l10n/zh_TW.js2
-rw-r--r--core/l10n/zh_TW.json2
-rw-r--r--lib/composer/composer/autoload_classmap.php1
-rw-r--r--lib/composer/composer/autoload_static.php1
-rw-r--r--lib/l10n/eu.js9
-rw-r--r--lib/l10n/eu.json9
-rw-r--r--lib/private/AllConfig.php4
-rw-r--r--lib/private/Files/SetupManager.php8
-rw-r--r--lib/private/User/DisplayNameCache.php77
-rw-r--r--lib/private/legacy/OC_Helper.php19
36 files changed, 284 insertions, 28 deletions
diff --git a/apps/dav/lib/DAV/CustomPropertiesBackend.php b/apps/dav/lib/DAV/CustomPropertiesBackend.php
index 5f512995ce8..acee65cd00d 100644
--- a/apps/dav/lib/DAV/CustomPropertiesBackend.php
+++ b/apps/dav/lib/DAV/CustomPropertiesBackend.php
@@ -54,6 +54,28 @@ class CustomPropertiesBackend implements BackendInterface {
'{http://owncloud.org/ns}dDC',
'{http://owncloud.org/ns}size',
'{http://nextcloud.org/ns}is-encrypted',
+
+ // Currently, returning null from any propfind handler would still trigger the backend,
+ // so we add all known Nextcloud custom properties in here to avoid that
+
+ // text app
+ '{http://nextcloud.org/ns}rich-workspace',
+ '{http://nextcloud.org/ns}rich-workspace-file',
+ // groupfolders
+ '{http://nextcloud.org/ns}acl-enabled',
+ '{http://nextcloud.org/ns}acl-can-manage',
+ '{http://nextcloud.org/ns}acl-list',
+ '{http://nextcloud.org/ns}inherited-acl-list',
+ '{http://nextcloud.org/ns}group-folder-id',
+ // files_lock
+ '{http://nextcloud.org/ns}lock',
+ '{http://nextcloud.org/ns}lock-owner-type',
+ '{http://nextcloud.org/ns}lock-owner',
+ '{http://nextcloud.org/ns}lock-owner-displayname',
+ '{http://nextcloud.org/ns}lock-owner-editor',
+ '{http://nextcloud.org/ns}lock-time',
+ '{http://nextcloud.org/ns}lock-timeout',
+ '{http://nextcloud.org/ns}lock-token',
];
/**
diff --git a/apps/files_external/l10n/fi.js b/apps/files_external/l10n/fi.js
index 06c7c2e5029..dc2c8b5fdd0 100644
--- a/apps/files_external/l10n/fi.js
+++ b/apps/files_external/l10n/fi.js
@@ -20,6 +20,7 @@ OC.L10N.register(
"Never" : "Ei koskaan",
"Once every direct access" : "Kerran aina suoran käytön yhteydessä",
"Read only" : "Vain luku",
+ "Disconnect" : "Katkaise yhteys",
"Admin defined" : "Ylläpitäjän määrittämä",
"Delete storage?" : "Poistetaanko tallennustila?",
"Saved" : "Tallennettu",
diff --git a/apps/files_external/l10n/fi.json b/apps/files_external/l10n/fi.json
index 09f9621c41b..8f26136ebae 100644
--- a/apps/files_external/l10n/fi.json
+++ b/apps/files_external/l10n/fi.json
@@ -18,6 +18,7 @@
"Never" : "Ei koskaan",
"Once every direct access" : "Kerran aina suoran käytön yhteydessä",
"Read only" : "Vain luku",
+ "Disconnect" : "Katkaise yhteys",
"Admin defined" : "Ylläpitäjän määrittämä",
"Delete storage?" : "Poistetaanko tallennustila?",
"Saved" : "Tallennettu",
diff --git a/apps/files_sharing/l10n/fi.js b/apps/files_sharing/l10n/fi.js
index 3db7e899224..4ad2412692c 100644
--- a/apps/files_sharing/l10n/fi.js
+++ b/apps/files_sharing/l10n/fi.js
@@ -101,6 +101,7 @@ OC.L10N.register(
"Wrong share ID, share doesn't exist" : "Väärä jakotunniste, jakoa ei ole olemassa",
"Could not delete share" : "Jaon poistaminen epäonnistui",
"Please specify a file or folder path" : "Määritä tiedoston tai kansion polku",
+ "Wrong path, file/folder does not exist" : "Väärä polku, tiedostoa/kansiota ei ole olemassa",
"Could not create share" : "Jaon luominen epäonnistui",
"Invalid permissions" : "Virheelliset käyttöoikeudet",
"Please specify a valid user" : "Määritä kelvollinen käyttäjä",
@@ -116,6 +117,7 @@ OC.L10N.register(
"Please specify a valid circle" : "Määritä kelvollinen piiri",
"Unknown share type" : "Tuntematon jaon tyyppi",
"Not a directory" : "Ei hakemisto",
+ "Could not lock node" : "Solmua ei voitu lukita",
"Could not lock path" : "Polun lukitseminen ei onnistunut",
"Wrong or no update parameter given" : "Päivitettävä parametri puuttuu tai on väärin",
"shared by %s" : "%s jakama",
@@ -139,6 +141,10 @@ OC.L10N.register(
"Read only" : "Vain luku",
"Allow upload and editing" : "Salli lähetys ja muokkaus",
"File drop (upload only)" : "Tiedostojen pudotus (vain lähetys)",
+ "Custom permissions" : "Mukautetut oikeudet",
+ "Read" : "Lue",
+ "Upload" : "Lähetä",
+ "Edit" : "Muokkaa",
"Allow creating" : "Salli luominen",
"Allow deleting" : "Salli poistaminen",
"Allow resharing" : "Salli uudelleenjakaminen",
@@ -231,6 +237,7 @@ OC.L10N.register(
"Wrong path, file/folder doesn't exist" : "Väärä polku, tiedostoa tai kansiota ei ole olemassa",
"invalid permissions" : "vialliset oikeudet",
"Can't change permissions for public share links" : "Julkisten jakolinkkien käyttöoikeuksia ei voi muuttaa",
- "Download %s" : "Lataa %s"
+ "Download %s" : "Lataa %s",
+ "Cannot change permissions for public share links" : "Julkisten jakolinkkien oikeuksia ei voi muuttaa"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/files_sharing/l10n/fi.json b/apps/files_sharing/l10n/fi.json
index 59d876fef14..0507545ee83 100644
--- a/apps/files_sharing/l10n/fi.json
+++ b/apps/files_sharing/l10n/fi.json
@@ -99,6 +99,7 @@
"Wrong share ID, share doesn't exist" : "Väärä jakotunniste, jakoa ei ole olemassa",
"Could not delete share" : "Jaon poistaminen epäonnistui",
"Please specify a file or folder path" : "Määritä tiedoston tai kansion polku",
+ "Wrong path, file/folder does not exist" : "Väärä polku, tiedostoa/kansiota ei ole olemassa",
"Could not create share" : "Jaon luominen epäonnistui",
"Invalid permissions" : "Virheelliset käyttöoikeudet",
"Please specify a valid user" : "Määritä kelvollinen käyttäjä",
@@ -114,6 +115,7 @@
"Please specify a valid circle" : "Määritä kelvollinen piiri",
"Unknown share type" : "Tuntematon jaon tyyppi",
"Not a directory" : "Ei hakemisto",
+ "Could not lock node" : "Solmua ei voitu lukita",
"Could not lock path" : "Polun lukitseminen ei onnistunut",
"Wrong or no update parameter given" : "Päivitettävä parametri puuttuu tai on väärin",
"shared by %s" : "%s jakama",
@@ -137,6 +139,10 @@
"Read only" : "Vain luku",
"Allow upload and editing" : "Salli lähetys ja muokkaus",
"File drop (upload only)" : "Tiedostojen pudotus (vain lähetys)",
+ "Custom permissions" : "Mukautetut oikeudet",
+ "Read" : "Lue",
+ "Upload" : "Lähetä",
+ "Edit" : "Muokkaa",
"Allow creating" : "Salli luominen",
"Allow deleting" : "Salli poistaminen",
"Allow resharing" : "Salli uudelleenjakaminen",
@@ -229,6 +235,7 @@
"Wrong path, file/folder doesn't exist" : "Väärä polku, tiedostoa tai kansiota ei ole olemassa",
"invalid permissions" : "vialliset oikeudet",
"Can't change permissions for public share links" : "Julkisten jakolinkkien käyttöoikeuksia ei voi muuttaa",
- "Download %s" : "Lataa %s"
+ "Download %s" : "Lataa %s",
+ "Cannot change permissions for public share links" : "Julkisten jakolinkkien oikeuksia ei voi muuttaa"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/files_sharing/lib/AppInfo/Application.php b/apps/files_sharing/lib/AppInfo/Application.php
index befd1532d02..2539247b561 100644
--- a/apps/files_sharing/lib/AppInfo/Application.php
+++ b/apps/files_sharing/lib/AppInfo/Application.php
@@ -30,6 +30,7 @@
namespace OCA\Files_Sharing\AppInfo;
use OC\Share\Share;
+use OC\User\DisplayNameCache;
use OCA\Files_Sharing\Capabilities;
use OCA\Files_Sharing\Event\BeforeTemplateRenderedEvent;
use OCA\Files_Sharing\External\Manager;
@@ -65,6 +66,7 @@ use OCP\IUserSession;
use OCP\L10N\IFactory;
use OCP\Share\Events\ShareCreatedEvent;
use OCP\Share\IManager;
+use OCP\User\Events\UserChangedEvent;
use OCP\Util;
use Psr\Container\ContainerInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
@@ -98,6 +100,7 @@ class Application extends App implements IBootstrap {
$context->registerCapability(Capabilities::class);
$context->registerNotifierService(Notifier::class);
+ $context->registerEventListener(UserChangedEvent::class, DisplayNameCache::class);
}
public function boot(IBootContext $context): void {
diff --git a/apps/files_sharing/lib/Cache.php b/apps/files_sharing/lib/Cache.php
index 8729426221b..9f11431008f 100644
--- a/apps/files_sharing/lib/Cache.php
+++ b/apps/files_sharing/lib/Cache.php
@@ -33,11 +33,13 @@ use OC\Files\Cache\Wrapper\CacheJail;
use OC\Files\Search\SearchBinaryOperator;
use OC\Files\Search\SearchComparison;
use OC\Files\Storage\Wrapper\Jail;
+use OC\User\DisplayNameCache;
use OCP\Files\Cache\ICacheEntry;
use OCP\Files\Search\ISearchBinaryOperator;
use OCP\Files\Search\ISearchComparison;
use OCP\Files\Search\ISearchOperator;
use OCP\Files\StorageNotAvailableException;
+use OCP\ICacheFactory;
use OCP\IUserManager;
/**
@@ -46,27 +48,22 @@ use OCP\IUserManager;
* don't use this class directly if you need to get metadata, use \OC\Files\Filesystem::getFileInfo instead
*/
class Cache extends CacheJail {
- /** @var \OCA\Files_Sharing\SharedStorage */
+ /** @var SharedStorage */
private $storage;
- /** @var ICacheEntry */
- private $sourceRootInfo;
- /** @var IUserManager */
- private $userManager;
-
- private $rootUnchanged = true;
-
- private $ownerDisplayName;
-
+ private ICacheEntry $sourceRootInfo;
+ private bool $rootUnchanged = true;
+ private ?string $ownerDisplayName = null;
private $numericId;
+ private DisplayNameCache $displayNameCache;
/**
- * @param \OCA\Files_Sharing\SharedStorage $storage
+ * @param SharedStorage $storage
*/
- public function __construct($storage, ICacheEntry $sourceRootInfo, IUserManager $userManager) {
+ public function __construct($storage, ICacheEntry $sourceRootInfo, DisplayNameCache $displayNameCache) {
$this->storage = $storage;
$this->sourceRootInfo = $sourceRootInfo;
- $this->userManager = $userManager;
$this->numericId = $sourceRootInfo->getStorageId();
+ $this->displayNameCache = $displayNameCache;
parent::__construct(
null,
@@ -173,12 +170,7 @@ class Cache extends CacheJail {
private function getOwnerDisplayName() {
if (!$this->ownerDisplayName) {
$uid = $this->storage->getOwner('');
- $user = $this->userManager->get($uid);
- if ($user) {
- $this->ownerDisplayName = $user->getDisplayName();
- } else {
- $this->ownerDisplayName = $uid;
- }
+ $this->ownerDisplayName = $this->displayNameCache->getDisplayName($uid);
}
return $this->ownerDisplayName;
}
diff --git a/apps/files_sharing/lib/SharedStorage.php b/apps/files_sharing/lib/SharedStorage.php
index 6a342f0bdbf..60a292c498d 100644
--- a/apps/files_sharing/lib/SharedStorage.php
+++ b/apps/files_sharing/lib/SharedStorage.php
@@ -35,7 +35,12 @@ namespace OCA\Files_Sharing;
use OC\Files\Cache\FailedCache;
use OC\Files\Cache\NullWatcher;
use OC\Files\Cache\Watcher;
+use OC\Files\ObjectStore\HomeObjectStoreStorage;
+use OC\Files\Storage\Common;
+use OC\Files\Storage\Home;
+use OC\User\DisplayNameCache;
use OCP\Files\Folder;
+use OCP\Files\IHomeStorage;
use OCP\Files\Node;
use OC\Files\Storage\FailedStorage;
use OC\Files\Storage\Wrapper\PermissionsMask;
@@ -182,10 +187,17 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
* @inheritdoc
*/
public function instanceOfStorage($class): bool {
- if ($class === '\OC\Files\Storage\Common') {
+ if ($class === '\OC\Files\Storage\Common' || $class == Common::class) {
return true;
}
- if (in_array($class, ['\OC\Files\Storage\Home', '\OC\Files\ObjectStore\HomeObjectStoreStorage', '\OCP\Files\IHomeStorage'])) {
+ if (in_array($class, [
+ '\OC\Files\Storage\Home',
+ '\OC\Files\ObjectStore\HomeObjectStoreStorage',
+ '\OCP\Files\IHomeStorage',
+ Home::class,
+ HomeObjectStoreStorage::class,
+ IHomeStorage::class
+ ])) {
return false;
}
return parent::instanceOfStorage($class);
@@ -405,7 +417,7 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
$this->cache = new \OCA\Files_Sharing\Cache(
$storage,
$sourceRoot,
- \OC::$server->get(IUserManager::class)
+ \OC::$server->get(DisplayNameCache::class)
);
return $this->cache;
}
diff --git a/apps/files_sharing/tests/TestCase.php b/apps/files_sharing/tests/TestCase.php
index bb1e3125ab2..234ea2c69c8 100644
--- a/apps/files_sharing/tests/TestCase.php
+++ b/apps/files_sharing/tests/TestCase.php
@@ -39,6 +39,7 @@ use OCA\Files_Sharing\MountProvider;
use OCP\Files\Config\IMountProviderCollection;
use OCP\Share\IShare;
use Test\Traits\MountProviderTrait;
+use OC\User\DisplayNameCache;
/**
* Class TestCase
@@ -116,6 +117,7 @@ abstract class TestCase extends \Test\TestCase {
protected function setUp(): void {
parent::setUp();
+ \OC::$server->get(DisplayNameCache::class)->clear();
//login as user1
self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
diff --git a/apps/weather_status/l10n/eu.js b/apps/weather_status/l10n/eu.js
index cffdb9d1a5e..d36bcaaf2dd 100644
--- a/apps/weather_status/l10n/eu.js
+++ b/apps/weather_status/l10n/eu.js
@@ -21,6 +21,18 @@ OC.L10N.register(
"{temperature} {unit} partly cloudy" : "{temperature} {unit} hodei-tarteak",
"{temperature} {unit} foggy later today" : "{temperature} {unit} lainotu egingo da geroago",
"{temperature} {unit} foggy" : "{temperature} {unit} lainotsu",
+ "{temperature} {unit} light rainfall later today" : "{tenperatura} {unitatea} eurite arina gaur beranduago",
+ "{temperature} {unit} light rainfall" : "{tenperatura} {unitatea} prezipitazio arina",
+ "{temperature} {unit} rainfall later today" : "{temperature} {unit} prezipitazioa gaur beranduago",
+ "{temperature} {unit} rainfall" : "{tenperatura} {unitatea} prezipitazioa",
+ "{temperature} {unit} heavy rainfall later today" : "{tenperatura} {unitatea} eurite handia gaur beranduago",
+ "{temperature} {unit} heavy rainfall" : "{tenperatura} {unitatea} euri-jasa",
+ "{temperature} {unit} rainfall showers later today" : "{temperature} {unit} euri zaparrada gaur beranduago",
+ "{temperature} {unit} rainfall showers" : "{tenperatura} {unitatea} euri zaparradak gaur beranduago",
+ "{temperature} {unit} light rainfall showers later today" : "{temperature} {unit} zaparrada arinak gaur beranduago",
+ "{temperature} {unit} light rainfall showers" : "{tenperatura} {unitatea} zaparrada arinak",
+ "{temperature} {unit} heavy rainfall showers later today" : "{temperature} {unit} euri zaparrada handiak gaur beranduago",
+ "{temperature} {unit} heavy rainfall showers" : "{tenperatura} {unitatea} euri zaparrada handiak",
"More weather for {adr}" : "Eguraldi gehiago {adr}-(e)rako",
"Loading weather" : "Eguraldia kargatzen",
"Remove from favorites" : "Kendu gogokoetatik",
diff --git a/apps/weather_status/l10n/eu.json b/apps/weather_status/l10n/eu.json
index 091def3710b..3e974d1dba5 100644
--- a/apps/weather_status/l10n/eu.json
+++ b/apps/weather_status/l10n/eu.json
@@ -19,6 +19,18 @@
"{temperature} {unit} partly cloudy" : "{temperature} {unit} hodei-tarteak",
"{temperature} {unit} foggy later today" : "{temperature} {unit} lainotu egingo da geroago",
"{temperature} {unit} foggy" : "{temperature} {unit} lainotsu",
+ "{temperature} {unit} light rainfall later today" : "{tenperatura} {unitatea} eurite arina gaur beranduago",
+ "{temperature} {unit} light rainfall" : "{tenperatura} {unitatea} prezipitazio arina",
+ "{temperature} {unit} rainfall later today" : "{temperature} {unit} prezipitazioa gaur beranduago",
+ "{temperature} {unit} rainfall" : "{tenperatura} {unitatea} prezipitazioa",
+ "{temperature} {unit} heavy rainfall later today" : "{tenperatura} {unitatea} eurite handia gaur beranduago",
+ "{temperature} {unit} heavy rainfall" : "{tenperatura} {unitatea} euri-jasa",
+ "{temperature} {unit} rainfall showers later today" : "{temperature} {unit} euri zaparrada gaur beranduago",
+ "{temperature} {unit} rainfall showers" : "{tenperatura} {unitatea} euri zaparradak gaur beranduago",
+ "{temperature} {unit} light rainfall showers later today" : "{temperature} {unit} zaparrada arinak gaur beranduago",
+ "{temperature} {unit} light rainfall showers" : "{tenperatura} {unitatea} zaparrada arinak",
+ "{temperature} {unit} heavy rainfall showers later today" : "{temperature} {unit} euri zaparrada handiak gaur beranduago",
+ "{temperature} {unit} heavy rainfall showers" : "{tenperatura} {unitatea} euri zaparrada handiak",
"More weather for {adr}" : "Eguraldi gehiago {adr}-(e)rako",
"Loading weather" : "Eguraldia kargatzen",
"Remove from favorites" : "Kendu gogokoetatik",
diff --git a/core/Application.php b/core/Application.php
index 34932cab183..443585ebc79 100644
--- a/core/Application.php
+++ b/core/Application.php
@@ -218,6 +218,13 @@ class Application extends App {
$subject->addHintForMissingSubject($table->getName(), 'direct_edit_timestamp');
}
}
+
+ if ($schema->hasTable('preferences')) {
+ $table = $schema->getTable('preferences');
+ if (!$table->hasIndex('preferences_app_key')) {
+ $subject->addHintForMissingSubject($table->getName(), 'preferences_app_key');
+ }
+ }
}
);
diff --git a/core/Command/Db/AddMissingIndices.php b/core/Command/Db/AddMissingIndices.php
index a4379ffacc3..8394e75e845 100644
--- a/core/Command/Db/AddMissingIndices.php
+++ b/core/Command/Db/AddMissingIndices.php
@@ -435,6 +435,19 @@ class AddMissingIndices extends Command {
}
}
+ $output->writeln('<info>Check indices of the oc_preferences table.</info>');
+ if ($schema->hasTable('preferences')) {
+ $table = $schema->getTable('preferences');
+ if (!$table->hasIndex('preferences_app_key')) {
+ $output->writeln('<info>Adding preferences_app_key index to the oc_preferences table, this can take some time...</info>');
+
+ $table->addIndex(['appid', 'configkey'], 'preferences_app_key');
+ $this->connection->migrateToSchema($schema->getWrappedSchema());
+ $updated = true;
+ $output->writeln('<info>oc_properties table updated successfully.</info>');
+ }
+ }
+
if (!$updated) {
$output->writeln('<info>Done.</info>');
}
diff --git a/core/Migrations/Version13000Date20170718121200.php b/core/Migrations/Version13000Date20170718121200.php
index 02864830b2c..3e14b4af47a 100644
--- a/core/Migrations/Version13000Date20170718121200.php
+++ b/core/Migrations/Version13000Date20170718121200.php
@@ -333,6 +333,7 @@ class Version13000Date20170718121200 extends SimpleMigrationStep {
'notnull' => false,
]);
$table->setPrimaryKey(['userid', 'appid', 'configkey']);
+ $table->addIndex(['appid', 'configkey'], 'preferences_app_key');
}
if (!$schema->hasTable('properties')) {
diff --git a/core/l10n/cs.js b/core/l10n/cs.js
index 09506f34699..f3302f4ea8e 100644
--- a/core/l10n/cs.js
+++ b/core/l10n/cs.js
@@ -187,8 +187,10 @@ OC.L10N.register(
"{user} has not added any info yet" : "{user} uživatel zatím nezadal žádné informace",
"Error opening the user status modal, try hard refreshing the page" : "Chyba při otevírání dialogu stavu uživatele, pokus o opětovné načtení stránky",
"Reset search" : "Resetovat hledání",
+ "Start search" : "Zahájit vyhledávání",
"Search for {name} only" : "Hledat pouze {name}",
"No results for {query}" : "Pro {query} nic nenalezeno",
+ "Press enter to start searching" : "Vyhledávání zahájíte stisknutím klávesy Enter",
"Start typing to search" : "Hledejte psaním",
"Loading more results …" : "Načítání dalších výsledků…",
"Load more results" : "Načíst další výsledky",
diff --git a/core/l10n/cs.json b/core/l10n/cs.json
index ae17e521f03..29fdd624e32 100644
--- a/core/l10n/cs.json
+++ b/core/l10n/cs.json
@@ -185,8 +185,10 @@
"{user} has not added any info yet" : "{user} uživatel zatím nezadal žádné informace",
"Error opening the user status modal, try hard refreshing the page" : "Chyba při otevírání dialogu stavu uživatele, pokus o opětovné načtení stránky",
"Reset search" : "Resetovat hledání",
+ "Start search" : "Zahájit vyhledávání",
"Search for {name} only" : "Hledat pouze {name}",
"No results for {query}" : "Pro {query} nic nenalezeno",
+ "Press enter to start searching" : "Vyhledávání zahájíte stisknutím klávesy Enter",
"Start typing to search" : "Hledejte psaním",
"Loading more results …" : "Načítání dalších výsledků…",
"Load more results" : "Načíst další výsledky",
diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js
index 49e4308f5ec..2117098c970 100644
--- a/core/l10n/de_DE.js
+++ b/core/l10n/de_DE.js
@@ -187,8 +187,10 @@ OC.L10N.register(
"{user} has not added any info yet" : "{user} hat noch keine Infos hinzugefügt",
"Error opening the user status modal, try hard refreshing the page" : "Fehler beim Modal-öffnen des Benutzerstatus, versuchen Sie die Seite zu aktualisieren",
"Reset search" : "Suche zurücksetzen",
+ "Start search" : "Starte Suche",
"Search for {name} only" : "Nur nach {name} suchen",
"No results for {query}" : "Keine Suchergebnisse zu {query}",
+ "Press enter to start searching" : "Eingabetaste zum Starten der Suche drücken",
"Start typing to search" : "Beginnen Sie mit der Eingabe, um zu suchen",
"Loading more results …" : "Lade weitere Ergebnisse…",
"Load more results" : "Weitere Ergebnisse laden",
diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json
index 380a7091223..803c711340e 100644
--- a/core/l10n/de_DE.json
+++ b/core/l10n/de_DE.json
@@ -185,8 +185,10 @@
"{user} has not added any info yet" : "{user} hat noch keine Infos hinzugefügt",
"Error opening the user status modal, try hard refreshing the page" : "Fehler beim Modal-öffnen des Benutzerstatus, versuchen Sie die Seite zu aktualisieren",
"Reset search" : "Suche zurücksetzen",
+ "Start search" : "Starte Suche",
"Search for {name} only" : "Nur nach {name} suchen",
"No results for {query}" : "Keine Suchergebnisse zu {query}",
+ "Press enter to start searching" : "Eingabetaste zum Starten der Suche drücken",
"Start typing to search" : "Beginnen Sie mit der Eingabe, um zu suchen",
"Loading more results …" : "Lade weitere Ergebnisse…",
"Load more results" : "Weitere Ergebnisse laden",
diff --git a/core/l10n/fi.js b/core/l10n/fi.js
index 20d11b9a8a7..817981caf6f 100644
--- a/core/l10n/fi.js
+++ b/core/l10n/fi.js
@@ -147,9 +147,12 @@ OC.L10N.register(
"Login form is disabled." : "Kirjautumislomake on poistettu käytöstä.",
"Edit Profile" : "Muokkaa profiilia",
"You have not added any info yet" : "Et ole lisännyt tietoja vielä",
+ "{user} has not added any info yet" : "{user} ei ole lisännyt tietoja vielä",
"Reset search" : "Tyhjennä haku",
+ "Start search" : "Aloita haku",
"Search for {name} only" : "Etsi vain {name}",
"No results for {query}" : "Ei tuloksia haulle {query}",
+ "Press enter to start searching" : "Paina enter aloittaaksesi haun",
"Start typing to search" : "Aloita kirjoittaminen hakeaksesi",
"Loading more results …" : "Ladataan lisää tuloksia…",
"Load more results" : "Lataa lisää tuloksia",
@@ -309,6 +312,9 @@ OC.L10N.register(
"You can close this window." : "Voit sulkea tämän ikkunan.",
"This share is password-protected" : "Jako on salasanasuojattu",
"The password is wrong. Try again." : "Salasana on väärin. Yritä uudelleen.",
+ "Email address" : "Sähköpostiosoite",
+ "Password sent!" : "Salasana lähetetty!",
+ "Request password" : "Pyydä salasanaa",
"Go to %s" : "Siirry %s§",
"Two-factor authentication" : "Kaksivaiheinen tunnistautuminen",
"Enhanced security is enabled for your account. Choose a second factor for authentication:" : "Tilisi tietoturvatasoa on korotettu. Käytä kaksivaiheista tunnistautumista:",
@@ -371,6 +377,8 @@ OC.L10N.register(
"Could not fetch list of apps from the app store." : "Ei voitu hakea sovelluskaupan listaa.",
"Can't install this app because it is not compatible" : "Tätä sovellusta ei voi asentaa, koska se ei ole yhteensopiva",
"Can't install this app" : "Tätä sovellusta ei voi asentaa",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the {linkstart}documentation ↗{linkend}." : "Siirtyäksesi toiseen tietokantaan, käytä komentorivityökalua: 'occ db:convert-type', tai lue {linkstart}dokumentaatio ↗{linkend}."
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the {linkstart}documentation ↗{linkend}." : "Siirtyäksesi toiseen tietokantaan, käytä komentorivityökalua: 'occ db:convert-type', tai lue {linkstart}dokumentaatio ↗{linkend}.",
+ "You haven't added any info yet" : "Et ole lisännyt tietoja vielä",
+ "{user} hasn't added any info yet" : "{user} ei ole lisännyt tietoja vielä"
},
"nplurals=2; plural=(n != 1);");
diff --git a/core/l10n/fi.json b/core/l10n/fi.json
index 8899c6e6cda..5c459d69d97 100644
--- a/core/l10n/fi.json
+++ b/core/l10n/fi.json
@@ -145,9 +145,12 @@
"Login form is disabled." : "Kirjautumislomake on poistettu käytöstä.",
"Edit Profile" : "Muokkaa profiilia",
"You have not added any info yet" : "Et ole lisännyt tietoja vielä",
+ "{user} has not added any info yet" : "{user} ei ole lisännyt tietoja vielä",
"Reset search" : "Tyhjennä haku",
+ "Start search" : "Aloita haku",
"Search for {name} only" : "Etsi vain {name}",
"No results for {query}" : "Ei tuloksia haulle {query}",
+ "Press enter to start searching" : "Paina enter aloittaaksesi haun",
"Start typing to search" : "Aloita kirjoittaminen hakeaksesi",
"Loading more results …" : "Ladataan lisää tuloksia…",
"Load more results" : "Lataa lisää tuloksia",
@@ -307,6 +310,9 @@
"You can close this window." : "Voit sulkea tämän ikkunan.",
"This share is password-protected" : "Jako on salasanasuojattu",
"The password is wrong. Try again." : "Salasana on väärin. Yritä uudelleen.",
+ "Email address" : "Sähköpostiosoite",
+ "Password sent!" : "Salasana lähetetty!",
+ "Request password" : "Pyydä salasanaa",
"Go to %s" : "Siirry %s§",
"Two-factor authentication" : "Kaksivaiheinen tunnistautuminen",
"Enhanced security is enabled for your account. Choose a second factor for authentication:" : "Tilisi tietoturvatasoa on korotettu. Käytä kaksivaiheista tunnistautumista:",
@@ -369,6 +375,8 @@
"Could not fetch list of apps from the app store." : "Ei voitu hakea sovelluskaupan listaa.",
"Can't install this app because it is not compatible" : "Tätä sovellusta ei voi asentaa, koska se ei ole yhteensopiva",
"Can't install this app" : "Tätä sovellusta ei voi asentaa",
- "To migrate to another database use the command line tool: 'occ db:convert-type', or see the {linkstart}documentation ↗{linkend}." : "Siirtyäksesi toiseen tietokantaan, käytä komentorivityökalua: 'occ db:convert-type', tai lue {linkstart}dokumentaatio ↗{linkend}."
+ "To migrate to another database use the command line tool: 'occ db:convert-type', or see the {linkstart}documentation ↗{linkend}." : "Siirtyäksesi toiseen tietokantaan, käytä komentorivityökalua: 'occ db:convert-type', tai lue {linkstart}dokumentaatio ↗{linkend}.",
+ "You haven't added any info yet" : "Et ole lisännyt tietoja vielä",
+ "{user} hasn't added any info yet" : "{user} ei ole lisännyt tietoja vielä"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/core/l10n/pl.js b/core/l10n/pl.js
index b4be46eb0f2..712283f8b6f 100644
--- a/core/l10n/pl.js
+++ b/core/l10n/pl.js
@@ -187,8 +187,10 @@ OC.L10N.register(
"{user} has not added any info yet" : "{user} nie dodał jeszcze żadnych informacji",
"Error opening the user status modal, try hard refreshing the page" : "Błąd podczas otwierania modalnego statusu użytkownika, spróbuj bardziej odświeżyć stronę",
"Reset search" : "Zresetuj wyszukiwanie",
+ "Start search" : "Zacznij wyszukiwać",
"Search for {name} only" : "Wyszukaj tylko {name}",
"No results for {query}" : "Brak wyników dla {query}",
+ "Press enter to start searching" : "Naciśnij Enter, aby rozpocząć wyszukiwanie",
"Start typing to search" : "Zacznij pisać, aby wyszukać",
"Loading more results …" : "Wczytuję więcej wyników…",
"Load more results" : "Wczytaj więcej wyników",
diff --git a/core/l10n/pl.json b/core/l10n/pl.json
index 2b1a0b8b536..3fbecd2c49b 100644
--- a/core/l10n/pl.json
+++ b/core/l10n/pl.json
@@ -185,8 +185,10 @@
"{user} has not added any info yet" : "{user} nie dodał jeszcze żadnych informacji",
"Error opening the user status modal, try hard refreshing the page" : "Błąd podczas otwierania modalnego statusu użytkownika, spróbuj bardziej odświeżyć stronę",
"Reset search" : "Zresetuj wyszukiwanie",
+ "Start search" : "Zacznij wyszukiwać",
"Search for {name} only" : "Wyszukaj tylko {name}",
"No results for {query}" : "Brak wyników dla {query}",
+ "Press enter to start searching" : "Naciśnij Enter, aby rozpocząć wyszukiwanie",
"Start typing to search" : "Zacznij pisać, aby wyszukać",
"Loading more results …" : "Wczytuję więcej wyników…",
"Load more results" : "Wczytaj więcej wyników",
diff --git a/core/l10n/tr.js b/core/l10n/tr.js
index 05bfc7887c3..56c8dc9c6b2 100644
--- a/core/l10n/tr.js
+++ b/core/l10n/tr.js
@@ -187,8 +187,10 @@ OC.L10N.register(
"{user} has not added any info yet" : "{user} henüz herhangi bir bilgi eklememiş",
"Error opening the user status modal, try hard refreshing the page" : "Üste açılan kullanıcı durumu penceresinde sorun çıktı. Sayfası temizleyerek yenilemeyi deneyin ",
"Reset search" : "Aramayı sıfırla",
+ "Start search" : "Aramayı başlat",
"Search for {name} only" : "Yalnız {name} için aransın",
"No results for {query}" : "{query} sorgusundan bir sonuç alınamadı",
+ "Press enter to start searching" : "Aramayı başlatmak için Enter tuşuna basın",
"Start typing to search" : "Aramak için yazmaya başlayın",
"Loading more results …" : "Diğer sonuçlar yükleniyor…",
"Load more results" : "Diğer sonuçları yükle",
diff --git a/core/l10n/tr.json b/core/l10n/tr.json
index 580f67a1775..448e823c6bc 100644
--- a/core/l10n/tr.json
+++ b/core/l10n/tr.json
@@ -185,8 +185,10 @@
"{user} has not added any info yet" : "{user} henüz herhangi bir bilgi eklememiş",
"Error opening the user status modal, try hard refreshing the page" : "Üste açılan kullanıcı durumu penceresinde sorun çıktı. Sayfası temizleyerek yenilemeyi deneyin ",
"Reset search" : "Aramayı sıfırla",
+ "Start search" : "Aramayı başlat",
"Search for {name} only" : "Yalnız {name} için aransın",
"No results for {query}" : "{query} sorgusundan bir sonuç alınamadı",
+ "Press enter to start searching" : "Aramayı başlatmak için Enter tuşuna basın",
"Start typing to search" : "Aramak için yazmaya başlayın",
"Loading more results …" : "Diğer sonuçlar yükleniyor…",
"Load more results" : "Diğer sonuçları yükle",
diff --git a/core/l10n/zh_HK.js b/core/l10n/zh_HK.js
index 90ab574c051..e3eedaf434e 100644
--- a/core/l10n/zh_HK.js
+++ b/core/l10n/zh_HK.js
@@ -187,8 +187,10 @@ OC.L10N.register(
"{user} has not added any info yet" : "{user} 尚未新增任何資訊",
"Error opening the user status modal, try hard refreshing the page" : "打開用戶狀態模式時出錯,請嘗試刷新頁面",
"Reset search" : "重置搜尋",
+ "Start search" : "開始搜尋",
"Search for {name} only" : "只搜尋 {name}",
"No results for {query}" : "{query} 查詢沒有結果",
+ "Press enter to start searching" : "按 Enter 開始搜尋",
"Start typing to search" : "輸入文字以檢索",
"Loading more results …" : "正在載入更多結果...",
"Load more results" : "載入更多結果",
diff --git a/core/l10n/zh_HK.json b/core/l10n/zh_HK.json
index 2a5751e3918..1e7a85cdb8e 100644
--- a/core/l10n/zh_HK.json
+++ b/core/l10n/zh_HK.json
@@ -185,8 +185,10 @@
"{user} has not added any info yet" : "{user} 尚未新增任何資訊",
"Error opening the user status modal, try hard refreshing the page" : "打開用戶狀態模式時出錯,請嘗試刷新頁面",
"Reset search" : "重置搜尋",
+ "Start search" : "開始搜尋",
"Search for {name} only" : "只搜尋 {name}",
"No results for {query}" : "{query} 查詢沒有結果",
+ "Press enter to start searching" : "按 Enter 開始搜尋",
"Start typing to search" : "輸入文字以檢索",
"Loading more results …" : "正在載入更多結果...",
"Load more results" : "載入更多結果",
diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js
index 3ec54f66d81..0620c75cb37 100644
--- a/core/l10n/zh_TW.js
+++ b/core/l10n/zh_TW.js
@@ -187,8 +187,10 @@ OC.L10N.register(
"{user} has not added any info yet" : "{user} 尚未新增任何資訊。",
"Error opening the user status modal, try hard refreshing the page" : "開啟使用者狀態模式時發生問題,嘗試重新整理頁面",
"Reset search" : "重置搜尋",
+ "Start search" : "開始搜尋",
"Search for {name} only" : "僅搜尋 {name}",
"No results for {query}" : "{query} 查詢沒有結果",
+ "Press enter to start searching" : "按 Enter 以開始搜尋",
"Start typing to search" : "開始輸入以搜尋",
"Loading more results …" : "正在載入更多結果…",
"Load more results" : "載入更多結果",
diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json
index 350b4043fc1..e2816a3fea3 100644
--- a/core/l10n/zh_TW.json
+++ b/core/l10n/zh_TW.json
@@ -185,8 +185,10 @@
"{user} has not added any info yet" : "{user} 尚未新增任何資訊。",
"Error opening the user status modal, try hard refreshing the page" : "開啟使用者狀態模式時發生問題,嘗試重新整理頁面",
"Reset search" : "重置搜尋",
+ "Start search" : "開始搜尋",
"Search for {name} only" : "僅搜尋 {name}",
"No results for {query}" : "{query} 查詢沒有結果",
+ "Press enter to start searching" : "按 Enter 以開始搜尋",
"Start typing to search" : "開始輸入以搜尋",
"Loading more results …" : "正在載入更多結果…",
"Load more results" : "載入更多結果",
diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php
index f2b5cf94d11..3ad0b54435d 100644
--- a/lib/composer/composer/autoload_classmap.php
+++ b/lib/composer/composer/autoload_classmap.php
@@ -1541,6 +1541,7 @@ return array(
'OC\\UserStatus\\Manager' => $baseDir . '/lib/private/UserStatus/Manager.php',
'OC\\User\\Backend' => $baseDir . '/lib/private/User/Backend.php',
'OC\\User\\Database' => $baseDir . '/lib/private/User/Database.php',
+ 'OC\\User\\DisplayNameCache' => $baseDir . '/lib/private/User/DisplayNameCache.php',
'OC\\User\\LoginException' => $baseDir . '/lib/private/User/LoginException.php',
'OC\\User\\Manager' => $baseDir . '/lib/private/User/Manager.php',
'OC\\User\\NoUserException' => $baseDir . '/lib/private/User/NoUserException.php',
diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php
index 0f3c0a175af..9e04858cc53 100644
--- a/lib/composer/composer/autoload_static.php
+++ b/lib/composer/composer/autoload_static.php
@@ -1570,6 +1570,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\UserStatus\\Manager' => __DIR__ . '/../../..' . '/lib/private/UserStatus/Manager.php',
'OC\\User\\Backend' => __DIR__ . '/../../..' . '/lib/private/User/Backend.php',
'OC\\User\\Database' => __DIR__ . '/../../..' . '/lib/private/User/Database.php',
+ 'OC\\User\\DisplayNameCache' => __DIR__ . '/../../..' . '/lib/private/User/DisplayNameCache.php',
'OC\\User\\LoginException' => __DIR__ . '/../../..' . '/lib/private/User/LoginException.php',
'OC\\User\\Manager' => __DIR__ . '/../../..' . '/lib/private/User/Manager.php',
'OC\\User\\NoUserException' => __DIR__ . '/../../..' . '/lib/private/User/NoUserException.php',
diff --git a/lib/l10n/eu.js b/lib/l10n/eu.js
index 383187ab188..1e8c7a4d62f 100644
--- a/lib/l10n/eu.js
+++ b/lib/l10n/eu.js
@@ -2,6 +2,7 @@ OC.L10N.register(
"lib",
{
"Cannot write into \"config\" directory!" : "Ezin da idatzi \"config\" karpetan!",
+ "This can usually be fixed by giving the web server write access to the config directory." : "Hau normalean konpon daiteke web zerbitzariari konfigurazio direktoriorako idazteko sarbidea emanez.",
"But, if you prefer to keep config.php file read only, set the option \"config_is_read_only\" to true in it." : "Edo, config.php fitxategia irakurtzeko soilik mantendu nahi baduzu, ezarri \"config_is_read_only\" aukera 'egia' baliora barruan.",
"See %s" : "Ikusi %s",
"The files of the app %1$s were not replaced correctly. Make sure it is a version compatible with the server." : "%1$s aplikazioaren fitxategiak ez dira behar bezala ordezkatu. Ziurtatu zerbitzariarekin bateragarria den bertsioa dela.",
@@ -212,15 +213,22 @@ OC.L10N.register(
"Token expired. Please reload page." : "Tokena iraungitu da. Mesedez birkargatu orria.",
"No database drivers (sqlite, mysql, or postgresql) installed." : "Ez dago datubaseen (sqlite, mysql edo postgresql) driverrik instalatuta.",
"Cannot write into \"config\" directory." : "Ezin da \"config\" karpetan idatzi.",
+ "This can usually be fixed by giving the web server write access to the config directory. See %s" : "Hau normalean konpondu daiteke web zerbitzariari konfigurazio direktoriorako sarbidea emanez. Ikus %s",
"Or, if you prefer to keep config.php file read only, set the option \"config_is_read_only\" to true in it. See %s" : "Edo, config.php fitxategia irakurtzeko soilik mantendu nahi baduzu, ezarri \"config_is_read_only\" aukera 'egia' baliora barruan. Ikusi %s",
"Cannot write into \"apps\" directory." : "Ezin da idatzi \"apps\" fitxategian.",
+ "This can usually be fixed by giving the web server write access to the apps directory or disabling the App Store in the config file." : "Hau normalean konpondu daiteke web zerbitzariari aplikazioen direktorioko sarbidea emanez edo konfigurazioko fitxategian App Store desgaituz.",
"Cannot create \"data\" directory." : "Ezin da \"data\" fitxategia sortu.",
+ "This can usually be fixed by giving the web server write access to the root directory. See %s" : "Hau normalean konpondu daiteke web zerbitzariari root direktorioko idazketa sarbidea emanez. Ikus %s",
+ "Permissions can usually be fixed by giving the web server write access to the root directory. See %s." : " 99% match \nNormalean baimenak konpondu daitezke web zerbitzariari root direktorioko sarbidea emanez. Ikus%s.",
"Your data directory is not writable." : "Zure datuen karpeta ez da idazgarria.",
"Setting locale to %s failed." : "Lokala %sra ezartzeak huts egin du",
+ "Please install one of these locales on your system and restart your web server." : "Mesedez, instalatu lokal hauetako bat zure sisteman eta berrabiarazi zure web zerbitzaria.",
"PHP module %s not installed." : "PHPren %s modulua ez dago instalaturik.",
"Please ask your server administrator to install the module." : "Mesedez eskatu zure zerbitzariaren kudeatzaileari modulua instala dezan.",
"PHP setting \"%s\" is not set to \"%s\"." : "\"%s\" PHP ezarpena ez dago \"%s\" gisa jarrita.",
"Adjusting this setting in php.ini will make Nextcloud run again" : "Ezarpen hau php.ini fitxategian doitzen bada, Nextcloud berriro exekutatuko da",
+ "<code>mbstring.func_overload</code> is set to <code>%s</code> instead of the expected value <code>0</code>." : "<code>mbstring.func_overload</code><code>%s</code>-en ezartzen da espero den <code>0</code> balioaren ordez.",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini." : "Arazo hau konpontzeko, ezarri<code>mbstring.func_overload</code> <code>0</code>-n zure php.ini-n.",
"libxml2 2.7.0 is at least required. Currently %s is installed." : "libxml2 2.7.0 bertsioa edo berriagoa behar da. Orain %s dago instalatuta.",
"To fix this issue update your libxml2 version and restart your web server." : "Arazo hori konpontzeko, eguneratu zure libxml2 bertsioa eta berrabiarazi web zerbitzaria.",
"PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP lerro bakarreko blokeak mozteko konfiguratua dagoela dirudi. Oinarrizko app batzuk eskuraezin bihurtuko dira.",
@@ -232,6 +240,7 @@ OC.L10N.register(
"Your data directory is readable by other users." : "Zure datuen karpeta beste erabiltzaileek irakur dezakete.",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Mesedez aldatu baimenak 0770ra beste erabiltzaileek karpetan sartu ezin izateko.",
"Your data directory must be an absolute path." : "Zure datuen karpeta bide-izen absolutua izan behar da.",
+ "Check the value of \"datadirectory\" in your configuration." : "Egiaztatu \"datadirectory\"-ren balioa zure konfigurazioan.",
"Your data directory is invalid." : "Zure datuen karpeta baliogabea da.",
"Ensure there is a file called \".ocdata\" in the root of the data directory." : "Ziurtatu datu direktorioaren erroan \".ocdata\" izeneko fitxategia dagoela.",
"Action \"%s\" not supported or implemented." : "\"%s\" ekintza ez da onartzen edo ez dago inplementaturik.",
diff --git a/lib/l10n/eu.json b/lib/l10n/eu.json
index acd8d32e6e4..1329b284d1a 100644
--- a/lib/l10n/eu.json
+++ b/lib/l10n/eu.json
@@ -1,5 +1,6 @@
{ "translations": {
"Cannot write into \"config\" directory!" : "Ezin da idatzi \"config\" karpetan!",
+ "This can usually be fixed by giving the web server write access to the config directory." : "Hau normalean konpon daiteke web zerbitzariari konfigurazio direktoriorako idazteko sarbidea emanez.",
"But, if you prefer to keep config.php file read only, set the option \"config_is_read_only\" to true in it." : "Edo, config.php fitxategia irakurtzeko soilik mantendu nahi baduzu, ezarri \"config_is_read_only\" aukera 'egia' baliora barruan.",
"See %s" : "Ikusi %s",
"The files of the app %1$s were not replaced correctly. Make sure it is a version compatible with the server." : "%1$s aplikazioaren fitxategiak ez dira behar bezala ordezkatu. Ziurtatu zerbitzariarekin bateragarria den bertsioa dela.",
@@ -210,15 +211,22 @@
"Token expired. Please reload page." : "Tokena iraungitu da. Mesedez birkargatu orria.",
"No database drivers (sqlite, mysql, or postgresql) installed." : "Ez dago datubaseen (sqlite, mysql edo postgresql) driverrik instalatuta.",
"Cannot write into \"config\" directory." : "Ezin da \"config\" karpetan idatzi.",
+ "This can usually be fixed by giving the web server write access to the config directory. See %s" : "Hau normalean konpondu daiteke web zerbitzariari konfigurazio direktoriorako sarbidea emanez. Ikus %s",
"Or, if you prefer to keep config.php file read only, set the option \"config_is_read_only\" to true in it. See %s" : "Edo, config.php fitxategia irakurtzeko soilik mantendu nahi baduzu, ezarri \"config_is_read_only\" aukera 'egia' baliora barruan. Ikusi %s",
"Cannot write into \"apps\" directory." : "Ezin da idatzi \"apps\" fitxategian.",
+ "This can usually be fixed by giving the web server write access to the apps directory or disabling the App Store in the config file." : "Hau normalean konpondu daiteke web zerbitzariari aplikazioen direktorioko sarbidea emanez edo konfigurazioko fitxategian App Store desgaituz.",
"Cannot create \"data\" directory." : "Ezin da \"data\" fitxategia sortu.",
+ "This can usually be fixed by giving the web server write access to the root directory. See %s" : "Hau normalean konpondu daiteke web zerbitzariari root direktorioko idazketa sarbidea emanez. Ikus %s",
+ "Permissions can usually be fixed by giving the web server write access to the root directory. See %s." : " 99% match \nNormalean baimenak konpondu daitezke web zerbitzariari root direktorioko sarbidea emanez. Ikus%s.",
"Your data directory is not writable." : "Zure datuen karpeta ez da idazgarria.",
"Setting locale to %s failed." : "Lokala %sra ezartzeak huts egin du",
+ "Please install one of these locales on your system and restart your web server." : "Mesedez, instalatu lokal hauetako bat zure sisteman eta berrabiarazi zure web zerbitzaria.",
"PHP module %s not installed." : "PHPren %s modulua ez dago instalaturik.",
"Please ask your server administrator to install the module." : "Mesedez eskatu zure zerbitzariaren kudeatzaileari modulua instala dezan.",
"PHP setting \"%s\" is not set to \"%s\"." : "\"%s\" PHP ezarpena ez dago \"%s\" gisa jarrita.",
"Adjusting this setting in php.ini will make Nextcloud run again" : "Ezarpen hau php.ini fitxategian doitzen bada, Nextcloud berriro exekutatuko da",
+ "<code>mbstring.func_overload</code> is set to <code>%s</code> instead of the expected value <code>0</code>." : "<code>mbstring.func_overload</code><code>%s</code>-en ezartzen da espero den <code>0</code> balioaren ordez.",
+ "To fix this issue set <code>mbstring.func_overload</code> to <code>0</code> in your php.ini." : "Arazo hau konpontzeko, ezarri<code>mbstring.func_overload</code> <code>0</code>-n zure php.ini-n.",
"libxml2 2.7.0 is at least required. Currently %s is installed." : "libxml2 2.7.0 bertsioa edo berriagoa behar da. Orain %s dago instalatuta.",
"To fix this issue update your libxml2 version and restart your web server." : "Arazo hori konpontzeko, eguneratu zure libxml2 bertsioa eta berrabiarazi web zerbitzaria.",
"PHP is apparently set up to strip inline doc blocks. This will make several core apps inaccessible." : "PHP lerro bakarreko blokeak mozteko konfiguratua dagoela dirudi. Oinarrizko app batzuk eskuraezin bihurtuko dira.",
@@ -230,6 +238,7 @@
"Your data directory is readable by other users." : "Zure datuen karpeta beste erabiltzaileek irakur dezakete.",
"Please change the permissions to 0770 so that the directory cannot be listed by other users." : "Mesedez aldatu baimenak 0770ra beste erabiltzaileek karpetan sartu ezin izateko.",
"Your data directory must be an absolute path." : "Zure datuen karpeta bide-izen absolutua izan behar da.",
+ "Check the value of \"datadirectory\" in your configuration." : "Egiaztatu \"datadirectory\"-ren balioa zure konfigurazioan.",
"Your data directory is invalid." : "Zure datuen karpeta baliogabea da.",
"Ensure there is a file called \".ocdata\" in the root of the data directory." : "Ziurtatu datu direktorioaren erroan \".ocdata\" izeneko fitxategia dagoela.",
"Action \"%s\" not supported or implemented." : "\"%s\" ekintza ez da onartzen edo ez dago inplementaturik.",
diff --git a/lib/private/AllConfig.php b/lib/private/AllConfig.php
index 36eb0bbf6d9..e5a6e6a5acd 100644
--- a/lib/private/AllConfig.php
+++ b/lib/private/AllConfig.php
@@ -497,6 +497,8 @@ class AllConfig implements \OCP\IConfig {
$sql .= 'AND `configvalue` = ?';
}
+ $sql .= ' ORDER BY `userid`';
+
$result = $this->connection->executeQuery($sql, [$appName, $key, $value]);
$userIDs = [];
@@ -534,6 +536,8 @@ class AllConfig implements \OCP\IConfig {
$sql .= 'AND LOWER(`configvalue`) = ?';
}
+ $sql .= ' ORDER BY `userid`';
+
$result = $this->connection->executeQuery($sql, [$appName, $key, strtolower($value)]);
$userIDs = [];
diff --git a/lib/private/Files/SetupManager.php b/lib/private/Files/SetupManager.php
index e0575ea92a5..f1799798ccb 100644
--- a/lib/private/Files/SetupManager.php
+++ b/lib/private/Files/SetupManager.php
@@ -81,6 +81,7 @@ class SetupManager {
private LoggerInterface $logger;
private IConfig $config;
private bool $listeningForProviders;
+ private array $fullSetupRequired = [];
public function __construct(
IEventLogger $eventLogger,
@@ -268,6 +269,7 @@ class SetupManager {
$cacheDuration = $this->config->getSystemValueInt('fs_mount_cache_duration', 5 * 60);
if ($cacheDuration > 0) {
$this->cache->set($user->getUID(), true, $cacheDuration);
+ $this->fullSetupRequired[$user->getUID()] = false;
}
}
@@ -434,7 +436,10 @@ class SetupManager {
// we perform a "cached" setup only after having done the full setup recently
// this is also used to trigger a full setup after handling events that are likely
// to change the available mounts
- return !$this->cache->get($user->getUID());
+ if (!isset($this->fullSetupRequired[$user->getUID()])) {
+ $this->fullSetupRequired[$user->getUID()] = !$this->cache->get($user->getUID());
+ }
+ return $this->fullSetupRequired[$user->getUID()];
}
/**
@@ -489,6 +494,7 @@ class SetupManager {
$this->setupUsers = [];
$this->setupUsersComplete = [];
$this->setupUserMountProviders = [];
+ $this->fullSetupRequired = [];
$this->rootSetup = false;
$this->mountManager->clear();
$this->eventDispatcher->dispatchTyped(new FilesystemTornDownEvent());
diff --git a/lib/private/User/DisplayNameCache.php b/lib/private/User/DisplayNameCache.php
new file mode 100644
index 00000000000..ed0c723ef37
--- /dev/null
+++ b/lib/private/User/DisplayNameCache.php
@@ -0,0 +1,77 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright 2022 Carl Schwan <carl@carlschwan.eu>
+ * @license AGPL-3.0-or-later
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+
+namespace OC\User;
+
+use OCP\EventDispatcher\Event;
+use OCP\EventDispatcher\IEventListener;
+use OCP\ICache;
+use OCP\ICacheFactory;
+use OCP\IUserManager;
+use OCP\User\Events\UserChangedEvent;
+
+/**
+ * Class that cache the relation UserId -> Display name
+ *
+ * This saves fetching the user from a user backend and later on fetching
+ * their preferences. It's generally not an issue if this data is slightly
+ * outdated.
+ */
+class DisplayNameCache implements IEventListener {
+ private ICache $internalCache;
+ private IUserManager $userManager;
+
+ public function __construct(ICacheFactory $cacheFactory, IUserManager $userManager) {
+ $this->internalCache = $cacheFactory->createDistributed('displayNameMappingCache');
+ $this->userManager = $userManager;
+ }
+
+ public function getDisplayName(string $userId) {
+ $displayName = $this->internalCache->get($userId);
+ if ($displayName) {
+ return $displayName;
+ }
+
+ $user = $this->userManager->get($userId);
+ if ($user) {
+ $displayName = $user->getDisplayName();
+ } else {
+ $displayName = $userId;
+ }
+ $this->internalCache->set($userId, $displayName, 60 * 10); // 10 minutes
+
+ return $displayName;
+ }
+
+ public function clear(): void {
+ $this->internalCache->clear();
+ }
+
+ public function handle(Event $event): void {
+ if ($event instanceof UserChangedEvent && $event->getFeature() === 'displayName') {
+ $userId = $event->getUser()->getUID();
+ $newDisplayName = $event->getValue();
+ $this->internalCache->set($userId, $newDisplayName, 60 * 10); // 10 minutes
+ }
+ }
+}
diff --git a/lib/private/legacy/OC_Helper.php b/lib/private/legacy/OC_Helper.php
index 547ffef8607..68fb4311ef8 100644
--- a/lib/private/legacy/OC_Helper.php
+++ b/lib/private/legacy/OC_Helper.php
@@ -44,7 +44,9 @@
*
*/
use bantu\IniGetWrapper\IniGetWrapper;
+use OC\Files\Filesystem;
use OCP\Files\Mount\IMountPoint;
+use OCP\ICacheFactory;
use OCP\IUser;
use Symfony\Component\Process\ExecutableFinder;
@@ -486,9 +488,20 @@ class OC_Helper {
* @throws \OCP\Files\NotFoundException
*/
public static function getStorageInfo($path, $rootInfo = null, $includeMountPoints = true) {
+ /** @var ICacheFactory $cacheFactory */
+ $cacheFactory = \OC::$server->get(ICacheFactory::class);
+ $memcache = $cacheFactory->createLocal('storage_info');
+
// return storage info without adding mount points
$includeExtStorage = \OC::$server->getSystemConfig()->getValue('quota_include_external_storage', false);
+ $fullPath = Filesystem::getView()->getAbsolutePath($path);
+ $cacheKey = $fullPath. '::' . ($includeMountPoints ? 'include' : 'exclude');
+ $cached = $memcache->get($cacheKey);
+ if ($cached) {
+ return $cached;
+ }
+
if (!$rootInfo) {
$rootInfo = \OC\Files\Filesystem::getFileInfo($path, $includeExtStorage ? 'ext' : false);
}
@@ -559,7 +572,7 @@ class OC_Helper {
[,,,$mountPoint] = explode('/', $mount->getMountPoint(), 4);
}
- return [
+ $info = [
'free' => $free,
'used' => $used,
'quota' => $quota,
@@ -570,6 +583,10 @@ class OC_Helper {
'mountType' => $mount->getMountType(),
'mountPoint' => trim($mountPoint, '/'),
];
+
+ $memcache->set($cacheKey, $info, 5 * 60);
+
+ return $info;
}
/**