• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

lonnieezell / Bonfire2 / 13501017775

24 Feb 2025 02:59PM UTC coverage: 45.473% (+0.07%) from 45.404%
13501017775

push

github

web-flow
Merge pull request #554 from dgvirtual/fix/delete-meta-with-resource

Delete meta together with the user

6 of 8 new or added lines in 1 file covered. (75.0%)

1567 of 3446 relevant lines covered (45.47%)

52.46 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

86.67
/src/Users/Models/UserModel.php
1
<?php
2

3
namespace Bonfire\Users\Models;
4

5
use Bonfire\Users\User;
6
use CodeIgniter\Shield\Models\UserModel as ShieldUsers;
7
use Faker\Generator;
8

9
/**
10
 * This User model is ready for your customization.
11
 * It extends Shield's UserModel, providing many auth
12
 * features built right in.
13
 */
14
class UserModel extends ShieldUsers
15
{
16
    protected $returnType    = User::class;
17
    protected $allowedFields = [
18
        'username', 'status', 'status_message', 'active', 'last_active', 'deleted_at',
19
        'avatar', 'first_name', 'last_name',
20
    ];
21
    protected $allowCallbacks = true;
22
    protected $beforeDelete   = ['deleteAvatar', 'deleteMeta'];
23

24
    /**
25
     * Performs additional setup when finding objects
26
     * for the recycler. This might pull in additional
27
     * fields.
28
     */
29
    public function setupRecycler()
30
    {
31
        $dbPrefix = $this->db->getPrefix();
5✔
32

33
        return $this->select("{$dbPrefix}users.*,
5✔
34
            (SELECT secret
35
                from {$dbPrefix}auth_identities
5✔
36
                where user_id = {$dbPrefix}users.id
5✔
37
                    and type = 'email_password'
38
                order by last_used_at desc
39
                limit 1
40
            ) as email
41
        ");
5✔
42
    }
43

44
    public function fake(Generator &$faker): User
45
    {
46
        return new User([
165✔
47
            'username'   => $faker->userName(),
165✔
48
            'first_name' => $faker->firstName(),
165✔
49
            'last_name'  => $faker->lastName(),
165✔
50
            'active'     => true,
165✔
51
        ]);
165✔
52
    }
53

54
    /**
55
     * Event-triggered method to delete user avatar if the user is being purged
56
     * from the system
57
     */
58
    public function deleteAvatar(array $data): array
59
    {
60
        // if it is a soft delete, return at once
61
        if (! $data['purge']) {
15✔
62
            return $data;
15✔
63
        }
64

65
        $user = $this->withDeleted()->find($data['id'][0]); // Retrieve the entity
5✔
66

67
        if (! $user) {
5✔
68
            return $data;
×
69
        }
70

71
        /** @phpstan-ignore-next-line  TODO: any better way of accessing $avatar on user objet? It works, but phpstan complains */
72
        $userAvatar = $user->avatar;
5✔
73

74
        $avatarDir = FCPATH . (setting('Users.avatarDirectory') ?? 'uploads/avatars');
5✔
75
        if (
76
            ! empty($userAvatar)
5✔
77
            && file_exists($avatarDir . '/' . $userAvatar)
5✔
78
        ) {
79
            @unlink($avatarDir . '/' . $userAvatar);
×
80
        }
81

82
        return $data;
5✔
83
    }
84

85
    /**
86
     * Event-triggered method to delete user meta info if the user is being purged
87
     * from the system
88
     */
89
    public function deleteMeta(array $data): array
90
    {
91
        // if it is a soft delete, return at once
92
        if (! $data['purge']) {
15✔
93
            return $data;
15✔
94
        }
95

96
        $user = $this->withDeleted()->find($data['id'][0]); // Retrieve the entity
5✔
97

98
        if (! $user) {
5✔
NEW
99
            return $data;
×
100
        }
101

102
        if (! empty($user->allMeta())) {
5✔
NEW
103
            $user->deleteResourceMeta();
×
104
        }
105

106
        return $data;
5✔
107
    }
108
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc