pixelfed/app/Profile.php

128 lines
2.6 KiB
PHP
Raw Normal View History

<?php
namespace App;
2018-05-22 23:56:20 +00:00
use Storage;
use App\Util\Lexer\PrettyNumber;
use Illuminate\Database\Eloquent\Model;
2018-06-14 00:52:42 +00:00
use Illuminate\Database\Eloquent\SoftDeletes;
class Profile extends Model
{
2018-06-14 00:52:42 +00:00
use SoftDeletes;
/**
* The attributes that should be mutated to dates.
*
* @var array
*/
protected $dates = ['deleted_at'];
2018-05-22 23:56:20 +00:00
protected $hidden = [
'private_key',
];
protected $visible = ['id', 'username', 'name'];
2018-06-09 23:31:48 +00:00
public function user()
{
return $this->belongsTo(User::class);
}
2018-05-22 23:56:20 +00:00
public function url($suffix = '')
2018-04-19 05:57:16 +00:00
{
return url($this->username . $suffix);
2018-05-22 23:56:20 +00:00
}
public function permalink($suffix = '')
{
return url('users/' . $this->username . $suffix);
2018-04-19 05:57:16 +00:00
}
2018-05-22 23:56:20 +00:00
public function emailUrl()
{
$domain = parse_url(config('app.url'), PHP_URL_HOST);
return $this->username . '@' . $domain;
}
public function statuses()
{
return $this->hasMany(Status::class);
}
public function followingCount($short = false)
{
$count = $this->following()->count();
if($short) {
return PrettyNumber::convert($count);
} else {
return $count;
}
}
public function followerCount($short = false)
{
$count = $this->followers()->count();
if($short) {
return PrettyNumber::convert($count);
} else {
return $count;
}
}
public function following()
{
return $this->belongsToMany(
Profile::class,
'followers',
'profile_id',
'following_id'
);
}
public function followers()
{
return $this->belongsToMany(
Profile::class,
'followers',
'following_id',
'profile_id'
);
}
public function follows($profile)
{
return Follower::whereProfileId($this->id)->whereFollowingId($profile->id)->count();
}
public function followedBy($profile)
{
return Follower::whereProfileId($profile->id)->whereFollowingId($this->id)->count();
}
public function bookmarks()
{
return $this->belongsToMany(
Status::class,
'bookmarks',
'profile_id',
'status_id'
);
}
2018-04-19 05:57:16 +00:00
public function likes()
{
return $this->hasMany(Like::class);
}
2018-05-22 23:56:20 +00:00
public function avatar()
{
return $this->hasOne(Avatar::class);
}
public function avatarUrl()
{
$url = url(Storage::url($this->avatar->media_path ?? 'public/avatars/default.png'));
return $url;
}
}