Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 50
0.00% covered (danger)
0.00%
0 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
UserElementMapper
0.00% covered (danger)
0.00%
0 / 50
0.00% covered (danger)
0.00%
0 / 5
132
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getQueryBuilder
0.00% covered (danger)
0.00%
0 / 20
0.00% covered (danger)
0.00%
0 / 1
30
 findOne
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
6
 findMany
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 neutralizeDeletedUser
0.00% covered (danger)
0.00%
0 / 18
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3declare(strict_types=1);
4/**
5 * SPDX-FileCopyrightText: 2020-2024 LibreCode coop and contributors
6 * SPDX-License-Identifier: AGPL-3.0-or-later
7 */
8
9namespace OCA\Libresign\Db;
10
11use OCP\AppFramework\Db\QBMapper;
12use OCP\Comments\ICommentsManager;
13use OCP\DB\QueryBuilder\IQueryBuilder;
14use OCP\IDBConnection;
15
16/**
17 * Class FileElementsMapper
18 *
19 * @package OCA\Libresign\DB
20 * @template-extends QBMapper<UserElement>
21 */
22class UserElementMapper extends QBMapper {
23    public function __construct(IDBConnection $db) {
24        parent::__construct($db, 'libresign_user_element');
25    }
26
27    private function getQueryBuilder(array $data): IQueryBuilder {
28        $qb = $this->db->getQueryBuilder();
29        $qb->select('ue.*')
30            ->from($this->getTableName(), 'ue');
31
32        if (isset($data['id'])) {
33            $qb->andWhere(
34                $qb->expr()->eq('ue.id', $qb->createNamedParameter($data['id'], IQueryBuilder::PARAM_INT))
35            );
36        }
37        if (isset($data['node_id'])) {
38            $qb->andWhere(
39                $qb->expr()->eq('ue.node_id', $qb->createNamedParameter($data['node_id'], IQueryBuilder::PARAM_INT))
40            );
41        }
42        if (isset($data['type'])) {
43            $qb->andWhere(
44                $qb->expr()->eq('ue.type', $qb->createNamedParameter($data['type']))
45            );
46        }
47        if (isset($data['user_id'])) {
48            $qb->andWhere(
49                $qb->expr()->eq('ue.user_id', $qb->createNamedParameter($data['user_id']))
50            );
51        }
52        return $qb;
53    }
54
55    public function findOne(array $data): UserElement {
56        $qb = $this->getQueryBuilder($data);
57        try {
58            $row = $this->findOneQuery($qb);
59        } catch (\Throwable) {
60            $qb->andWhere(
61                $qb->expr()->eq('ue.starred', $qb->createNamedParameter(1, IQueryBuilder::PARAM_INT))
62            );
63            $row = $this->findOneQuery($qb);
64        }
65        /** @var UserElement */
66        $userElement = $this->mapRowToEntity($row);
67        return $userElement;
68    }
69
70    /**
71     * @return UserElement[]
72     */
73    public function findMany(array $data): array {
74        $qb = $this->getQueryBuilder($data);
75        /** @var UserElement[] */
76        return $this->findEntities($qb);
77    }
78
79    public function neutralizeDeletedUser(string $userId, string $displayName): void {
80        $update = $this->db->getQueryBuilder();
81        $qb = $this->db->getQueryBuilder();
82        $qb->select('ue.id')
83            ->addSelect('ue.metadata')
84            ->from($this->getTableName(), 'ue')
85            ->where($qb->expr()->eq('ue.user_id', $qb->createNamedParameter($userId)));
86        $cursor = $qb->executeQuery();
87        while ($row = $cursor->fetch()) {
88            $row['metadata'] = json_decode((string)$row['metadata'], true);
89            $row['metadata']['deleted_account'] = [
90                'account' => $userId,
91                'display_name' => $displayName,
92            ];
93            $update->update($this->getTableName())
94                ->set('user_id', $update->createNamedParameter(ICommentsManager::DELETED_USER))
95                ->set('metadata', $update->createNamedParameter($row['metadata'], IQueryBuilder::PARAM_JSON))
96                ->where($update->expr()->eq('id', $update->createNamedParameter($row['id'])));
97            $update->executeStatement();
98        }
99    }
100}