PluginProbe
ActivityPub / 1.0.3
ActivityPub v1.0.3
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.3, at activitypub.php

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