User.php
Go to the documentation of this file.
1 <?php
2 namespace App\Models;
3 
7 use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
8 use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
12 
13 class User extends Model implements AuthenticatableContract, CanResetPasswordContract
14 {
15 
16  use SoftDeletes;
17  use ValidatingTrait;
18  use Authenticatable;
19  use CanResetPassword;
20 
21  protected $dates = ['deleted_at'];
22  protected $table = 'users';
23  protected $injectUniqueIdentifier = true;
24  protected $fillable = ['first_name', 'last_name', 'email','password','username'];
25 
26 
33  protected $rules = [
34  'first_name' => 'required|string|min:1',
35  'last_name' => 'required|string|min:1',
36  'username' => 'required|string|min:2|unique:users,username,NULL,deleted_at',
37  'email' => 'email',
38  'password' => 'required|min:6',
39  ];
40 
41 
42  // This is very coarse and should be changed
43  public function hasAccess($section)
44  {
45  $user_permissions = json_decode($this->permissions, true);
46  $user_groups = $this->groups();
47 
48  if (((array_key_exists($section, $user_permissions)) && ($user_permissions[$section]=='1')) ||
49  ((array_key_exists('admin', $user_permissions)) && ($user_permissions['admin']=='1'))) {
50  return true;
51  }
52 
53  foreach ($user_groups as $user_group) {
54  $group_permissions = json_decode($user_group->permissions, true);
55  if (((array_key_exists($section, $group_permissions)) && ($group_permissions[$section]=='1')) ||
56  ((array_key_exists('admin', $group_permissions)) && ($group_permissions['admin']=='1'))) {
57  return true;
58  }
59  }
60 
61  return false;
62  }
63 
64  public function isSuperUser() {
65  $user_permissions = json_decode($this->permissions, true);
66  $user_groups = $this->groups();
67 
68  if ((array_key_exists('superuser', $user_permissions)) && ($user_permissions['superuser']=='1')) {
69  return true;
70  } else {
71  return false;
72  }
73 
74 
75  }
76 
77 
78  public function company()
79  {
80  return $this->belongsTo('\App\Models\Company', 'company_id');
81  }
82 
83  public function isActivated()
84  {
85  if ($this->activated == 1) {
86  return true;
87  } else {
88  return false;
89  }
90  }
91 
92 
99  public function fullName()
100  {
101  return "{$this->first_name} {$this->last_name}";
102  }
103 
104 
110  public function gravatar()
111  {
112 
113  if ($this->avatar) {
114  return config('app.url').'/uploads/avatars/'.$this->avatar;
115  }
116 
117  if ($this->email) {
118  // Generate the Gravatar hash
119  $gravatar = md5(strtolower(trim($this->email)));
120  // Return the Gravatar url
121  return "//gravatar.com/avatar/".$gravatar;
122  }
123 
124  return false;
125 
126  }
127 
131  public function assets()
132  {
133  return $this->hasMany('\App\Models\Asset', 'assigned_to')->withTrashed();
134  }
135 
139  public function accessories()
140  {
141  return $this->belongsToMany('\App\Models\Accessory', 'accessories_users', 'assigned_to', 'accessory_id')->withPivot('id')->withTrashed();
142  }
143 
147  public function consumables()
148  {
149  return $this->belongsToMany('\App\Models\Consumable', 'consumables_users', 'assigned_to', 'consumable_id')->withPivot('id')->withTrashed();
150  }
151 
155  public function licenses()
156  {
157  return $this->belongsToMany('\App\Models\License', 'license_seats', 'assigned_to', 'license_id')->withPivot('id');
158  }
159 
163  public function userlog()
164  {
165  return $this->hasMany('\App\Models\Actionlog', 'checkedout_to')->orderBy('created_at', 'DESC')->withTrashed();
166  }
167 
171  public function userloc()
172  {
173  return $this->belongsTo('\App\Models\Location', 'location_id')->withTrashed();
174  }
175 
179  public function manager()
180  {
181  return $this->belongsTo('\App\Models\User', 'manager_id')->withTrashed();
182  }
183 
187  public function groups()
188  {
189  return $this->belongsToMany('\App\Models\Group', 'users_groups');
190  }
191 
192 
193  public function accountStatus()
194  {
195  if ($this->sentryThrottle) {
196  if ($this->sentryThrottle->suspended==1) {
197  return 'suspended';
198  } elseif ($this->sentryThrottle->banned==1) {
199  return 'banned';
200  } else {
201  return false;
202  }
203  } else {
204  return false;
205  }
206  }
207 
208  public function assetlog()
209  {
210  return $this->hasMany('\App\Models\Asset', 'id')->withTrashed();
211  }
212 
216  public function uploads()
217  {
218  return $this->hasMany('\App\Models\Actionlog', 'asset_id')
219  ->where('asset_type', '=', 'user')
220  ->where('action_type', '=', 'uploaded')
221  ->whereNotNull('filename')
222  ->orderBy('created_at', 'desc');
223  }
224 
225  public function sentryThrottle()
226  {
227  return $this->hasOne('\App\Models\Throttle');
228  }
229 
230  public function scopeGetDeleted($query)
231  {
232  return $query->withTrashed()->whereNotNull('deleted_at');
233  }
234 
235  public function scopeGetNotDeleted($query)
236  {
237  return $query->whereNull('deleted_at');
238  }
239 
244  public function getPersistCode()
245  {
246 
247  if (!config('session.multi_login') || (!$this->persist_code)) {
248  $this->persist_code = $this->getRandomString();
249 
250  // Our code got hashed
251  $persistCode = $this->persist_code;
252  $this->save();
253  return $persistCode;
254  }
255  return $this->persist_code;
256  }
257 
258  public function scopeMatchEmailOrUsername($query, $user_username, $user_email)
259  {
260  return $query->where('email', '=', $user_email)
261  ->orWhere('username', '=', $user_username)
262  ->orWhere('username', '=', $user_email);
263  }
264 
265 
266  public static function generateFormattedNameFromFullName($format = 'filastname', $users_name)
267  {
268  $name = explode(" ", $users_name);
269  $name = str_replace("'", '', $name);
270  $first_name = $name[0];
271  $email_last_name = '';
272  $email_prefix = $first_name;
273 
274  // If there is no last name given
275  if (!array_key_exists(1, $name)) {
276  $last_name='';
277  $email_last_name = $last_name;
278  $user_username = $first_name;
279 
280  // There is a last name given
281  } else {
282 
283  $last_name = str_replace($first_name, '', $users_name);
284 
285  if ($format=='filastname') {
286  $email_last_name.=str_replace(' ', '', $last_name);
287  $email_prefix = $first_name[0].$email_last_name;
288 
289  } elseif ($format=='firstname.lastname') {
290  $email_last_name.=str_replace(' ', '', $last_name);
291  $email_prefix = $first_name.'.'.$email_last_name;
292 
293  } elseif ($format=='firstname') {
294  $email_last_name.=str_replace(' ', '', $last_name);
295  $email_prefix = $first_name;
296 
297  }
298  }
299 
300  $user_username = $email_prefix;
301  $user['first_name'] = $first_name;
302  $user['last_name'] = $last_name;
303  $user['username'] = strtolower($user_username);
304 
305  return $user;
306 
307 
308  }
309 
318  public function scopeTextsearch($query, $search)
319  {
320 
321  return $query->where(function ($query) use ($search) {
322  $query->where('users.first_name', 'LIKE', "%$search%")
323  ->orWhere('users.last_name', 'LIKE', "%$search%")
324  ->orWhere('users.email', 'LIKE', "%$search%")
325  ->orWhere('users.username', 'LIKE', "%$search%")
326  ->orWhere('users.notes', 'LIKE', "%$search%")
327  ->orWhere('users.employee_num', 'LIKE', "%$search%")
328  ->orWhere(function ($query) use ($search) {
329  $query->whereHas('userloc', function ($query) use ($search) {
330  $query->where('locations.name', 'LIKE', '%'.$search.'%');
331  });
332  })
333 
334  // Ugly, ugly code because Laravel sucks at self-joins
335  ->orWhere(function ($query) use ($search) {
336  $query->whereRaw("users.manager_id IN (select id from users where first_name LIKE '%".$search."%' OR last_name LIKE '%".$search."%') ");
337  });
338  });
339 
340  }
341 
342 
351  public function scopeDeleted($query)
352  {
353  return $query->whereNotNull('deleted_at');
354  }
355 
356 
365  public function scopeOrderManager($query, $order)
366  {
367  // Left join here, or it will only return results with parents
368  return $query->leftJoin('users as manager', 'users.manager_id', '=', 'manager.id')->orderBy('manager.first_name', $order)->orderBy('manager.last_name', $order);
369  }
370 
379  public function scopeOrderLocation($query, $order)
380  {
381  return $query->leftJoin('locations', 'users.location_id', '=', 'locations.id')->orderBy('locations.name', $order);
382  }
383 }
scopeDeleted($query)
Query builder scope for Deleted users.
Definition: User.php:351
hasAccess($section)
Definition: User.php:43
scopeMatchEmailOrUsername($query, $user_username, $user_email)
Definition: User.php:258
scopeGetNotDeleted($query)
Definition: User.php:235
scopeGetDeleted($query)
Definition: User.php:230
gravatar()
Returns the user Gravatar image url.
Definition: User.php:110
consumables()
Get consumables assigned to this user.
Definition: User.php:147
assets()
Get assets assigned to this user.
Definition: User.php:131
getPersistCode()
Override the SentryUser getPersistCode method for multiple logins at one time.
Definition: User.php:244
licenses()
Get licenses assigned to this user.
Definition: User.php:155
fullName()
Returns the user full name, it simply concatenates the user first and last name.
Definition: User.php:99
sentryThrottle()
Definition: User.php:225
uploads()
Get uploads for this asset.
Definition: User.php:216
groups()
Get user groups.
Definition: User.php:187
$injectUniqueIdentifier
Definition: User.php:23
static generateFormattedNameFromFullName($format= 'filastname', $users_name)
Definition: User.php:266
manager()
Get the user&#39;s manager based on the assigned user.
Definition: User.php:179
scopeTextsearch($query, $search)
Query builder scope to search on text.
Definition: User.php:318
userlog()
Get action logs for this user.
Definition: User.php:163
userloc()
Get the asset&#39;s location based on the assigned user.
Definition: User.php:171
scopeOrderManager($query, $order)
Query builder scope to order on manager.
Definition: User.php:365
accessories()
Get accessories assigned to this user.
Definition: User.php:139
scopeOrderLocation($query, $order)
Query builder scope to order on company.
Definition: User.php:379