forked from GNUsocial/gnu-social
[Avatar] Add default avatar route and improve url getter
This commit is contained in:
parent
0ef151edac
commit
85969a8cff
@ -38,8 +38,9 @@ class Avatar extends Component
|
||||
|
||||
public function onAddRoute($r): bool
|
||||
{
|
||||
$r->connect('avatar', '/actor/{actor_id<\d+>}/avatar/{size<full|big|medium|small>?full}', [Controller\Avatar::class, 'avatar_view']);
|
||||
$r->connect('settings_avatar', '/settings/avatar', [Controller\Avatar::class, 'settings_avatar']);
|
||||
$r->connect('avatar_actor', '/actor/{actor_id<\d+>}/avatar/{size<full|big|medium|small>?full}', [Controller\Avatar::class, 'avatar_view']);
|
||||
$r->connect('avatar_default', '/avatar/default/{size<full|big|medium|small>?full}', [Controller\Avatar::class, 'default_avatar_view']);
|
||||
$r->connect('avatar_settings', '/settings/avatar', [Controller\Avatar::class, 'settings_avatar']);
|
||||
return Event::next;
|
||||
}
|
||||
|
||||
@ -62,9 +63,13 @@ class Avatar extends Component
|
||||
|
||||
public function onAvatarUpdate(int $actor_id): bool
|
||||
{
|
||||
Cache::delete('avatar-' . $actor_id);
|
||||
Cache::delete('avatar-url-' . $actor_id);
|
||||
Cache::delete('avatar-file-info-' . $actor_id);
|
||||
foreach (['full', 'big', 'medium', 'small'] as $size) {
|
||||
foreach ([Router::ABSOLUTE_PATH, Router::ABSOLUTE_URL] as $type) {
|
||||
Cache::delete("avatar-{$actor_id}-{$size}-{$type}");
|
||||
Cache::delete("avatar-url-{$actor_id}-{$size}-{$type}");
|
||||
Cache::delete("avatar-file-info-{$actor_id}-{$size}-{$type}");
|
||||
}
|
||||
}
|
||||
return Event::next;
|
||||
}
|
||||
|
||||
@ -89,11 +94,13 @@ class Avatar extends Component
|
||||
/**
|
||||
* Get the cached avatar associated with the given Actor id, or the current user if not given
|
||||
*/
|
||||
public static function getAvatarUrl(int $actor_id, string $size = 'full'): string
|
||||
public static function getAvatarUrl(int $actor_id, string $size = 'full', int $type = Router::ABSOLUTE_PATH): string
|
||||
{
|
||||
return Cache::get("avatar-url-{$actor_id}", function () use ($actor_id, $size) {
|
||||
return Router::url('avatar', ['actor_id' => $actor_id, 'size' => $size]);
|
||||
});
|
||||
try {
|
||||
return self::getAvatar($actor_id)->getUrl($size, $type);
|
||||
} catch (NoAvatarException) {
|
||||
return Router::url('avatar_default', ['size' => $size], $type);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -45,6 +45,11 @@ use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class Avatar extends Controller
|
||||
{
|
||||
public function default_avatar_view(Request $request, string $size): Response
|
||||
{
|
||||
return $this->avatar_view($request, 0, $size);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
|
@ -21,6 +21,7 @@
|
||||
|
||||
namespace Component\Avatar\Entity;
|
||||
|
||||
use App\Core\Cache;
|
||||
use App\Core\DB\DB;
|
||||
use App\Core\Entity;
|
||||
use App\Core\Router\Router;
|
||||
@ -117,9 +118,12 @@ class Avatar extends Entity
|
||||
|
||||
private ?Attachment $attachment = null;
|
||||
|
||||
public function getUrl(): string
|
||||
public function getUrl(string $size = 'full', int $type = Router::ABSOLUTE_PATH): string
|
||||
{
|
||||
return Router::url('avatar', ['actor_id' => $this->actor_id]);
|
||||
$actor_id = $this->getActorId();
|
||||
return Cache::get("avatar-url-{$actor_id}-{$size}-{$type}", function () use ($actor_id, $size, $type) {
|
||||
return Router::url('avatar_actor', ['actor_id' => $actor_id, 'size' => $size], $type);
|
||||
});
|
||||
}
|
||||
|
||||
public function getAttachment(): Attachment
|
||||
|
Loading…
Reference in New Issue
Block a user