Passed
Push — master ( ef80b0...df5b6f )
by Mihail
04:52
created

FormUserDelete   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 87
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 33
dl 0
loc 87
rs 10
c 0
b 0
f 0
wmc 9

5 Methods

Rating   Name   Duplication   Size   Complexity  
A labels() 0 6 1
A __construct() 0 4 1
A rules() 0 5 1
A before() 0 8 3
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
            'login' => __('Login'),
57
            'delete' => __('Delete user content')
58
        ];
59
    }
60
61
    /**
62
     * Validation rules
63
     * @return array
64
     */
65
    public function rules(): array
66
    {
67
        return [
68
            ['delete', 'required'],
69
            ['delete', 'boolean']
70
        ];
71
    }
72
73
    /**
74
     * Delete user from database
75
     * @throws \Exception
76
     */
77
    public function delete()
78
    {
79
        foreach ($this->users as $user) {
80
            $uid = $user->id;
81
            // delete whole website info for this user
82
            if ((bool)$this->delete) {
83
                $model = new FormUserClear($user);
84
                $model->comments = true;
85
                $model->content = true;
86
                $model->feedback = true;
87
                $model->wall = true;
88
                $model->make();
89
            }
90
91
            // delete avatars
92
            File::remove('/upload/user/avatar/big/' . $uid . '.jpg');
93
            File::remove('/upload/user/avatar/medium/' . $uid . '.jpg');
94
            File::remove('/upload/user/avatar/small/' . $uid . '.jpg');
95
            File::remove('/upload/user/avatar/original/' . $uid . '.jpg');
96
            // delete user profile and auth data
97
            $user->profile()->delete();
98
            // delete user provider data
99
            $user->provider()->delete();
100
            // delete user object
101
            $user->delete();
102
        }
103
    }
104
}
105