aboutsummaryrefslogtreecommitdiff
path: root/lib/classes/JsonApi/Routes/Courseware/EditBlockAwareTrait.php
blob: 958aef1b955ae71511866631e8692d478af8cc2a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php

namespace JsonApi\Routes\Courseware;

use JsonApi\Errors\ConflictException;

trait EditBlockAwareTrait
{
    private function updateLockedResource(\User $user, \SimpleORMap $resource, callable $callback)
    {
        $dbm = \DBManager::get();
        $dbm->beginTransaction();

        if (!$resource::findOneBySql('id = ? AND edit_blocker_id = ?', [$resource->id, $user->id])) {
            $dbm->rollBack();
            throw new ConflictException();
        }

        $resource = $callback($user, $resource);

        $dbm->commit();

        return $resource;
    }

    private function deleteResource(\User $user, \SimpleORMap $resource)
    {
        $dbm = \DBManager::get();
        $dbm->beginTransaction();

        // check edit lock
        if (!$resource::findOneBySql('id = ? AND edit_blocker_id = ?', [$resource->id, $user->id])) {
            $dbm->rollBack();
            throw new ConflictException();
        }

        // now delete
        $resource->delete();
        $dbm->commit();
    }
}