diff --git a/components/Blog/Controller/Post.php b/components/Blog/Controller/Post.php index df011930c9..6a27fcd326 100644 --- a/components/Blog/Controller/Post.php +++ b/components/Blog/Controller/Post.php @@ -27,6 +27,7 @@ use App\Core\ActorLocalRoles; use App\Core\Controller; use App\Core\Event; use App\Core\Form; +use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\HttpFoundation\RedirectResponse; use function App\Core\I18n\_m; use App\Core\Router\Router; @@ -100,6 +101,7 @@ class Post extends Controller } $form_params[] = ['visibility', ChoiceType::class, ['label' => _m('Visibility:'), 'multiple' => false, 'expanded' => false, 'choices' => $visibility_options]]; + $form_params[] = ['title', TextType::class, ['label' => _m('Title:'), 'constraints' => [new Length(['max' => 129])], 'required' => true]]; $form_params[] = ['content', TextareaType::class, ['label' => _m('Content:'), 'data' => $initial_content, 'attr' => ['placeholder' => _m($placeholder)], 'constraints' => [new Length(['max' => Common::config('site', 'text_limit')])]]]; $form_params[] = ['attachments', FileType::class, ['label' => _m('Attachments:'), 'multiple' => true, 'required' => false, 'invalid_message' => _m('Attachment not valid.')]]; $form_params[] = FormFields::language($actor, $context_actor, label: _m('Note language'), help: _m('The selected language will be federated and added as a lang attribute, preferred language can be set up in settings')); @@ -149,6 +151,7 @@ class Post extends Controller reply_to: $data['reply_to_id'], attachments: $data['attachments'], process_note_content_extra_args: $extra_args, + title: $data['title'], ); return new RedirectResponse($note->getConversationUrl()); diff --git a/components/Posting/Posting.php b/components/Posting/Posting.php index 3cf80df4ac..c51120566e 100644 --- a/components/Posting/Posting.php +++ b/components/Posting/Posting.php @@ -229,6 +229,7 @@ class Posting extends Component bool $flush_and_notify = true, ?string $rendered = null, string $source = 'web', + ?string $title = null, ): array { [$activity, $note, $attention_ids] = self::storeLocalNote( actor: $actor, @@ -246,6 +247,7 @@ class Posting extends Component source: $source ); $note->setType(NoteType::PAGE); + $note->setTitle($title); if ($flush_and_notify) { // Flush before notification diff --git a/plugins/ActivityPub/Util/Model/Note.php b/plugins/ActivityPub/Util/Model/Note.php index de2274f6c8..8fa79e2d48 100644 --- a/plugins/ActivityPub/Util/Model/Note.php +++ b/plugins/ActivityPub/Util/Model/Note.php @@ -147,6 +147,7 @@ class Note extends Model 'created' => new DateTime($type_note->get('published') ?? 'now'), 'content' => $type_note->get('content') ?? null, 'rendered' => $type_note->has('content') ? HTML::sanitize($type_note->get('content')) : null, + 'title' => $type_note->get('name') ?? null, 'content_type' => 'text/html', 'language_id' => $type_note->get('contentLang') ?? null, 'url' => $type_note->get('url') ?? $type_note->get('id'), @@ -336,6 +337,7 @@ class Note extends Model 'id' => $object->getUrl(), 'published' => $object->getCreated()->format(DateTimeInterface::RFC3339), 'attributedTo' => $object->getActor()->getUri(Router::ABSOLUTE_URL), + 'name' => $object->getTitle(), 'content' => $object->getRendered(), 'mediaType' => 'text/html', 'source' => ['content' => $object->getContent(), 'mediaType' => $object->getContentType()],