<?php /** * ActivityPub Class * * @author Matthias Pfefferle */ class Activitypub { /** * Return a AS2 JSON version of an author, post or page * * @param string $template the path to the template object * * @return string the new path to the JSON template */ public static function render_json_template( $template ) { if ( ! is_author() && ! is_singular() ) { return $template; } if ( is_author() ) { $json_template = dirname( __FILE__ ) . '/../templates/json-author.php'; } elseif ( is_singular() ) { $json_template = dirname( __FILE__ ) . '/../templates/json-post.php'; } global $wp_query; if ( isset( $wp_query->query_vars['as2'] ) ) { return $json_template; } if ( ! isset( $_SERVER['HTTP_ACCEPT'] ) ) { return $template; } // interpret accept header $pos = stripos( $_SERVER['HTTP_ACCEPT'], ';' ); if ( $pos ) { $accept_header = substr( $_SERVER['HTTP_ACCEPT'], 0, $pos ); } else { $accept_header = $_SERVER['HTTP_ACCEPT']; } // accept header as an array $accept = explode( ',', trim( $accept_header ) ); if ( ! in_array( 'application/activity+json', $accept, true ) && ! in_array( 'application/ld+json', $accept, true ) && ! in_array( 'application/json', $accept, true ) ) { return $template; } return $json_template; } /** * Add WebFinger discovery links * * @param array $array the jrd array * @param string $resource the WebFinger resource * @param WP_User $user the WordPress user */ public static function add_webfinger_discovery( $array, $resource, $user ) { $array['links'][] = array( 'rel' => 'self', 'type' => 'application/activity+json', 'href' => get_author_posts_url( $user->ID ), ); return $array; } /** * Add the 'photos' query variable so WordPress * won't mangle it. */ public static function add_query_vars( $vars ) { $vars[] = 'as2'; return $vars; } /** * Add our rewrite endpoint to permalinks and pages. */ public static function add_rewrite_endpoint() { add_rewrite_endpoint( 'as2', EP_AUTHORS | EP_PERMALINK | EP_PAGES ); } }