updated plugin ActivityPub
version 3.3.3
This commit is contained in:
127
wp-content/plugins/activitypub/includes/class-link.php
Normal file
127
wp-content/plugins/activitypub/includes/class-link.php
Normal file
@ -0,0 +1,127 @@
|
||||
<?php
|
||||
/**
|
||||
* Link class.
|
||||
*
|
||||
* @package Activitypub
|
||||
*/
|
||||
|
||||
namespace Activitypub;
|
||||
|
||||
/**
|
||||
* ActivityPub Summery Links Class.
|
||||
*/
|
||||
class Link {
|
||||
|
||||
/**
|
||||
* Initialize the class, registering WordPress hooks.
|
||||
*/
|
||||
public static function init() {
|
||||
\add_filter( 'activitypub_extra_field_content', array( self::class, 'the_content' ) );
|
||||
\add_filter( 'activitypub_activity_object_array', array( self::class, 'filter_activity_object' ), 99 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter only the activity object and replace the summary with URLs.
|
||||
*
|
||||
* @param array $activity The activity object array.
|
||||
*
|
||||
* @return array Rhe activity object array.
|
||||
*/
|
||||
public static function filter_activity_object( $activity ) {
|
||||
/* phpcs:ignore Squiz.PHP.CommentedOutCode.Found
|
||||
Removed until this is merged: https://github.com/mastodon/mastodon/pull/28629
|
||||
if ( ! empty( $activity['summary'] ) ) {
|
||||
$activity['summary'] = self::the_content( $activity['summary'] );
|
||||
}
|
||||
*/
|
||||
|
||||
if ( ! empty( $activity['content'] ) ) {
|
||||
$activity['content'] = self::the_content( $activity['content'] );
|
||||
}
|
||||
|
||||
return $activity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter to replace the URLS in the content with links
|
||||
*
|
||||
* @param string $the_content The post content.
|
||||
*
|
||||
* @return string the filtered post content.
|
||||
*/
|
||||
public static function the_content( $the_content ) {
|
||||
return enrich_content_data( $the_content, '/' . ACTIVITYPUB_URL_REGEXP . '/i', array( self::class, 'replace_with_links' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* A callback for preg_replace to build the links.
|
||||
*
|
||||
* Link shortening https://docs.joinmastodon.org/api/guidelines/#links
|
||||
*
|
||||
* @param array $result The preg_match results.
|
||||
*
|
||||
* @return string The final string.
|
||||
*/
|
||||
public static function replace_with_links( $result ) {
|
||||
if ( 'www.' === substr( $result[0], 0, 4 ) ) {
|
||||
$result[0] = 'https://' . $result[0];
|
||||
}
|
||||
$parsed_url = \wp_parse_url( html_entity_decode( $result[0] ) );
|
||||
if ( ! $parsed_url || empty( $parsed_url['host'] ) ) {
|
||||
return $result[0];
|
||||
}
|
||||
|
||||
if ( empty( $parsed_url['scheme'] ) ) {
|
||||
$invisible_prefix = 'https://';
|
||||
} else {
|
||||
$invisible_prefix = $parsed_url['scheme'] . '://';
|
||||
}
|
||||
if ( ! empty( $parsed_url['user'] ) ) {
|
||||
$invisible_prefix .= $parsed_url['user'];
|
||||
}
|
||||
if ( ! empty( $parsed_url['pass'] ) ) {
|
||||
$invisible_prefix .= ':' . $parsed_url['pass'];
|
||||
}
|
||||
if ( ! empty( $parsed_url['user'] ) ) {
|
||||
$invisible_prefix .= '@';
|
||||
}
|
||||
|
||||
$text_url = $parsed_url['host'];
|
||||
if ( 'www.' === substr( $text_url, 0, 4 ) ) {
|
||||
$text_url = substr( $text_url, 4 );
|
||||
$invisible_prefix .= 'www.';
|
||||
}
|
||||
if ( ! empty( $parsed_url['port'] ) ) {
|
||||
$text_url .= ':' . $parsed_url['port'];
|
||||
}
|
||||
if ( ! empty( $parsed_url['path'] ) ) {
|
||||
$text_url .= $parsed_url['path'];
|
||||
}
|
||||
if ( ! empty( $parsed_url['query'] ) ) {
|
||||
$text_url .= '?' . $parsed_url['query'];
|
||||
}
|
||||
if ( ! empty( $parsed_url['fragment'] ) ) {
|
||||
$text_url .= '#' . $parsed_url['fragment'];
|
||||
}
|
||||
|
||||
$display = \substr( $text_url, 0, 30 );
|
||||
$invisible_suffix = \substr( $text_url, 30 );
|
||||
|
||||
$display_class = '';
|
||||
if ( $invisible_suffix ) {
|
||||
$display_class .= 'ellipsis';
|
||||
}
|
||||
|
||||
$rel = apply_filters( 'activitypub_link_rel', 'nofollow noopener noreferrer' );
|
||||
|
||||
return \sprintf(
|
||||
'<a href="%s" target="_blank" rel="%s" translate="no"><span class="invisible">%s</span><span class="%s">%s</span><span class="invisible">%s</span></a>',
|
||||
esc_url( $result[0] ),
|
||||
$rel,
|
||||
esc_html( $invisible_prefix ),
|
||||
$display_class,
|
||||
esc_html( $display ),
|
||||
esc_html( $invisible_suffix )
|
||||
);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user