PluginProbe
ActivityPub / trunk
ActivityPub vtrunk
9.3.1 9.3.0 9.2.2 9.2.1 9.2.0 9.1.0 9.0.2 9.0.1 9.0.0 8.3.0 8.2.1 8.2.0 8.1.1 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.2.0 1.3.0 2.0.0 2.0.1 2.1.0 2.1.1 All 160 releases
activitypub / activitypub.php

activitypub.php in ActivityPub trunk, at activitypub.php

187 lines 8.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Plugin Name: ActivityPub
4 * Plugin URI: https://github.com/Automattic/wordpress-activitypub
5 * Description: The ActivityPub protocol is a decentralized social networking protocol based upon the ActivityStreams 2.0 data format.
6 * Version: 9.3.1
7 * Author: Matthias Pfefferle & Automattic
8 * Author URI: https://automattic.com/
9 * License: MIT
10 * License URI: http://opensource.org/licenses/MIT
11 * Requires PHP: 7.4
12 * Text Domain: activitypub
13 * Domain Path: /languages
14 *
15 * @package Activitypub
16 */
17
18 namespace Activitypub;
19
20 \define( 'ACTIVITYPUB_PLUGIN_VERSION', '9.3.1' );
21
22 // Plugin related constants.
23 \define( 'ACTIVITYPUB_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
24 \define( 'ACTIVITYPUB_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
25 \define( 'ACTIVITYPUB_PLUGIN_FILE', ACTIVITYPUB_PLUGIN_DIR . basename( __FILE__ ) );
26 \define( 'ACTIVITYPUB_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
27
28 require_once __DIR__ . '/includes/class-autoloader.php';
29 require_once __DIR__ . '/includes/compat.php';
30 require_once __DIR__ . '/includes/constants.php';
31 require_once __DIR__ . '/includes/functions.php';
32 require_once __DIR__ . '/includes/functions-activity.php';
33 require_once __DIR__ . '/includes/functions-comment.php';
34 require_once __DIR__ . '/includes/functions-federation.php';
35 require_once __DIR__ . '/includes/functions-media.php';
36 require_once __DIR__ . '/includes/functions-post.php';
37 require_once __DIR__ . '/includes/functions-request.php';
38 require_once __DIR__ . '/includes/functions-url.php';
39 require_once __DIR__ . '/includes/functions-user.php';
40 require_once __DIR__ . '/integration/load.php';
41
42 Autoloader::register_path( __NAMESPACE__, __DIR__ . '/includes' );
43
44 \register_activation_hook( __FILE__, array( Activitypub::class, 'activate' ) );
45 \register_deactivation_hook( __FILE__, array( Activitypub::class, 'deactivate' ) );
46 \register_uninstall_hook( __FILE__, array( Activitypub::class, 'uninstall' ) );
47
48 /**
49 * Initialize REST routes.
50 */
51 function rest_init() {
52 Rest\Server::init();
53 ( new Rest\Actors_Controller() )->register_routes();
54 ( new Rest\Actors_Inbox_Controller() )->register_routes();
55 ( new Rest\Admin\Actions_Controller() )->register_routes();
56 ( new Rest\Admin\Statistics_Controller() )->register_routes();
57 ( new Rest\Application_Controller() )->register_routes();
58 ( new Rest\Stats_Image_Controller() )->register_routes();
59 ( new Rest\Collections_Controller() )->register_routes();
60 ( new Rest\Comments_Controller() )->register_routes();
61 ( new Rest\Followers_Controller() )->register_routes();
62 ( new Rest\Following_Controller() )->register_routes();
63 ( new Rest\Liked_Controller() )->register_routes();
64 ( new Rest\Inbox_Controller() )->register_routes();
65 ( new Rest\Interaction_Controller() )->register_routes();
66 ( new Rest\Moderators_Controller() )->register_routes();
67 if ( \get_option( 'activitypub_api', false ) ) {
68 ( new Rest\Actor_Autocomplete_Controller() )->register_routes();
69 ( new Rest\OAuth\Authorization_Controller() )->register_routes();
70 ( new Rest\OAuth\Clients_Controller() )->register_routes();
71 ( new Rest\OAuth\Token_Controller() )->register_routes();
72 }
73 ( new Rest\Outbox_Controller() )->register_routes();
74 ( new Rest\Post_Controller() )->register_routes();
75 ( new Rest\Replies_Controller() )->register_routes();
76 ( new Rest\Webfinger_Controller() )->register_routes();
77
78 // Load NodeInfo endpoints only if blog is public.
79 if ( is_blog_public() ) {
80 ( new Rest\Nodeinfo_Controller() )->register_routes();
81 }
82 ( new Rest\Proxy_Controller() )->register_routes();
83 }
84 \add_action( 'rest_api_init', __NAMESPACE__ . '\rest_init' );
85
86 /**
87 * Initialize plugin.
88 */
89 function plugin_init() {
90 \add_action( 'init', array( __NAMESPACE__ . '\Activitypub', 'init' ) );
91 \add_action( 'init', array( __NAMESPACE__ . '\Application', 'init' ) );
92 \add_action( 'init', array( __NAMESPACE__ . '\Avatars', 'init' ) );
93 \add_action( 'init', array( __NAMESPACE__ . '\Blurhash', 'init' ) );
94 \add_action( 'init', array( __NAMESPACE__ . '\Cache', 'init' ) );
95 \add_action( 'init', array( __NAMESPACE__ . '\Comment', 'init' ) );
96 \add_action( 'init', array( __NAMESPACE__ . '\Dispatcher', 'init' ) );
97 \add_action( 'init', array( __NAMESPACE__ . '\Embed', 'init' ) );
98 if ( \get_option( 'activitypub_api', false ) ) {
99 \add_action( 'init', array( __NAMESPACE__ . '\Event_Stream', 'init' ) );
100 }
101 \add_action( 'init', array( __NAMESPACE__ . '\Handler', 'init' ) );
102 \add_action( 'init', array( __NAMESPACE__ . '\Hashtag', 'init' ) );
103 \add_action( 'init', array( __NAMESPACE__ . '\Icons', 'init' ) );
104 \add_action( 'init', array( __NAMESPACE__ . '\Link', 'init' ) );
105 \add_action( 'init', array( __NAMESPACE__ . '\Mailer', 'init' ) );
106 \add_action( 'init', array( __NAMESPACE__ . '\Mention', 'init' ) );
107 \add_action( 'init', array( __NAMESPACE__ . '\Migration', 'init' ), 1 );
108 \add_action( 'init', array( __NAMESPACE__ . '\Move', 'init' ) );
109 \add_action( 'init', array( __NAMESPACE__ . '\Options', 'init' ) );
110 \add_action( 'init', array( __NAMESPACE__ . '\Post_Types', 'init' ) );
111 \add_action( 'init', array( __NAMESPACE__ . '\Router', 'init' ) );
112 // Priority 0 ensures Scheduler hooks are registered before Migration (priority 1) runs.
113 \add_action( 'init', array( __NAMESPACE__ . '\Scheduler', 'init' ), 0 );
114 \add_action( 'init', array( __NAMESPACE__ . '\Search', 'init' ) );
115 \add_action( 'init', array( __NAMESPACE__ . '\Signature', 'init' ) );
116 // Only load OAuth Server if the ActivityPub API is enabled.
117 if ( \get_option( 'activitypub_api', false ) ) {
118 \add_action( 'init', array( __NAMESPACE__ . '\OAuth\Server', 'init' ) );
119 }
120
121 if ( site_supports_blocks() ) {
122 \add_action( 'init', array( __NAMESPACE__ . '\Blocks', 'init' ) );
123 }
124
125 // Only load relay if relay mode is enabled.
126 if ( \get_option( 'activitypub_relay_mode', false ) ) {
127 \add_action( 'init', array( __NAMESPACE__ . '\Relay', 'init' ) );
128 }
129
130 // Load development tools.
131 if ( 'local' === wp_get_environment_type() ) {
132 $loader_file = __DIR__ . '/local/load.php';
133 if ( \file_exists( $loader_file ) && \is_readable( $loader_file ) ) {
134 require_once $loader_file;
135 }
136 }
137 }
138 \add_action( 'plugins_loaded', __NAMESPACE__ . '\plugin_init' );
139
140 /**
141 * Initialize plugin admin.
142 */
143 function plugin_admin_init() {
144 // Screen Options and Menus are set before `admin_init`.
145 \add_action( 'init', array( __NAMESPACE__ . '\WP_Admin\Heartbeat', 'init' ), 9 ); // Before script loader.
146 \add_filter( 'init', array( __NAMESPACE__ . '\WP_Admin\Screen_Options', 'init' ) );
147 \add_action( 'init', array( __NAMESPACE__ . '\WP_Admin\Menu', 'init' ) );
148
149 \add_action( 'admin_init', array( __NAMESPACE__ . '\WP_Admin\Admin', 'init' ) );
150 \add_action( 'admin_init', array( __NAMESPACE__ . '\WP_Admin\Advanced_Settings_Fields', 'init' ) );
151 \add_action( 'admin_init', array( __NAMESPACE__ . '\WP_Admin\App', 'init' ), 0 ); // Before admin bar init.
152 \add_action( 'admin_init', array( __NAMESPACE__ . '\WP_Admin\Blog_Settings_Fields', 'init' ) );
153 \add_action( 'admin_init', array( __NAMESPACE__ . '\WP_Admin\Health_Check', 'init' ) );
154 \add_action( 'admin_init', array( __NAMESPACE__ . '\WP_Admin\Settings', 'init' ) );
155 \add_action( 'admin_init', array( __NAMESPACE__ . '\WP_Admin\Settings_Fields', 'init' ) );
156 \add_action( 'admin_init', array( __NAMESPACE__ . '\WP_Admin\Dashboard', 'init' ) );
157 \add_action( 'admin_init', array( __NAMESPACE__ . '\WP_Admin\User_Settings_Fields', 'init' ) );
158 \add_action( 'admin_init', array( __NAMESPACE__ . '\WP_Admin\Welcome_Fields', 'init' ) );
159
160 if ( defined( 'WP_LOAD_IMPORTERS' ) && WP_LOAD_IMPORTERS ) {
161 require_once __DIR__ . '/includes/wp-admin/import/load.php';
162 \add_action( 'admin_init', __NAMESPACE__ . '\WP_Admin\Import\load' );
163 }
164 }
165 \add_action( 'plugins_loaded', __NAMESPACE__ . '\plugin_admin_init' );
166
167 /**
168 * Redirect to the welcome page after plugin activation.
169 *
170 * @param string $plugin The plugin basename.
171 */
172 function activation_redirect( $plugin ) {
173 if ( ACTIVITYPUB_PLUGIN_BASENAME === $plugin ) {
174 \wp_safe_redirect( \admin_url( 'options-general.php?page=activitypub' ) );
175 exit;
176 }
177 }
178 \add_action( 'activated_plugin', __NAMESPACE__ . '\activation_redirect' );
179
180 // Check for CLI env, to add the CLI commands.
181 if ( defined( 'WP_CLI' ) && WP_CLI ) {
182 Cli::register();
183 }
184
185 // Register OAuth login form handler early (before wp-login.php processes).
186 \add_action( 'login_form_activitypub_authorize', array( __NAMESPACE__ . '\OAuth\Server', 'login_form_authorize' ) );
187