PluginProbe
ActivityPub / 1.0.4
ActivityPub v1.0.4
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.4, at activitypub.php

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