diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php
index 3e4efc5b8dbdb..9dbabe4e3f705 100644
--- a/apps/user_ldap/lib/Access.php
+++ b/apps/user_ldap/lib/Access.php
@@ -704,7 +704,7 @@ private function ldap2NextcloudNames(array $ldapObjects, bool $isUsers): array {
continue;
}
$sndName = $ldapObject[$sndAttribute][0] ?? '';
- $this->cacheUserDisplayName($ncName, $nameByLDAP, $sndName);
+ $this->applyUserDisplayName($ncName, $nameByLDAP, $sndName);
} elseif ($nameByLDAP !== null) {
$this->cacheGroupDisplayName($ncName, $nameByLDAP);
}
@@ -752,20 +752,16 @@ public function cacheGroupExists(string $gid): void {
$this->connection->writeToCache('groupExists' . $gid, true);
}
- /**
- * caches the user display name
- *
- * @param string $ocName the internal Nextcloud username
- * @param string $displayName the display name
- * @param string $displayName2 the second display name
- * @throws \Exception
- */
- public function cacheUserDisplayName(string $ocName, string $displayName, string $displayName2 = ''): void {
- $user = $this->userManager->get($ocName);
+ public function applyUserDisplayName(string $uid, string $displayName, string $displayName2 = ''): void {
+ $user = $this->userManager->get($uid);
if ($user === null) {
return;
}
- $displayName = $user->composeAndStoreDisplayName($displayName, $displayName2);
+ $composedDisplayName = $user->composeAndStoreDisplayName($displayName, $displayName2);
+ $this->cacheUserDisplayName($uid, $composedDisplayName);
+ }
+
+ public function cacheUserDisplayName(string $ocName, string $displayName): void {
$cacheKeyTrunk = 'getDisplayName';
$this->connection->writeToCache($cacheKeyTrunk . $ocName, $displayName);
}
diff --git a/apps/user_ldap/lib/User/User.php b/apps/user_ldap/lib/User/User.php
index 2f928d1b67edb..325b7af0d1bf3 100644
--- a/apps/user_ldap/lib/User/User.php
+++ b/apps/user_ldap/lib/User/User.php
@@ -119,12 +119,8 @@ public function processAttributes(array $ldapEntry): void {
$displayName2 = (string)$ldapEntry[$attr][0];
}
if ($displayName !== '') {
- $this->composeAndStoreDisplayName($displayName, $displayName2);
- $this->access->cacheUserDisplayName(
- $this->getUsername(),
- $displayName,
- $displayName2
- );
+ $composedDisplayName = $this->composeAndStoreDisplayName($displayName, $displayName2);
+ $this->access->cacheUserDisplayName($this->getUsername(), $composedDisplayName);
}
unset($attr);
@@ -134,7 +130,8 @@ public function processAttributes(array $ldapEntry): void {
$attr = strtolower($this->connection->ldapEmailAttribute);
if (isset($ldapEntry[$attr])) {
$mailValue = 0;
- for ($x = 0; $x < count($ldapEntry[$attr]); $x++) {
+ $emailValues = count($ldapEntry[$attr]);
+ for ($x = 0; $x < $emailValues; $x++) {
if (filter_var($ldapEntry[$attr][$x], FILTER_VALIDATE_EMAIL)) {
$mailValue = $x;
break;
@@ -457,6 +454,10 @@ public function composeAndStoreDisplayName(string $displayName, string $displayN
return $displayName;
}
+ public function fetchStoredDisplayName(): string {
+ return $this->userConfig->getValueString($this->uid, 'user_ldap', 'displayName', '');
+ }
+
/**
* Stores the LDAP Username in the Database
*/
diff --git a/apps/user_ldap/lib/User_LDAP.php b/apps/user_ldap/lib/User_LDAP.php
index c515002a2de95..22475ceccab6e 100644
--- a/apps/user_ldap/lib/User_LDAP.php
+++ b/apps/user_ldap/lib/User_LDAP.php
@@ -262,7 +262,8 @@ public function getUsers($search = '', $limit = 10, $offset = 0) {
/**
* checks whether a user is still available on LDAP
*
- * @param string|User $user either the Nextcloud user id or an instance of that user
+ * @param string|User $user either the Nextcloud user id or an instance of
+ * that user
* @throws \Exception
* @throws ServerNotAvailableException
*/
@@ -421,26 +422,21 @@ public function getHome($uid) {
return $path;
}
- /**
- * get display name of the user
- * @param string $uid user ID of the user
- * @return string|false display name
- */
- public function getDisplayName($uid) {
- if ($this->userPluginManager->implementsActions(Backend::GET_DISPLAYNAME)) {
- return $this->userPluginManager->getDisplayName($uid);
- }
-
- if (!$this->userExists($uid)) {
- return false;
+ private function getDisplayNameFromDatabase(string $uid): ?string {
+ $user = $this->access->userManager->get($uid);
+ if ($user instanceof User) {
+ $displayName = $user->fetchStoredDisplayName();
+ if ($displayName !== '') {
+ return $displayName;
+ }
}
-
- $cacheKey = 'getDisplayName' . $uid;
- if (!is_null($displayName = $this->access->connection->getFromCache($cacheKey))) {
- return $displayName;
+ if ($user instanceof OfflineUser) {
+ return $user->getDisplayName();
}
+ return null;
+ }
- //Check whether the display name is configured to have a 2nd feature
+ private function getDisplayNameFromLdap(string $uid): string {
$additionalAttribute = $this->access->connection->ldapUserDisplayName2;
$displayName2 = '';
if ($additionalAttribute !== '') {
@@ -462,16 +458,40 @@ public function getDisplayName($uid) {
$user = $this->access->userManager->get($uid);
if ($user instanceof User) {
- $displayName = $user->composeAndStoreDisplayName($displayName, (string)$displayName2);
- $this->access->connection->writeToCache($cacheKey, $displayName);
+ return $user->composeAndStoreDisplayName($displayName, (string)$displayName2);
}
if ($user instanceof OfflineUser) {
- $displayName = $user->getDisplayName();
+ return $user->getDisplayName();
}
+ }
+
+ return '';
+ }
+
+ public function getDisplayName($uid): string {
+ if ($this->userPluginManager->implementsActions(Backend::GET_DISPLAYNAME)) {
+ return $this->userPluginManager->getDisplayName($uid);
+ }
+
+ if (!$this->userExists($uid)) {
+ return '';
+ }
+
+ $cacheKey = 'getDisplayName' . $uid;
+ if (!is_null($displayName = $this->access->connection->getFromCache($cacheKey))) {
return $displayName;
}
- return null;
+ if ($displayName = $this->getDisplayNameFromDatabase($uid)) {
+ $this->access->connection->writeToCache($cacheKey, $displayName);
+ return $displayName;
+ }
+
+ if ($displayName = $this->getDisplayNameFromLdap($uid)) {
+ $this->access->connection->writeToCache($cacheKey, $displayName);
+ }
+
+ return $displayName;
}
/**
@@ -495,7 +515,8 @@ public function setDisplayName($uid, $displayName) {
* @param string $search
* @param int|null $limit
* @param int|null $offset
- * @return array an array of all displayNames (value) and the corresponding uids (key)
+ * @return array an array of all displayNames (value) and the corresponding
+ * uids (key)
*/
public function getDisplayNames($search = '', $limit = null, $offset = null) {
$cacheKey = 'getDisplayNames-' . $search . '-' . $limit . '-' . $offset;
diff --git a/build/psalm-baseline.xml b/build/psalm-baseline.xml
index 635292944d245..217b1f8c278d5 100644
--- a/build/psalm-baseline.xml
+++ b/build/psalm-baseline.xml
@@ -2605,16 +2605,10 @@
-
-
-
-
-
-
0)]]>