Skip to content

Commit

Permalink
initial (#867)
Browse files Browse the repository at this point in the history
  • Loading branch information
pfefferle authored Sep 13, 2024
1 parent 51dea3d commit 8bff92d
Show file tree
Hide file tree
Showing 3 changed files with 222 additions and 1 deletion.
13 changes: 13 additions & 0 deletions activitypub.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@

namespace Activitypub;

use WP_CLI;

use function Activitypub\is_blog_public;
use function Activitypub\site_supports_blocks;

Expand Down Expand Up @@ -218,3 +220,14 @@ function get_plugin_version() {

return $meta['Version'];
}

// Check for CLI env, to add the CLI commands
if ( defined( 'WP_CLI' ) && WP_CLI ) {
WP_CLI::add_command(
'activitypub',
'\Activitypub\Cli',
array(
'shortdesc' => __( 'ActivityPub related commands: Meta-Infos, Delete and soon Self-Destruct.', 'activitypub' ),
)
);
}
204 changes: 204 additions & 0 deletions includes/class-cli.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
<?php
namespace Activitypub;

use WP_CLI;
use WP_CLI_Command;
use Activitypub\Scheduler;

use function Activitypub\was_comment_received;

/**
* WP-CLI commands
*
* @package Activitypub
*/
class Cli extends WP_CLI_Command {
/**
* Check the Plugins Meta-Informations
*
* ## OPTIONS
*
* [--Name]
* The Plugin Name
*
* [--PluginURI]
* The Plugin URI
*
* [--Version]
* The Plugin Version
*
* [--Description]
* The Plugin Description
*
* [--Author]
* The Plugin Author
*
* [--AuthorURI]
* The Plugin Author URI
*
* [--TextDomain]
* The Plugin Text Domain
*
* [--DomainPath]
* The Plugin Domain Path
*
* [--Network]
* The Plugin Network
*
* [--RequiresWP]
* The Plugin Requires at least
*
* [--RequiresPHP]
* The Plugin Requires PHP
*
* [--UpdateURI]
* The Plugin Update URI
*
* See: https://developer.wordpress.org/reference/functions/get_plugin_data/#return
*
* ## EXAMPLES
*
* $ wp webmention meta
*
* $ wp webmention meta --Version
* Version: 1.0.0
*
* @param array|null $args The arguments.
* @param array|null $assoc_args The associative arguments.
*
* @return void
*/
public function meta( $args, $assoc_args ) {
$plugin_data = get_plugin_meta();

if ( $assoc_args ) {
$plugin_data = array_intersect_key( $plugin_data, $assoc_args );
} else {
WP_CLI::line( __( "ActivityPub Plugin Meta:\n", 'activitypub' ) );
}

foreach ( $plugin_data as $key => $value ) {
WP_CLI::line( $key . ': ' . $value );
}
}

/**
* Remove the entire blog from the Fediverse.
*
* ## EXAMPLES
*
* $ wp activitypub self-destruct
*
* @param array|null $args The arguments.
* @param array|null $assoc_args The associative arguments.
*
* @return void
*/
public function self_destruct( $args, $assoc_args ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
WP_CLI::warning( __( 'Self-Destructing is not implemented yet.', 'activitypub' ) );
}

/**
* Delete or Update a Post, Page, Custom Post Type or Attachment.
*
* ## OPTIONS
*
* <action>
* : The action to perform. Either `delete` or `update`.
* ---
* options:
* - delete
* - update
* ---
*
* <id>
* : The id of the Post, Page, Custom Post Type or Attachment.
*
* ## EXAMPLES
*
* $ wp activitypub post delete 1
*
* @synopsis <action> <id>
*
* @param array|null $args The arguments.
* @param array|null $assoc_args The associative arguments.
*
* @return void
*/
public function post( $args, $assoc_args ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
$post = get_post( $args[1] );

if ( ! $post ) {
WP_CLI::error( __( 'Post not found.', 'activitypub' ) );
}

switch ( $args[0] ) {
case 'delete':
// translators: %s is the ID of the post.
WP_CLI::confirm( sprintf( __( 'Do you really want to delete the (Custom) Post with the ID: %s', 'activitypub' ), $args[1] ) );
Scheduler::schedule_post_activity( 'trash', 'publish', $args[1] );
WP_CLI::success( __( '"Delete"-Activity is queued.', 'activitypub' ) );
break;
case 'update':
Scheduler::schedule_post_activity( 'publish', 'publish', $args[1] );
WP_CLI::success( __( '"Update"-Activity is queued.', 'activitypub' ) );
break;
default:
WP_CLI::error( __( 'Unknown action.', 'activitypub' ) );
}
}

/**
* Delete or Update a Comment.
*
* ## OPTIONS
*
* <action>
* : The action to perform. Either `delete` or `update`.
* ---
* options:
* - delete
* - update
* ---
*
* <id>
* : The id of the Comment.
*
* ## EXAMPLES
*
* $ wp activitypub comment delete 1
*
* @synopsis <action> <id>
*
* @param array|null $args The arguments.
* @param array|null $assoc_args The associative arguments.
*
* @return void
*/
public function comment( $args, $assoc_args ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
$comment = get_comment( $args[1] );

if ( ! $comment ) {
WP_CLI::error( __( 'Comment not found.', 'activitypub' ) );
}

if ( was_comment_received( $comment ) ) {
WP_CLI::error( __( 'This comment was received via ActivityPub and cannot be deleted or updated.', 'activitypub' ) );
}

switch ( $args[0] ) {
case 'delete':
// translators: %s is the ID of the comment.
WP_CLI::confirm( sprintf( __( 'Do you really want to delete the Comment with the ID: %s', 'activitypub' ), $args[1] ) );
Scheduler::schedule_comment_activity( 'trash', 'approved', $args[1] );
WP_CLI::success( __( '"Delete"-Activity is queued.', 'activitypub' ) );
break;
case 'update':
Scheduler::schedule_comment_activity( 'approved', 'approved', $args[1] );
WP_CLI::success( __( '"Update"-Activity is queued.', 'activitypub' ) );
break;
default:
WP_CLI::error( __( 'Unknown action.', 'activitypub' ) );
}
}
}
6 changes: 5 additions & 1 deletion includes/class-scheduler.php
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,10 @@ public static function deregister_schedules() {
public static function schedule_post_activity( $new_status, $old_status, $post ) {
$post = get_post( $post );

if ( ! $post ) {
return;
}

if ( 'ap_extrafield' === $post->post_type ) {
self::schedule_profile_update( $post->post_author );
return;
Expand Down Expand Up @@ -182,7 +186,7 @@ public static function schedule_comment_activity( $new_status, $old_status, $com
$comment = get_comment( $comment );

// federate only comments that are written by a registered user.
if ( ! $comment->user_id ) {
if ( ! $comment || ! $comment->user_id ) {
return;
}

Expand Down

0 comments on commit 8bff92d

Please sign in to comment.