Skip to content

Commit 8bff92d

Browse files
authored
initial (#867)
1 parent 51dea3d commit 8bff92d

File tree

3 files changed

+222
-1
lines changed

3 files changed

+222
-1
lines changed

activitypub.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
namespace Activitypub;
1717

18+
use WP_CLI;
19+
1820
use function Activitypub\is_blog_public;
1921
use function Activitypub\site_supports_blocks;
2022

@@ -218,3 +220,14 @@ function get_plugin_version() {
218220

219221
return $meta['Version'];
220222
}
223+
224+
// Check for CLI env, to add the CLI commands
225+
if ( defined( 'WP_CLI' ) && WP_CLI ) {
226+
WP_CLI::add_command(
227+
'activitypub',
228+
'\Activitypub\Cli',
229+
array(
230+
'shortdesc' => __( 'ActivityPub related commands: Meta-Infos, Delete and soon Self-Destruct.', 'activitypub' ),
231+
)
232+
);
233+
}

includes/class-cli.php

Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,204 @@
1+
<?php
2+
namespace Activitypub;
3+
4+
use WP_CLI;
5+
use WP_CLI_Command;
6+
use Activitypub\Scheduler;
7+
8+
use function Activitypub\was_comment_received;
9+
10+
/**
11+
* WP-CLI commands
12+
*
13+
* @package Activitypub
14+
*/
15+
class Cli extends WP_CLI_Command {
16+
/**
17+
* Check the Plugins Meta-Informations
18+
*
19+
* ## OPTIONS
20+
*
21+
* [--Name]
22+
* The Plugin Name
23+
*
24+
* [--PluginURI]
25+
* The Plugin URI
26+
*
27+
* [--Version]
28+
* The Plugin Version
29+
*
30+
* [--Description]
31+
* The Plugin Description
32+
*
33+
* [--Author]
34+
* The Plugin Author
35+
*
36+
* [--AuthorURI]
37+
* The Plugin Author URI
38+
*
39+
* [--TextDomain]
40+
* The Plugin Text Domain
41+
*
42+
* [--DomainPath]
43+
* The Plugin Domain Path
44+
*
45+
* [--Network]
46+
* The Plugin Network
47+
*
48+
* [--RequiresWP]
49+
* The Plugin Requires at least
50+
*
51+
* [--RequiresPHP]
52+
* The Plugin Requires PHP
53+
*
54+
* [--UpdateURI]
55+
* The Plugin Update URI
56+
*
57+
* See: https://developer.wordpress.org/reference/functions/get_plugin_data/#return
58+
*
59+
* ## EXAMPLES
60+
*
61+
* $ wp webmention meta
62+
*
63+
* $ wp webmention meta --Version
64+
* Version: 1.0.0
65+
*
66+
* @param array|null $args The arguments.
67+
* @param array|null $assoc_args The associative arguments.
68+
*
69+
* @return void
70+
*/
71+
public function meta( $args, $assoc_args ) {
72+
$plugin_data = get_plugin_meta();
73+
74+
if ( $assoc_args ) {
75+
$plugin_data = array_intersect_key( $plugin_data, $assoc_args );
76+
} else {
77+
WP_CLI::line( __( "ActivityPub Plugin Meta:\n", 'activitypub' ) );
78+
}
79+
80+
foreach ( $plugin_data as $key => $value ) {
81+
WP_CLI::line( $key . ': ' . $value );
82+
}
83+
}
84+
85+
/**
86+
* Remove the entire blog from the Fediverse.
87+
*
88+
* ## EXAMPLES
89+
*
90+
* $ wp activitypub self-destruct
91+
*
92+
* @param array|null $args The arguments.
93+
* @param array|null $assoc_args The associative arguments.
94+
*
95+
* @return void
96+
*/
97+
public function self_destruct( $args, $assoc_args ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
98+
WP_CLI::warning( __( 'Self-Destructing is not implemented yet.', 'activitypub' ) );
99+
}
100+
101+
/**
102+
* Delete or Update a Post, Page, Custom Post Type or Attachment.
103+
*
104+
* ## OPTIONS
105+
*
106+
* <action>
107+
* : The action to perform. Either `delete` or `update`.
108+
* ---
109+
* options:
110+
* - delete
111+
* - update
112+
* ---
113+
*
114+
* <id>
115+
* : The id of the Post, Page, Custom Post Type or Attachment.
116+
*
117+
* ## EXAMPLES
118+
*
119+
* $ wp activitypub post delete 1
120+
*
121+
* @synopsis <action> <id>
122+
*
123+
* @param array|null $args The arguments.
124+
* @param array|null $assoc_args The associative arguments.
125+
*
126+
* @return void
127+
*/
128+
public function post( $args, $assoc_args ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
129+
$post = get_post( $args[1] );
130+
131+
if ( ! $post ) {
132+
WP_CLI::error( __( 'Post not found.', 'activitypub' ) );
133+
}
134+
135+
switch ( $args[0] ) {
136+
case 'delete':
137+
// translators: %s is the ID of the post.
138+
WP_CLI::confirm( sprintf( __( 'Do you really want to delete the (Custom) Post with the ID: %s', 'activitypub' ), $args[1] ) );
139+
Scheduler::schedule_post_activity( 'trash', 'publish', $args[1] );
140+
WP_CLI::success( __( '"Delete"-Activity is queued.', 'activitypub' ) );
141+
break;
142+
case 'update':
143+
Scheduler::schedule_post_activity( 'publish', 'publish', $args[1] );
144+
WP_CLI::success( __( '"Update"-Activity is queued.', 'activitypub' ) );
145+
break;
146+
default:
147+
WP_CLI::error( __( 'Unknown action.', 'activitypub' ) );
148+
}
149+
}
150+
151+
/**
152+
* Delete or Update a Comment.
153+
*
154+
* ## OPTIONS
155+
*
156+
* <action>
157+
* : The action to perform. Either `delete` or `update`.
158+
* ---
159+
* options:
160+
* - delete
161+
* - update
162+
* ---
163+
*
164+
* <id>
165+
* : The id of the Comment.
166+
*
167+
* ## EXAMPLES
168+
*
169+
* $ wp activitypub comment delete 1
170+
*
171+
* @synopsis <action> <id>
172+
*
173+
* @param array|null $args The arguments.
174+
* @param array|null $assoc_args The associative arguments.
175+
*
176+
* @return void
177+
*/
178+
public function comment( $args, $assoc_args ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
179+
$comment = get_comment( $args[1] );
180+
181+
if ( ! $comment ) {
182+
WP_CLI::error( __( 'Comment not found.', 'activitypub' ) );
183+
}
184+
185+
if ( was_comment_received( $comment ) ) {
186+
WP_CLI::error( __( 'This comment was received via ActivityPub and cannot be deleted or updated.', 'activitypub' ) );
187+
}
188+
189+
switch ( $args[0] ) {
190+
case 'delete':
191+
// translators: %s is the ID of the comment.
192+
WP_CLI::confirm( sprintf( __( 'Do you really want to delete the Comment with the ID: %s', 'activitypub' ), $args[1] ) );
193+
Scheduler::schedule_comment_activity( 'trash', 'approved', $args[1] );
194+
WP_CLI::success( __( '"Delete"-Activity is queued.', 'activitypub' ) );
195+
break;
196+
case 'update':
197+
Scheduler::schedule_comment_activity( 'approved', 'approved', $args[1] );
198+
WP_CLI::success( __( '"Update"-Activity is queued.', 'activitypub' ) );
199+
break;
200+
default:
201+
WP_CLI::error( __( 'Unknown action.', 'activitypub' ) );
202+
}
203+
}
204+
}

includes/class-scheduler.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,10 @@ public static function deregister_schedules() {
117117
public static function schedule_post_activity( $new_status, $old_status, $post ) {
118118
$post = get_post( $post );
119119

120+
if ( ! $post ) {
121+
return;
122+
}
123+
120124
if ( 'ap_extrafield' === $post->post_type ) {
121125
self::schedule_profile_update( $post->post_author );
122126
return;
@@ -182,7 +186,7 @@ public static function schedule_comment_activity( $new_status, $old_status, $com
182186
$comment = get_comment( $comment );
183187

184188
// federate only comments that are written by a registered user.
185-
if ( ! $comment->user_id ) {
189+
if ( ! $comment || ! $comment->user_id ) {
186190
return;
187191
}
188192

0 commit comments

Comments
 (0)