FormUserDelete   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 86
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 32
dl 0
loc 86
rs 10
c 0
b 0
f 0
wmc 9

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A before() 0 8 3
A labels() 0 5 1
A rules() 0 5 1
A delete() 0 25 3
1
<?php
2
3
namespace Apps\Model\Admin\User;
4
5
use Apps\ActiveRecord\User;
6
use Apps\ActiveRecord\WallPost;
7
use Ffcms\Core\App;
8
use Ffcms\Core\Arch\Model;
9
use Ffcms\Core\Helper\FileSystem\File;
10
11
/**
12
 * Class FormUserDelete. Delete users as passed array of them ids.
13
 * @package Apps\Model\Admin\User
14
 */
15
class FormUserDelete extends Model
16
{
17
    /** @var User[] */
18
    public $users;
19
    public $delete = false;
20
21
    private $_ids;
22
23
    /**
24
     * FormUserDelete constructor. Pass user ids inside
25
     * @param array $ids
26
     */
27
    public function __construct(array $ids)
28
    {
29
        $this->_ids = $ids;
30
        parent::__construct(true);
31
    }
32
33
    /**
34
     * Set user data to model property
35
     */
36
    public function before()
37
    {
38
        // try to find each user
39
        foreach ($this->_ids as $id) {
40
            /** @var User $user */
41
            $user = App::$User->identity($id);
42
            if ($user) {
43
                $this->users[] = $user;
44
            }
45
        }
46
    }
47
48
    /**
49
     * Form display labels
50
     * @return array
51
     */
52
    public function labels(): array
53
    {
54
        return [
55
            'email' => __('Email'),
56
            'delete' => __('Delete user content')
57
        ];
58
    }
59
60
    /**
61
     * Validation rules
62
     * @return array
63
     */
64
    public function rules(): array
65
    {
66
        return [
67
            ['delete', 'required'],
68
            ['delete', 'boolean']
69
        ];
70
    }
71
72
    /**
73
     * Delete user from database
74
     * @throws \Exception
75
     */
76
    public function delete()
77
    {
78
        foreach ($this->users as $user) {
79
            $uid = $user->id;
80
            // delete whole website info for this user
81
            if ((bool)$this->delete) {
82
                $model = new FormUserClear($user);
83
                $model->comments = true;
84
                $model->content = true;
85
                $model->feedback = true;
86
                $model->wall = true;
87
                $model->make();
88
            }
89
90
            // delete avatars
91
            File::remove('/upload/user/avatar/big/' . $uid . '.jpg');
92
            File::remove('/upload/user/avatar/medium/' . $uid . '.jpg');
93
            File::remove('/upload/user/avatar/small/' . $uid . '.jpg');
94
            File::remove('/upload/user/avatar/original/' . $uid . '.jpg');
95
            // delete user profile and auth data
96
            $user->profile()->delete();
97
            // delete user provider data
98
            $user->provider()->delete();
99
            // delete user object
100
            $user->delete();
101
        }
102
    }
103
}
104