|
10 | 10 | use OCP\Collaboration\Collaborators\ISearchPlugin; |
11 | 11 | use OCP\Collaboration\Collaborators\ISearchResult; |
12 | 12 | use OCP\Collaboration\Collaborators\SearchResultType; |
| 13 | +use OCP\DB\QueryBuilder\IQueryBuilder; |
13 | 14 | use OCP\IAppConfig; |
14 | 15 | use OCP\IDBConnection; |
15 | 16 | use OCP\IGroupManager; |
@@ -106,14 +107,16 @@ public function search($search, $limit, $offset, ISearchResult $searchResult): b |
106 | 107 | if ($shareeEnumerationFullMatchEmail) { |
107 | 108 | $qb = $this->connection->getQueryBuilder(); |
108 | 109 | $qb |
109 | | - ->selectDistinct('uid') |
| 110 | + ->select('uid', 'value', 'name') |
110 | 111 | ->from('accounts_data') |
111 | 112 | ->where($qb->expr()->eq($qb->func()->lower('value'), $qb->createNamedParameter($lowerSearch))) |
112 | | - ->andWhere($qb->expr()->eq('name', $qb->createNamedParameter('email'))); |
| 113 | + ->andWhere($qb->expr()->in('name', $qb->createNamedParameter(['email', 'additional_mail'], IQueryBuilder::PARAM_STR_ARRAY))); |
113 | 114 | $result = $qb->executeQuery(); |
114 | | - while ($uid = $result->fetchOne()) { |
115 | | - /** @var string $uid */ |
116 | | - $users[$uid] = ['exact', $this->userManager->get($uid)]; |
| 115 | + while ($row = $result->fetch()) { |
| 116 | + $uid = $row['uid']; |
| 117 | + $email = $row['value']; |
| 118 | + $isAdditional = $row['name'] === 'additional_mail'; |
| 119 | + $users[$uid] = ['exact', $this->userManager->get($uid), $isAdditional ? $email : null]; |
117 | 120 | } |
118 | 121 | $result->closeCursor(); |
119 | 122 | } |
@@ -144,17 +147,25 @@ public function search($search, $limit, $offset, ISearchResult $searchResult): b |
144 | 147 |
|
145 | 148 | $result = ['wide' => [], 'exact' => []]; |
146 | 149 | foreach ($users as $match) { |
147 | | - [$type, $user] = $match; |
| 150 | + $match[2] ??= null; |
| 151 | + [$type, $user, $uniqueDisplayName] = $match; |
| 152 | + |
| 153 | + $displayName = $user->getDisplayName(); |
| 154 | + if ($uniqueDisplayName !== null) { |
| 155 | + $displayName .= ' (' . $uniqueDisplayName . ')'; |
| 156 | + } |
| 157 | + |
148 | 158 | $status = $userStatuses[$user->getUID()] ?? []; |
| 159 | + |
149 | 160 | $result[$type][] = [ |
150 | | - 'label' => $user->getDisplayName(), |
| 161 | + 'label' => $displayName, |
151 | 162 | 'subline' => $status['message'] ?? '', |
152 | 163 | 'icon' => 'icon-user', |
153 | 164 | 'value' => [ |
154 | 165 | 'shareType' => IShare::TYPE_USER, |
155 | 166 | 'shareWith' => $user->getUID(), |
156 | 167 | ], |
157 | | - 'shareWithDisplayNameUnique' => $user->getSystemEMailAddress() ?: $user->getUID(), |
| 168 | + 'shareWithDisplayNameUnique' => $uniqueDisplayName ?? $user->getSystemEMailAddress() ?: $user->getUID(), |
158 | 169 | 'status' => $status, |
159 | 170 | ]; |
160 | 171 | } |
|
0 commit comments