From 134a071add32d11628dc65651c1991d91b09231e Mon Sep 17 00:00:00 2001 From: Yassine Doghri <yassine@doghri.fr> Date: Mon, 21 Jun 2021 10:04:18 +0000 Subject: [PATCH] refactor: rename all occurences of notes to statuses --- app/Config/Events.php | 172 +++++------ app/Config/Routes.php | 48 +-- app/Controllers/Admin/EpisodeController.php | 38 +-- app/Controllers/PodcastController.php | 4 +- ...oteController.php => StatusController.php} | 60 ++-- .../2020-06-05-170000_add_episodes.php | 2 +- ...-23-100000_add_episode_id_to_statuses.php} | 12 +- ...-09-113000_add_created_by_to_statuses.php} | 12 +- app/Database/Seeds/AuthSeeder.php | 4 +- app/Entities/Episode.php | 20 +- app/Entities/{Note.php => Status.php} | 8 +- app/Language/en/Episode.php | 6 +- app/Language/en/Podcast.php | 2 +- app/Language/en/{Note.php => Status.php} | 2 +- app/Language/fr/Episode.php | 6 +- app/Language/fr/Podcast.php | 2 +- app/Language/fr/{Note.php => Status.php} | 2 +- .../Activities/AnnounceActivity.php | 12 +- app/Libraries/ActivityPub/Config/Routes.php | 22 +- .../Controllers/ActorController.php | 80 ++--- .../Controllers/SchedulerController.php | 2 +- ...oteController.php => StatusController.php} | 60 ++-- .../2018-01-01-010000_add_actors.php | 2 +- ...php => 2018-01-01-020000_add_statuses.php} | 14 +- .../2018-01-01-100000_add_activities.php | 6 +- .../2018-01-01-100000_add_favourites.php | 6 +- ...-01-110000_add_statuses_preview_cards.php} | 14 +- .../ActivityPub/Entities/Activity.php | 28 +- app/Libraries/ActivityPub/Entities/Actor.php | 4 +- .../ActivityPub/Entities/Favourite.php | 6 +- .../ActivityPub/Entities/PreviewCard.php | 4 +- .../Entities/{Note.php => Status.php} | 66 ++-- .../ActivityPub/Models/ActivityModel.php | 14 +- .../ActivityPub/Models/ActorModel.php | 2 +- .../ActivityPub/Models/FavouriteModel.php | 62 ++-- .../ActivityPub/Models/PreviewCardModel.php | 10 +- .../Models/{NoteModel.php => StatusModel.php} | 292 +++++++++--------- .../ActivityPub/Objects/NoteObject.php | 20 +- app/Libraries/NoteObject.php | 16 +- app/Models/EpisodeModel.php | 2 +- app/Models/{NoteModel.php => StatusModel.php} | 14 +- app/Views/_assets/styles/index.css | 2 +- .../_assets/styles/{note.css => status.css} | 4 +- app/Views/admin/episode/publish.php | 4 +- app/Views/admin/episode/publish_edit.php | 14 +- app/Views/podcast/_partials/header.php | 4 +- app/Views/podcast/_partials/note.php | 40 --- app/Views/podcast/_partials/note_actions.php | 36 --- .../podcast/_partials/note_authenticated.php | 40 --- app/Views/podcast/_partials/reblog.php | 40 +-- .../_partials/reblog_authenticated.php | 40 +-- app/Views/podcast/_partials/reply.php | 2 +- app/Views/podcast/_partials/reply_actions.php | 12 +- .../_partials/reply_actions_authenticated.php | 26 +- .../podcast/_partials/reply_authenticated.php | 2 +- app/Views/podcast/_partials/status.php | 40 +++ .../podcast/_partials/status_actions.php | 36 +++ ...d.php => status_actions_authenticated.php} | 62 ++-- .../_partials/status_authenticated.php | 40 +++ ...th_replies.php => status_with_replies.php} | 12 +- ... => status_with_replies_authenticated.php} | 16 +- app/Views/podcast/activity.php | 8 +- app/Views/podcast/activity_authenticated.php | 16 +- app/Views/podcast/episode.php | 18 +- app/Views/podcast/episode_authenticated.php | 18 +- app/Views/podcast/episodes.php | 6 +- app/Views/podcast/episodes_authenticated.php | 6 +- app/Views/podcast/note.php | 38 --- app/Views/podcast/status.php | 38 +++ ...enticated.php => status_authenticated.php} | 22 +- ...te_action.php => status_remote_action.php} | 16 +- 71 files changed, 908 insertions(+), 908 deletions(-) rename app/Controllers/{NoteController.php => StatusController.php} (77%) rename app/Database/Migrations/{2021-02-23-100000_add_episode_id_to_notes.php => 2021-02-23-100000_add_episode_id_to_statuses.php} (52%) rename app/Database/Migrations/{2021-03-09-113000_add_created_by_to_notes.php => 2021-03-09-113000_add_created_by_to_statuses.php} (52%) rename app/Entities/{Note.php => Status.php} (83%) rename app/Language/en/{Note.php => Status.php} (95%) rename app/Language/fr/{Note.php => Status.php} (95%) rename app/Libraries/ActivityPub/Controllers/{NoteController.php => StatusController.php} (81%) rename app/Libraries/ActivityPub/Database/Migrations/{2018-01-01-020000_add_notes.php => 2018-01-01-020000_add_statuses.php} (87%) rename app/Libraries/ActivityPub/Database/Migrations/{2018-01-01-110000_add_notes_preview_cards.php => 2018-01-01-110000_add_statuses_preview_cards.php} (59%) rename app/Libraries/ActivityPub/Entities/{Note.php => Status.php} (66%) rename app/Libraries/ActivityPub/Models/{NoteModel.php => StatusModel.php} (58%) rename app/Models/{NoteModel.php => StatusModel.php} (70%) rename app/Views/_assets/styles/{note.css => status.css} (87%) delete mode 100644 app/Views/podcast/_partials/note.php delete mode 100644 app/Views/podcast/_partials/note_actions.php delete mode 100644 app/Views/podcast/_partials/note_authenticated.php create mode 100644 app/Views/podcast/_partials/status.php create mode 100644 app/Views/podcast/_partials/status_actions.php rename app/Views/podcast/_partials/{note_actions_authenticated.php => status_actions_authenticated.php} (61%) create mode 100644 app/Views/podcast/_partials/status_authenticated.php rename app/Views/podcast/_partials/{note_with_replies.php => status_with_replies.php} (53%) rename app/Views/podcast/_partials/{note_with_replies_authenticated.php => status_with_replies_authenticated.php} (65%) delete mode 100644 app/Views/podcast/note.php create mode 100644 app/Views/podcast/status.php rename app/Views/podcast/{note_authenticated.php => status_authenticated.php} (51%) rename app/Views/podcast/{note_remote_action.php => status_remote_action.php} (76%) diff --git a/app/Config/Events.php b/app/Config/Events.php index 0ed8a4131b..b2288b940b 100644 --- a/app/Config/Events.php +++ b/app/Config/Events.php @@ -5,7 +5,7 @@ declare(strict_types=1); namespace Config; use App\Entities\Actor; -use App\Entities\Note; +use App\Entities\Status; use App\Entities\User; use CodeIgniter\Events\Events; use CodeIgniter\Exceptions\FrameworkException; @@ -120,82 +120,82 @@ Events::on('on_undo_follow', function ($actor, $targetActor): void { }); /** - * @param Note $note + * @param Status $status */ -Events::on('on_note_add', function ($note): void { - if ($note->in_reply_to_id !== null) { - $note = $note->reply_to_note; +Events::on('on_status_add', function ($status): void { + if ($status->in_reply_to_id !== null) { + $status = $status->reply_to_status; } - if ($note->episode_id) { + if ($status->episode_id) { model('EpisodeModel') - ->where('id', $note->episode_id) - ->increment('notes_total'); + ->where('id', $status->episode_id) + ->increment('statuses_total'); } - if ($note->actor->is_podcast) { + if ($status->actor->is_podcast) { // Removing all of the podcast pages is a bit overkill, but works to avoid caching bugs // same for other events below cache() - ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + ->deleteMatching("podcast#{$status->actor->podcast->id}*"); cache() - ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); + ->deleteMatching("page_podcast#{$status->actor->podcast->id}*"); } }); /** - * @param Note $note + * @param Status $status */ -Events::on('on_note_remove', function ($note): void { - if ($note->in_reply_to_id !== null) { - Events::trigger('on_note_remove', $note->reply_to_note); +Events::on('on_status_remove', function ($status): void { + if ($status->in_reply_to_id !== null) { + Events::trigger('on_status_remove', $status->reply_to_status); } - if ($episodeId = $note->episode_id) { + if ($episodeId = $status->episode_id) { model('EpisodeModel') ->where('id', $episodeId) - ->decrement('notes_total', 1 + $note->reblogs_count); + ->decrement('statuses_total', 1 + $status->reblogs_count); model('EpisodeModel') ->where('id', $episodeId) - ->decrement('reblogs_total', $note->reblogs_count); + ->decrement('reblogs_total', $status->reblogs_count); model('EpisodeModel') ->where('id', $episodeId) - ->decrement('favourites_total', $note->favourites_count); + ->decrement('favourites_total', $status->favourites_count); } - if ($note->actor->is_podcast) { + if ($status->actor->is_podcast) { cache() - ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + ->deleteMatching("podcast#{$status->actor->podcast->id}*"); cache() - ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); + ->deleteMatching("page_podcast#{$status->actor->podcast->id}*"); } cache() - ->deleteMatching("page_note#{$note->id}*"); + ->deleteMatching("page_status#{$status->id}*"); }); /** * @param Actor $actor - * @param Note $note + * @param Status $status */ -Events::on('on_note_reblog', function ($actor, $note): void { - if ($episodeId = $note->episode_id) { +Events::on('on_status_reblog', function ($actor, $status): void { + if ($episodeId = $status->episode_id) { model('EpisodeModel') ->where('id', $episodeId) ->increment('reblogs_total'); model('EpisodeModel') ->where('id', $episodeId) - ->increment('notes_total'); + ->increment('statuses_total'); } - if ($note->actor->is_podcast) { + if ($status->actor->is_podcast) { cache() - ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + ->deleteMatching("podcast#{$status->actor->podcast->id}*"); cache() - ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); + ->deleteMatching("page_podcast#{$status->actor->podcast->id}*"); } if ($actor->is_podcast) { @@ -205,111 +205,111 @@ Events::on('on_note_reblog', function ($actor, $note): void { } cache() - ->deleteMatching("page_note#{$note->id}*"); + ->deleteMatching("page_status#{$status->id}*"); - if ($note->in_reply_to_id !== null) { - cache()->deleteMatching("page_note#{$note->in_reply_to_id}"); + if ($status->in_reply_to_id !== null) { + cache()->deleteMatching("page_status#{$status->in_reply_to_id}"); } }); /** - * @param Note $reblogNote + * @param Status $reblogStatus */ -Events::on('on_note_undo_reblog', function ($reblogNote): void { - $note = $reblogNote->reblog_of_note; - if ($episodeId = $note->episode_id) { +Events::on('on_status_undo_reblog', function ($reblogStatus): void { + $status = $reblogStatus->reblog_of_status; + if ($episodeId = $status->episode_id) { model('EpisodeModel') ->where('id', $episodeId) ->decrement('reblogs_total'); model('EpisodeModel') ->where('id', $episodeId) - ->decrement('notes_total'); + ->decrement('statuses_total'); } - if ($note->actor->is_podcast) { + if ($status->actor->is_podcast) { cache() - ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + ->deleteMatching("podcast#{$status->actor->podcast->id}*"); cache() - ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); + ->deleteMatching("page_podcast#{$status->actor->podcast->id}*"); } cache() - ->deleteMatching("page_note#{$note->id}*"); + ->deleteMatching("page_status#{$status->id}*"); cache() - ->deleteMatching("page_note#{$reblogNote->id}*"); + ->deleteMatching("page_status#{$reblogStatus->id}*"); - if ($note->in_reply_to_id !== null) { - cache()->deleteMatching("page_note#{$note->in_reply_to_id}"); + if ($status->in_reply_to_id !== null) { + cache()->deleteMatching("page_status#{$status->in_reply_to_id}"); } - if ($reblogNote->actor->is_podcast) { + if ($reblogStatus->actor->is_podcast) { cache() - ->deleteMatching("podcast#{$reblogNote->actor->podcast->id}*"); + ->deleteMatching("podcast#{$reblogStatus->actor->podcast->id}*"); cache() - ->deleteMatching("page_podcast#{$reblogNote->actor->podcast->id}*"); + ->deleteMatching("page_podcast#{$reblogStatus->actor->podcast->id}*"); } }); /** - * @param Note $reply + * @param Status $reply */ -Events::on('on_note_reply', function ($reply): void { - $note = $reply->reply_to_note; +Events::on('on_status_reply', function ($reply): void { + $status = $reply->reply_to_status; - if ($note->actor->is_podcast) { + if ($status->actor->is_podcast) { cache() - ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + ->deleteMatching("podcast#{$status->actor->podcast->id}*"); cache() - ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); + ->deleteMatching("page_podcast#{$status->actor->podcast->id}*"); } cache() - ->deleteMatching("page_note#{$note->id}*"); + ->deleteMatching("page_status#{$status->id}*"); }); /** - * @param Note $reply + * @param Status $reply */ Events::on('on_reply_remove', function ($reply): void { - $note = $reply->reply_to_note; + $status = $reply->reply_to_status; - if ($note->actor->is_podcast) { + if ($status->actor->is_podcast) { cache() - ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); + ->deleteMatching("page_podcast#{$status->actor->podcast->id}*"); cache() - ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + ->deleteMatching("podcast#{$status->actor->podcast->id}*"); } cache() - ->deleteMatching("page_note#{$note->id}*"); + ->deleteMatching("page_status#{$status->id}*"); cache() - ->deleteMatching("page_note#{$reply->id}*"); + ->deleteMatching("page_status#{$reply->id}*"); }); /** * @param Actor $actor - * @param Note $note + * @param Status $status */ -Events::on('on_note_favourite', function ($actor, $note): void { - if ($note->episode_id) { +Events::on('on_status_favourite', function ($actor, $status): void { + if ($status->episode_id) { model('EpisodeModel') - ->where('id', $note->episode_id) + ->where('id', $status->episode_id) ->increment('favourites_total'); } - if ($note->actor->is_podcast) { + if ($status->actor->is_podcast) { cache() - ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + ->deleteMatching("podcast#{$status->actor->podcast->id}*"); cache() - ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); + ->deleteMatching("page_podcast#{$status->actor->podcast->id}*"); } cache() - ->deleteMatching("page_note#{$note->id}*"); + ->deleteMatching("page_status#{$status->id}*"); - if ($note->in_reply_to_id !== null) { - cache()->deleteMatching("page_note#{$note->in_reply_to_id}*"); + if ($status->in_reply_to_id !== null) { + cache()->deleteMatching("page_status#{$status->in_reply_to_id}*"); } if ($actor->is_podcast) { @@ -321,27 +321,27 @@ Events::on('on_note_favourite', function ($actor, $note): void { /** * @param Actor $actor - * @param Note $note + * @param Status $status */ -Events::on('on_note_undo_favourite', function ($actor, $note): void { - if ($note->episode_id) { +Events::on('on_status_undo_favourite', function ($actor, $status): void { + if ($status->episode_id) { model('EpisodeModel') - ->where('id', $note->episode_id) + ->where('id', $status->episode_id) ->decrement('favourites_total'); } - if ($note->actor->is_podcast) { + if ($status->actor->is_podcast) { cache() - ->deleteMatching("podcast#{$note->actor->podcast->id}*"); + ->deleteMatching("podcast#{$status->actor->podcast->id}*"); cache() - ->deleteMatching("page_podcast#{$note->actor->podcast->id}*"); + ->deleteMatching("page_podcast#{$status->actor->podcast->id}*"); } cache() - ->deleteMatching("page_note#{$note->id}*"); + ->deleteMatching("page_status#{$status->id}*"); - if ($note->in_reply_to_id !== null) { - cache()->deleteMatching("page_note#{$note->in_reply_to_id}*"); + if ($status->in_reply_to_id !== null) { + cache()->deleteMatching("page_status#{$status->in_reply_to_id}*"); } if ($actor->is_podcast) { @@ -356,7 +356,7 @@ Events::on('on_block_actor', function (int $actorId): void { cache() ->deleteMatching('podcast*'); cache() - ->deleteMatching('page_note*'); + ->deleteMatching('page_status*'); }); Events::on('on_unblock_actor', function (int $actorId): void { @@ -364,7 +364,7 @@ Events::on('on_unblock_actor', function (int $actorId): void { cache() ->deleteMatching('podcast*'); cache() - ->deleteMatching('page_note*'); + ->deleteMatching('page_status*'); }); Events::on('on_block_domain', function (string $domainName): void { @@ -372,7 +372,7 @@ Events::on('on_block_domain', function (string $domainName): void { cache() ->deleteMatching('podcast*'); cache() - ->deleteMatching('page_note*'); + ->deleteMatching('page_status*'); }); Events::on('on_unblock_domain', function (string $domainName): void { @@ -380,5 +380,5 @@ Events::on('on_unblock_domain', function (string $domainName): void { cache() ->deleteMatching('podcast*'); cache() - ->deleteMatching('page_note*'); + ->deleteMatching('page_status*'); }); diff --git a/app/Config/Routes.php b/app/Config/Routes.php index edef6a7ed6..f93778a8da 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -35,7 +35,7 @@ $routes->addPlaceholder('podcastName', '[a-zA-Z0-9\_]{1,32}'); $routes->addPlaceholder('slug', '[a-zA-Z0-9\-]{1,191}'); $routes->addPlaceholder('base64', '[A-Za-z0-9\.\_]+\-{0,2}'); $routes->addPlaceholder('platformType', '\bpodcasting|\bsocial|\bfunding'); -$routes->addPlaceholder('noteAction', '\bfavourite|\breblog|\breply'); +$routes->addPlaceholder('statusAction', '\bfavourite|\breblog|\breply'); $routes->addPlaceholder('embeddablePlayerTheme', '\blight|\bdark|\blight-transparent|\bdark-transparent'); $routes->addPlaceholder( 'uuid', @@ -746,71 +746,71 @@ $routes->post('interact-as-actor', 'AuthController::attemptInteractAsActor', [ * Overwriting ActivityPub routes file */ $routes->group('@(:podcastName)', function ($routes): void { - $routes->post('notes/new', 'NoteController::attemptCreate/$1', [ - 'as' => 'note-attempt-create', + $routes->post('statuses/new', 'StatusController::attemptCreate/$1', [ + 'as' => 'status-attempt-create', 'filter' => 'permission:podcast-manage_publications', ]); - // Note - $routes->group('notes/(:uuid)', function ($routes): void { - $routes->get('/', 'NoteController::view/$1/$2', [ - 'as' => 'note', + // Status + $routes->group('statuses/(:uuid)', function ($routes): void { + $routes->get('/', 'StatusController::view/$1/$2', [ + 'as' => 'status', 'alternate-content' => [ 'application/activity+json' => [ 'namespace' => 'ActivityPub\Controllers', - 'controller-method' => 'NoteController/$2', + 'controller-method' => 'StatusController/$2', ], 'application/ld+json; profile="https://www.w3.org/ns/activitystreams' => [ 'namespace' => 'ActivityPub\Controllers', - 'controller-method' => 'NoteController/$2', + 'controller-method' => 'StatusController/$2', ], ], ]); - $routes->get('replies', 'NoteController/$1/$2', [ - 'as' => 'note-replies', + $routes->get('replies', 'StatusController/$1/$2', [ + 'as' => 'status-replies', 'alternate-content' => [ 'application/activity+json' => [ 'namespace' => 'ActivityPub\Controllers', - 'controller-method' => 'NoteController::replies/$2', + 'controller-method' => 'StatusController::replies/$2', ], 'application/ld+json; profile="https://www.w3.org/ns/activitystreams' => [ 'namespace' => 'ActivityPub\Controllers', - 'controller-method' => 'NoteController::replies/$2', + 'controller-method' => 'StatusController::replies/$2', ], ], ]); // Actions - $routes->post('action', 'NoteController::attemptAction/$1/$2', [ - 'as' => 'note-attempt-action', + $routes->post('action', 'StatusController::attemptAction/$1/$2', [ + 'as' => 'status-attempt-action', 'filter' => 'permission:podcast-interact_as', ]); $routes->post( 'block-actor', - 'NoteController::attemptBlockActor/$1/$2', + 'StatusController::attemptBlockActor/$1/$2', [ - 'as' => 'note-attempt-block-actor', + 'as' => 'status-attempt-block-actor', 'filter' => 'permission:fediverse-block_actors', ], ); $routes->post( 'block-domain', - 'NoteController::attemptBlockDomain/$1/$2', + 'StatusController::attemptBlockDomain/$1/$2', [ - 'as' => 'note-attempt-block-domain', + 'as' => 'status-attempt-block-domain', 'filter' => 'permission:fediverse-block_domains', ], ); - $routes->post('delete', 'NoteController::attemptDelete/$1/$2', [ - 'as' => 'note-attempt-delete', + $routes->post('delete', 'StatusController::attemptDelete/$1/$2', [ + 'as' => 'status-attempt-delete', 'filter' => 'permission:podcast-manage_publications', ]); $routes->get( - 'remote/(:noteAction)', - 'NoteController::remoteAction/$1/$2/$3', + 'remote/(:statusAction)', + 'StatusController::remoteAction/$1/$2/$3', [ - 'as' => 'note-remote-action', + 'as' => 'status-remote-action', ], ); }); diff --git a/app/Controllers/Admin/EpisodeController.php b/app/Controllers/Admin/EpisodeController.php index 18484c75e9..28ad1a8560 100644 --- a/app/Controllers/Admin/EpisodeController.php +++ b/app/Controllers/Admin/EpisodeController.php @@ -13,12 +13,12 @@ namespace App\Controllers\Admin; use App\Entities\Episode; use App\Entities\Image; use App\Entities\Location; -use App\Entities\Note; use App\Entities\Podcast; +use App\Entities\Status; use App\Models\EpisodeModel; -use App\Models\NoteModel; use App\Models\PodcastModel; use App\Models\SoundbiteModel; +use App\Models\StatusModel; use CodeIgniter\Exceptions\PageNotFoundException; use CodeIgniter\HTTP\RedirectResponse; use CodeIgniter\I18n\Time; @@ -426,7 +426,7 @@ class EpisodeController extends BaseController $db = db_connect(); $db->transStart(); - $newNote = new Note([ + $newStatus = new Status([ 'actor_id' => $this->podcast->actor_id, 'episode_id' => $this->episode->id, 'message' => $this->request->getPost('message'), @@ -453,15 +453,15 @@ class EpisodeController extends BaseController $this->episode->published_at = Time::now(); } - $newNote->published_at = $this->episode->published_at; + $newStatus->published_at = $this->episode->published_at; - $noteModel = new NoteModel(); - if (! $noteModel->addNote($newNote)) { + $statusModel = new StatusModel(); + if (! $statusModel->addStatus($newStatus)) { $db->transRollback(); return redirect() ->back() ->withInput() - ->with('errors', $noteModel->errors()); + ->with('errors', $statusModel->errors()); } $episodeModel = new EpisodeModel(); @@ -486,7 +486,7 @@ class EpisodeController extends BaseController $data = [ 'podcast' => $this->podcast, 'episode' => $this->episode, - 'note' => (new NoteModel()) + 'status' => (new StatusModel()) ->where([ 'actor_id' => $this->podcast->actor_id, 'episode_id' => $this->episode->id, @@ -506,7 +506,7 @@ class EpisodeController extends BaseController public function attemptPublishEdit(): RedirectResponse { $rules = [ - 'note_id' => 'required', + 'status_id' => 'required', 'publication_method' => 'required', 'scheduled_publication_date' => 'valid_date[Y-m-d H:i]|permit_empty', @@ -542,19 +542,19 @@ class EpisodeController extends BaseController $this->episode->published_at = Time::now(); } - $note = (new NoteModel())->getNoteById($this->request->getPost('note_id')); + $status = (new StatusModel())->getStatusById($this->request->getPost('status_id')); - if ($note !== null) { - $note->message = $this->request->getPost('message'); - $note->published_at = $this->episode->published_at; + if ($status !== null) { + $status->message = $this->request->getPost('message'); + $status->published_at = $this->episode->published_at; - $noteModel = new NoteModel(); - if (! $noteModel->editNote($note)) { + $statusModel = new StatusModel(); + if (! $statusModel->editStatus($status)) { $db->transRollback(); return redirect() ->back() ->withInput() - ->with('errors', $noteModel->errors()); + ->with('errors', $statusModel->errors()); } } @@ -609,13 +609,13 @@ class EpisodeController extends BaseController $db->transStart(); - $allNotesLinkedToEpisode = (new NoteModel()) + $allStatusesLinkedToEpisode = (new StatusModel()) ->where([ 'episode_id' => $this->episode->id, ]) ->findAll(); - foreach ($allNotesLinkedToEpisode as $note) { - (new NoteModel())->removeNote($note); + foreach ($allStatusesLinkedToEpisode as $status) { + (new StatusModel())->removeStatus($status); } // set episode published_at to null to unpublish diff --git a/app/Controllers/PodcastController.php b/app/Controllers/PodcastController.php index b3dd5351da..c87027463d 100644 --- a/app/Controllers/PodcastController.php +++ b/app/Controllers/PodcastController.php @@ -13,8 +13,8 @@ namespace App\Controllers; use Analytics\AnalyticsTrait; use App\Entities\Podcast; use App\Models\EpisodeModel; -use App\Models\NoteModel; use App\Models\PodcastModel; +use App\Models\StatusModel; use CodeIgniter\Exceptions\PageNotFoundException; class PodcastController extends BaseController @@ -64,7 +64,7 @@ class PodcastController extends BaseController if (! ($cachedView = cache($cacheName))) { $data = [ 'podcast' => $this->podcast, - 'notes' => (new NoteModel())->getActorPublishedNotes($this->podcast->actor_id), + 'statuses' => (new StatusModel())->getActorPublishedStatuses($this->podcast->actor_id), ]; // if user is logged in then send to the authenticated activity view diff --git a/app/Controllers/NoteController.php b/app/Controllers/StatusController.php similarity index 77% rename from app/Controllers/NoteController.php rename to app/Controllers/StatusController.php index 39831e1cf6..9d19f136f2 100644 --- a/app/Controllers/NoteController.php +++ b/app/Controllers/StatusController.php @@ -10,21 +10,21 @@ declare(strict_types=1); namespace App\Controllers; -use ActivityPub\Controllers\NoteController as ActivityPubNoteController; -use ActivityPub\Entities\Note as ActivityPubNote; +use ActivityPub\Controllers\StatusController as ActivityPubStatusController; +use ActivityPub\Entities\Status as ActivityPubStatus; use Analytics\AnalyticsTrait; use App\Entities\Actor; -use App\Entities\Note as CastopodNote; use App\Entities\Podcast; +use App\Entities\Status as CastopodStatus; use App\Models\EpisodeModel; -use App\Models\NoteModel; use App\Models\PodcastModel; +use App\Models\StatusModel; use CodeIgniter\Exceptions\PageNotFoundException; use CodeIgniter\HTTP\RedirectResponse; use CodeIgniter\HTTP\URI; use CodeIgniter\I18n\Time; -class NoteController extends ActivityPubNoteController +class StatusController extends ActivityPubStatusController { use AnalyticsTrait; @@ -50,9 +50,9 @@ class NoteController extends ActivityPubNoteController if ( count($params) > 1 && - ($note = (new NoteModel())->getNoteById($params[1])) !== null + ($status = (new StatusModel())->getStatusById($params[1])) !== null ) { - $this->note = $note; + $this->status = $status; unset($params[0]); unset($params[1]); @@ -72,7 +72,7 @@ class NoteController extends ActivityPubNoteController '_', array_filter([ 'page', - "note#{$this->note->id}", + "status#{$this->status->id}", service('request') ->getLocale(), can_user_interact() ? '_authenticated' : null, @@ -83,15 +83,15 @@ class NoteController extends ActivityPubNoteController $data = [ 'podcast' => $this->podcast, 'actor' => $this->actor, - 'note' => $this->note, + 'status' => $this->status, ]; // if user is logged in then send to the authenticated activity view if (can_user_interact()) { helper('form'); - return view('podcast/note_authenticated', $data); + return view('podcast/status_authenticated', $data); } - return view('podcast/note', $data, [ + return view('podcast/status', $data, [ 'cache' => DECADE, 'cache_name' => $cacheName, ]); @@ -116,7 +116,7 @@ class NoteController extends ActivityPubNoteController $message = $this->request->getPost('message'); - $newNote = new CastopodNote([ + $newStatus = new CastopodStatus([ 'actor_id' => interact_as_actor_id(), 'published_at' => Time::now(), 'created_by' => user_id(), @@ -129,23 +129,23 @@ class NoteController extends ActivityPubNoteController ($params = extract_params_from_episode_uri(new URI($episodeUri))) && ($episode = (new EpisodeModel())->getEpisodeBySlug($params['podcastName'], $params['episodeSlug'])) ) { - $newNote->episode_id = $episode->id; + $newStatus->episode_id = $episode->id; } - $newNote->message = $message; + $newStatus->message = $message; - $noteModel = new NoteModel(); + $statusModel = new StatusModel(); if ( - ! $noteModel - ->addNote($newNote, ! (bool) $newNote->episode_id, true) + ! $statusModel + ->addStatus($newStatus, ! (bool) $newStatus->episode_id, true) ) { return redirect() ->back() ->withInput() - ->with('errors', $noteModel->errors()); + ->with('errors', $statusModel->errors()); } - // Note has been successfully created + // Status has been successfully created return redirect()->back(); } @@ -162,36 +162,36 @@ class NoteController extends ActivityPubNoteController ->with('errors', $this->validator->getErrors()); } - $newNote = new ActivityPubNote([ + $newStatus = new ActivityPubStatus([ 'actor_id' => interact_as_actor_id(), - 'in_reply_to_id' => $this->note->id, + 'in_reply_to_id' => $this->status->id, 'message' => $this->request->getPost('message'), 'published_at' => Time::now(), 'created_by' => user_id(), ]); - $noteModel = new NoteModel(); - if (! $noteModel->addReply($newNote)) { + $statusModel = new StatusModel(); + if (! $statusModel->addReply($newStatus)) { return redirect() ->back() ->withInput() - ->with('errors', $noteModel->errors()); + ->with('errors', $statusModel->errors()); } - // Reply note without preview card has been successfully created + // Reply status without preview card has been successfully created return redirect()->back(); } public function attemptFavourite(): RedirectResponse { - model('FavouriteModel')->toggleFavourite(interact_as_actor(), $this->note); + model('FavouriteModel')->toggleFavourite(interact_as_actor(), $this->status); return redirect()->back(); } public function attemptReblog(): RedirectResponse { - (new NoteModel())->toggleReblog(interact_as_actor(), $this->note); + (new StatusModel())->toggleReblog(interact_as_actor(), $this->status); return redirect()->back(); } @@ -230,20 +230,20 @@ class NoteController extends ActivityPubNoteController $cacheName = implode( '_', - array_filter(['page', "note#{$this->note->id}", "remote_{$action}", service('request') ->getLocale()]), + array_filter(['page', "status#{$this->status->id}", "remote_{$action}", service('request') ->getLocale()]), ); if (! ($cachedView = cache($cacheName))) { $data = [ 'podcast' => $this->podcast, 'actor' => $this->actor, - 'note' => $this->note, + 'status' => $this->status, 'action' => $action, ]; helper('form'); - return view('podcast/note_remote_action', $data, [ + return view('podcast/status_remote_action', $data, [ 'cache' => DECADE, 'cache_name' => $cacheName, ]); diff --git a/app/Database/Migrations/2020-06-05-170000_add_episodes.php b/app/Database/Migrations/2020-06-05-170000_add_episodes.php index e54794a60a..a6d517966a 100644 --- a/app/Database/Migrations/2020-06-05-170000_add_episodes.php +++ b/app/Database/Migrations/2020-06-05-170000_add_episodes.php @@ -157,7 +157,7 @@ class AddEpisodes extends Migration 'unsigned' => true, 'default' => 0, ], - 'notes_total' => [ + 'statuses_total' => [ 'type' => 'INT', 'unsigned' => true, 'default' => 0, diff --git a/app/Database/Migrations/2021-02-23-100000_add_episode_id_to_notes.php b/app/Database/Migrations/2021-02-23-100000_add_episode_id_to_statuses.php similarity index 52% rename from app/Database/Migrations/2021-02-23-100000_add_episode_id_to_notes.php rename to app/Database/Migrations/2021-02-23-100000_add_episode_id_to_statuses.php index 958b011904..a81a782f88 100644 --- a/app/Database/Migrations/2021-02-23-100000_add_episode_id_to_notes.php +++ b/app/Database/Migrations/2021-02-23-100000_add_episode_id_to_statuses.php @@ -3,7 +3,7 @@ declare(strict_types=1); /** - * Class AddEpisodeIdToNotes Adds episode_id field to activitypub_notes table in database + * Class AddEpisodeIdToStatuses Adds episode_id field to activitypub_statuses table in database * * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -14,23 +14,23 @@ namespace App\Database\Migrations; use CodeIgniter\Database\Migration; -class AddEpisodeIdToNotes extends Migration +class AddEpisodeIdToStatuses extends Migration { public function up(): void { $prefix = $this->db->getPrefix(); $createQuery = <<<CODE_SAMPLE - ALTER TABLE {$prefix}activitypub_notes + ALTER TABLE {$prefix}activitypub_statuses ADD COLUMN `episode_id` INT UNSIGNED NULL AFTER `replies_count`, - ADD FOREIGN KEY {$prefix}activitypub_notes_episode_id_foreign(episode_id) REFERENCES {$prefix}episodes(id) ON DELETE CASCADE; + ADD FOREIGN KEY {$prefix}activitypub_statuses_episode_id_foreign(episode_id) REFERENCES {$prefix}episodes(id) ON DELETE CASCADE; CODE_SAMPLE; $this->db->query($createQuery); } public function down(): void { - $this->forge->dropForeignKey('activitypub_notes', 'activitypub_notes_episode_id_foreign'); - $this->forge->dropColumn('activitypub_notes', 'episode_id'); + $this->forge->dropForeignKey('activitypub_statuses', 'activitypub_statuses_episode_id_foreign'); + $this->forge->dropColumn('activitypub_statuses', 'episode_id'); } } diff --git a/app/Database/Migrations/2021-03-09-113000_add_created_by_to_notes.php b/app/Database/Migrations/2021-03-09-113000_add_created_by_to_statuses.php similarity index 52% rename from app/Database/Migrations/2021-03-09-113000_add_created_by_to_notes.php rename to app/Database/Migrations/2021-03-09-113000_add_created_by_to_statuses.php index 496bf90236..2f9a29d6e4 100644 --- a/app/Database/Migrations/2021-03-09-113000_add_created_by_to_notes.php +++ b/app/Database/Migrations/2021-03-09-113000_add_created_by_to_statuses.php @@ -3,7 +3,7 @@ declare(strict_types=1); /** - * Class AddCreatedByToNotes Adds created_by field to activitypub_notes table in database + * Class AddCreatedByToStatuses Adds created_by field to activitypub_statuses table in database * * @copyright 2020 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -14,23 +14,23 @@ namespace App\Database\Migrations; use CodeIgniter\Database\Migration; -class AddCreatedByToNotes extends Migration +class AddCreatedByToStatuses extends Migration { public function up(): void { $prefix = $this->db->getPrefix(); $createQuery = <<<CODE_SAMPLE - ALTER TABLE {$prefix}activitypub_notes + ALTER TABLE {$prefix}activitypub_statuses ADD COLUMN `created_by` INT UNSIGNED AFTER `episode_id`, - ADD FOREIGN KEY {$prefix}activitypub_notes_created_by_foreign(created_by) REFERENCES {$prefix}users(id) ON DELETE CASCADE; + ADD FOREIGN KEY {$prefix}activitypub_statuses_created_by_foreign(created_by) REFERENCES {$prefix}users(id) ON DELETE CASCADE; CODE_SAMPLE; $this->db->query($createQuery); } public function down(): void { - $this->forge->dropForeignKey('activitypub_notes', 'activitypub_notes_created_by_foreign'); - $this->forge->dropColumn('activitypub_notes', 'created_by'); + $this->forge->dropForeignKey('activitypub_statuses', 'activitypub_statuses_created_by_foreign'); + $this->forge->dropColumn('activitypub_statuses', 'created_by'); } } diff --git a/app/Database/Seeds/AuthSeeder.php b/app/Database/Seeds/AuthSeeder.php index 88e4baa803..1e46d1ad58 100644 --- a/app/Database/Seeds/AuthSeeder.php +++ b/app/Database/Seeds/AuthSeeder.php @@ -162,13 +162,13 @@ class AuthSeeder extends Seeder [ 'name' => 'manage_publications', 'description' => - 'Publish / unpublish episodes & notes of a podcast', + 'Publish / unpublish episodes & statuses of a podcast', 'has_permission' => ['podcast_admin'], ], [ 'name' => 'interact_as', 'description' => - 'Interact as the podcast to favourite / share or reply to notes.', + 'Interact as the podcast to favourite / share or reply to statuses.', 'has_permission' => ['podcast_admin'], ], ], diff --git a/app/Entities/Episode.php b/app/Entities/Episode.php index 8760dd4a65..c10cbb17b0 100644 --- a/app/Entities/Episode.php +++ b/app/Entities/Episode.php @@ -11,10 +11,10 @@ declare(strict_types=1); namespace App\Entities; use App\Libraries\SimpleRSSElement; -use App\Models\NoteModel; use App\Models\PersonModel; use App\Models\PodcastModel; use App\Models\SoundbiteModel; +use App\Models\StatusModel; use CodeIgniter\Entity\Entity; use CodeIgniter\Files\File; use CodeIgniter\HTTP\Files\UploadedFile; @@ -67,7 +67,7 @@ use RuntimeException; * @property string $custom_rss_string * @property int $favourites_total * @property int $reblogs_total - * @property int $notes_total + * @property int $statuses_total * @property int $created_by * @property int $updated_by * @property string $publication_status; @@ -117,9 +117,9 @@ class Episode extends Entity protected ?array $soundbites = null; /** - * @var Note[]|null + * @var Status[]|null */ - protected ?array $notes = null; + protected ?array $statuses = null; protected ?Location $location = null; @@ -165,7 +165,7 @@ class Episode extends Entity 'custom_rss' => '?json-array', 'favourites_total' => 'integer', 'reblogs_total' => 'integer', - 'notes_total' => 'integer', + 'statuses_total' => 'integer', 'created_by' => 'integer', 'updated_by' => 'integer', ]; @@ -382,19 +382,19 @@ class Episode extends Entity } /** - * @return Note[] + * @return Status[] */ - public function getNotes(): array + public function getStatuses(): array { if ($this->id === null) { throw new RuntimeException('Episode must be created before getting soundbites.'); } - if ($this->notes === null) { - $this->notes = (new NoteModel())->getEpisodeNotes($this->id); + if ($this->statuses === null) { + $this->statuses = (new StatusModel())->getEpisodeStatuses($this->id); } - return $this->notes; + return $this->statuses; } public function getLink(): string diff --git a/app/Entities/Note.php b/app/Entities/Status.php similarity index 83% rename from app/Entities/Note.php rename to app/Entities/Status.php index 5dc0c8bde8..4e39e359df 100644 --- a/app/Entities/Note.php +++ b/app/Entities/Status.php @@ -10,7 +10,7 @@ declare(strict_types=1); namespace App\Entities; -use ActivityPub\Entities\Note as ActivityPubNote; +use ActivityPub\Entities\Status as ActivityPubStatus; use App\Models\EpisodeModel; use RuntimeException; @@ -18,7 +18,7 @@ use RuntimeException; * @property int|null $episode_id * @property Episode|null $episode */ -class Note extends ActivityPubNote +class Status extends ActivityPubStatus { protected ?Episode $episode = null; @@ -41,12 +41,12 @@ class Note extends ActivityPubNote ]; /** - * Returns the note's attached episode + * Returns the status' attached episode */ public function getEpisode(): ?Episode { if ($this->episode_id === null) { - throw new RuntimeException('Note must have an episode_id before getting episode.'); + throw new RuntimeException('Status must have an episode_id before getting episode.'); } if ($this->episode === null) { diff --git a/app/Language/en/Episode.php b/app/Language/en/Episode.php index 0226b6eaa8..80fe2ec76e 100644 --- a/app/Language/en/Episode.php +++ b/app/Language/en/Episode.php @@ -26,7 +26,7 @@ return [ one {# total share} other {# total shares} }', - 'total_notes' => '{numberOfTotalNotes, plural, + 'total_statuses' => '{numberOfTotalStatuses, plural, one {# note} other {# total notes} }', @@ -112,8 +112,8 @@ return [ 'submit_edit' => 'Save episode', ], 'publish_form' => [ - 'note' => 'Your note', - 'note_hint' => + 'status' => 'Your note', + 'status_hint' => 'The message you write will be broadcasted to all your followers in the fediverse.', 'publication_date' => 'Publication date', 'publication_method' => [ diff --git a/app/Language/en/Podcast.php b/app/Language/en/Podcast.php index 03e857a4af..fa9279f421 100644 --- a/app/Language/en/Podcast.php +++ b/app/Language/en/Podcast.php @@ -223,7 +223,7 @@ return [ one {<span class="font-semibold">#</span> follower} other {<span class="font-semibold">#</span> followers} }', - 'notes' => '{numberOfNotes, plural, + 'statuses' => '{numberOfStatuses, plural, one {<span class="font-semibold">#</span> note} other {<span class="font-semibold">#</span> notes} }', diff --git a/app/Language/en/Note.php b/app/Language/en/Status.php similarity index 95% rename from app/Language/en/Note.php rename to app/Language/en/Status.php index 7a6cca3c01..8fa9bcdcc3 100644 --- a/app/Language/en/Note.php +++ b/app/Language/en/Status.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'title' => "{actorDisplayName}'s Note", - 'back_to_actor_notes' => 'Back to {actor} notes', + 'back_to_actor_statuses' => 'Back to {actor} notes', 'actor_shared' => '{actor} shared', 'reply_to' => 'Reply to @{actorUsername}', 'form' => [ diff --git a/app/Language/fr/Episode.php b/app/Language/fr/Episode.php index 9e360cbe69..86233cfa4d 100644 --- a/app/Language/fr/Episode.php +++ b/app/Language/fr/Episode.php @@ -26,7 +26,7 @@ return [ one {# partage en tout} other {# partages en tout} }', - 'total_notes' => '{numberOfTotalNotes, plural, + 'total_statuses' => '{numberOfTotalStatuses, plural, one {# note} other {# notes} }', @@ -115,8 +115,8 @@ return [ 'submit_edit' => 'Enregistrer l’épisode', ], 'publish_form' => [ - 'note' => 'Votre note', - 'note_hint' => + 'status' => 'Votre note', + 'status_hint' => 'Le message que vous écrirez sera diffusé à toutes les personnes qui vous suivent dans le fédiverse.', 'publication_date' => 'Date de publication', 'publication_date_clear' => 'Effacer la date de publication', diff --git a/app/Language/fr/Podcast.php b/app/Language/fr/Podcast.php index f01fc101dd..c93d2893d9 100644 --- a/app/Language/fr/Podcast.php +++ b/app/Language/fr/Podcast.php @@ -225,7 +225,7 @@ return [ one {<span class="font-semibold">#</span> abonné·e} other {<span class="font-semibold">#</span> abonné·e·s} }', - 'notes' => '{numberOfNotes, plural, + 'notes' => '{numberOfStatuses, plural, one {<span class="font-semibold">#</span> note} other {<span class="font-semibold">#</span> notes} }', diff --git a/app/Language/fr/Note.php b/app/Language/fr/Status.php similarity index 95% rename from app/Language/fr/Note.php rename to app/Language/fr/Status.php index 682686f1ac..034308d637 100644 --- a/app/Language/fr/Note.php +++ b/app/Language/fr/Status.php @@ -10,7 +10,7 @@ declare(strict_types=1); return [ 'title' => 'Note de {actorDisplayName}', - 'back_to_actor_notes' => 'Retour aux notes de {actor}', + 'back_to_actor_statuses' => 'Retour aux notes de {actor}', 'actor_shared' => '{actor} a partagé', 'reply_to' => 'Répondre à @{actorUsername}', 'form' => [ diff --git a/app/Libraries/ActivityPub/Activities/AnnounceActivity.php b/app/Libraries/ActivityPub/Activities/AnnounceActivity.php index d258c46a31..3eb4ba5097 100644 --- a/app/Libraries/ActivityPub/Activities/AnnounceActivity.php +++ b/app/Libraries/ActivityPub/Activities/AnnounceActivity.php @@ -14,19 +14,19 @@ declare(strict_types=1); namespace ActivityPub\Activities; use ActivityPub\Core\Activity; -use ActivityPub\Entities\Note; +use ActivityPub\Entities\Status; class AnnounceActivity extends Activity { protected string $type = 'Announce'; - public function __construct(Note $reblogNote) + public function __construct(Status $reblogStatus) { - $this->actor = $reblogNote->actor->uri; - $this->object = $reblogNote->reblog_of_note->uri; + $this->actor = $reblogStatus->actor->uri; + $this->object = $reblogStatus->reblog_of_status->uri; - $this->published = $reblogNote->published_at->format(DATE_W3C); + $this->published = $reblogStatus->published_at->format(DATE_W3C); - $this->cc = [$reblogNote->actor->uri, $reblogNote->actor->followers_url]; + $this->cc = [$reblogStatus->actor->uri, $reblogStatus->actor->followers_url]; } } diff --git a/app/Libraries/ActivityPub/Config/Routes.php b/app/Libraries/ActivityPub/Config/Routes.php index fede909495..a667e7219b 100644 --- a/app/Libraries/ActivityPub/Config/Routes.php +++ b/app/Libraries/ActivityPub/Config/Routes.php @@ -13,7 +13,7 @@ $routes->addPlaceholder( 'uuid', '[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-4[0-9A-Fa-f]{3}-[89ABab][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}', ); -$routes->addPlaceholder('noteAction', '\bfavourite|\breblog|\breply'); +$routes->addPlaceholder('statusAction', '\bfavourite|\breblog|\breply'); /** * ActivityPub routes file @@ -54,24 +54,24 @@ $routes->group('', [ ]); }); - // Note - $routes->post('notes/new', 'NoteController::attemptCreate/$1', [ - 'as' => 'note-attempt-create', + // Status + $routes->post('statuses/new', 'StatusController::attemptCreate/$1', [ + 'as' => 'status-attempt-create', ]); - $routes->get('notes/(:uuid)', 'NoteController/$1', [ - 'as' => 'note', + $routes->get('statuses/(:uuid)', 'StatusController/$1', [ + 'as' => 'status', ]); - $routes->get('notes/(:uuid)/replies', 'NoteController/$1', [ - 'as' => 'note-replies', + $routes->get('statuses/(:uuid)/replies', 'StatusController/$1', [ + 'as' => 'status-replies', ]); $routes->post( - 'notes/(:uuid)/remote/(:noteAction)', - 'NoteController::attemptRemoteAction/$1/$2/$3', + 'statuses/(:uuid)/remote/(:statusAction)', + 'StatusController::attemptRemoteAction/$1/$2/$3', [ - 'as' => 'note-attempt-remote-action', + 'as' => 'status-attempt-remote-action', ], ); diff --git a/app/Libraries/ActivityPub/Controllers/ActorController.php b/app/Libraries/ActivityPub/Controllers/ActorController.php index 41ab1e1f35..6bb9167cb9 100644 --- a/app/Libraries/ActivityPub/Controllers/ActorController.php +++ b/app/Libraries/ActivityPub/Controllers/ActorController.php @@ -12,7 +12,7 @@ namespace ActivityPub\Controllers; use ActivityPub\Config\ActivityPub; use ActivityPub\Entities\Actor; -use ActivityPub\Entities\Note; +use ActivityPub\Entities\Status; use ActivityPub\Objects\OrderedCollectionObject; use ActivityPub\Objects\OrderedCollectionPage; use CodeIgniter\Controller; @@ -101,30 +101,30 @@ class ActorController extends Controller ->setJSON([]); } - $replyToNote = model('NoteModel') - ->getNoteByUri($payload->object->inReplyTo); + $replyToStatus = model('StatusModel') + ->getStatusByUri($payload->object->inReplyTo); $reply = null; - if ($replyToNote !== null) { + if ($replyToStatus !== null) { // TODO: strip content from html to retrieve message // remove all html tags and reconstruct message with mentions? extract_text_from_html($payload->object->content); - $reply = new Note([ + $reply = new Status([ 'uri' => $payload->object->id, 'actor_id' => $payloadActor->id, - 'in_reply_to_id' => $replyToNote->id, + 'in_reply_to_id' => $replyToStatus->id, 'message' => $payload->object->content, 'published_at' => Time::parse($payload->object->published), ]); } if ($reply !== null) { - $noteId = model('NoteModel') + $statusId = model('StatusModel') ->addReply($reply, true, false); model('ActivityModel') ->update($activityId, [ - 'note_id' => $noteId, + 'status_id' => $statusId, ]); } @@ -135,12 +135,12 @@ class ActorController extends Controller return $this->response->setStatusCode(501) ->setJSON([]); case 'Delete': - $noteToDelete = model('NoteModel') - ->getNoteByUri($payload->object->id); + $statusToDelete = model('StatusModel') + ->getStatusByUri($payload->object->id); - if ($noteToDelete !== null) { - model('NoteModel') - ->removeNote($noteToDelete, false); + if ($statusToDelete !== null) { + model('StatusModel') + ->removeStatus($statusToDelete, false); } return $this->response->setStatusCode(200) @@ -158,35 +158,35 @@ class ActorController extends Controller ->setJSON([]); case 'Like': - // get favourited note - $note = model('NoteModel') - ->getNoteByUri($payload->object); + // get favourited status + $status = model('StatusModel') + ->getStatusByUri($payload->object); - if ($note !== null) { + if ($status !== null) { // Like side-effect model('FavouriteModel') - ->addFavourite($payloadActor, $note, false); + ->addFavourite($payloadActor, $status, false); model('ActivityModel') ->update($activityId, [ - 'note_id' => $note->id, + 'status_id' => $status->id, ]); } return $this->response->setStatusCode(200) ->setJSON([]); case 'Announce': - $note = model('NoteModel') - ->getNoteByUri($payload->object); + $status = model('StatusModel') + ->getStatusByUri($payload->object); - if ($note !== null) { + if ($status !== null) { model('ActivityModel') ->update($activityId, [ - 'note_id' => $note->id, + 'status_id' => $status->id, ]); - model('NoteModel') - ->reblog($payloadActor, $note, false); + model('StatusModel') + ->reblog($payloadActor, $status, false); } return $this->response->setStatusCode(200) @@ -204,45 +204,45 @@ class ActorController extends Controller return $this->response->setStatusCode(202) ->setJSON([]); case 'Like': - $note = model('NoteModel') - ->getNoteByUri($payload->object->object); + $status = model('StatusModel') + ->getStatusByUri($payload->object->object); - if ($note !== null) { + if ($status !== null) { // revert side-effect by removing favourite from database model('FavouriteModel') - ->removeFavourite($payloadActor, $note, false); + ->removeFavourite($payloadActor, $status, false); model('ActivityModel') ->update($activityId, [ - 'note_id' => $note->id, + 'status_id' => $status->id, ]); } return $this->response->setStatusCode(200) ->setJSON([]); case 'Announce': - $note = model('NoteModel') - ->getNoteByUri($payload->object->object); + $status = model('StatusModel') + ->getStatusByUri($payload->object->object); - $reblogNote = null; - if ($note !== null) { - $reblogNote = model('NoteModel') + $reblogStatus = null; + if ($status !== null) { + $reblogStatus = model('StatusModel') ->where([ 'actor_id' => $payloadActor->id, 'reblog_of_id' => service('uuid') - ->fromString($note->id) + ->fromString($status->id) ->getBytes(), ]) ->first(); } - if ($reblogNote !== null) { - model('NoteModel') - ->undoReblog($reblogNote, false); + if ($reblogStatus !== null) { + model('StatusModel') + ->undoReblog($reblogStatus, false); model('ActivityModel') ->update($activityId, [ - 'note_id' => $note->id, + 'status_id' => $status->id, ]); } diff --git a/app/Libraries/ActivityPub/Controllers/SchedulerController.php b/app/Libraries/ActivityPub/Controllers/SchedulerController.php index 22abde21ac..057360a3f8 100644 --- a/app/Libraries/ActivityPub/Controllers/SchedulerController.php +++ b/app/Libraries/ActivityPub/Controllers/SchedulerController.php @@ -36,7 +36,7 @@ class SchedulerController extends Controller // set activity status to delivered model('ActivityModel') ->update($scheduledActivity->id, [ - 'status' => 'delivered', + 'task_status' => 'delivered', ]); } } diff --git a/app/Libraries/ActivityPub/Controllers/NoteController.php b/app/Libraries/ActivityPub/Controllers/StatusController.php similarity index 81% rename from app/Libraries/ActivityPub/Controllers/NoteController.php rename to app/Libraries/ActivityPub/Controllers/StatusController.php index 05b748d695..e43b433ed8 100644 --- a/app/Libraries/ActivityPub/Controllers/NoteController.php +++ b/app/Libraries/ActivityPub/Controllers/StatusController.php @@ -11,7 +11,7 @@ declare(strict_types=1); namespace ActivityPub\Controllers; use ActivityPub\Config\ActivityPub; -use ActivityPub\Entities\Note; +use ActivityPub\Entities\Status; use ActivityPub\Objects\OrderedCollectionObject; use ActivityPub\Objects\OrderedCollectionPage; use CodeIgniter\Controller; @@ -21,14 +21,14 @@ use CodeIgniter\HTTP\Response; use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\I18n\Time; -class NoteController extends Controller +class StatusController extends Controller { /** * @var string[] */ protected $helpers = ['activitypub']; - protected Note $note; + protected Status $status; protected ActivityPub $config; @@ -39,11 +39,11 @@ class NoteController extends Controller public function _remap(string $method, string ...$params): mixed { - if (($note = model('NoteModel')->getNoteById($params[0])) === null) { + if (($status = model('StatusModel')->getStatusById($params[0])) === null) { throw PageNotFoundException::forPageNotFound(); } - $this->note = $note; + $this->status = $status; unset($params[0]); @@ -56,7 +56,7 @@ class NoteController extends Controller public function index(): Response { $noteObjectClass = $this->config->noteObject; - $noteObject = new $noteObjectClass($this->note); + $noteObject = new $noteObjectClass($this->status); return $this->response ->setContentType('application/activity+json') @@ -69,22 +69,22 @@ class NoteController extends Controller public function replies(): Response { /** - * get note replies + * get status replies */ - $noteReplies = model('NoteModel') - ->where('in_reply_to_id', service('uuid') ->fromString($this->note->id) ->getBytes()) + $statusReplies = model('StatusModel') + ->where('in_reply_to_id', service('uuid') ->fromString($this->status->id) ->getBytes()) ->where('`published_at` <= NOW()', null, false) ->orderBy('published_at', 'ASC'); $pageNumber = (int) $this->request->getGet('page'); if ($pageNumber < 1) { - $noteReplies->paginate(12); - $pager = $noteReplies->pager; + $statusReplies->paginate(12); + $pager = $statusReplies->pager; $collection = new OrderedCollectionObject(null, $pager); } else { - $paginatedReplies = $noteReplies->paginate(12, 'default', $pageNumber); - $pager = $noteReplies->pager; + $paginatedReplies = $statusReplies->paginate(12, 'default', $pageNumber); + $pager = $statusReplies->pager; $orderedItems = []; $noteObjectClass = $this->config->noteObject; @@ -118,21 +118,21 @@ class NoteController extends Controller ->with('errors', $this->validator->getErrors()); } - $newNote = new Note([ + $newStatus = new Status([ 'actor_id' => $this->request->getPost('actor_id'), 'message' => $this->request->getPost('message'), 'published_at' => Time::now(), ]); - if (! model('NoteModel')->addNote($newNote)) { + if (! model('StatusModel')->addStatus($newStatus)) { return redirect() ->back() ->withInput() // TODO: translate - ->with('error', "Couldn't create Note"); + ->with('error', "Couldn't create Status"); } - // Note without preview card has been successfully created + // Status without preview card has been successfully created return redirect()->back(); } @@ -153,7 +153,7 @@ class NoteController extends Controller ->getActorById($this->request->getPost('actor_id')); model('FavouriteModel') - ->toggleFavourite($actor, $this->note->id); + ->toggleFavourite($actor, $this->status->id); return redirect()->back(); } @@ -174,8 +174,8 @@ class NoteController extends Controller $actor = model('ActorModel') ->getActorById($this->request->getPost('actor_id')); - model('NoteModel') - ->toggleReblog($actor, $this->note); + model('StatusModel') + ->toggleReblog($actor, $this->status); return redirect()->back(); } @@ -194,14 +194,14 @@ class NoteController extends Controller ->with('errors', $this->validator->getErrors()); } - $newReplyNote = new Note([ + $newReplyStatus = new Status([ 'actor_id' => $this->request->getPost('actor_id'), - 'in_reply_to_id' => $this->note->id, + 'in_reply_to_id' => $this->status->id, 'message' => $this->request->getPost('message'), 'published_at' => Time::now(), ]); - if (! model('NoteModel')->addReply($newReplyNote)) { + if (! model('StatusModel')->addReply($newReplyStatus)) { return redirect() ->back() ->withInput() @@ -209,7 +209,7 @@ class NoteController extends Controller ->with('error', "Couldn't create Reply"); } - // Reply note without preview card has been successfully created + // Reply status without preview card has been successfully created return redirect()->back(); } @@ -249,33 +249,33 @@ class NoteController extends Controller ); if (! $ostatusKey) { - // TODO: error, couldn't remote favourite/share/reply to note - // The instance doesn't allow its users remote actions on notes + // TODO: error, couldn't remote favourite/share/reply to status + // The instance doesn't allow its users remote actions on statuses return $this->response->setJSON([]); } return redirect()->to( - str_replace('{uri}', urlencode($this->note->uri), $data->links[$ostatusKey]->template), + str_replace('{uri}', urlencode($this->status->uri), $data->links[$ostatusKey]->template), ); } public function attemptBlockActor(): RedirectResponse { - model('ActorModel')->blockActor($this->note->actor->id); + model('ActorModel')->blockActor($this->status->actor->id); return redirect()->back(); } public function attemptBlockDomain(): RedirectResponse { - model('BlockedDomainModel')->blockDomain($this->note->actor->domain); + model('BlockedDomainModel')->blockDomain($this->status->actor->domain); return redirect()->back(); } public function attemptDelete(): RedirectResponse { - model('NoteModel', false)->removeNote($this->note); + model('StatusModel', false)->removeStatus($this->status); return redirect()->back(); } 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 23183a0d2c..4fcc297372 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 @@ -93,7 +93,7 @@ class AddActors extends Migration 'unsigned' => true, 'default' => 0, ], - 'notes_count' => [ + 'statuses_count' => [ 'type' => 'INT', 'unsigned' => true, 'default' => 0, diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-020000_add_notes.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-020000_add_statuses.php similarity index 87% rename from app/Libraries/ActivityPub/Database/Migrations/2018-01-01-020000_add_notes.php rename to app/Libraries/ActivityPub/Database/Migrations/2018-01-01-020000_add_statuses.php index 8ef29e060b..68fe53fc5b 100644 --- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-020000_add_notes.php +++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-020000_add_statuses.php @@ -3,7 +3,7 @@ declare(strict_types=1); /** - * Class AddNotes Creates activitypub_notes table in database + * Class AddStatuses Creates activitypub_statuses table in database * * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -14,7 +14,7 @@ namespace ActivityPub\Database\Migrations; use CodeIgniter\Database\Migration; -class AddNotes extends Migration +class AddStatuses extends Migration { public function up(): void { @@ -76,16 +76,16 @@ class AddNotes extends Migration ]); $this->forge->addPrimaryKey('id'); $this->forge->addUniqueKey('uri'); - // FIXME: an actor must reblog a note only once + // FIXME: an actor must reblog a status only once // $this->forge->addUniqueKey(['actor_id', 'reblog_of_id']); $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE'); - $this->forge->addForeignKey('in_reply_to_id', 'activitypub_notes', 'id', '', 'CASCADE'); - $this->forge->addForeignKey('reblog_of_id', 'activitypub_notes', 'id', '', 'CASCADE'); - $this->forge->createTable('activitypub_notes'); + $this->forge->addForeignKey('in_reply_to_id', 'activitypub_statuses', 'id', '', 'CASCADE'); + $this->forge->addForeignKey('reblog_of_id', 'activitypub_statuses', 'id', '', 'CASCADE'); + $this->forge->createTable('activitypub_statuses'); } public function down(): void { - $this->forge->dropTable('activitypub_notes'); + $this->forge->dropTable('activitypub_statuses'); } } diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_activities.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_activities.php index a20bafb53c..443a3ea9e6 100644 --- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_activities.php +++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_activities.php @@ -32,7 +32,7 @@ class AddActivities extends Migration 'unsigned' => true, 'null' => true, ], - 'note_id' => [ + 'status_id' => [ 'type' => 'BINARY', 'constraint' => 16, 'null' => true, @@ -44,7 +44,7 @@ class AddActivities extends Migration 'payload' => [ 'type' => 'JSON', ], - 'status' => [ + 'task_status' => [ 'type' => 'ENUM', 'constraint' => ['queued', 'delivered'], 'null' => true, @@ -62,7 +62,7 @@ class AddActivities extends Migration $this->forge->addPrimaryKey('id'); $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE'); $this->forge->addForeignKey('target_actor_id', 'activitypub_actors', 'id', '', 'CASCADE'); - $this->forge->addForeignKey('note_id', 'activitypub_notes', 'id', '', 'CASCADE'); + $this->forge->addForeignKey('status_id', 'activitypub_statuses', 'id', '', 'CASCADE'); $this->forge->createTable('activitypub_activities'); } diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_favourites.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_favourites.php index d3ff03a96f..049284bb8d 100644 --- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_favourites.php +++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-100000_add_favourites.php @@ -23,15 +23,15 @@ class AddFavourites extends Migration 'type' => 'INT', 'unsigned' => true, ], - 'note_id' => [ + 'status_id' => [ 'type' => 'BINARY', 'constraint' => 16, ], ]); $this->forge->addField('`created_at` timestamp NOT NULL DEFAULT current_timestamp()'); - $this->forge->addPrimaryKey(['actor_id', 'note_id']); + $this->forge->addPrimaryKey(['actor_id', 'status_id']); $this->forge->addForeignKey('actor_id', 'activitypub_actors', 'id', '', 'CASCADE'); - $this->forge->addForeignKey('note_id', 'activitypub_notes', 'id', '', 'CASCADE'); + $this->forge->addForeignKey('status_id', 'activitypub_statuses', 'id', '', 'CASCADE'); $this->forge->createTable('activitypub_favourites'); } diff --git a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-110000_add_notes_preview_cards.php b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-110000_add_statuses_preview_cards.php similarity index 59% rename from app/Libraries/ActivityPub/Database/Migrations/2018-01-01-110000_add_notes_preview_cards.php rename to app/Libraries/ActivityPub/Database/Migrations/2018-01-01-110000_add_statuses_preview_cards.php index 4c3829eb3d..fe35855fe9 100644 --- a/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-110000_add_notes_preview_cards.php +++ b/app/Libraries/ActivityPub/Database/Migrations/2018-01-01-110000_add_statuses_preview_cards.php @@ -3,7 +3,7 @@ declare(strict_types=1); /** - * Class AddNotePreviewCards Creates activitypub_notes_preview_cards table in database + * Class AddStatusesPreviewCards Creates activitypub_statuses_preview_cards table in database * * @copyright 2021 Podlibre * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 @@ -14,12 +14,12 @@ namespace ActivityPub\Database\Migrations; use CodeIgniter\Database\Migration; -class AddNotesPreviewCards extends Migration +class AddStatusesPreviewCards extends Migration { public function up(): void { $this->forge->addField([ - 'note_id' => [ + 'status_id' => [ 'type' => 'BINARY', 'constraint' => 16, ], @@ -29,14 +29,14 @@ class AddNotesPreviewCards extends Migration ], ]); - $this->forge->addPrimaryKey(['note_id', 'preview_card_id']); - $this->forge->addForeignKey('note_id', 'activitypub_notes', 'id', '', 'CASCADE'); + $this->forge->addPrimaryKey(['status_id', 'preview_card_id']); + $this->forge->addForeignKey('status_id', 'activitypub_statuses', 'id', '', 'CASCADE'); $this->forge->addForeignKey('preview_card_id', 'activitypub_preview_cards', 'id', '', 'CASCADE'); - $this->forge->createTable('activitypub_notes_preview_cards'); + $this->forge->createTable('activitypub_statuses_preview_cards'); } public function down(): void { - $this->forge->dropTable('activitypub_notes_preview_cards'); + $this->forge->dropTable('activitypub_statuses_preview_cards'); } } diff --git a/app/Libraries/ActivityPub/Entities/Activity.php b/app/Libraries/ActivityPub/Entities/Activity.php index cd9996f54f..4a67bdb0ce 100644 --- a/app/Libraries/ActivityPub/Entities/Activity.php +++ b/app/Libraries/ActivityPub/Entities/Activity.php @@ -19,11 +19,11 @@ use RuntimeException; * @property Actor $actor * @property int|null $target_actor_id * @property Actor $target_actor - * @property string|null $note_id - * @property Note $note + * @property string|null $status_id + * @property Status $status * @property string $type * @property object $payload - * @property string|null $status + * @property string|null $task_status * @property Time|null $scheduled_at * @property Time $created_at */ @@ -33,12 +33,12 @@ class Activity extends UuidEntity protected ?Actor $target_actor = null; - protected ?Note $note = null; + protected ?Status $status = null; /** * @var string[] */ - protected $uuids = ['id', 'note_id']; + protected $uuids = ['id', 'status_id']; /** * @var string[] @@ -52,10 +52,10 @@ class Activity extends UuidEntity 'id' => 'string', 'actor_id' => 'integer', 'target_actor_id' => '?integer', - 'note_id' => '?string', + 'status_id' => '?string', 'type' => 'string', 'payload' => 'json', - 'status' => '?string', + 'task_status' => '?string', ]; public function getActor(): Actor @@ -86,17 +86,17 @@ class Activity extends UuidEntity return $this->target_actor; } - public function getNote(): Note + public function getStatus(): Status { - if ($this->note_id === null) { - throw new RuntimeException('Activity must have a note_id before getting note.'); + if ($this->status_id === null) { + throw new RuntimeException('Activity must have a status_id before getting status.'); } - if ($this->note === null) { - $this->note = model('NoteModel', false) - ->getNoteById($this->note_id); + if ($this->status === null) { + $this->status = model('StatusModel', false) + ->getStatusById($this->status_id); } - return $this->note; + return $this->status; } } diff --git a/app/Libraries/ActivityPub/Entities/Actor.php b/app/Libraries/ActivityPub/Entities/Actor.php index 0e7746c73c..25845f0080 100644 --- a/app/Libraries/ActivityPub/Entities/Actor.php +++ b/app/Libraries/ActivityPub/Entities/Actor.php @@ -31,7 +31,7 @@ use RuntimeException; * @property string|null $outbox_url * @property string|null $followers_url * @property int $followers_count - * @property int $notes_count + * @property int $statuses_count * @property bool $is_blocked * * @property Actor[] $followers @@ -68,7 +68,7 @@ class Actor extends Entity 'outbox_url' => '?string', 'followers_url' => '?string', 'followers_count' => 'integer', - 'notes_count' => 'integer', + 'statuses_count' => 'integer', 'is_blocked' => 'boolean', ]; diff --git a/app/Libraries/ActivityPub/Entities/Favourite.php b/app/Libraries/ActivityPub/Entities/Favourite.php index 4ba92256fe..04014bb63f 100644 --- a/app/Libraries/ActivityPub/Entities/Favourite.php +++ b/app/Libraries/ActivityPub/Entities/Favourite.php @@ -14,20 +14,20 @@ use Michalsn\Uuid\UuidEntity; /** * @property int $actor_id - * @property string $note_id + * @property string $status_id */ class Favourite extends UuidEntity { /** * @var string[] */ - protected $uuids = ['note_id']; + protected $uuids = ['status_id']; /** * @var array<string, string> */ protected $casts = [ 'actor_id' => 'integer', - 'note_id' => 'string', + 'status_id' => 'string', ]; } diff --git a/app/Libraries/ActivityPub/Entities/PreviewCard.php b/app/Libraries/ActivityPub/Entities/PreviewCard.php index a2fe1537a1..630ccde178 100644 --- a/app/Libraries/ActivityPub/Entities/PreviewCard.php +++ b/app/Libraries/ActivityPub/Entities/PreviewCard.php @@ -14,7 +14,7 @@ use CodeIgniter\Entity\Entity; /** * @property int $id - * @property string $note_id + * @property string $status_id * @property string $url * @property string $title * @property string $description @@ -33,7 +33,7 @@ class PreviewCard extends Entity */ protected $casts = [ 'id' => 'integer', - 'note_id' => 'string', + 'status_id' => 'string', 'url' => 'string', 'title' => 'string', 'description' => 'string', diff --git a/app/Libraries/ActivityPub/Entities/Note.php b/app/Libraries/ActivityPub/Entities/Status.php similarity index 66% rename from app/Libraries/ActivityPub/Entities/Note.php rename to app/Libraries/ActivityPub/Entities/Status.php index 06199303fc..94cfa0c7c5 100644 --- a/app/Libraries/ActivityPub/Entities/Note.php +++ b/app/Libraries/ActivityPub/Entities/Status.php @@ -20,9 +20,9 @@ use RuntimeException; * @property int $actor_id * @property Actor $actor * @property string|null $in_reply_to_id - * @property Note|null $reply_to_note + * @property Status|null $reply_to_status * @property string|null $reblog_of_id - * @property Note|null $reblog_of_note + * @property Status|null $reblog_of_status * @property string $message * @property string $message_html * @property int $favourites_count @@ -35,30 +35,30 @@ use RuntimeException; * @property PreviewCard|null $preview_card * * @property bool $has_replies - * @property Note[] $replies - * @property Note[] $reblogs + * @property Status[] $replies + * @property Status[] $reblogs */ -class Note extends UuidEntity +class Status extends UuidEntity { protected ?Actor $actor = null; - protected ?Note $reply_to_note = null; + protected ?Status $reply_to_status = null; - protected ?Note $reblog_of_note = null; + protected ?Status $reblog_of_status = null; protected ?PreviewCard $preview_card = null; protected bool $has_preview_card = false; /** - * @var Note[]|null + * @var Status[]|null */ protected ?array $replies = null; protected bool $has_replies = false; /** - * @var Note[]|null + * @var Status[]|null */ protected ?array $reblogs = null; @@ -89,12 +89,12 @@ class Note extends UuidEntity ]; /** - * Returns the note's actor + * Returns the status's actor */ public function getActor(): Actor { if ($this->actor_id === null) { - throw new RuntimeException('Note must have an actor_id before getting actor.'); + throw new RuntimeException('Status must have an actor_id before getting actor.'); } if ($this->actor === null) { @@ -108,12 +108,12 @@ class Note extends UuidEntity public function getPreviewCard(): ?PreviewCard { if ($this->id === null) { - throw new RuntimeException('Note must be created before getting preview_card.'); + throw new RuntimeException('Status must be created before getting preview_card.'); } if ($this->preview_card === null) { $this->preview_card = model('PreviewCardModel', false) - ->getNotePreviewCard($this->id); + ->getStatusPreviewCard($this->id); } return $this->preview_card; @@ -125,17 +125,17 @@ class Note extends UuidEntity } /** - * @return Note[] + * @return Status[] */ public function getReplies(): array { if ($this->id === null) { - throw new RuntimeException('Note must be created before getting replies.'); + throw new RuntimeException('Status must be created before getting replies.'); } if ($this->replies === null) { - $this->replies = (array) model('NoteModel', false) - ->getNoteReplies($this->id); + $this->replies = (array) model('StatusModel', false) + ->getStatusReplies($this->id); } return $this->replies; @@ -146,49 +146,49 @@ class Note extends UuidEntity return $this->getReplies() !== null; } - public function getReplyToNote(): ?self + public function getReplyToStatus(): ?self { if ($this->in_reply_to_id === null) { - throw new RuntimeException('Note is not a reply.'); + throw new RuntimeException('Status is not a reply.'); } - if ($this->reply_to_note === null) { - $this->reply_to_note = model('NoteModel', false) - ->getNoteById($this->in_reply_to_id); + if ($this->reply_to_status === null) { + $this->reply_to_status = model('StatusModel', false) + ->getStatusById($this->in_reply_to_id); } - return $this->reply_to_note; + return $this->reply_to_status; } /** - * @return Note[] + * @return Status[] */ public function getReblogs(): array { if ($this->id === null) { - throw new RuntimeException('Note must be created before getting reblogs.'); + throw new RuntimeException('Status must be created before getting reblogs.'); } if ($this->reblogs === null) { - $this->reblogs = (array) model('NoteModel', false) - ->getNoteReblogs($this->id); + $this->reblogs = (array) model('StatusModel', false) + ->getStatusReblogs($this->id); } return $this->reblogs; } - public function getReblogOfNote(): ?self + public function getReblogOfStatus(): ?self { if ($this->reblog_of_id === null) { - throw new RuntimeException('Note is not a reblog.'); + throw new RuntimeException('Status is not a reblog.'); } - if ($this->reblog_of_note === null) { - $this->reblog_of_note = model('NoteModel', false) - ->getNoteById($this->reblog_of_id); + if ($this->reblog_of_status === null) { + $this->reblog_of_status = model('StatusModel', false) + ->getStatusById($this->reblog_of_id); } - return $this->reblog_of_note; + return $this->reblog_of_status; } public function setMessage(string $message): static diff --git a/app/Libraries/ActivityPub/Models/ActivityModel.php b/app/Libraries/ActivityPub/Models/ActivityModel.php index 3b00d9dbf5..5e346e45d6 100644 --- a/app/Libraries/ActivityPub/Models/ActivityModel.php +++ b/app/Libraries/ActivityPub/Models/ActivityModel.php @@ -31,7 +31,7 @@ class ActivityModel extends UuidModel /** * @var string[] */ - protected $uuidFields = ['id', 'note_id']; + protected $uuidFields = ['id', 'status_id']; /** * @var string[] @@ -40,10 +40,10 @@ class ActivityModel extends UuidModel 'id', 'actor_id', 'target_actor_id', - 'note_id', + 'status_id', 'type', 'payload', - 'status', + 'task_status', 'scheduled_at', ]; @@ -88,20 +88,20 @@ class ActivityModel extends UuidModel string $type, int $actorId, ?int $targetActorId, - ?string $noteId, + ?string $statusId, string $payload, DateTimeInterface $scheduledAt = null, - ?string $status = null + ?string $taskStatus = null ): BaseResult | int | string | false { return $this->insert( [ 'actor_id' => $actorId, 'target_actor_id' => $targetActorId, - 'note_id' => $noteId, + 'status_id' => $statusId, 'type' => $type, 'payload' => $payload, 'scheduled_at' => $scheduledAt, - 'status' => $status, + 'task_status' => $taskStatus, ], true, ); diff --git a/app/Libraries/ActivityPub/Models/ActorModel.php b/app/Libraries/ActivityPub/Models/ActorModel.php index aff67eb2e2..8fe539a153 100644 --- a/app/Libraries/ActivityPub/Models/ActorModel.php +++ b/app/Libraries/ActivityPub/Models/ActorModel.php @@ -41,7 +41,7 @@ class ActorModel extends Model 'outbox_url', 'followers_url', 'followers_count', - 'notes_count', + 'statuses_count', 'is_blocked', ]; diff --git a/app/Libraries/ActivityPub/Models/FavouriteModel.php b/app/Libraries/ActivityPub/Models/FavouriteModel.php index 57ac63ae06..32cc81b657 100644 --- a/app/Libraries/ActivityPub/Models/FavouriteModel.php +++ b/app/Libraries/ActivityPub/Models/FavouriteModel.php @@ -14,7 +14,7 @@ use ActivityPub\Activities\LikeActivity; use ActivityPub\Activities\UndoActivity; use ActivityPub\Entities\Actor; use ActivityPub\Entities\Favourite; -use ActivityPub\Entities\Note; +use ActivityPub\Entities\Status; use CodeIgniter\Events\Events; use Michalsn\Uuid\UuidModel; @@ -28,12 +28,12 @@ class FavouriteModel extends UuidModel /** * @var string[] */ - protected $uuidFields = ['note_id']; + protected $uuidFields = ['status_id']; /** * @var string[] */ - protected $allowedFields = ['actor_id', 'note_id']; + protected $allowedFields = ['actor_id', 'status_id']; /** * @var string @@ -47,32 +47,32 @@ class FavouriteModel extends UuidModel protected $updatedField; - public function addFavourite(Actor $actor, Note $note, bool $registerActivity = true): void + public function addFavourite(Actor $actor, Status $status, bool $registerActivity = true): void { $this->db->transStart(); $this->insert([ 'actor_id' => $actor->id, - 'note_id' => $note->id, + 'status_id' => $status->id, ]); - model('NoteModel') - ->where('id', service('uuid') ->fromString($note->id) ->getBytes()) + model('StatusModel') + ->where('id', service('uuid') ->fromString($status->id) ->getBytes()) ->increment('favourites_count'); if ($registerActivity) { $likeActivity = new LikeActivity(); $likeActivity->set('actor', $actor->uri) - ->set('object', $note->uri); + ->set('object', $status->uri); $activityId = model('ActivityModel') ->newActivity( 'Like', $actor->id, null, - $note->id, + $status->id, $likeActivity->toJSON(), - $note->published_at, + $status->published_at, 'queued', ); @@ -84,28 +84,28 @@ class FavouriteModel extends UuidModel ]); } - Events::trigger('on_note_favourite', $actor, $note); + Events::trigger('on_status_favourite', $actor, $status); - model('NoteModel') - ->clearCache($note); + model('StatusModel') + ->clearCache($status); $this->db->transComplete(); } - public function removeFavourite(Actor $actor, Note $note, bool $registerActivity = true): void + public function removeFavourite(Actor $actor, Status $status, bool $registerActivity = true): void { $this->db->transStart(); - model('NoteModel') - ->where('id', service('uuid') ->fromString($note->id) ->getBytes()) + model('StatusModel') + ->where('id', service('uuid') ->fromString($status->id) ->getBytes()) ->decrement('favourites_count'); $this->db ->table('activitypub_favourites') ->where([ 'actor_id' => $actor->id, - 'note_id' => service('uuid') - ->fromString($note->id) + 'status_id' => service('uuid') + ->fromString($status->id) ->getBytes(), ]) ->delete(); @@ -117,8 +117,8 @@ class FavouriteModel extends UuidModel ->where([ 'type' => 'Like', 'actor_id' => $actor->id, - 'note_id' => service('uuid') - ->fromString($note->id) + 'status_id' => service('uuid') + ->fromString($status->id) ->getBytes(), ]) ->first(); @@ -127,7 +127,7 @@ class FavouriteModel extends UuidModel $likeActivity ->set('id', base_url(route_to('activity', $actor->username, $activity->id))) ->set('actor', $actor->uri) - ->set('object', $note->uri); + ->set('object', $status->uri); $undoActivity ->set('actor', $actor->uri) @@ -138,9 +138,9 @@ class FavouriteModel extends UuidModel 'Undo', $actor->id, null, - $note->id, + $status->id, $undoActivity->toJSON(), - $note->published_at, + $status->published_at, 'queued', ); @@ -152,10 +152,10 @@ class FavouriteModel extends UuidModel ]); } - Events::trigger('on_note_undo_favourite', $actor, $note); + Events::trigger('on_status_undo_favourite', $actor, $status); - model('NoteModel') - ->clearCache($note); + model('StatusModel') + ->clearCache($status); $this->db->transComplete(); } @@ -163,19 +163,19 @@ class FavouriteModel extends UuidModel /** * Adds or removes favourite from database and increments count */ - public function toggleFavourite(Actor $actor, Note $note): void + public function toggleFavourite(Actor $actor, Status $status): void { if ( $this->where([ 'actor_id' => $actor->id, - 'note_id' => service('uuid') - ->fromString($note->id) + 'status_id' => service('uuid') + ->fromString($status->id) ->getBytes(), ])->first() ) { - $this->removeFavourite($actor, $note); + $this->removeFavourite($actor, $status); } else { - $this->addFavourite($actor, $note); + $this->addFavourite($actor, $status); } } } diff --git a/app/Libraries/ActivityPub/Models/PreviewCardModel.php b/app/Libraries/ActivityPub/Models/PreviewCardModel.php index 340dbe05b0..161052f7b1 100644 --- a/app/Libraries/ActivityPub/Models/PreviewCardModel.php +++ b/app/Libraries/ActivityPub/Models/PreviewCardModel.php @@ -70,18 +70,18 @@ class PreviewCardModel extends Model return $found; } - public function getNotePreviewCard(string $noteId): ?PreviewCard + public function getStatusPreviewCard(string $statusId): ?PreviewCard { $cacheName = config('ActivityPub') - ->cachePrefix . "note#{$noteId}_preview_card"; + ->cachePrefix . "status#{$statusId}_preview_card"; if (! ($found = cache($cacheName))) { $found = $this->join( - 'activitypub_notes_preview_cards', - 'activitypub_notes_preview_cards.preview_card_id = id', + 'activitypub_statuses_preview_cards', + 'activitypub_statuses_preview_cards.preview_card_id = id', 'inner', ) - ->where('note_id', service('uuid') ->fromString($noteId) ->getBytes()) + ->where('status_id', service('uuid') ->fromString($statusId) ->getBytes()) ->first(); cache() diff --git a/app/Libraries/ActivityPub/Models/NoteModel.php b/app/Libraries/ActivityPub/Models/StatusModel.php similarity index 58% rename from app/Libraries/ActivityPub/Models/NoteModel.php rename to app/Libraries/ActivityPub/Models/StatusModel.php index 5662bec37a..3f911babd0 100644 --- a/app/Libraries/ActivityPub/Models/NoteModel.php +++ b/app/Libraries/ActivityPub/Models/StatusModel.php @@ -15,7 +15,7 @@ use ActivityPub\Activities\CreateActivity; use ActivityPub\Activities\DeleteActivity; use ActivityPub\Activities\UndoActivity; use ActivityPub\Entities\Actor; -use ActivityPub\Entities\Note; +use ActivityPub\Entities\Status; use ActivityPub\Objects\TombstoneObject; use CodeIgniter\Database\BaseResult; use CodeIgniter\Database\Query; @@ -25,12 +25,12 @@ use CodeIgniter\I18n\Time; use Exception; use Michalsn\Uuid\UuidModel; -class NoteModel extends UuidModel +class StatusModel extends UuidModel { /** * @var string */ - protected $table = 'activitypub_notes'; + protected $table = 'activitypub_statuses'; /** * @var string @@ -62,7 +62,7 @@ class NoteModel extends UuidModel /** * @var string */ - protected $returnType = Note::class; + protected $returnType = Status::class; /** * @var bool @@ -87,14 +87,14 @@ class NoteModel extends UuidModel /** * @var string[] */ - protected $beforeInsert = ['setNoteId']; + protected $beforeInsert = ['setStatusId']; - public function getNoteById(string $noteId): ?Note + public function getStatusById(string $statusId): ?Status { $cacheName = config('ActivityPub') - ->cachePrefix . "note#{$noteId}"; + ->cachePrefix . "status#{$statusId}"; if (! ($found = cache($cacheName))) { - $found = $this->find($noteId); + $found = $this->find($statusId); cache() ->save($cacheName, $found, DECADE); @@ -103,14 +103,14 @@ class NoteModel extends UuidModel return $found; } - public function getNoteByUri(string $noteUri): ?Note + public function getStatusByUri(string $statusUri): ?Status { - $hashedNoteUri = md5($noteUri); + $hashedStatusUri = md5($statusUri); $cacheName = config('ActivityPub') - ->cachePrefix . "note-{$hashedNoteUri}"; + ->cachePrefix . "status-{$hashedStatusUri}"; if (! ($found = cache($cacheName))) { - $found = $this->where('uri', $noteUri) + $found = $this->where('uri', $statusUri) ->first(); cache() @@ -121,16 +121,16 @@ class NoteModel extends UuidModel } /** - * Retrieves all published notes for a given actor ordered by publication date + * Retrieves all published statuses for a given actor ordered by publication date * - * @return Note[] + * @return Status[] */ - public function getActorPublishedNotes(int $actorId): array + public function getActorPublishedStatuses(int $actorId): array { $cacheName = config('ActivityPub') ->cachePrefix . - "actor#{$actorId}_published_notes"; + "actor#{$actorId}_published_statuses"; if (! ($found = cache($cacheName))) { $found = $this->where([ 'actor_id' => $actorId, @@ -140,20 +140,20 @@ class NoteModel extends UuidModel ->orderBy('published_at', 'DESC') ->findAll(); - $secondsToNextUnpublishedNote = $this->getSecondsToNextUnpublishedNote($actorId); + $secondsToNextUnpublishedStatus = $this->getSecondsToNextUnpublishedStatuses($actorId); cache() - ->save($cacheName, $found, $secondsToNextUnpublishedNote ? $secondsToNextUnpublishedNote : DECADE); + ->save($cacheName, $found, $secondsToNextUnpublishedStatus ? $secondsToNextUnpublishedStatus : DECADE); } return $found; } /** - * Returns the timestamp difference in seconds between the next note to publish and the current timestamp. Returns - * false if there's no note to publish + * Returns the timestamp difference in seconds between the next status to publish and the current timestamp. Returns + * false if there's no status to publish */ - public function getSecondsToNextUnpublishedNote(int $actorId): int | false + public function getSecondsToNextUnpublishedStatuses(int $actorId): int | false { $result = $this->select('TIMESTAMPDIFF(SECOND, NOW(), `published_at`) as timestamp_diff') ->where([ @@ -170,26 +170,26 @@ class NoteModel extends UuidModel } /** - * Retrieves all published replies for a given note. By default, it does not get replies from blocked actors. + * Retrieves all published replies for a given status. By default, it does not get replies from blocked actors. * - * @return Note[] + * @return Status[] */ - public function getNoteReplies(string $noteId, bool $withBlocked = false): array + public function getStatusReplies(string $statusId, bool $withBlocked = false): array { $cacheName = config('ActivityPub') ->cachePrefix . - "note#{$noteId}_replies" . + "status#{$statusId}_replies" . ($withBlocked ? '_withBlocked' : ''); if (! ($found = cache($cacheName))) { if (! $withBlocked) { - $this->select('activitypub_notes.*') - ->join('activitypub_actors', 'activitypub_actors.id = activitypub_notes.actor_id', 'inner') + $this->select('activitypub_statuses.*') + ->join('activitypub_actors', 'activitypub_actors.id = activitypub_statuses.actor_id', 'inner') ->where('activitypub_actors.is_blocked', 0); } - $this->where('in_reply_to_id', $this->uuid->fromString($noteId) ->getBytes()) + $this->where('in_reply_to_id', $this->uuid->fromString($statusId) ->getBytes()) ->where('`published_at` <= NOW()', null, false) ->orderBy('published_at', 'ASC'); $found = $this->findAll(); @@ -202,18 +202,18 @@ class NoteModel extends UuidModel } /** - * Retrieves all published reblogs for a given note + * Retrieves all published reblogs for a given status * - * @return Note[] + * @return Status[] */ - public function getNoteReblogs(string $noteId): array + public function getStatusReblogs(string $statusId): array { $cacheName = config('ActivityPub') - ->cachePrefix . "note#{$noteId}_reblogs"; + ->cachePrefix . "status#{$statusId}_reblogs"; if (! ($found = cache($cacheName))) { - $found = $this->where('reblog_of_id', $this->uuid->fromString($noteId) ->getBytes()) + $found = $this->where('reblog_of_id', $this->uuid->fromString($statusId) ->getBytes()) ->where('`published_at` <= NOW()', null, false) ->orderBy('published_at', 'ASC') ->findAll(); @@ -225,23 +225,23 @@ class NoteModel extends UuidModel return $found; } - public function addPreviewCard(string $noteId, int $previewCardId): Query | bool + public function addPreviewCard(string $statusId, int $previewCardId): Query | bool { - return $this->db->table('activitypub_notes_preview_cards') + return $this->db->table('activitypub_statuses_preview_cards') ->insert([ - 'note_id' => $this->uuid->fromString($noteId) + 'status_id' => $this->uuid->fromString($statusId) ->getBytes(), 'preview_card_id' => $previewCardId, ]); } /** - * Adds note in database along preview card if relevant + * Adds status in database along preview card if relevant * - * @return string|false returns the new note id if success or false otherwise + * @return string|false returns the new status id if success or false otherwise */ - public function addNote( - Note $note, + public function addStatus( + Status $status, bool $createPreviewCard = true, bool $registerActivity = true ): string | false { @@ -249,56 +249,56 @@ class NoteModel extends UuidModel $this->db->transStart(); - if (! ($newNoteId = $this->insert($note, true))) { + if (! ($newStatusId = $this->insert($status, true))) { $this->db->transRollback(); - // Couldn't insert note + // Couldn't insert status return false; } if ($createPreviewCard) { // parse message - $messageUrls = extract_urls_from_message($note->message); + $messageUrls = extract_urls_from_message($status->message); if ( $messageUrls !== [] && ($previewCard = get_or_create_preview_card_from_url(new URI($messageUrls[0]))) && - ! $this->addPreviewCard($newNoteId, $previewCard->id) + ! $this->addPreviewCard($newStatusId, $previewCard->id) ) { $this->db->transRollback(); - // problem when linking note to preview card + // problem when linking status to preview card return false; } } model('ActorModel') - ->where('id', $note->actor_id) - ->increment('notes_count'); + ->where('id', $status->actor_id) + ->increment('statuses_count'); if ($registerActivity) { - // set note id and uri to construct NoteObject - $note->id = $newNoteId; - $note->uri = base_url(route_to('note', $note->actor->username, $newNoteId)); + // set status id and uri to construct NoteObject + $status->id = $newStatusId; + $status->uri = base_url(route_to('status', $status->actor->username, $newStatusId)); $createActivity = new CreateActivity(); $noteObjectClass = config('ActivityPub') ->noteObject; $createActivity - ->set('actor', $note->actor->uri) - ->set('object', new $noteObjectClass($note)); + ->set('actor', $status->actor->uri) + ->set('object', new $noteObjectClass($status)); $activityId = model('ActivityModel') ->newActivity( 'Create', - $note->actor_id, + $status->actor_id, null, - $newNoteId, + $newStatusId, $createActivity->toJSON(), - $note->published_at, + $status->published_at, 'queued', ); - $createActivity->set('id', base_url(route_to('activity', $note->actor->username, $activityId))); + $createActivity->set('id', base_url(route_to('activity', $status->actor->username, $activityId))); model('ActivityModel') ->update($activityId, [ @@ -306,44 +306,44 @@ class NoteModel extends UuidModel ]); } - Events::trigger('on_note_add', $note); + Events::trigger('on_status_add', $status); - $this->clearCache($note); + $this->clearCache($status); $this->db->transComplete(); - return $newNoteId; + return $newStatusId; } - public function editNote(Note $updatedNote): bool + public function editStatus(Status $updatedStatus): bool { $this->db->transStart(); - // update note create activity schedule in database + // update status create activity schedule in database $scheduledActivity = model('ActivityModel') ->where([ 'type' => 'Create', - 'note_id' => $this->uuid - ->fromString($updatedNote->id) + 'status_id' => $this->uuid + ->fromString($updatedStatus->id) ->getBytes(), ]) ->first(); // update published date in payload $newPayload = $scheduledActivity->payload; - $newPayload->object->published = $updatedNote->published_at->format(DATE_W3C); + $newPayload->object->published = $updatedStatus->published_at->format(DATE_W3C); model('ActivityModel') ->update($scheduledActivity->id, [ 'payload' => json_encode($newPayload, JSON_THROW_ON_ERROR), - 'scheduled_at' => $updatedNote->published_at, + 'scheduled_at' => $updatedStatus->published_at, ]); - // update note - $updateResult = $this->update($updatedNote->id, $updatedNote); + // update status + $updateResult = $this->update($updatedStatus->id, $updatedStatus); - Events::trigger('on_note_edit', $updatedNote); + Events::trigger('on_status_edit', $updatedStatus); - $this->clearCache($updatedNote); + $this->clearCache($updatedStatus); $this->db->transComplete(); @@ -351,59 +351,59 @@ class NoteModel extends UuidModel } /** - * Removes a note from the database and decrements meta data + * Removes a status from the database and decrements meta data */ - public function removeNote(Note $note, bool $registerActivity = true): BaseResult | bool + public function removeStatus(Status $status, bool $registerActivity = true): BaseResult | bool { $this->db->transStart(); model('ActorModel') - ->where('id', $note->actor_id) - ->decrement('notes_count'); + ->where('id', $status->actor_id) + ->decrement('statuses_count'); - if ($note->in_reply_to_id !== null) { - // Note to remove is a reply - model('NoteModel') - ->where('id', $this->uuid->fromString($note->in_reply_to_id) ->getBytes()) + if ($status->in_reply_to_id !== null) { + // Status to remove is a reply + model('StatusModel') + ->where('id', $this->uuid->fromString($status->in_reply_to_id) ->getBytes()) ->decrement('replies_count'); - Events::trigger('on_reply_remove', $note); + Events::trigger('on_reply_remove', $status); } - // remove all note reblogs - foreach ($note->reblogs as $reblog) { + // remove all status reblogs + foreach ($status->reblogs as $reblog) { // FIXME: issue when actor is not local, can't get actor information - $this->removeNote($reblog); + $this->removeStatus($reblog); } - // remove all note replies - foreach ($note->replies as $reply) { - $this->removeNote($reply); + // remove all status replies + foreach ($status->replies as $reply) { + $this->removeStatus($reply); } // check that preview card is no longer used elsewhere before deleting it if ( - $note->preview_card && + $status->preview_card && $this->db - ->table('activitypub_notes_preview_cards') - ->where('preview_card_id', $note->preview_card->id) + ->table('activitypub_statuses_preview_cards') + ->where('preview_card_id', $status->preview_card->id) ->countAll() <= 1 ) { - model('PreviewCardModel')->deletePreviewCard($note->preview_card->id, $note->preview_card->url); + model('PreviewCardModel')->deletePreviewCard($status->preview_card->id, $status->preview_card->url); } if ($registerActivity) { $deleteActivity = new DeleteActivity(); $tombstoneObject = new TombstoneObject(); - $tombstoneObject->set('id', $note->uri); + $tombstoneObject->set('id', $status->uri); $deleteActivity - ->set('actor', $note->actor->uri) + ->set('actor', $status->actor->uri) ->set('object', $tombstoneObject); $activityId = model('ActivityModel') ->newActivity( 'Delete', - $note->actor_id, + $status->actor_id, null, null, $deleteActivity->toJSON(), @@ -411,7 +411,7 @@ class NoteModel extends UuidModel 'queued', ); - $deleteActivity->set('id', base_url(route_to('activity', $note->actor->username, $activityId))); + $deleteActivity->set('id', base_url(route_to('activity', $status->actor->username, $activityId))); model('ActivityModel') ->update($activityId, [ @@ -419,12 +419,12 @@ class NoteModel extends UuidModel ]); } - $result = model('NoteModel', false) - ->delete($note->id); + $result = model('StatusModel', false) + ->delete($status->id); - Events::trigger('on_note_remove', $note); + Events::trigger('on_status_remove', $status); - $this->clearCache($note); + $this->clearCache($status); $this->db->transComplete(); @@ -432,38 +432,38 @@ class NoteModel extends UuidModel } public function addReply( - Note $reply, + Status $reply, bool $createPreviewCard = true, bool $registerActivity = true ): string | false { if (! $reply->in_reply_to_id) { - throw new Exception('Passed note is not a reply!'); + throw new Exception('Passed status is not a reply!'); } $this->db->transStart(); - $noteId = $this->addNote($reply, $createPreviewCard, $registerActivity); + $statusId = $this->addStatus($reply, $createPreviewCard, $registerActivity); - model('NoteModel') + model('StatusModel') ->where('id', $this->uuid->fromString($reply->in_reply_to_id) ->getBytes()) ->increment('replies_count'); - Events::trigger('on_note_reply', $reply); + Events::trigger('on_status_reply', $reply); $this->clearCache($reply); $this->db->transComplete(); - return $noteId; + return $statusId; } - public function reblog(Actor $actor, Note $note, bool $registerActivity = true): string | false + public function reblog(Actor $actor, Status $status, bool $registerActivity = true): string | false { $this->db->transStart(); - $reblog = new Note([ + $reblog = new Status([ 'actor_id' => $actor->id, - 'reblog_of_id' => $note->id, + 'reblog_of_id' => $status->id, 'published_at' => Time::now(), ]); @@ -472,10 +472,10 @@ class NoteModel extends UuidModel model('ActorModel') ->where('id', $actor->id) - ->increment('notes_count'); + ->increment('statuses_count'); - model('NoteModel') - ->where('id', $this->uuid->fromString($note->id)->getBytes()) + model('StatusModel') + ->where('id', $this->uuid->fromString($status->id)->getBytes()) ->increment('reblogs_count'); if ($registerActivity) { @@ -486,13 +486,13 @@ class NoteModel extends UuidModel 'Announce', $actor->id, null, - $note->id, + $status->id, $announceActivity->toJSON(), $reblog->published_at, 'queued', ); - $announceActivity->set('id', base_url(route_to('activity', $note->actor->username, $activityId))); + $announceActivity->set('id', base_url(route_to('activity', $status->actor->username, $activityId))); model('ActivityModel') ->update($activityId, [ @@ -500,25 +500,25 @@ class NoteModel extends UuidModel ]); } - Events::trigger('on_note_reblog', $actor, $note); + Events::trigger('on_status_reblog', $actor, $status); - $this->clearCache($note); + $this->clearCache($status); $this->db->transComplete(); return $reblogId; } - public function undoReblog(Note $reblogNote, bool $registerActivity = true): BaseResult | bool + public function undoReblog(Status $reblogStatus, bool $registerActivity = true): BaseResult | bool { $this->db->transStart(); model('ActorModel') - ->where('id', $reblogNote->actor_id) - ->decrement('notes_count'); + ->where('id', $reblogStatus->actor_id) + ->decrement('statuses_count'); - model('NoteModel') - ->where('id', $this->uuid->fromString($reblogNote->reblog_of_id) ->getBytes()) + model('StatusModel') + ->where('id', $this->uuid->fromString($reblogStatus->reblog_of_id) ->getBytes()) ->decrement('reblogs_count'); if ($registerActivity) { @@ -527,35 +527,35 @@ class NoteModel extends UuidModel $activity = model('ActivityModel') ->where([ 'type' => 'Announce', - 'actor_id' => $reblogNote->actor_id, - 'note_id' => $this->uuid - ->fromString($reblogNote->reblog_of_id) + 'actor_id' => $reblogStatus->actor_id, + 'status_id' => $this->uuid + ->fromString($reblogStatus->reblog_of_id) ->getBytes(), ]) ->first(); - $announceActivity = new AnnounceActivity($reblogNote); + $announceActivity = new AnnounceActivity($reblogStatus); $announceActivity->set( 'id', - base_url(route_to('activity', $reblogNote->actor->username, $activity->id)), + base_url(route_to('activity', $reblogStatus->actor->username, $activity->id)), ); $undoActivity - ->set('actor', $reblogNote->actor->uri) + ->set('actor', $reblogStatus->actor->uri) ->set('object', $announceActivity); $activityId = model('ActivityModel') ->newActivity( 'Undo', - $reblogNote->actor_id, + $reblogStatus->actor_id, null, - $reblogNote->reblog_of_id, + $reblogStatus->reblog_of_id, $undoActivity->toJSON(), Time::now(), 'queued', ); - $undoActivity->set('id', base_url(route_to('activity', $reblogNote->actor->username, $activityId))); + $undoActivity->set('id', base_url(route_to('activity', $reblogStatus->actor->username, $activityId))); model('ActivityModel') ->update($activityId, [ @@ -563,54 +563,54 @@ class NoteModel extends UuidModel ]); } - $result = model('NoteModel', false) - ->delete($reblogNote->id); + $result = model('StatusModel', false) + ->delete($reblogStatus->id); - Events::trigger('on_note_undo_reblog', $reblogNote); + Events::trigger('on_status_undo_reblog', $reblogStatus); - $this->clearCache($reblogNote); + $this->clearCache($reblogStatus); $this->db->transComplete(); return $result; } - public function toggleReblog(Actor $actor, Note $note): void + public function toggleReblog(Actor $actor, Status $status): void { if ( - ! ($reblogNote = $this->where([ + ! ($reblogStatus = $this->where([ 'actor_id' => $actor->id, 'reblog_of_id' => $this->uuid - ->fromString($note->id) + ->fromString($status->id) ->getBytes(), ])->first()) ) { - $this->reblog($actor, $note); + $this->reblog($actor, $status); } else { - $this->undoReblog($reblogNote); + $this->undoReblog($reblogStatus); } } - public function clearCache(Note $note): void + public function clearCache(Status $status): void { $cachePrefix = config('ActivityPub') ->cachePrefix; - $hashedNoteUri = md5($note->uri); + $hashedStatusUri = md5($status->uri); model('ActorModel') - ->clearCache($note->actor); + ->clearCache($status->actor); cache() - ->deleteMatching($cachePrefix . "note#{$note->id}*"); + ->deleteMatching($cachePrefix . "status#{$status->id}*"); cache() - ->deleteMatching($cachePrefix . "note-{$hashedNoteUri}*"); + ->deleteMatching($cachePrefix . "status-{$hashedStatusUri}*"); - if ($note->in_reply_to_id !== null) { - $this->clearCache($note->reply_to_note); + if ($status->in_reply_to_id !== null) { + $this->clearCache($status->reply_to_status); } - if ($note->reblog_of_id !== null) { - $this->clearCache($note->reblog_of_note); + if ($status->reblog_of_id !== null) { + $this->clearCache($status->reblog_of_status); } } @@ -618,7 +618,7 @@ class NoteModel extends UuidModel * @param array<string, array<string|int, mixed>> $data * @return array<string, array<string|int, mixed>> */ - protected function setNoteId(array $data): array + protected function setStatusId(array $data): array { $uuid4 = $this->uuid->{$this->uuidVersion}(); $data['data']['id'] = $uuid4->toString(); @@ -627,7 +627,7 @@ class NoteModel extends UuidModel $actor = model('ActorModel') ->getActorById((int) $data['data']['actor_id']); - $data['data']['uri'] = base_url(route_to('note', $actor->username, $uuid4->toString())); + $data['data']['uri'] = base_url(route_to('status', $actor->username, $uuid4->toString())); } return $data; diff --git a/app/Libraries/ActivityPub/Objects/NoteObject.php b/app/Libraries/ActivityPub/Objects/NoteObject.php index 31e1b67b4f..b44d67091b 100644 --- a/app/Libraries/ActivityPub/Objects/NoteObject.php +++ b/app/Libraries/ActivityPub/Objects/NoteObject.php @@ -15,7 +15,7 @@ declare(strict_types=1); namespace ActivityPub\Objects; use ActivityPub\Core\ObjectType; -use ActivityPub\Entities\Note; +use ActivityPub\Entities\Status; class NoteObject extends ObjectType { @@ -27,20 +27,20 @@ class NoteObject extends ObjectType protected string $replies; - public function __construct(Note $note) + public function __construct(Status $status) { - $this->id = $note->uri; + $this->id = $status->uri; - $this->content = $note->message_html; - $this->published = $note->published_at->format(DATE_W3C); - $this->attributedTo = $note->actor->uri; + $this->content = $status->message_html; + $this->published = $status->published_at->format(DATE_W3C); + $this->attributedTo = $status->actor->uri; - if ($note->in_reply_to_id !== null) { - $this->inReplyTo = $note->reply_to_note->uri; + if ($status->in_reply_to_id !== null) { + $this->inReplyTo = $status->reply_to_status->uri; } - $this->replies = base_url(route_to('note-replies', $note->actor->username, $note->id)); + $this->replies = base_url(route_to('status-replies', $status->actor->username, $status->id)); - $this->cc = [$note->actor->followers_url]; + $this->cc = [$status->actor->followers_url]; } } diff --git a/app/Libraries/NoteObject.php b/app/Libraries/NoteObject.php index feabd9f6ca..b69f164a04 100644 --- a/app/Libraries/NoteObject.php +++ b/app/Libraries/NoteObject.php @@ -11,25 +11,25 @@ declare(strict_types=1); namespace App\Libraries; use ActivityPub\Objects\NoteObject as ActivityPubNoteObject; -use App\Entities\Note; +use App\Entities\Status; class NoteObject extends ActivityPubNoteObject { /** - * @param Note $note + * @param Status $status */ - public function __construct($note) + public function __construct($status) { - parent::__construct($note); + parent::__construct($status); - if ($note->episode_id) { + if ($status->episode_id) { $this->content = '<a href="' . - $note->episode->link . + $status->episode->link . '" target="_blank" rel="noopener noreferrer">' . - $note->episode->title . + $status->episode->title . '</a><br/>' . - $note->message_html; + $status->message_html; } } } diff --git a/app/Models/EpisodeModel.php b/app/Models/EpisodeModel.php index 275c753ffb..a9cbb1487b 100644 --- a/app/Models/EpisodeModel.php +++ b/app/Models/EpisodeModel.php @@ -92,7 +92,7 @@ class EpisodeModel extends Model 'custom_rss', 'favourites_total', 'reblogs_total', - 'notes_total', + 'statuses_total', 'published_at', 'created_by', 'updated_by', diff --git a/app/Models/NoteModel.php b/app/Models/StatusModel.php similarity index 70% rename from app/Models/NoteModel.php rename to app/Models/StatusModel.php index 5e8833decb..08ba72751c 100644 --- a/app/Models/NoteModel.php +++ b/app/Models/StatusModel.php @@ -10,15 +10,15 @@ declare(strict_types=1); namespace App\Models; -use ActivityPub\Models\NoteModel as ActivityPubNoteModel; -use App\Entities\Note; +use ActivityPub\Models\StatusModel as ActivityPubStatusModel; +use App\Entities\Status; -class NoteModel extends ActivityPubNoteModel +class StatusModel extends ActivityPubStatusModel { /** * @var string */ - protected $returnType = Note::class; + protected $returnType = Status::class; /** * @var string[] @@ -40,11 +40,11 @@ class NoteModel extends ActivityPubNoteModel ]; /** - * Retrieves all published notes for a given episode ordered by publication date + * Retrieves all published statuses for a given episode ordered by publication date * - * @return Note[] + * @return Status[] */ - public function getEpisodeNotes(int $episodeId): array + public function getEpisodeStatuses(int $episodeId): array { return $this->where([ 'episode_id' => $episodeId, diff --git a/app/Views/_assets/styles/index.css b/app/Views/_assets/styles/index.css index b4b795a546..185afd4f48 100644 --- a/app/Views/_assets/styles/index.css +++ b/app/Views/_assets/styles/index.css @@ -7,7 +7,7 @@ @import "./radioBtn.css"; @import "./switch.css"; @import "./charts.css"; -@import "./note.css"; +@import "./status.css"; @import "./tabs.css"; @import "./radioToggler.css"; @import "./formInputTabs.css"; diff --git a/app/Views/_assets/styles/note.css b/app/Views/_assets/styles/status.css similarity index 87% rename from app/Views/_assets/styles/note.css rename to app/Views/_assets/styles/status.css index 510bcda243..e3d2b794ac 100644 --- a/app/Views/_assets/styles/note.css +++ b/app/Views/_assets/styles/status.css @@ -1,11 +1,11 @@ @layer components { - .note-content { + .status-content { & a { @apply text-sm font-semibold text-pine-600 hover:underline; } } - .note-replies > * { + .status-replies > * { @apply relative; & img { diff --git a/app/Views/admin/episode/publish.php b/app/Views/admin/episode/publish.php index d6664bbe1a..d612d9037e 100644 --- a/app/Views/admin/episode/publish.php +++ b/app/Views/admin/episode/publish.php @@ -20,8 +20,8 @@ <label for="message" class="text-lg font-semibold"><?= lang( - 'Episode.publish_form.note', -) . hint_tooltip(lang('Episode.publish_form.note_hint'), 'ml-1') ?></label> + 'Episode.publish_form.status', +) . hint_tooltip(lang('Episode.publish_form.status_hint'), 'ml-1') ?></label> <div class="mb-8 overflow-hidden bg-white shadow-md rounded-xl"> <div class="flex px-4 py-3"> <img src="<?= $podcast->actor->avatar_image_url ?>" alt="<?= $podcast diff --git a/app/Views/admin/episode/publish_edit.php b/app/Views/admin/episode/publish_edit.php index e98959f102..9c23551d54 100644 --- a/app/Views/admin/episode/publish_edit.php +++ b/app/Views/admin/episode/publish_edit.php @@ -17,12 +17,12 @@ ]) ?> <?= csrf_field() ?> <?= form_hidden('client_timezone', 'UTC') ?> -<?= form_hidden('note_id', $note->id) ?> +<?= form_hidden('status_id', $status->id) ?> <label for="message" class="text-lg font-semibold"><?= lang( - 'Episode.publish_form.note', -) . hint_tooltip(lang('Episode.publish_form.note_hint'), 'ml-1') ?></label> + 'Episode.publish_form.status', +) . hint_tooltip(lang('Episode.publish_form.status_hint'), 'ml-1') ?></label> <div class="mb-8 overflow-hidden bg-white shadow-md rounded-xl"> <div class="flex px-4 py-3"> <img src="<?= $podcast->actor->avatar_image_url ?>" alt="<?= $podcast->actor @@ -34,11 +34,11 @@ <span class="text-sm text-gray-500 truncate">@<?= $podcast ->actor->username ?></span> </p> - <time class="text-xs text-gray-500" itemprop="published" datetime="<?= $note->published_at->format( + <time class="text-xs text-gray-500" itemprop="published" datetime="<?= $status->published_at->format( DateTime::ATOM, - ) ?>" title="<?= $note->published_at ?>"><?= lang( + ) ?>" title="<?= $status->published_at ?>"><?= lang( 'Common.mediumDate', - [$note->published_at], + [$status->published_at], ) ?></time> </div> </div> @@ -51,7 +51,7 @@ 'required' => 'required', 'placeholder' => 'Write your message...', ], - old('message', $note->message, false), + old('message', $status->message, false), ['rows' => 2], ) ?> </div> diff --git a/app/Views/podcast/_partials/header.php b/app/Views/podcast/_partials/header.php index 38e46073c2..1c15b4adb6 100644 --- a/app/Views/podcast/_partials/header.php +++ b/app/Views/podcast/_partials/header.php @@ -50,8 +50,8 @@ <a href="<?= route_to( 'podcast-activity', $podcast->name, - ) ?>" class="hover:underline"><?= lang('Podcast.notes', [ - 'numberOfNotes' => $podcast->actor->notes_count, + ) ?>" class="hover:underline"><?= lang('Podcast.statuses', [ + 'numberOfStatuses' => $podcast->actor->statuses_count, ]) ?></a> </div> </div> diff --git a/app/Views/podcast/_partials/note.php b/app/Views/podcast/_partials/note.php deleted file mode 100644 index 5111dd1ea7..0000000000 --- a/app/Views/podcast/_partials/note.php +++ /dev/null @@ -1,40 +0,0 @@ -<article class="relative z-10 w-full bg-white shadow-md rounded-2xl"> - <header class="flex px-6 py-4"> - <img src="<?= $note->actor - ->avatar_image_url ?>" alt="<?= $note->display_name ?>" class="w-12 h-12 mr-4 rounded-full" /> - <div class="flex flex-col min-w-0"> - <a href="<?= $note->actor - ->uri ?>" class="flex items-baseline hover:underline" <?= $note - ->actor->is_local - ? '' - : 'target="_blank" rel="noopener noreferrer"' ?>> - <span class="mr-2 font-semibold truncate"><?= $note->actor - ->display_name ?></span> - <span class="text-sm text-gray-500 truncate">@<?= $note->actor - ->username . - ($note->actor->is_local - ? '' - : '@' . $note->actor->domain) ?></span> - </a> - <a href="<?= route_to('note', $podcast->name, $note->id) ?>" - class="text-xs text-gray-500"> - <time - itemprop="published" - datetime="<?= $note->published_at->format(DateTime::ATOM) ?>" - title="<?= $note->published_at ?>" - ><?= lang('Common.mediumDate', [$note->published_at]) ?></time> - </a> - </div> - </header> - <div class="px-6 mb-4 note-content"><?= $note->message_html ?></div> - <?php if ($note->episode_id): ?> - <?= view('podcast/_partials/episode_card', [ - 'episode' => $note->episode, - ]) ?> - <?php elseif ($note->has_preview_card): ?> - <?= view('podcast/_partials/preview_card', [ - 'preview_card' => $note->preview_card, - ]) ?> - <?php endif; ?> - <?= $this->include('podcast/_partials/note_actions') ?> -</article> diff --git a/app/Views/podcast/_partials/note_actions.php b/app/Views/podcast/_partials/note_actions.php deleted file mode 100644 index ab2f9bf3ac..0000000000 --- a/app/Views/podcast/_partials/note_actions.php +++ /dev/null @@ -1,36 +0,0 @@ -<footer class="flex justify-around px-6 py-3"> - <?= anchor( - route_to('note', $podcast->name, $note->id), - icon('chat', 'text-2xl mr-1 text-gray-400') . $note->replies_count, - [ - 'class' => 'inline-flex items-center hover:underline', - 'title' => lang('Note.replies', [ - 'numberOfReplies' => $note->replies_count, - ]), - ], - ) ?> - <?= anchor_popup( - route_to('note-remote-action', $podcast->name, $note->id, 'reblog'), - icon('repeat', 'text-2xl mr-1 text-gray-400') . $note->reblogs_count, - [ - 'class' => 'inline-flex items-center hover:underline', - 'width' => 420, - 'height' => 620, - 'title' => lang('Note.reblogs', [ - 'numberOfReblogs' => $note->reblogs_count, - ]), - ], - ) ?> - <?= anchor_popup( - route_to('note-remote-action', $podcast->name, $note->id, 'favourite'), - icon('heart', 'text-2xl mr-1 text-gray-400') . $note->favourites_count, - [ - 'class' => 'inline-flex items-center hover:underline', - 'width' => 420, - 'height' => 620, - 'title' => lang('Note.favourites', [ - 'numberOfFavourites' => $note->favourites_count, - ]), - ], - ) ?> -</footer> diff --git a/app/Views/podcast/_partials/note_authenticated.php b/app/Views/podcast/_partials/note_authenticated.php deleted file mode 100644 index 14973c7ea8..0000000000 --- a/app/Views/podcast/_partials/note_authenticated.php +++ /dev/null @@ -1,40 +0,0 @@ -<article class="relative z-10 w-full bg-white shadow-md rounded-2xl"> - <header class="flex px-6 py-4"> - <img src="<?= $note->actor - ->avatar_image_url ?>" alt="<?= $note->display_name ?>" class="w-12 h-12 mr-4 rounded-full" /> - <div class="flex flex-col min-w-0"> - <a href="<?= $note->actor - ->uri ?>" class="flex items-baseline hover:underline" <?= $note - ->actor->is_local - ? '' - : 'target="_blank" rel="noopener noreferrer"' ?>> - <span class="mr-2 font-semibold truncate"><?= $note->actor - ->display_name ?></span> - <span class="text-sm text-gray-500 truncate">@<?= $note->actor - ->username . - ($note->actor->is_local - ? '' - : '@' . $note->actor->domain) ?></span> - </a> - <a href="<?= route_to('note', $podcast->name, $note->id) ?>" - class="text-xs text-gray-500"> - <time - itemprop="published" - datetime="<?= $note->published_at->format(DateTime::ATOM) ?>" - title="<?= $note->published_at ?>" - ><?= lang('Common.mediumDate', [$note->published_at]) ?></time> - </a> - </div> - </header> - <div class="px-6 mb-4 note-content"><?= $note->message_html ?></div> - <?php if ($note->episode_id): ?> - <?= view('podcast/_partials/episode_card', [ - 'episode' => $note->episode, - ]) ?> - <?php elseif ($note->has_preview_card): ?> - <?= view('podcast/_partials/preview_card', [ - 'preview_card' => $note->preview_card, - ]) ?> - <?php endif; ?> - <?= $this->include('podcast/_partials/note_actions_authenticated') ?> -</article> diff --git a/app/Views/podcast/_partials/reblog.php b/app/Views/podcast/_partials/reblog.php index 65d6d9c150..8b192bb9db 100644 --- a/app/Views/podcast/_partials/reblog.php +++ b/app/Views/podcast/_partials/reblog.php @@ -3,45 +3,45 @@ 'repeat', 'text-lg mr-2 text-gray-400', ) . - lang('Note.actor_shared', [ - 'actor' => $note->actor->display_name, + lang('Status.actor_shared', [ + 'actor' => $status->actor->display_name, ]) ?></p> <header class="flex px-6 py-4"> - <img src="<?= $note->actor - ->avatar_image_url ?>" alt="<?= $note->display_name ?>" class="w-12 h-12 mr-4 rounded-full" /> + <img src="<?= $status->actor + ->avatar_image_url ?>" alt="<?= $status->display_name ?>" class="w-12 h-12 mr-4 rounded-full" /> <div class="flex flex-col min-w-0"> - <a href="<?= $note->actor - ->uri ?>" class="flex items-baseline hover:underline" <?= $note + <a href="<?= $status->actor + ->uri ?>" class="flex items-baseline hover:underline" <?= $status ->actor->is_local ? '' : 'target="_blank" rel="noopener noreferrer"' ?>> - <span class="mr-2 font-semibold truncate"><?= $note->actor + <span class="mr-2 font-semibold truncate"><?= $status->actor ->display_name ?></span> - <span class="text-sm text-gray-500 truncate">@<?= $note->actor + <span class="text-sm text-gray-500 truncate">@<?= $status->actor ->username . - ($note->actor->is_local + ($status->actor->is_local ? '' - : '@' . $note->actor->domain) ?></span> + : '@' . $status->actor->domain) ?></span> </a> - <a href="<?= route_to('note', $podcast->name, $note->id) ?>" + <a href="<?= route_to('status', $podcast->name, $status->id) ?>" class="text-xs text-gray-500"> <time itemprop="published" - datetime="<?= $note->published_at->format(DateTime::ATOM) ?>" - title="<?= $note->published_at ?>" - ><?= lang('Common.mediumDate', [$note->published_at]) ?></time> + datetime="<?= $status->published_at->format(DateTime::ATOM) ?>" + title="<?= $status->published_at ?>" + ><?= lang('Common.mediumDate', [$status->published_at]) ?></time> </a> </div> </header> - <div class="px-6 mb-4 note-content"><?= $note->message_html ?></div> - <?php if ($note->episode_id): ?> + <div class="px-6 mb-4 status-content"><?= $status->message_html ?></div> + <?php if ($status->episode_id): ?> <?= view('podcast/_partials/episode_card', [ - 'episode' => $note->episode, + 'episode' => $status->episode, ]) ?> - <?php elseif ($note->has_preview_card): ?> + <?php elseif ($status->has_preview_card): ?> <?= view('podcast/_partials/preview_card', [ - 'preview_card' => $note->preview_card, + 'preview_card' => $status->preview_card, ]) ?> <?php endif; ?> - <?= $this->include('podcast/_partials/note_actions') ?> + <?= $this->include('podcast/_partials/status_actions') ?> </article> diff --git a/app/Views/podcast/_partials/reblog_authenticated.php b/app/Views/podcast/_partials/reblog_authenticated.php index 80c2431e0a..d3bd79eb26 100644 --- a/app/Views/podcast/_partials/reblog_authenticated.php +++ b/app/Views/podcast/_partials/reblog_authenticated.php @@ -3,45 +3,45 @@ 'repeat', 'text-lg mr-2 text-gray-400', ) . - lang('Note.actor_shared', [ - 'actor' => $note->actor->display_name, + lang('Status.actor_shared', [ + 'actor' => $status->actor->display_name, ]) ?></p> <header class="flex px-6 py-4"> - <img src="<?= $note->actor - ->avatar_image_url ?>" alt="<?= $note->display_name ?>" class="w-12 h-12 mr-4 rounded-full" /> + <img src="<?= $status->actor + ->avatar_image_url ?>" alt="<?= $status->display_name ?>" class="w-12 h-12 mr-4 rounded-full" /> <div class="flex flex-col min-w-0"> - <a href="<?= $note->actor - ->uri ?>" class="flex items-baseline hover:underline" <?= $note + <a href="<?= $status->actor + ->uri ?>" class="flex items-baseline hover:underline" <?= $status ->actor->is_local ? '' : 'target="_blank" rel="noopener noreferrer"' ?>> - <span class="mr-2 font-semibold truncate"><?= $note->actor + <span class="mr-2 font-semibold truncate"><?= $status->actor ->display_name ?></span> - <span class="text-sm text-gray-500 truncate">@<?= $note->actor + <span class="text-sm text-gray-500 truncate">@<?= $status->actor ->username . - ($note->actor->is_local + ($status->actor->is_local ? '' - : '@' . $note->actor->domain) ?></span> + : '@' . $status->actor->domain) ?></span> </a> - <a href="<?= route_to('note', $podcast->name, $note->id) ?>" + <a href="<?= route_to('status', $podcast->name, $status->id) ?>" class="text-xs text-gray-500"> <time itemprop="published" - datetime="<?= $note->published_at->format(DateTime::ATOM) ?>" - title="<?= $note->published_at ?>" - ><?= lang('Common.mediumDate', [$note->published_at]) ?></time> + datetime="<?= $status->published_at->format(DateTime::ATOM) ?>" + title="<?= $status->published_at ?>" + ><?= lang('Common.mediumDate', [$status->published_at]) ?></time> </a> </div> </header> - <div class="px-6 mb-4 note-content"><?= $note->message_html ?></div> - <?php if ($note->episode_id): ?> + <div class="px-6 mb-4 status-content"><?= $status->message_html ?></div> + <?php if ($status->episode_id): ?> <?= view('podcast/_partials/episode_card', [ - 'episode' => $note->episode, + 'episode' => $status->episode, ]) ?> - <?php elseif ($note->has_preview_card): ?> + <?php elseif ($status->has_preview_card): ?> <?= view('podcast/_partials/preview_card', [ - 'preview_card' => $note->preview_card, + 'preview_card' => $status->preview_card, ]) ?> <?php endif; ?> - <?= $this->include('podcast/_partials/note_actions_authenticated') ?> + <?= $this->include('podcast/_partials/status_actions_authenticated') ?> </article> diff --git a/app/Views/podcast/_partials/reply.php b/app/Views/podcast/_partials/reply.php index 8476bfd462..8fb48bf8b2 100644 --- a/app/Views/podcast/_partials/reply.php +++ b/app/Views/podcast/_partials/reply.php @@ -18,7 +18,7 @@ title="<?= $reply->published_at ?>" ><?= lang('Common.mediumDate', [$reply->published_at]) ?></time> </header> - <p class="mb-2 note-content"><?= $reply->message_html ?></p> + <p class="mb-2 status-content"><?= $reply->message_html ?></p> <?php if ($reply->has_preview_card): ?> <?= view('podcast/_partials/preview_card', [ 'preview_card' => $reply->preview_card, diff --git a/app/Views/podcast/_partials/reply_actions.php b/app/Views/podcast/_partials/reply_actions.php index 572637d719..7e69414358 100644 --- a/app/Views/podcast/_partials/reply_actions.php +++ b/app/Views/podcast/_partials/reply_actions.php @@ -1,34 +1,34 @@ <footer class="mt-2 space-x-6 text-sm"> <?= anchor( - route_to('note', $podcast->name, $reply->id), + route_to('status', $podcast->name, $reply->id), icon('chat', 'text-xl mr-1 text-gray-400') . $reply->replies_count, [ 'class' => 'inline-flex items-center hover:underline', - 'title' => lang('Note.replies', [ + 'title' => lang('Status.replies', [ 'numberOfReplies' => $reply->replies_count, ]), ], ) ?> <?= anchor_popup( - route_to('note-remote-action', $podcast->name, $reply->id, 'reblog'), + route_to('status-remote-action', $podcast->name, $reply->id, 'reblog'), icon('repeat', 'text-xl mr-1 text-gray-400') . $reply->reblogs_count, [ 'class' => 'inline-flex items-center hover:underline', 'width' => 420, 'height' => 620, - 'title' => lang('Note.reblogs', [ + 'title' => lang('Status.reblogs', [ 'numberOfReblogs' => $reply->reblogs_count, ]), ], ) ?> <?= anchor_popup( - route_to('note-remote-action', $podcast->name, $reply->id, 'favourite'), + route_to('status-remote-action', $podcast->name, $reply->id, 'favourite'), icon('heart', 'text-xl mr-1 text-gray-400') . $reply->favourites_count, [ 'class' => 'inline-flex items-center hover:underline', 'width' => 420, 'height' => 620, - 'title' => lang('Note.favourites', [ + 'title' => lang('Status.favourites', [ 'numberOfFavourites' => $reply->favourites_count, ]), ], diff --git a/app/Views/podcast/_partials/reply_actions_authenticated.php b/app/Views/podcast/_partials/reply_actions_authenticated.php index b669cab072..faa7a31072 100644 --- a/app/Views/podcast/_partials/reply_actions_authenticated.php +++ b/app/Views/podcast/_partials/reply_actions_authenticated.php @@ -1,29 +1,29 @@ <footer class="mt-2 text-sm"> <form action="<?= route_to( - 'note-attempt-action', + 'status-attempt-action', interact_as_actor()->username, $reply->id, ) ?>" method="POST" class="flex items-start"> <?= csrf_field() ?> <?= anchor( - route_to('note', $podcast->name, $reply->id), + route_to('status', $podcast->name, $reply->id), icon('chat', 'text-xl mr-1 text-gray-400') . $reply->replies_count, [ 'class' => 'inline-flex items-center mr-6 hover:underline', - 'title' => lang('Note.replies', [ + 'title' => lang('Status.replies', [ 'numberOfReplies' => $reply->replies_count, ]), ], ) ?> <button type="submit" name="action" value="reblog" class="inline-flex items-center mr-6 hover:underline" title="<?= lang( - 'Note.reblogs', + 'Status.reblogs', [ 'numberOfReblogs' => $reply->reblogs_count, ], ) ?>"><?= icon('repeat', 'text-xl mr-1 text-gray-400') . $reply->reblogs_count ?></button> <button type="submit" name="action" value="favourite" class="inline-flex items-center mr-6 hover:underline" title="<?= lang( - 'Note.favourites', + 'Status.favourites', [ 'numberOfFavourites' => $reply->favourites_count, ], @@ -40,33 +40,33 @@ '-more-dropdown-menu' ?>" class="flex flex-col py-2 text-sm bg-white border rounded-lg shadow" aria-labelledby="<?= $reply->id . '-more-dropdown' ?>" data-dropdown="menu" data-dropdown-placement="bottom"> <?= anchor( - route_to('note', $podcast->name, $reply->id), - lang('Note.expand'), + route_to('status', $podcast->name, $reply->id), + lang('Status.expand'), [ 'class' => 'px-4 py-1 hover:bg-gray-100', ], ) ?> <form action="<?= route_to( - 'note-attempt-block-actor', + 'status-attempt-block-actor', interact_as_actor()->username, $reply->id, ) ?>" method="POST"> <?= csrf_field() ?> <button class="w-full px-4 py-1 text-left hover:bg-gray-100"><?= lang( - 'Note.block_actor', + 'Status.block_actor', [ 'actorUsername' => $reply->actor->username, ], ) ?></button> </form> <form action="<?= route_to( - 'note-attempt-block-domain', + 'status-attempt-block-domain', interact_as_actor()->username, $reply->id, ) ?>" method="POST"> <?= csrf_field() ?> <button class="w-full px-4 py-1 text-left hover:bg-gray-100"><?= lang( - 'Note.block_domain', + 'Status.block_domain', [ 'actorDomain' => $reply->actor->domain, ], @@ -75,13 +75,13 @@ <?php if ($reply->actor->is_local): ?> <hr class="my-2" /> <form action="<?= route_to( - 'note-attempt-delete', + 'status-attempt-delete', $reply->actor->username, $reply->id, ) ?>" method="POST"> <?= csrf_field() ?> <button class="w-full px-4 py-1 font-semibold text-left text-red-600 hover:bg-gray-100"><?= lang( - 'Note.delete', + 'Status.delete', ) ?></button> </form> <?php endif; ?> diff --git a/app/Views/podcast/_partials/reply_authenticated.php b/app/Views/podcast/_partials/reply_authenticated.php index 72d2b6353f..ab264ce53d 100644 --- a/app/Views/podcast/_partials/reply_authenticated.php +++ b/app/Views/podcast/_partials/reply_authenticated.php @@ -18,7 +18,7 @@ title="<?= $reply->published_at ?>" ><?= lang('Common.mediumDate', [$reply->published_at]) ?></time> </header> - <p class="mb-2 note-content"><?= $reply->message_html ?></p> + <p class="mb-2 status-content"><?= $reply->message_html ?></p> <?php if ($reply->has_preview_card): ?> <?= view('podcast/_partials/preview_card', [ 'preview_card' => $reply->preview_card, diff --git a/app/Views/podcast/_partials/status.php b/app/Views/podcast/_partials/status.php new file mode 100644 index 0000000000..b707d1275b --- /dev/null +++ b/app/Views/podcast/_partials/status.php @@ -0,0 +1,40 @@ +<article class="relative z-10 w-full bg-white shadow-md rounded-2xl"> + <header class="flex px-6 py-4"> + <img src="<?= $status->actor + ->avatar_image_url ?>" alt="<?= $status->display_name ?>" class="w-12 h-12 mr-4 rounded-full" /> + <div class="flex flex-col min-w-0"> + <a href="<?= $status->actor + ->uri ?>" class="flex items-baseline hover:underline" <?= $status + ->actor->is_local + ? '' + : 'target="_blank" rel="noopener noreferrer"' ?>> + <span class="mr-2 font-semibold truncate"><?= $status->actor + ->display_name ?></span> + <span class="text-sm text-gray-500 truncate">@<?= $status->actor + ->username . + ($status->actor->is_local + ? '' + : '@' . $status->actor->domain) ?></span> + </a> + <a href="<?= route_to('status', $podcast->name, $status->id) ?>" + class="text-xs text-gray-500"> + <time + itemprop="published" + datetime="<?= $status->published_at->format(DateTime::ATOM) ?>" + title="<?= $status->published_at ?>" + ><?= lang('Common.mediumDate', [$status->published_at]) ?></time> + </a> + </div> + </header> + <div class="px-6 mb-4 status-content"><?= $status->message_html ?></div> + <?php if ($status->episode_id): ?> + <?= view('podcast/_partials/episode_card', [ + 'episode' => $status->episode, + ]) ?> + <?php elseif ($status->has_preview_card): ?> + <?= view('podcast/_partials/preview_card', [ + 'preview_card' => $status->preview_card, + ]) ?> + <?php endif; ?> + <?= $this->include('podcast/_partials/status_actions') ?> +</article> diff --git a/app/Views/podcast/_partials/status_actions.php b/app/Views/podcast/_partials/status_actions.php new file mode 100644 index 0000000000..625c684af5 --- /dev/null +++ b/app/Views/podcast/_partials/status_actions.php @@ -0,0 +1,36 @@ +<footer class="flex justify-around px-6 py-3"> + <?= anchor( + route_to('status', $podcast->name, $status->id), + icon('chat', 'text-2xl mr-1 text-gray-400') . $status->replies_count, + [ + 'class' => 'inline-flex items-center hover:underline', + 'title' => lang('Status.replies', [ + 'numberOfReplies' => $status->replies_count, + ]), + ], + ) ?> + <?= anchor_popup( + route_to('status-remote-action', $podcast->name, $status->id, 'reblog'), + icon('repeat', 'text-2xl mr-1 text-gray-400') . $status->reblogs_count, + [ + 'class' => 'inline-flex items-center hover:underline', + 'width' => 420, + 'height' => 620, + 'title' => lang('Status.reblogs', [ + 'numberOfReblogs' => $status->reblogs_count, + ]), + ], + ) ?> + <?= anchor_popup( + route_to('status-remote-action', $podcast->name, $status->id, 'favourite'), + icon('heart', 'text-2xl mr-1 text-gray-400') . $status->favourites_count, + [ + 'class' => 'inline-flex items-center hover:underline', + 'width' => 420, + 'height' => 620, + 'title' => lang('Status.favourites', [ + 'numberOfFavourites' => $status->favourites_count, + ]), + ], + ) ?> +</footer> diff --git a/app/Views/podcast/_partials/note_actions_authenticated.php b/app/Views/podcast/_partials/status_actions_authenticated.php similarity index 61% rename from app/Views/podcast/_partials/note_actions_authenticated.php rename to app/Views/podcast/_partials/status_actions_authenticated.php index 59fdf37071..8d4aab1427 100644 --- a/app/Views/podcast/_partials/note_actions_authenticated.php +++ b/app/Views/podcast/_partials/status_actions_authenticated.php @@ -1,87 +1,87 @@ <footer class="px-6 py-3"> <form action="<?= route_to( - 'note-attempt-action', + 'status-attempt-action', interact_as_actor()->username, - $note->id, + $status->id, ) ?>" method="POST" class="flex justify-around"> <?= csrf_field() ?> <?= anchor( - route_to('note', $podcast->name, $note->id), - icon('chat', 'text-2xl mr-1 text-gray-400') . $note->replies_count, + route_to('status', $podcast->name, $status->id), + icon('chat', 'text-2xl mr-1 text-gray-400') . $status->replies_count, [ 'class' => 'inline-flex items-center hover:underline', - 'title' => lang('Note.replies', [ - 'numberOfReplies' => $note->replies_count, + 'title' => lang('Status.replies', [ + 'numberOfReplies' => $status->replies_count, ]), ], ) ?> <button type="submit" name="action" value="reblog" class="inline-flex items-center hover:underline" title="<?= lang( - 'Note.reblogs', + 'Status.reblogs', [ - 'numberOfReblogs' => $note->reblogs_count, + 'numberOfReblogs' => $status->reblogs_count, ], ) ?>"><?= icon('repeat', 'text-2xl mr-1 text-gray-400') . - $note->reblogs_count ?></button> + $status->reblogs_count ?></button> <button type="submit" name="action" value="favourite" class="inline-flex items-center hover:underline" title="<?= lang( - 'Note.favourites', + 'Status.favourites', [ - 'numberOfFavourites' => $note->favourites_count, + 'numberOfFavourites' => $status->favourites_count, ], ) ?>"><?= icon('heart', 'text-2xl mr-1 text-gray-400') . - $note->favourites_count ?></button> - <button id="<?= $note->id . - '-more-dropdown' ?>" type="button" class="px-2 py-1 text-2xl text-gray-500 outline-none focus:ring" data-dropdown="button" data-dropdown-target="<?= $note->id . + $status->favourites_count ?></button> + <button id="<?= $status->id . + '-more-dropdown' ?>" type="button" class="px-2 py-1 text-2xl text-gray-500 outline-none focus:ring" data-dropdown="button" data-dropdown-target="<?= $status->id . '-more-dropdown-menu' ?>" aria-label="<?= lang( 'Common.more', ) ?>" aria-haspopup="true" aria-expanded="false"><?= icon('more') ?> </button> </form> - <nav id="<?= $note->id . - '-more-dropdown-menu' ?>" class="flex flex-col py-2 text-sm bg-white border rounded-lg shadow" aria-labelledby="<?= $note->id . + <nav id="<?= $status->id . + '-more-dropdown-menu' ?>" class="flex flex-col py-2 text-sm bg-white border rounded-lg shadow" aria-labelledby="<?= $status->id . '-more-dropdown' ?>" data-dropdown="menu" data-dropdown-placement="bottom"> <?= anchor( - route_to('note', $podcast->name, $note->id), - lang('Note.expand'), + route_to('status', $podcast->name, $status->id), + lang('Status.expand'), [ 'class' => 'px-4 py-1 hover:bg-gray-100', ], ) ?> <form action="<?= route_to( - 'note-attempt-block-actor', + 'status-attempt-block-actor', interact_as_actor()->username, - $note->id, + $status->id, ) ?>" method="POST"> <?= csrf_field() ?> <button class="w-full px-4 py-1 text-left hover:bg-gray-100"><?= lang( - 'Note.block_actor', + 'Status.block_actor', [ - 'actorUsername' => $note->actor->username, + 'actorUsername' => $status->actor->username, ], ) ?></button> </form> <form action="<?= route_to( - 'note-attempt-block-domain', + 'status-attempt-block-domain', interact_as_actor()->username, - $note->id, + $status->id, ) ?>" method="POST"> <?= csrf_field() ?> <button class="w-full px-4 py-1 text-left hover:bg-gray-100"><?= lang( - 'Note.block_domain', + 'Status.block_domain', [ - 'actorDomain' => $note->actor->domain, + 'actorDomain' => $status->actor->domain, ], ) ?></button> </form> - <?php if ($note->actor->is_local): ?> + <?php if ($status->actor->is_local): ?> <hr class="my-2" /> <form action="<?= route_to( - 'note-attempt-delete', - $note->actor->username, - $note->id, + 'status-attempt-delete', + $status->actor->username, + $status->id, ) ?>" method="POST"> <?= csrf_field() ?> <button class="w-full px-4 py-1 font-semibold text-left text-red-600 hover:bg-gray-100"><?= lang( - 'Note.delete', + 'Status.delete', ) ?></button> </form> <?php endif; ?> diff --git a/app/Views/podcast/_partials/status_authenticated.php b/app/Views/podcast/_partials/status_authenticated.php new file mode 100644 index 0000000000..a4453239f4 --- /dev/null +++ b/app/Views/podcast/_partials/status_authenticated.php @@ -0,0 +1,40 @@ +<article class="relative z-10 w-full bg-white shadow-md rounded-2xl"> + <header class="flex px-6 py-4"> + <img src="<?= $status->actor + ->avatar_image_url ?>" alt="<?= $status->display_name ?>" class="w-12 h-12 mr-4 rounded-full" /> + <div class="flex flex-col min-w-0"> + <a href="<?= $status->actor + ->uri ?>" class="flex items-baseline hover:underline" <?= $status + ->actor->is_local + ? '' + : 'target="_blank" rel="noopener noreferrer"' ?>> + <span class="mr-2 font-semibold truncate"><?= $status->actor + ->display_name ?></span> + <span class="text-sm text-gray-500 truncate">@<?= $status->actor + ->username . + ($status->actor->is_local + ? '' + : '@' . $status->actor->domain) ?></span> + </a> + <a href="<?= route_to('status', $podcast->name, $status->id) ?>" + class="text-xs text-gray-500"> + <time + itemprop="published" + datetime="<?= $status->published_at->format(DateTime::ATOM) ?>" + title="<?= $status->published_at ?>" + ><?= lang('Common.mediumDate', [$status->published_at]) ?></time> + </a> + </div> + </header> + <div class="px-6 mb-4 status-content"><?= $status->message_html ?></div> + <?php if ($status->episode_id): ?> + <?= view('podcast/_partials/episode_card', [ + 'episode' => $status->episode, + ]) ?> + <?php elseif ($status->has_preview_card): ?> + <?= view('podcast/_partials/preview_card', [ + 'preview_card' => $status->preview_card, + ]) ?> + <?php endif; ?> + <?= $this->include('podcast/_partials/status_actions_authenticated') ?> +</article> diff --git a/app/Views/podcast/_partials/note_with_replies.php b/app/Views/podcast/_partials/status_with_replies.php similarity index 53% rename from app/Views/podcast/_partials/note_with_replies.php rename to app/Views/podcast/_partials/status_with_replies.php index c33ed4cb62..11f2a7b6fc 100644 --- a/app/Views/podcast/_partials/note_with_replies.php +++ b/app/Views/podcast/_partials/status_with_replies.php @@ -1,10 +1,10 @@ -<?= $this->include('podcast/_partials/note') ?> -<div class="-mt-2 overflow-hidden border-b border-l border-r note-replies rounded-b-xl"> +<?= $this->include('podcast/_partials/status') ?> +<div class="-mt-2 overflow-hidden border-b border-l border-r status-replies rounded-b-xl"> <div class="px-6 pt-8 pb-4 bg-gray-50"> <?= anchor_popup( - route_to('note-remote-action', $podcast->name, $note->id, 'reply'), - lang('Note.reply_to', ['actorUsername' => $note->actor->username]), + route_to('status-remote-action', $podcast->name, $status->id, 'reply'), + lang('Status.reply_to', ['actorUsername' => $status->actor->username]), [ 'class' => 'text-center justify-center font-semibold rounded-full shadow relative z-10 px-4 py-2 w-full bg-rose-600 text-white inline-flex items-center hover:bg-rose-700', @@ -15,8 +15,8 @@ </div> -<?php if ($note->has_replies): ?> - <?php foreach ($note->replies as $reply): ?> +<?php if ($status->has_replies): ?> + <?php foreach ($status->replies as $reply): ?> <?= view('podcast/_partials/reply', ['reply' => $reply]) ?> <?php endforeach; ?> <?php endif; ?> diff --git a/app/Views/podcast/_partials/note_with_replies_authenticated.php b/app/Views/podcast/_partials/status_with_replies_authenticated.php similarity index 65% rename from app/Views/podcast/_partials/note_with_replies_authenticated.php rename to app/Views/podcast/_partials/status_with_replies_authenticated.php index f91ef54013..eb6d330817 100644 --- a/app/Views/podcast/_partials/note_with_replies_authenticated.php +++ b/app/Views/podcast/_partials/status_with_replies_authenticated.php @@ -1,7 +1,7 @@ -<?= $this->include('podcast/_partials/note_authenticated') ?> -<div class="-mt-2 overflow-hidden border-b border-l border-r note-replies rounded-b-xl"> +<?= $this->include('podcast/_partials/status_authenticated') ?> +<div class="-mt-2 overflow-hidden border-b border-l border-r status-replies rounded-b-xl"> <?= form_open( - route_to('note-attempt-action', interact_as_actor()->username, $note->id), + route_to('status-attempt-action', interact_as_actor()->username, $status->id), [ 'class' => 'bg-gray-50 flex px-6 pt-8 pb-4', ], @@ -16,8 +16,8 @@ 'name' => 'message', 'class' => 'form-textarea mb-4 w-full', 'required' => 'required', - 'placeholder' => lang('Note.form.reply_to_placeholder', [ - 'actorUsername' => $note->actor->username, + 'placeholder' => lang('Status.form.reply_to_placeholder', [ + 'actorUsername' => $status->actor->username, ]), ], old('message', '', false), @@ -26,7 +26,7 @@ ], ) ?> <?= button( - lang('Note.form.submit_reply'), + lang('Status.form.submit_reply'), '', ['variant' => 'primary', 'size' => 'small'], [ @@ -39,8 +39,8 @@ </div> <?= form_close() ?> -<?php if ($note->has_replies): ?> - <?php foreach ($note->replies as $reply): ?> +<?php if ($status->has_replies): ?> + <?php foreach ($status->replies as $reply): ?> <?= view('podcast/_partials/reply_authenticated', [ 'reply' => $reply, ]) ?> diff --git a/app/Views/podcast/activity.php b/app/Views/podcast/activity.php index eb6dd5b731..d6127c6109 100644 --- a/app/Views/podcast/activity.php +++ b/app/Views/podcast/activity.php @@ -39,13 +39,13 @@ </nav> <section class="max-w-2xl px-6 py-8 mx-auto space-y-8"> -<?php foreach ($notes as $note): ?> - <?php if ($note->reblog_of_id !== null): ?> +<?php foreach ($statuses as $status): ?> + <?php if ($status->reblog_of_id !== null): ?> <?= view('podcast/_partials/reblog', [ - 'note' => $note->reblog_of_note, + 'status' => $status->reblog_of_status, ]) ?> <?php else: ?> - <?= view('podcast/_partials/note', ['note' => $note]) ?> + <?= view('podcast/_partials/status', ['status' => $status]) ?> <?php endif; ?> <?php endforeach; ?> </section> diff --git a/app/Views/podcast/activity_authenticated.php b/app/Views/podcast/activity_authenticated.php index d74f16c64f..6d67b77079 100644 --- a/app/Views/podcast/activity_authenticated.php +++ b/app/Views/podcast/activity_authenticated.php @@ -39,7 +39,7 @@ </nav> <section class="max-w-2xl px-6 py-8 mx-auto"> -<?= form_open(route_to('note-attempt-create', interact_as_actor()->username), [ +<?= form_open(route_to('status-attempt-create', interact_as_actor()->username), [ 'class' => 'flex p-4 bg-white shadow rounded-xl', ]) ?> <?= csrf_field() ?> @@ -56,7 +56,7 @@ 'name' => 'message', 'class' => 'form-textarea', 'required' => 'required', - 'placeholder' => lang('Note.form.message_placeholder'), + 'placeholder' => lang('Status.form.message_placeholder'), ], old('message', '', false), ['rows' => 2], @@ -66,7 +66,7 @@ 'name' => 'episode_url', 'class' => 'form-input mb-2', 'placeholder' => - lang('Note.form.episode_url_placeholder') . + lang('Status.form.episode_url_placeholder') . ' (' . lang('Common.optional') . ')', @@ -74,7 +74,7 @@ ]) ?> <?= button( - lang('Note.form.submit'), + lang('Status.form.submit'), '', ['variant' => 'primary', 'size' => 'small'], ['type' => 'submit', 'class' => 'self-end'], @@ -84,13 +84,13 @@ <hr class="my-4 border-2 border-pine-100"> <div class="space-y-8"> -<?php foreach ($notes as $note): ?> - <?php if ($note->reblog_of_id !== null): ?> +<?php foreach ($statuses as $status): ?> + <?php if ($status->reblog_of_id !== null): ?> <?= view('podcast/_partials/reblog_authenticated', [ - 'note' => $note->reblog_of_note, + 'status' => $status->reblog_of_status, ]) ?> <?php else: ?> - <?= view('podcast/_partials/note_authenticated', ['note' => $note]) ?> + <?= view('podcast/_partials/status_authenticated', ['status' => $status]) ?> <?php endif; ?> <?php endforeach; ?> </div> diff --git a/app/Views/podcast/episode.php b/app/Views/podcast/episode.php index 694313ae88..245a79d7d1 100644 --- a/app/Views/podcast/episode.php +++ b/app/Views/podcast/episode.php @@ -75,12 +75,12 @@ <?= anchor( route_to('episode', $podcast->name, $episode->slug), icon('chat', 'text-xl mr-1 text-gray-400') . - $episode->notes_total, + $episode->statuses_total, [ 'class' => 'inline-flex items-center hover:underline', - 'title' => lang('Episode.total_notes', [ - 'numberOfTotalNotes' => $episode->notes_total, + 'title' => lang('Episode.total_statuses', [ + 'numberOfTotalStatuses' => $episode->statuses_total, ]), ], ) ?> @@ -122,24 +122,24 @@ </header> <div class="tabset"> - <?php if ($episode->notes): ?> + <?php if ($episode->statuses): ?> <input type="radio" name="tabset" id="activity" aria-controls="activity" checked="checked" /> <label for="activity"><?= lang('Episode.activity') ?></label> <?php endif; ?> - <input type="radio" name="tabset" id="description" aria-controls="description" <?= $episode->notes + <input type="radio" name="tabset" id="description" aria-controls="description" <?= $episode->statuses ? '' : 'checked="checked"' ?> /> - <label for="description" class="<?= $episode->notes + <label for="description" class="<?= $episode->statuses ? '' : 'col-span-2' ?>"><?= lang('Episode.description') ?></label> <div class="tab-panels"> - <?php if ($episode->notes): ?> + <?php if ($episode->statuses): ?> <section id="activity" class="space-y-8 tab-panel"> - <?php foreach ($episode->notes as $note): ?> - <?= view('podcast/_partials/note', ['note' => $note]) ?> + <?php foreach ($episode->statuses as $status): ?> + <?= view('podcast/_partials/status', ['status' => $status]) ?> <?php endforeach; ?> </section> <?php endif; ?> diff --git a/app/Views/podcast/episode_authenticated.php b/app/Views/podcast/episode_authenticated.php index 6813299e9f..6d4198319a 100644 --- a/app/Views/podcast/episode_authenticated.php +++ b/app/Views/podcast/episode_authenticated.php @@ -75,12 +75,12 @@ <?= anchor( route_to('episode', $podcast->name, $episode->slug), icon('chat', 'text-xl mr-1 text-gray-400') . - $episode->notes_total, + $episode->statuses_total, [ 'class' => 'inline-flex items-center hover:underline', - 'title' => lang('Episode.total_notes', [ - 'numberOfTotalNotes' => $episode->notes_total, + 'title' => lang('Episode.total_statuses', [ + 'numberOfTotalStatuses' => $episode->statuses_total, ]), ], ) ?> @@ -130,7 +130,7 @@ <div class="tab-panels"> <section id="activity" class="space-y-8 tab-panel"> - <?= form_open(route_to('note-attempt-create', $podcast->name), [ + <?= form_open(route_to('status-attempt-create', $podcast->name), [ 'class' => 'flex p-4 bg-white shadow rounded-xl', ]) ?> <?= csrf_field() ?> @@ -148,7 +148,7 @@ 'class' => 'form-textarea mb-2', 'required' => 'required', 'placeholder' => lang( - 'Note.form.episode_message_placeholder', + 'Status.form.episode_message_placeholder', ), ], old('message', '', false), @@ -163,7 +163,7 @@ 'type' => 'hidden', ]) ?> <?= button( - lang('Note.form.submit'), + lang('Status.form.submit'), '', ['variant' => 'primary', 'size' => 'small'], ['type' => 'submit', 'class' => 'self-end'], @@ -171,9 +171,9 @@ </div> <?= form_close() ?> <hr class="my-4 border border-pine-100"> - <?php foreach ($episode->notes as $note): ?> - <?= view('podcast/_partials/note_authenticated', [ - 'note' => $note, + <?php foreach ($episode->statuses as $status): ?> + <?= view('podcast/_partials/status_authenticated', [ + 'status' => $status, ]) ?> <?php endforeach; ?> </section> diff --git a/app/Views/podcast/episodes.php b/app/Views/podcast/episodes.php index 5496241b6f..b4529c1863 100644 --- a/app/Views/podcast/episodes.php +++ b/app/Views/podcast/episodes.php @@ -121,12 +121,12 @@ <?= anchor( route_to('episode', $podcast->name, $episode->slug), icon('chat', 'text-xl mr-1 text-gray-400') . - $episode->notes_total, + $episode->statuses_total, [ 'class' => 'inline-flex items-center hover:underline', - 'title' => lang('Episode.total_notes', [ - 'numberOfTotalNotes' => $episode->notes_total, + 'title' => lang('Episode.total_statuses', [ + 'numberOfTotalStatuses' => $episode->statuses_total, ]), ], ) ?> diff --git a/app/Views/podcast/episodes_authenticated.php b/app/Views/podcast/episodes_authenticated.php index 9f63b0cd08..75e84dc153 100644 --- a/app/Views/podcast/episodes_authenticated.php +++ b/app/Views/podcast/episodes_authenticated.php @@ -121,12 +121,12 @@ <?= anchor( route_to('episode', $podcast->name, $episode->slug), icon('chat', 'text-xl mr-1 text-gray-400') . - $episode->notes_total, + $episode->statuses_total, [ 'class' => 'inline-flex items-center hover:underline', - 'title' => lang('Episode.total_notes', [ - 'numberOfTotalNotes' => $episode->notes_total, + 'title' => lang('Episode.total_statuses', [ + 'numberOfTotalStatuses' => $episode->statuses_total, ]), ], ) ?> diff --git a/app/Views/podcast/note.php b/app/Views/podcast/note.php deleted file mode 100644 index 810af1c16e..0000000000 --- a/app/Views/podcast/note.php +++ /dev/null @@ -1,38 +0,0 @@ -<?= $this->extend('podcast/_layout') ?> - -<?= $this->section('meta-tags') ?> - <title><?= lang('Note.title', [ - 'actorDisplayName' => $note->actor->display_name, - ]) ?></title> - <meta name="description" content="<?= $note->message ?>"/> - <meta property="og:title" content="<?= lang('Note.title', [ - 'actorDisplayName' => $note->actor->display_name, - ]) ?>"/> - <meta property="og:locale" content="<?= service( - 'request', - )->getLocale() ?>" /> - <meta property="og:site_name" content="<?= $note->actor->display_name ?>" /> - <meta property="og:url" content="<?= current_url() ?>" /> - <meta property="og:image" content="<?= $note->actor->avatar_image_url ?>" /> - <meta property="og:description" content="<?= $note->message ?>" /> -<?= $this->endSection() ?> - -<?= $this->section('content') ?> -<div class="max-w-2xl px-6 mx-auto"> - <nav class="py-3"> - <a href="<?= route_to('podcast-activity', $podcast->name) ?>" - class="inline-flex items-center px-4 py-2 text-sm"><?= icon( - 'arrow-left', - 'mr-2 text-lg', - ) . - lang('Note.back_to_actor_notes', [ - 'actor' => $note->actor->display_name, - ]) ?></a> - </nav> - <div class="pb-12"> - <?= $this->include('podcast/_partials/note_with_replies') ?> - </div> -</div> - -<?= $this->endSection() -?> diff --git a/app/Views/podcast/status.php b/app/Views/podcast/status.php new file mode 100644 index 0000000000..21dd8657b9 --- /dev/null +++ b/app/Views/podcast/status.php @@ -0,0 +1,38 @@ +<?= $this->extend('podcast/_layout') ?> + +<?= $this->section('meta-tags') ?> + <title><?= lang('Status.title', [ + 'actorDisplayName' => $status->actor->display_name, + ]) ?></title> + <meta name="description" content="<?= $status->message ?>"/> + <meta property="og:title" content="<?= lang('Status.title', [ + 'actorDisplayName' => $status->actor->display_name, + ]) ?>"/> + <meta property="og:locale" content="<?= service( + 'request', + )->getLocale() ?>" /> + <meta property="og:site_name" content="<?= $status->actor->display_name ?>" /> + <meta property="og:url" content="<?= current_url() ?>" /> + <meta property="og:image" content="<?= $status->actor->avatar_image_url ?>" /> + <meta property="og:description" content="<?= $status->message ?>" /> +<?= $this->endSection() ?> + +<?= $this->section('content') ?> +<div class="max-w-2xl px-6 mx-auto"> + <nav class="py-3"> + <a href="<?= route_to('podcast-activity', $podcast->name) ?>" + class="inline-flex items-center px-4 py-2 text-sm"><?= icon( + 'arrow-left', + 'mr-2 text-lg', + ) . + lang('Status.back_to_actor_statuses', [ + 'actor' => $status->actor->display_name, + ]) ?></a> + </nav> + <div class="pb-12"> + <?= $this->include('podcast/_partials/status_with_replies') ?> + </div> +</div> + +<?= $this->endSection() +?> diff --git a/app/Views/podcast/note_authenticated.php b/app/Views/podcast/status_authenticated.php similarity index 51% rename from app/Views/podcast/note_authenticated.php rename to app/Views/podcast/status_authenticated.php index 2d26d1b0a0..9b97dc9ff8 100644 --- a/app/Views/podcast/note_authenticated.php +++ b/app/Views/podcast/status_authenticated.php @@ -1,20 +1,20 @@ <?= $this->extend('podcast/_layout_authenticated') ?> <?= $this->section('meta-tags') ?> - <title><?= lang('Note.title', [ - 'actorDisplayName' => $note->actor->display_name, + <title><?= lang('Status.title', [ + 'actorDisplayName' => $status->actor->display_name, ]) ?></title> - <meta name="description" content="<?= $note->message ?>"/> - <meta property="og:title" content="<?= lang('Note.title', [ - 'actorDisplayName' => $note->actor->display_name, + <meta name="description" content="<?= $status->message ?>"/> + <meta property="og:title" content="<?= lang('Status.title', [ + 'actorDisplayName' => $status->actor->display_name, ]) ?>"/> <meta property="og:locale" content="<?= service( 'request', )->getLocale() ?>" /> - <meta property="og:site_name" content="<?= $note->actor->display_name ?>" /> + <meta property="og:site_name" content="<?= $status->actor->display_name ?>" /> <meta property="og:url" content="<?= current_url() ?>" /> - <meta property="og:image" content="<?= $note->actor->avatar_image_url ?>" /> - <meta property="og:description" content="<?= $note->message ?>" /> + <meta property="og:image" content="<?= $status->actor->avatar_image_url ?>" /> + <meta property="og:description" content="<?= $status->message ?>" /> <?= $this->endSection() ?> <?= $this->section('content') ?> @@ -25,13 +25,13 @@ 'arrow-left', 'mr-2 text-lg', ) . - lang('Note.back_to_actor_notes', [ - 'actor' => $note->actor->display_name, + lang('Status.back_to_actor_statuses', [ + 'actor' => $status->actor->display_name, ]) ?></a> </nav> <div class="pb-12"> <?= $this->include( - 'podcast/_partials/note_with_replies_authenticated', + 'podcast/_partials/status_with_replies_authenticated', ) ?> </div> </div> diff --git a/app/Views/podcast/note_remote_action.php b/app/Views/podcast/status_remote_action.php similarity index 76% rename from app/Views/podcast/note_remote_action.php rename to app/Views/podcast/status_remote_action.php index b457047241..9c6f0ffdba 100644 --- a/app/Views/podcast/note_remote_action.php +++ b/app/Views/podcast/status_remote_action.php @@ -7,22 +7,22 @@ <link rel="shortcut icon" type="image/png" href="/favicon.ico" /> <title><?= lang('ActivityPub.' . $action . '.title', [ - 'actorDisplayName' => $note->actor->display_name, + 'actorDisplayName' => $status->actor->display_name, ]) ?></title> - <meta name="description" content="<?= $note->message ?>"/> + <meta name="description" content="<?= $status->message ?>"/> <meta property="og:title" content="<?= lang( 'ActivityPub.' . $action . '.title', [ - 'actorDisplayName' => $note->actor->display_name, + 'actorDisplayName' => $status->actor->display_name, ], ) ?>"/> <meta property="og:locale" content="<?= service( 'request', )->getLocale() ?>" /> - <meta property="og:site_name" content="<?= $note->actor->display_name ?>" /> + <meta property="og:site_name" content="<?= $status->actor->display_name ?>" /> <meta property="og:url" content="<?= current_url() ?>" /> - <meta property="og:image" content="<?= $note->actor->avatar_image_url ?>" /> - <meta property="og:description" content="<?= $note->message ?>" /> + <meta property="og:image" content="<?= $status->actor->avatar_image_url ?>" /> + <meta property="og:description" content="<?= $status->message ?>" /> <link rel="stylesheet" href="/assets/index.css"/> <script src="/assets/podcast.js" type="module"></script> @@ -35,10 +35,10 @@ ) ?></h1> </header> <main class="flex-1 max-w-xl px-4 pb-8 mx-auto -mt-24"> - <?= $this->include('podcast/_partials/note') ?> + <?= $this->include('podcast/_partials/status') ?> <?= form_open( - route_to('note-attempt-remote-action', $note->id, $action), + route_to('status-attempt-remote-action', $status->id, $action), ['method' => 'post', 'class' => 'flex flex-col mt-8'], ) ?> <?= csrf_field() ?> -- GitLab