Skip to content

Conversation

pfefferle
Copy link
Member

@pfefferle pfefferle commented Oct 13, 2025

Introduces a new 'ap_post' post type and related taxonomies for handling ActivityPub objects, including registration, CRUD operations, and taxonomy management. Updates create and update handlers to process non-interaction objects using the new Objects collection. Enhances debug functionality to support the new post type and taxonomies.

Proposed changes:

  • Added new Objects collection class with methods for creating, updating, and retrieving ActivityPub objects
  • Modified Create and Update handlers to differentiate between interactions (replies) and objects, routing each to appropriate collections
  • Enhanced debug functionality to support the new post type and taxonomies

Other information:

  • Have you written new tests for your changes, if applicable?

Testing instructions:

  • Go to '..'

Changelog entry

  • Automatically create a changelog entry from the details below.
Changelog Entry Details

Significance

  • Patch
  • Minor
  • Major

Type

  • Added - for new features
  • Changed - for changes in existing functionality
  • Deprecated - for soon-to-be removed features
  • Removed - for now removed features
  • Fixed - for any bug fixes
  • Security - in case of vulnerabilities

Message

Added a new ap_object post type and taxonomies for storing and managing incoming ActivityPub objects, with updated handlers

Introduces a new 'ap_object' post type and related taxonomies for handling ActivityPub objects, including registration, CRUD operations, and taxonomy management. Updates create and update handlers to process non-interaction objects using the new Objects collection. Enhances debug functionality to support the new post type and taxonomies.
Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR introduces support for ActivityPub object post types by adding a new 'ap_object' post type and related taxonomies to handle non-interaction ActivityPub objects like posts, notes, and media. The changes enable proper CRUD operations for ActivityPub objects and separate them from interactions (replies).

Key changes:

  • Added new Objects collection class with methods for creating, updating, and retrieving ActivityPub objects
  • Modified Create and Update handlers to differentiate between interactions (replies) and objects, routing each to appropriate collections
  • Enhanced debug functionality to support the new post type and taxonomies

Reviewed Changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
includes/collection/class-objects.php New Objects collection class providing CRUD operations for ActivityPub objects
includes/handler/class-create.php Refactored to handle both interactions and objects using separate methods
includes/handler/class-update.php Added object update handling alongside existing interaction updates
includes/class-post-types.php Registered new ap_object post type and related taxonomies (ap_tag, ap_object_type)
includes/debug.php Extended debug support for new post type and taxonomies
includes/collection/class-inbox.php Added POST_TYPE constant documentation
includes/collection/class-outbox.php Added POST_TYPE constant documentation

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

Introduced Sanitize::content() to process and format content for ActivityPub, including block support and HTML sanitization. Updated Objects class to use the new sanitizer for post content.
Introduces a new Blocks::html_to_blocks() method to convert HTML content into block format using DOMDocument parsing and block mapping. Refactors Sanitize to use this new method, replacing the previous regex-based paragraph splitting logic for improved accuracy and maintainability.
@github-actions github-actions bot added the [Focus] Editor Changes to the ActivityPub experience in the block editor label Oct 13, 2025
pfefferle and others added 6 commits October 13, 2025 12:16
The get_node_attributes private method was removed and the logic for setting the 'ordered' attribute on 'ol' nodes is now handled inline. This simplifies the code by reducing indirection and focusing only on the required attribute for ordered lists.
Refactored the Blocks class by renaming the html_to_blocks method to convert_from_html for improved clarity. Updated all references to use the new method name.
Introduces new PHPUnit tests for content sanitization in Sanitize::content, covering scenarios such as block support, malicious content, URLs, empty content, and safe HTML preservation. Also adds a test for Blocks::convert_from_html to verify HTML-to-block conversion when blocks are supported.
Introduces tests to verify content sanitization in Create handler, handling of private activities, and behavior with malformed object data. Also ensures required post types are registered during test setup.
Introduces a comprehensive PHPUnit test suite for the Activitypub\Collection\Objects class, covering object addition, updating, retrieval by GUID, and activity-to-post conversion, including edge cases and error handling. Mocks HTTP requests for remote actor fetching and ensures correct post type registration for test isolation.
@pfefferle pfefferle marked this pull request as ready for review October 13, 2025 12:57
matticbot and others added 6 commits October 13, 2025 15:00
Renamed update_actor and update_object to handle_actor_update and handle_object_update for improved clarity and consistency. Combined logic for handling object and interaction updates into handle_object_update. Updated corresponding test method names to match the new handler method names.
Changed the PHPUnit @Covers annotation from ::update_actor to ::handle_actor_update in Test_Update to accurately reflect the method being tested.
Changed the post type labels in the registration array from 'Posts'/'Post' to 'Objects'/'Object' to better reflect the content type.
Inserted a blank line after the use statements in class-update.php to improve code readability and adhere to coding standards.
Deleted the Blocks::convert_from_html method and its related test, and updated the Sanitize class to no longer convert HTML content to blocks. This simplifies content sanitization by removing automatic block conversion.
@pfefferle pfefferle changed the title Add support for ActivityPub object post type Add support for ActivityPub Reader-Item post type Oct 13, 2025
Refactored the Objects collection to Posts, updating class names, constants, and references in all relevant files. Adjusted post type from 'ap_object' to 'ap_post' and updated related taxonomy registrations, handlers, and tests to reflect the new naming convention. This improves clarity and consistency in the codebase.
Adds registration of the '_activitypub_remote_actor_id' post meta for the custom post type, storing the local ID of the remote actor that created the object. This includes type enforcement, a description, and a sanitize callback.
The 'ap_object_type' taxonomy has been added to the registered taxonomies array for the relevant post type, allowing posts to be associated with both 'ap_tag' and 'ap_object_type'.
Deleted the 'labels' arrays from the registration of 'ap_tag' and 'ap_object_type' taxonomies. This will cause WordPress to use default labels for these taxonomies.
Eliminated the 'rewrite' arguments for 'ap_tag' and 'ap_object_type' taxonomies, reverting to default rewrite behavior. This may affect the URLs generated for these taxonomies.
Refactors the method name from handle_actor_update to update_actor for clarity and updates all references accordingly.
Renamed the test method from test_handle_actor_update to test_update_actor and updated the @Covers annotation and method calls to reference update_actor instead of handle_actor_update. This aligns the test with the updated function name.
Initializes $result as WP_Error by default and updates the docblock for the 'activitypub_handled_update' action to specify more precise types for the $result parameter. Removes unreachable assignment in the comment update branch.
Adds explicit WP_Error objects when Create or Update operations fail, ensuring consistent error reporting. Also updates the docblock for the Create handler to reflect possible result types.
Moved the default WP_Error assignment to the start of handle_object_update, ensuring $result is always initialized. Removed redundant error assignment after update attempts.
Improves error handling in the update process by setting a WP_Error when actor data cannot be fetched, instead of returning early. This ensures the state variable reflects the failure, providing better feedback for downstream processes.
@pfefferle pfefferle requested review from Copilot and obenland October 13, 2025 17:50
Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 12 out of 12 changed files in this pull request and generated 2 comments.


Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

Standardizes return values in the Create handler by returning false instead of void in certain early exit cases, and returning nothing when creation fails. This improves consistency and clarity in function outcomes.
@pfefferle
Copy link
Member Author

@obenland how should we proceed with this PR? Keep it open and merge every other follow up PR into this branch or see that we can merge this one first?

@obenland
Copy link
Member

Either way, I'm happy for this one to go in soon. Can give it another look today

pfefferle and others added 3 commits October 16, 2025 07:04
Co-authored-by: Konstantin Obenland <[email protected]>
Renames the 'register_object_post_type' method to 'register_post_post_type' and updates its usage in the post types class. Also renames 'handle_object_update' to 'update_object' in the update handler and updates all references. Updates the return type annotation in the create handler to include 'false'.
@pfefferle pfefferle requested a review from obenland October 16, 2025 06:05
Replaces calls to Post_Types::register_object_post_type() with Post_Types::register_post_post_type() in test classes to reflect the updated method name.
@pfefferle pfefferle merged commit 88f1bfb into trunk Oct 16, 2025
13 checks passed
@pfefferle pfefferle deleted the cpt-ap-post branch October 16, 2025 16:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Feature] Collections [Focus] Editor Changes to the ActivityPub experience in the block editor [Tests] Includes Tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants