Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/spreed.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2021-02-11 22:29:00 +0300
committerJoas Schilling <coding@schilljs.com>2021-02-11 22:29:00 +0300
commit7dc814ffa9269b907bdf0f864bec81b29f697663 (patch)
tree997b7e0376bb8b6bbf3bf75fad0f2524d853e2ac
parentf987b73ffbb174eae8061d00a3173c5308f3ae0e (diff)
Add a repair step that updates the display name for existing users
Signed-off-by: Joas Schilling <coding@schilljs.com>
-rw-r--r--appinfo/info.xml3
-rw-r--r--lib/Migration/CacheUserDisplayNames.php78
2 files changed, 80 insertions, 1 deletions
diff --git a/appinfo/info.xml b/appinfo/info.xml
index 9bb262650..2f5788bf2 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -16,7 +16,7 @@ And in the works for the [coming versions](https://github.com/nextcloud/spreed/m
]]></description>
- <version>12.0.0-dev.3</version>
+ <version>12.0.0-dev.4</version>
<licence>agpl</licence>
<author>Daniel Calviño Sánchez</author>
@@ -68,6 +68,7 @@ And in the works for the [coming versions](https://github.com/nextcloud/spreed/m
<post-migration>
<step>OCA\Talk\Migration\CreateHelpCommand</step>
<step>OCA\Talk\Migration\ClearResourceAccessCache</step>
+ <step>OCA\Talk\Migration\CacheUserDisplayNames</step>
</post-migration>
<install>
<step>OCA\Talk\Migration\CreateHelpCommand</step>
diff --git a/lib/Migration/CacheUserDisplayNames.php b/lib/Migration/CacheUserDisplayNames.php
new file mode 100644
index 000000000..bae450b35
--- /dev/null
+++ b/lib/Migration/CacheUserDisplayNames.php
@@ -0,0 +1,78 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2021 Joas Schilling <coding@schilljs.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Talk\Migration;
+
+use OCA\Talk\Model\Attendee;
+use OCP\IDBConnection;
+use OCP\IUser;
+use OCP\IUserManager;
+use OCP\Migration\IOutput;
+use OCP\Migration\IRepairStep;
+
+class CacheUserDisplayNames implements IRepairStep {
+
+ /** @var IDBConnection */
+ protected $connection;
+ /** @var IUserManager */
+ protected $userManager;
+
+ public function __construct(IDBConnection $connection,
+ IUserManager $userManager) {
+ $this->connection = $connection;
+ $this->userManager = $userManager;
+ }
+
+ public function getName(): string {
+ return 'Cache the user display names';
+ }
+
+ public function run(IOutput $output): void {
+ $update = $this->connection->getQueryBuilder();
+ $update->update('talk_attendees')
+ ->set('display_name', $update->createParameter('displayName'))
+ ->where($update->expr()->eq('actor_type', $update->createParameter('actorType')))
+ ->andWhere($update->expr()->eq('actor_id', $update->createParameter('actorId')));
+
+ $query = $this->connection->getQueryBuilder();
+ $query->select('actor_id')
+ ->from('talk_attendees')
+ ->where($query->expr()->eq('actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS)))
+ ->andWhere($query->expr()->eq('display_name', $query->createNamedParameter('')))
+ ->groupBy('actor_id');
+
+ $result = $query->execute();
+ while ($row = $result->fetch()) {
+ $user = $this->userManager->get($row['actor_id']);
+ if (!$user instanceof IUser) {
+ continue;
+ }
+
+ $update->setParameter('displayName', $user->getDisplayName())
+ ->setParameter('actorType', Attendee::ACTOR_USERS)
+ ->setParameter('actorId', $row['actor_id']);
+ $update->execute();
+ }
+ $result->closeCursor();
+ }
+}