diff --git a/app/Config/ActivityPub.php b/app/Config/ActivityPub.php index 7f2ea61c..062603db 100644 --- a/app/Config/ActivityPub.php +++ b/app/Config/ActivityPub.php @@ -11,4 +11,15 @@ class ActivityPub extends ActivityPubBase */ public $actorObject = 'App\Libraries\PodcastActor'; public $noteObject = 'App\Libraries\NoteObject'; + + /** + * -------------------------------------------------------------------- + * Default avatar and cover images + * -------------------------------------------------------------------- + */ + public $defaultAvatarImagePath = 'assets/images/castopod-avatar-default.jpg'; + public $defaultAvatarImageMimetype = 'image/jpeg'; + + public $defaultCoverImagePath = 'assets/images/castopod-cover-default.jpg'; + public $defaultCoverImageMimetype = 'image/jpeg'; } diff --git a/app/Libraries/ActivityPub/Config/ActivityPub.php b/app/Libraries/ActivityPub/Config/ActivityPub.php index 199817af..0feb9f16 100644 --- a/app/Libraries/ActivityPub/Config/ActivityPub.php +++ b/app/Libraries/ActivityPub/Config/ActivityPub.php @@ -19,4 +19,15 @@ class ActivityPub extends BaseConfig */ public $actorObject = 'ActivityPub\Objects\ActorObject'; public $noteObject = 'ActivityPub\Objects\NoteObject'; + + /** + * -------------------------------------------------------------------- + * Default avatar and cover images + * -------------------------------------------------------------------- + */ + public $defaultAvatarImagePath = 'assets/images/avatar-default.jpg'; + public $defaultAvatarImageMimetype = 'image/jpeg'; + + public $defaultCoverImagePath = 'assets/images/cover-default.jpg'; + public $defaultCoverImageMimetype = 'image/jpeg'; } diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-010000_add_actors.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-010000_add_actors.php index 9e6ab14c..9e2b2f5c 100644 --- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-010000_add_actors.php +++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-010000_add_actors.php @@ -54,12 +54,14 @@ class AddActors extends Migration 'avatar_image_url' => [ 'type' => 'VARCHAR', 'constraint' => 255, + 'null' => true, ], // constraint is 13 because the longest safe mimetype for images is image/svg+xml, // see https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#image_types 'avatar_image_mimetype' => [ 'type' => 'VARCHAR', 'constraint' => 13, + 'null' => true, ], 'cover_image_url' => [ 'type' => 'VARCHAR', diff --git a/app/Libraries/ActivityPub/Entities/Actor.php b/app/Libraries/ActivityPub/Entities/Actor.php index 2d8d769d..acf73aa3 100644 --- a/app/Libraries/ActivityPub/Entities/Actor.php +++ b/app/Libraries/ActivityPub/Entities/Actor.php @@ -36,8 +36,8 @@ class Actor extends Entity 'summary' => '?string', 'private_key' => '?string', 'public_key' => '?string', - 'avatar_image_url' => 'string', - 'avatar_image_mimetype' => 'string', + 'avatar_image_url' => '?string', + 'avatar_image_mimetype' => '?string', 'cover_image_url' => '?string', 'cover_image_mimetype' => '?string', 'inbox_url' => 'string', @@ -81,4 +81,40 @@ class Actor extends Entity return $this->followers; } + + public function getAvatarImageUrl() + { + if (empty($this->attributes['avatar_image_url'])) { + return base_url(config('ActivityPub')->defaultAvatarImagePath); + } + + return $this->attributes['avatar_image_url']; + } + + public function getAvatarImageMimetype() + { + if (empty($this->attributes['avatar_image_mimetype'])) { + return config('ActivityPub')->defaultAvatarImageMimetype; + } + + return $this->attributes['avatar_image_mimetype']; + } + + public function getCoverImageUrl() + { + if (empty($this->attributes['cover_image_url'])) { + return base_url(config('ActivityPub')->defaultCoverImagePath); + } + + return $this->attributes['cover_image_url']; + } + + public function getCoverImageMimetype() + { + if (empty($this->attributes['cover_image_mimetype'])) { + return config('ActivityPub')->defaultCoverImageMimetype; + } + + return $this->attributes['cover_image_mimetype']; + } } diff --git a/app/Libraries/ActivityPub/Objects/ActorObject.php b/app/Libraries/ActivityPub/Objects/ActorObject.php index 5d9f07ee..4fa0b806 100644 --- a/app/Libraries/ActivityPub/Objects/ActorObject.php +++ b/app/Libraries/ActivityPub/Objects/ActorObject.php @@ -91,13 +91,12 @@ class ActorObject extends ObjectType $this->outbox = $actor->outbox_url; $this->followers = $actor->followers_url; - if ($actor->cover_image_url) { - $this->image = [ - 'type' => 'Image', - 'mediaType' => $actor->cover_image_mimetype, - 'url' => $actor->cover_image_url, - ]; - } + $this->image = [ + 'type' => 'Image', + 'mediaType' => $actor->cover_image_mimetype, + 'url' => $actor->cover_image_url, + ]; + $this->icon = [ 'type' => 'Image', 'mediaType' => $actor->avatar_image_mimetype, diff --git a/app/Models/PodcastModel.php b/app/Models/PodcastModel.php index 67b2ef8b..e533bbb7 100644 --- a/app/Models/PodcastModel.php +++ b/app/Models/PodcastModel.php @@ -297,12 +297,6 @@ class PodcastModel extends Model 'public_key' => $publickey, 'display_name' => $data['data']['title'], 'summary' => $data['data']['description_html'], - 'avatar_image_url' => '', - 'avatar_image_mimetype' => '', - 'cover_image_url' => base_url( - 'assets/images/castopod-cover-default.jpg', - ), - 'cover_image_mimetype' => 'image/jpeg', 'inbox_url' => url_to('inbox', $username), 'outbox_url' => url_to('outbox', $username), 'followers_url' => url_to('followers', $username), @@ -342,6 +336,7 @@ class PodcastModel extends Model $actor->display_name = $podcast->title; $actor->summary = $podcast->description_html; $actor->avatar_image_url = $podcast->image->thumbnail_url; + $actor->avatar_image_mimetype = $podcast->image_mimetype; if ($actor->hasChanged()) { $actorModel->update($actor->id, $actor); diff --git a/app/Views/_assets/images/castopod-avatar-default.jpg b/app/Views/_assets/images/castopod-avatar-default.jpg new file mode 100644 index 00000000..644126c5 Binary files /dev/null and b/app/Views/_assets/images/castopod-avatar-default.jpg differ diff --git a/app/Views/podcast/_partials/header.php b/app/Views/podcast/_partials/header.php index 1002dea9..48ce183d 100644 --- a/app/Views/podcast/_partials/header.php +++ b/app/Views/podcast/_partials/header.php @@ -1,10 +1,6 @@
- actor->cover_image_url): ?> - - -
- +
<?= $podcast->title ?> diff --git a/app/Views/podcast/follow.php b/app/Views/podcast/follow.php index 06336766..8a564a2e 100644 --- a/app/Views/podcast/follow.php +++ b/app/Views/podcast/follow.php @@ -31,11 +31,7 @@ 'ActivityPub.follow.subtitle', ) ?>
- cover_image_url): ?> - -
-
<?= $actor->display_name ?>