PluginProbe
ActivityPub / 1.0.8
ActivityPub v1.0.8
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 1.0.8, at activitypub.php

215 lines 6.5 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/pfefferle/wordpress-activitypub/
5 * Description: The ActivityPub protocol is a decentralized social networking protocol based upon the ActivityStreams 2.0 data format.
6 * Version: 1.0.8
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: 5.6
12 * Text Domain: activitypub
13 * Domain Path: /languages
14 */
15
16 namespace Activitypub;
17
18 use function Activitypub\is_blog_public;
19 use function Activitypub\site_supports_blocks;
20
21 require_once __DIR__ . '/includes/compat.php';
22 require_once __DIR__ . '/includes/functions.php';
23
24 /**
25 * Initialize the plugin constants.
26 */
27 \defined( 'ACTIVITYPUB_REST_NAMESPACE' ) || \define( 'ACTIVITYPUB_REST_NAMESPACE', 'activitypub/1.0' );
28 \defined( 'ACTIVITYPUB_EXCERPT_LENGTH' ) || \define( 'ACTIVITYPUB_EXCERPT_LENGTH', 400 );
29 \defined( 'ACTIVITYPUB_SHOW_PLUGIN_RECOMMENDATIONS' ) || \define( 'ACTIVITYPUB_SHOW_PLUGIN_RECOMMENDATIONS', true );
30 \defined( 'ACTIVITYPUB_MAX_IMAGE_ATTACHMENTS' ) || \define( 'ACTIVITYPUB_MAX_IMAGE_ATTACHMENTS', 3 );
31 \defined( 'ACTIVITYPUB_HASHTAGS_REGEXP' ) || \define( 'ACTIVITYPUB_HASHTAGS_REGEXP', '(?:(?<=\s)|(?<=<p>)|(?<=<br>)|^)#([A-Za-z0-9_]+)(?:(?=\s|[[:punct:]]|$))' );
32 \defined( 'ACTIVITYPUB_USERNAME_REGEXP' ) || \define( 'ACTIVITYPUB_USERNAME_REGEXP', '(?:([A-Za-z0-9_-]+)@((?:[A-Za-z0-9_-]+\.)+[A-Za-z]+))' );
33 \defined( 'ACTIVITYPUB_CUSTOM_POST_CONTENT' ) || \define( 'ACTIVITYPUB_CUSTOM_POST_CONTENT', "<strong>[ap_title]</strong>\n\n[ap_content]\n\n[ap_hashtags]\n\n[ap_shortlink]" );
34 \defined( 'ACTIVITYPUB_AUTHORIZED_FETCH' ) || \define( 'ACTIVITYPUB_AUTHORIZED_FETCH', false );
35 \defined( 'ACTIVITYPUB_DISABLE_REWRITES' ) || \define( 'ACTIVITYPUB_DISABLE_REWRITES', false );
36
37 \define( 'ACTIVITYPUB_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
38 \define( 'ACTIVITYPUB_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
39 \define( 'ACTIVITYPUB_PLUGIN_FILE', plugin_dir_path( __FILE__ ) . '/' . basename( __FILE__ ) );
40 \define( 'ACTIVITYPUB_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
41
42 /**
43 * Initialize REST routes.
44 */
45 function rest_init() {
46 Rest\Users::init();
47 Rest\Outbox::init();
48 Rest\Inbox::init();
49 Rest\Followers::init();
50 Rest\Following::init();
51 Rest\Webfinger::init();
52 Rest\Server::init();
53 Rest\Collection::init();
54
55 // load NodeInfo endpoints only if blog is public
56 if ( is_blog_public() ) {
57 Rest\NodeInfo::init();
58 }
59 }
60 \add_action( 'rest_api_init', __NAMESPACE__ . '\rest_init' );
61
62 /**
63 * Initialize plugin.
64 */
65 function plugin_init() {
66 \add_action( 'init', array( __NAMESPACE__ . '\Migration', 'init' ) );
67 \add_action( 'init', array( __NAMESPACE__ . '\Activitypub', 'init' ) );
68 \add_action( 'init', array( __NAMESPACE__ . '\Activity_Dispatcher', 'init' ) );
69 \add_action( 'init', array( __NAMESPACE__ . '\Collection\Followers', 'init' ) );
70 \add_action( 'init', array( __NAMESPACE__ . '\Admin', 'init' ) );
71 \add_action( 'init', array( __NAMESPACE__ . '\Hashtag', 'init' ) );
72 \add_action( 'init', array( __NAMESPACE__ . '\Mention', 'init' ) );
73 \add_action( 'init', array( __NAMESPACE__ . '\Health_Check', 'init' ) );
74 \add_action( 'init', array( __NAMESPACE__ . '\Scheduler', 'init' ) );
75
76 if ( site_supports_blocks() ) {
77 \add_action( 'init', array( __NAMESPACE__ . '\Blocks', 'init' ) );
78 }
79
80 $debug_file = __DIR__ . '/includes/debug.php';
81 if ( \WP_DEBUG && file_exists( $debug_file ) && is_readable( $debug_file ) ) {
82 require_once $debug_file;
83 Debug::init();
84 }
85
86 require_once __DIR__ . '/integration/class-webfinger.php';
87 Integration\Webfinger::init();
88
89 require_once __DIR__ . '/integration/class-nodeinfo.php';
90 Integration\Nodeinfo::init();
91 }
92 \add_action( 'plugins_loaded', __NAMESPACE__ . '\plugin_init' );
93
94 /**
95 * Class Autoloader
96 */
97 \spl_autoload_register(
98 function ( $full_class ) {
99 $base_dir = __DIR__ . '/includes/';
100 $base = 'Activitypub\\';
101
102 if ( strncmp( $full_class, $base, strlen( $base ) ) === 0 ) {
103 $maybe_uppercase = str_replace( $base, '', $full_class );
104 $class = strtolower( $maybe_uppercase );
105 // All classes should be capitalized. If this is instead looking for a lowercase method, we ignore that.
106 if ( $maybe_uppercase === $class ) {
107 return;
108 }
109
110 if ( false !== strpos( $class, '\\' ) ) {
111 $parts = explode( '\\', $class );
112 $class = array_pop( $parts );
113 $sub_dir = implode( '/', $parts );
114 $base_dir = $base_dir . $sub_dir . '/';
115 }
116
117 $filename = 'class-' . strtr( $class, '_', '-' );
118 $file = $base_dir . $filename . '.php';
119
120 if ( file_exists( $file ) && is_readable( $file ) ) {
121 require_once $file;
122 } else {
123 // translators: %s is the class name
124 \wp_die( sprintf( esc_html__( 'Required class not found or not readable: %s', 'activitypub' ), esc_html( $full_class ) ) );
125 }
126 }
127 }
128 );
129
130 /**
131 * Add plugin settings link
132 */
133 function plugin_settings_link( $actions ) {
134 $settings_link = array();
135 $settings_link[] = \sprintf(
136 '<a href="%1s">%2s</a>',
137 \menu_page_url( 'activitypub', false ),
138 \__( 'Settings', 'activitypub' )
139 );
140
141 return \array_merge( $settings_link, $actions );
142 }
143 \add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), __NAMESPACE__ . '\plugin_settings_link' );
144
145 \register_activation_hook(
146 __FILE__,
147 array(
148 __NAMESPACE__ . '\Activitypub',
149 'activate',
150 )
151 );
152
153 \register_deactivation_hook(
154 __FILE__,
155 array(
156 __NAMESPACE__ . '\Activitypub',
157 'deactivate',
158 )
159 );
160
161 \register_uninstall_hook(
162 __FILE__,
163 array(
164 __NAMESPACE__ . '\Activitypub',
165 'uninstall',
166 )
167 );
168
169 /**
170 * Only load code that needs BuddyPress to run once BP is loaded and initialized.
171 */
172 add_action(
173 'bp_include',
174 function() {
175 require_once __DIR__ . '/integration/class-buddypress.php';
176 Integration\Buddypress::init();
177 },
178 0
179 );
180
181 /**
182 * `get_plugin_data` wrapper
183 *
184 * @return array The plugin metadata array
185 */
186 function get_plugin_meta( $default_headers = array() ) {
187 if ( ! $default_headers ) {
188 $default_headers = array(
189 'Name' => 'Plugin Name',
190 'PluginURI' => 'Plugin URI',
191 'Version' => 'Version',
192 'Description' => 'Description',
193 'Author' => 'Author',
194 'AuthorURI' => 'Author URI',
195 'TextDomain' => 'Text Domain',
196 'DomainPath' => 'Domain Path',
197 'Network' => 'Network',
198 'RequiresWP' => 'Requires at least',
199 'RequiresPHP' => 'Requires PHP',
200 'UpdateURI' => 'Update URI',
201 );
202 }
203
204 return \get_file_data( __FILE__, $default_headers, 'plugin' );
205 }
206
207 /**
208 * Plugin Version Number used for caching.
209 */
210 function get_plugin_version() {
211 $meta = get_plugin_meta( array( 'Version' => 'Version' ) );
212
213 return $meta['Version'];
214 }
215