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

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