-
Notifications
You must be signed in to change notification settings - Fork 7
feat(content-distribution): editor plugin for distribution #167
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
* feat: content distribution class * feat: insert linked post * refactor: use site url instead of ID * chore: lint * feat: return errors on post insert * chore: lint * feat: support webhooks request priority * feat: unlink functionality and unit tests * chore: lint * feat: introduce 'linked_post_inserted' hook and listener * chore: lint * fix: listener hook name * fix: typo * chore: better docblocks * chore: remove redundant code * test: persist post hash * test: remove unnecessary assertion * refactor: distribute_post() to use handle_post_updated() method * refactor: post hash is now network post id * chore: update comment
feat: Add network util class
The old classname "Linked_Post" was still used instead of "Incoming_Post" causing sync to fail. ## How to test Probably eyeballing is enough
…sname fix: Include correct classname
Sounds good! How about messaging? We just leave the button disabled or do we add something extra? |
|
Added the non-publish post restriction in 0f7f73d |
Or maybe we do a "Publish & Distribute" in this case, instead of disabling it 🤔 |
Too dangerous. A publisher might find useful the "pre-publish checks" sidebar and add tags etc... |
I'd change the description to something like: "This [post_type_singularname] has not been published yet. Please publish the [post_type_singularname] before distributing it to any connections." |
Ah, I meant to comment on that. "Connections" is a Distributor plugin concept. Not sure if we need/want to use that here... they are "sites in the network"... or just "sites" |
|
"Network site(s)" is a common occurrence. Maybe that? |
|
Here's an example with the new paragraph using the proposed "network site" label:
Updated in 5f57b6a, let me know if I should tweak the "connection/network site" labeling. |
|
For the yellow notice saying that the post is distributed to other sites, I think it will break the UI if the list has too many sites (not that many actually)... Maybe just display the number of sites? Is it possible to add a "Manage" link that opens the sidebar panel? |
Good call! Updated in 649cf97
Unfortunately, the notice only supports a string. We also have to give up on the icon for the linked post notice... |
naxoc
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tested again and it works great. I'm also much happier with wording and the before-published behaviour 👍
| use Newspack_Network\Content_Distribution\Incoming_Post; | ||
| use Newspack_Network\Content_Distribution\Outgoing_Post; | ||
| use WP_Post; | ||
| use WP_Error; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This one is unused ;)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Whoops! Removed in 9a1516f
|
Thank you @naxoc, @thomasguillot, and @leogermani for your reviews here! 🙇 |
|
Hey @miguelpeixe, good job getting this PR merged! 🎉 Now, the Please check if this PR needs to be included in the "Upcoming Changes" and "Release Notes" doc. If it doesn't, simply remove the label. If it does, please add an entry to our shared document, with screenshots and testing instructions if applicable, then remove the label. Thank you! ❤️ |
# [2.4.0-alpha.1](v2.3.4...v2.4.0-alpha.1) (2025-01-10) ### Bug Fixes * **content-distribution:** post insertion hook and additional meta for incoming post event ([#173](#173)) ([48df13c](48df13c)) * load text domain on init hook ([#171](#171)) ([01fb89c](01fb89c)) ### Features * content distribution - experimental ([#168](#168)) ([dc837d8](dc837d8)) * **content-distribution:** add CLI command for distribute post ([#159](#159)) ([7a43b86](7a43b86)), closes [#155](#155) [#156](#156) [#157](#157) [#160](#160) [#165](#165) * **content-distribution:** canonical url ([#177](#177)) ([5ca60ce](5ca60ce)) * **content-distribution:** capability and admin page ([#176](#176)) ([5285285](5285285)) * **content-distribution:** control distribution meta and prevent multiple dispatches ([#170](#170)) ([e76a2dc](e76a2dc)) * **content-distribution:** editor plugin for distribution ([#167](#167)) ([e10aef4](e10aef4)) * **content-distribution:** handle status changes ([#166](#166)) ([4af5da1](4af5da1)) * **content-distribution:** log incoming post errors ([#182](#182)) ([74c9119](74c9119)) * **content-distribution:** posts column ([#178](#178)) ([8e07640](8e07640)) * **content-distribution:** reserved taxonomies ([#174](#174)) ([a2c54d2](a2c54d2)) * **content-distribution:** sync comment and ping statuses ([#179](#179)) ([90c5425](90c5425)) * **content-distribution:** sync post meta ([#163](#163)) ([353a3d8](353a3d8)) * **event-log:** collapse data ([#180](#180)) ([956219d](956219d)) * limit purchase of a network membership ([#169](#169)) ([deb2683](deb2683))
|
🎉 This PR is included in version 2.4.0-alpha.1 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
# [2.4.0](v2.3.4...v2.4.0) (2025-01-20) ### Bug Fixes * **content-distribution:** post insertion hook and additional meta for incoming post event ([#173](#173)) ([48df13c](48df13c)) * load text domain on init hook ([#171](#171)) ([01fb89c](01fb89c)) ### Features * content distribution - experimental ([#168](#168)) ([dc837d8](dc837d8)) * **content-distribution:** add CLI command for distribute post ([#159](#159)) ([7a43b86](7a43b86)), closes [#155](#155) [#156](#156) [#157](#157) [#160](#160) [#165](#165) * **content-distribution:** canonical url ([#177](#177)) ([5ca60ce](5ca60ce)) * **content-distribution:** capability and admin page ([#176](#176)) ([5285285](5285285)) * **content-distribution:** control distribution meta and prevent multiple dispatches ([#170](#170)) ([e76a2dc](e76a2dc)) * **content-distribution:** editor plugin for distribution ([#167](#167)) ([e10aef4](e10aef4)) * **content-distribution:** handle status changes ([#166](#166)) ([4af5da1](4af5da1)) * **content-distribution:** log incoming post errors ([#182](#182)) ([74c9119](74c9119)) * **content-distribution:** posts column ([#178](#178)) ([8e07640](8e07640)) * **content-distribution:** reserved taxonomies ([#174](#174)) ([a2c54d2](a2c54d2)) * **content-distribution:** sync comment and ping statuses ([#179](#179)) ([90c5425](90c5425)) * **content-distribution:** sync post meta ([#163](#163)) ([353a3d8](353a3d8)) * **event-log:** collapse data ([#180](#180)) ([956219d](956219d)) * limit purchase of a network membership ([#169](#169)) ([deb2683](deb2683))
|
🎉 This PR is included in version 2.4.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |


Implements an editor plugin for distributing a post.
My original intention was to strictly leverage
editPost()andsavePost()dispatches to update the distribution post meta and let our short-circuit hook handle validation. This did not work well for error handling, as there was no straightforward way to pass the error message to the editor. Because of that, I switched to an API endpoint.Selecting connections and distributing
Updating connections
Error message
Distributing an unsaved post
To prevent distributing an outdated version of the post, if the post has unsaved changes we'll enforce a post save before distributing:
A lot of nodes
Testing
This PR also inaugurates javascript assets to the plugin. Before anything, make sure to run
npm ci && npm run builddefine( 'NEWPACK_NETWORK_CONTENT_DISTRIBUTION', true );on all instances configMultiple nodes
src/content-distribution/distribute/index.jswith:Error handling
includes/content-distribution/class-outgoing-post.php: