1 | <?php |
||
2 | |||
3 | namespace Apps\ActiveRecord; |
||
4 | |||
5 | use Ffcms\Core\App as MainApp; |
||
6 | use Ffcms\Core\Arch\ActiveModel; |
||
7 | use Ffcms\Core\Helper\FileSystem\File; |
||
8 | use Ffcms\Core\Helper\Type\Any; |
||
9 | use Ffcms\Core\Helper\Type\Arr; |
||
10 | use Ffcms\Core\Helper\Type\Str; |
||
11 | use Ffcms\Core\Interfaces\iProfile; |
||
12 | |||
13 | /** |
||
14 | * Class Profile. Active record model for user profile data store |
||
15 | * @package Apps\ActiveRecord |
||
16 | * @property int $id |
||
17 | * @property int $user_id |
||
18 | * @property string $nick |
||
19 | * @property int $sex |
||
20 | * @property string $birthday |
||
21 | * @property string $city |
||
22 | * @property string $hobby |
||
23 | * @property int $rating |
||
24 | * @property string $phone |
||
25 | * @property string $url |
||
26 | * @property array $custom_data |
||
27 | * @property string $created_at |
||
28 | * @property string $updated_at |
||
29 | * @property User $user |
||
30 | */ |
||
31 | class Profile extends ActiveModel implements iProfile |
||
32 | { |
||
33 | protected $casts = [ |
||
34 | 'id' => 'integer', |
||
35 | 'user_id' => 'integer', |
||
36 | 'nick' => 'string', |
||
37 | 'sex' => 'integer', // tinyInteger 0|1|2 |
||
38 | 'birthday' => 'string', |
||
39 | 'city' => 'string', |
||
40 | 'hobby' => 'string', |
||
41 | 'rating' => 'integer', |
||
42 | 'phone' => 'string', |
||
43 | 'url' => 'string', |
||
44 | 'custom_data' => 'serialize' |
||
45 | ]; |
||
46 | |||
47 | /** |
||
48 | * Get user profile via user_id like object (!!! profile.id !== user.id !!!) |
||
49 | * @param int|null $userId |
||
50 | * @return self|null |
||
51 | */ |
||
52 | public static function identity($userId = null) |
||
53 | { |
||
54 | if ($userId === null) { |
||
55 | $userId = MainApp::$Session->get('ff_user_id'); |
||
56 | } |
||
57 | |||
58 | if ($userId === null || !Any::isInt($userId) || $userId < 1) { |
||
59 | return null; |
||
60 | } |
||
61 | |||
62 | // check in cache |
||
63 | if (MainApp::$Memory->get('profile.object.cache.' . $userId) !== null) { |
||
64 | return MainApp::$Memory->get('profile.object.cache.' . $userId); |
||
65 | } |
||
66 | |||
67 | // find row |
||
68 | $profile = self::where('user_id', $userId); |
||
69 | |||
70 | // empty? lets return null |
||
0 ignored issues
–
show
|
|||
71 | if ($profile->count() !== 1) { |
||
72 | return null; |
||
73 | } |
||
74 | |||
75 | $object = $profile->first(); |
||
76 | MainApp::$Memory->set('profile.object.cache.' . $userId, $object); |
||
77 | |||
78 | return $object; |
||
79 | } |
||
80 | |||
81 | /** |
||
82 | * Get user avatar full url for current object |
||
83 | * @param string $type |
||
84 | * @return string |
||
85 | */ |
||
86 | public function getAvatarUrl($type = 'small') |
||
87 | { |
||
88 | $default = '/upload/user/avatar/' . $type . '/default.jpg'; |
||
89 | if (!Arr::in($type, ['small', 'big', 'medium'])) { |
||
90 | return MainApp::$Alias->scriptUrl . $default; |
||
91 | } |
||
92 | |||
93 | $route = '/upload/user/avatar/' . $type . '/' . $this->user_id . '.jpg'; |
||
94 | if (File::exist($route)) { |
||
95 | return MainApp::$Alias->scriptUrl . $route . '?mtime=' . File::mTime($route); |
||
96 | } |
||
97 | |||
98 | return MainApp::$Alias->scriptUrl . $default; |
||
99 | } |
||
100 | |||
101 | /** |
||
102 | * Get user nickname. If is empty - return 'id+userId' |
||
103 | * @return string |
||
104 | */ |
||
105 | public function getNickname(): ?string |
||
106 | { |
||
107 | $userNick = $this->nick; |
||
108 | if (!$userNick || Str::likeEmpty($userNick)) { |
||
109 | $userNick = 'id' . $this->id; |
||
110 | } |
||
111 | |||
112 | return $userNick; |
||
113 | } |
||
114 | |||
115 | /** |
||
116 | * Get user active record object relation |
||
117 | * @return \Illuminate\Database\Eloquent\Relations\BelongsTo |
||
118 | */ |
||
119 | public function user() |
||
120 | { |
||
121 | return $this->belongsTo(User::class, 'user_id'); |
||
122 | } |
||
123 | } |
||
124 |
Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.
The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.
This check looks for comments that seem to be mostly valid code and reports them.