231 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			231 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * WP-CLI file.
 | |
|  *
 | |
|  * @package Activitypub
 | |
|  */
 | |
| 
 | |
| namespace Activitypub;
 | |
| 
 | |
| use Activitypub\Collection\Outbox;
 | |
| 
 | |
| /**
 | |
|  * WP-CLI commands.
 | |
|  *
 | |
|  * @package Activitypub
 | |
|  */
 | |
| class Cli extends \WP_CLI_Command {
 | |
| 
 | |
| 	/**
 | |
| 	 * 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.' );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * 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 $args The arguments.
 | |
| 	 */
 | |
| 	public function post( $args ) {
 | |
| 		$post = get_post( $args[1] );
 | |
| 
 | |
| 		if ( ! $post ) {
 | |
| 			\WP_CLI::error( 'Post not found.' );
 | |
| 		}
 | |
| 
 | |
| 		switch ( $args[0] ) {
 | |
| 			case 'delete':
 | |
| 				\WP_CLI::confirm( 'Do you really want to delete the (Custom) Post with the ID: ' . $args[1] );
 | |
| 				add_to_outbox( $post, 'Delete', $post->post_author );
 | |
| 				\WP_CLI::success( '"Delete" activity is queued.' );
 | |
| 				break;
 | |
| 			case 'update':
 | |
| 				add_to_outbox( $post, 'Update', $post->post_author );
 | |
| 				\WP_CLI::success( '"Update" activity is queued.' );
 | |
| 				break;
 | |
| 			default:
 | |
| 				\WP_CLI::error( 'Unknown action.' );
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * 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 $args The arguments.
 | |
| 	 */
 | |
| 	public function comment( $args ) {
 | |
| 		$comment = get_comment( $args[1] );
 | |
| 
 | |
| 		if ( ! $comment ) {
 | |
| 			\WP_CLI::error( 'Comment not found.' );
 | |
| 		}
 | |
| 
 | |
| 		if ( was_comment_received( $comment ) ) {
 | |
| 			\WP_CLI::error( 'This comment was received via ActivityPub and cannot be deleted or updated.' );
 | |
| 		}
 | |
| 
 | |
| 		switch ( $args[0] ) {
 | |
| 			case 'delete':
 | |
| 				\WP_CLI::confirm( 'Do you really want to delete the Comment with the ID: ' . $args[1] );
 | |
| 				add_to_outbox( $comment, 'Delete', $comment->user_id );
 | |
| 				\WP_CLI::success( '"Delete" activity is queued.' );
 | |
| 				break;
 | |
| 			case 'update':
 | |
| 				add_to_outbox( $comment, 'Update', $comment->user_id );
 | |
| 				\WP_CLI::success( '"Update" activity is queued.' );
 | |
| 				break;
 | |
| 			default:
 | |
| 				\WP_CLI::error( 'Unknown action.' );
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Undo an activity that was sent to the Fediverse.
 | |
| 	 *
 | |
| 	 * ## OPTIONS
 | |
| 	 *
 | |
| 	 * <outbox_item_id>
 | |
| 	 *     The ID or URL of the outbox item to undo.
 | |
| 	 *
 | |
| 	 * ## EXAMPLES
 | |
| 	 *
 | |
| 	 *    $ wp activitypub undo 123
 | |
| 	 *    $ wp activitypub undo "https://example.com/?post_type=ap_outbox&p=123"
 | |
| 	 *
 | |
| 	 * @synopsis <outbox_item_id>
 | |
| 	 *
 | |
| 	 * @param array $args The arguments.
 | |
| 	 */
 | |
| 	public function undo( $args ) {
 | |
| 		$outbox_item_id = $args[0];
 | |
| 		if ( ! is_numeric( $outbox_item_id ) ) {
 | |
| 			$outbox_item_id = url_to_postid( $outbox_item_id );
 | |
| 		}
 | |
| 
 | |
| 		$outbox_item_id = get_post( $outbox_item_id );
 | |
| 		if ( ! $outbox_item_id ) {
 | |
| 			\WP_CLI::error( 'Activity not found.' );
 | |
| 		}
 | |
| 
 | |
| 		$undo_id = Outbox::undo( $outbox_item_id );
 | |
| 		if ( ! $undo_id ) {
 | |
| 			\WP_CLI::error( 'Failed to undo activity.' );
 | |
| 		}
 | |
| 		\WP_CLI::success( 'Undo activity scheduled.' );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Re-Schedule an activity that was sent to the Fediverse before.
 | |
| 	 *
 | |
| 	 * ## OPTIONS
 | |
| 	 *
 | |
| 	 * <outbox_item_id>
 | |
| 	 *     The ID or URL of the outbox item to reschedule.
 | |
| 	 *
 | |
| 	 * ## EXAMPLES
 | |
| 	 *
 | |
| 	 *    $ wp activitypub reschedule 123
 | |
| 	 *    $ wp activitypub reschedule "https://example.com/?post_type=ap_outbox&p=123"
 | |
| 	 *
 | |
| 	 * @synopsis <outbox_item_id>
 | |
| 	 *
 | |
| 	 * @param array $args The arguments.
 | |
| 	 */
 | |
| 	public function reschedule( $args ) {
 | |
| 		$outbox_item_id = $args[0];
 | |
| 		if ( ! is_numeric( $outbox_item_id ) ) {
 | |
| 			$outbox_item_id = url_to_postid( $outbox_item_id );
 | |
| 		}
 | |
| 
 | |
| 		$outbox_item_id = get_post( $outbox_item_id );
 | |
| 		if ( ! $outbox_item_id ) {
 | |
| 			\WP_CLI::error( 'Activity not found.' );
 | |
| 		}
 | |
| 
 | |
| 		Outbox::reschedule( $outbox_item_id );
 | |
| 
 | |
| 		\WP_CLI::success( 'Rescheduled activity.' );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Move the blog to a new URL.
 | |
| 	 *
 | |
| 	 * ## OPTIONS
 | |
| 	 *
 | |
| 	 * <from>
 | |
| 	 *     The current URL of the blog.
 | |
| 	 *
 | |
| 	 * <to>
 | |
| 	 *     The new URL of the blog.
 | |
| 	 *
 | |
| 	 * ## EXAMPLES
 | |
| 	 *
 | |
| 	 *    $ wp activitypub move https://example.com/ https://newsite.com/
 | |
| 	 *
 | |
| 	 * @synopsis <from> <to>
 | |
| 	 *
 | |
| 	 * @param array $args The arguments.
 | |
| 	 */
 | |
| 	public function move( $args ) {
 | |
| 		$from = $args[0];
 | |
| 		$to   = $args[1];
 | |
| 
 | |
| 		$outbox_item_id = Move::account( $from, $to );
 | |
| 
 | |
| 		if ( is_wp_error( $outbox_item_id ) ) {
 | |
| 			\WP_CLI::error( $outbox_item_id->get_error_message() );
 | |
| 		} else {
 | |
| 			\WP_CLI::success( 'Move Scheduled.' );
 | |
| 		}
 | |
| 	}
 | |
| }
 |