base && Extra_Fields::is_extra_fields_post_type( $current_screen->post_type ) ) {
?>
post_type ) ) {
return $allcaps;
}
if ( (int) get_current_user_id() !== (int) $post->post_author ) {
return false;
}
return $allcaps;
},
1,
3
);
}
/**
* Add ActivityPub specific actions/filters to the post list view.
*/
public static function list_posts() {
// Show only the user's extra fields.
\add_action(
'pre_get_posts',
function ( $query ) {
if ( $query->get( 'post_type' ) === 'ap_extrafield' ) {
$query->set( 'author', get_current_user_id() );
}
}
);
// Remove all views for the extra fields.
$screen_id = get_current_screen()->id;
add_filter(
"views_{$screen_id}",
function ( $views ) {
if ( Extra_Fields::is_extra_fields_post_type( get_current_screen()->post_type ) ) {
return array();
}
return $views;
}
);
}
/**
* Comment row actions.
*
* @param array $actions The existing actions.
* @param int|\WP_Comment $comment The comment object or ID.
*
* @return array The modified actions.
*/
public static function comment_row_actions( $actions, $comment ) {
if ( was_comment_received( $comment ) ) {
unset( $actions['edit'] );
unset( $actions['quickedit'] );
}
if ( in_array( get_comment_type( $comment ), Comment::get_comment_type_slugs(), true ) ) {
unset( $actions['reply'] );
}
return $actions;
}
/**
* Add a column "activitypub".
*
* This column shows if the user has the capability to use ActivityPub.
*
* @param array $columns The columns.
*
* @return array The columns extended by the activitypub.
*/
public static function manage_users_columns( $columns ) {
$columns['activitypub'] = __( 'ActivityPub', 'activitypub' );
return $columns;
}
/**
* Add "comment-type" and "protocol" as column in WP-Admin.
*
* @param array $columns The list of column names.
*
* @return array The extended list of column names.
*/
public static function manage_comment_columns( $columns ) {
$columns['comment_type'] = esc_attr__( 'Comment-Type', 'activitypub' );
$columns['comment_protocol'] = esc_attr__( 'Protocol', 'activitypub' );
return $columns;
}
/**
* Add "post_content" as column for Extra-Fields in WP-Admin.
*
* @param array $columns The list of column names.
* @param string $post_type The post type.
*
* @return array The extended list of column names.
*/
public static function manage_post_columns( $columns, $post_type ) {
if ( Extra_Fields::is_extra_fields_post_type( $post_type ) ) {
$after_key = 'title';
$index = array_search( $after_key, array_keys( $columns ), true );
$columns = array_slice( $columns, 0, $index + 1 ) + array( 'extra_field_content' => esc_attr__( 'Content', 'activitypub' ) ) + $columns;
}
return $columns;
}
/**
* Add "comment-type" and "protocol" as column in WP-Admin.
*
* @param array $column The column to implement.
* @param int $comment_id The comment id.
*/
public static function manage_comments_custom_column( $column, $comment_id ) {
if ( 'comment_type' === $column && ! defined( 'WEBMENTION_PLUGIN_DIR' ) ) {
echo esc_attr( ucfirst( get_comment_type( $comment_id ) ) );
} elseif ( 'comment_protocol' === $column ) {
$protocol = get_comment_meta( $comment_id, 'protocol', true );
if ( $protocol ) {
echo esc_attr( ucfirst( str_replace( 'activitypub', 'ActivityPub', $protocol ) ) );
} else {
esc_attr_e( 'Local', 'activitypub' );
}
}
}
/**
* Add the new ActivityPub comment types to the comment types dropdown.
*
* @param array $types The existing comment types.
*
* @return array The extended comment types.
*/
public static function comment_types_dropdown( $types ) {
foreach ( Comment::get_comment_types() as $comment_type ) {
$types[ $comment_type['type'] ] = esc_html( $comment_type['label'] );
}
return $types;
}
/**
* Return the results for the activitypub column.
*
* @param string $output Custom column output. Default empty.
* @param string $column_name Column name.
* @param int $user_id ID of the currently-listed user.
*
* @return string The column contents.
*/
public static function manage_users_custom_column( $output, $column_name, $user_id ) {
if ( 'activitypub' !== $column_name ) {
return $output;
}
if ( \user_can( $user_id, 'activitypub' ) ) {
return '✓' . esc_html__( 'ActivityPub enabled for this author', 'activitypub' ) . '';
} else {
return '✗' . esc_html__( 'ActivityPub disabled for this author', 'activitypub' ) . '';
}
}
/**
* Add a column "extra_field_content" to the post list view.
*
* @param string $column_name The column name.
* @param int $post_id The post ID.
*
* @return void
*/
public static function manage_posts_custom_column( $column_name, $post_id ) {
if ( 'extra_field_content' === $column_name ) {
$post = get_post( $post_id );
if ( Extra_Fields::is_extra_fields_post_type( $post->post_type ) ) {
echo esc_attr( wp_strip_all_tags( $post->post_content ) );
}
}
}
/**
* Add options to the Bulk dropdown on the users page.
*
* @param array $actions The existing bulk options.
*
* @return array The extended bulk options.
*/
public static function user_bulk_options( $actions ) {
$actions['add_activitypub_cap'] = __( 'Enable for ActivityPub', 'activitypub' );
$actions['remove_activitypub_cap'] = __( 'Disable for ActivityPub', 'activitypub' );
return $actions;
}
/**
* Handle bulk activitypub requests.
*
* * `add_activitypub_cap` - Add the activitypub capability to the selected users.
* * `remove_activitypub_cap` - Remove the activitypub capability from the selected users.
*
* @param string $sendback The URL to send the user back to.
* @param string $action The requested action.
* @param array $users The selected users.
*
* @return string The URL to send the user back to.
*/
public static function handle_bulk_request( $sendback, $action, $users ) {
if (
'remove_activitypub_cap' !== $action &&
'add_activitypub_cap' !== $action
) {
return $sendback;
}
foreach ( $users as $user_id ) {
$user = new \WP_User( $user_id );
if ( 'add_activitypub_cap' === $action ) {
$user->add_cap( 'activitypub' );
} elseif ( 'remove_activitypub_cap' === $action ) {
$user->remove_cap( 'activitypub' );
}
}
return $sendback;
}
/**
* Add ActivityPub infos to the dashboard glance items.
*
* @param array $items The existing glance items.
*
* @return array The extended glance items.
*/
public static function dashboard_glance_items( $items ) {
\add_filter( 'number_format_i18n', '\Activitypub\custom_large_numbers', 10, 3 );
if ( user_can_activitypub( \get_current_user_id() ) ) {
$follower_count = sprintf(
// translators: %s: number of followers.
_n(
'%s Follower',
'%s Followers',
count_followers( \get_current_user_id() ),
'activitypub'
),
\number_format_i18n( count_followers( \get_current_user_id() ) )
);
$items['activitypub-followers-user'] = sprintf(
'%3$s',
\esc_url( \admin_url( 'users.php?page=activitypub-followers-list' ) ),
\esc_attr__( 'Your followers', 'activitypub' ),
\esc_html( $follower_count )
);
}
if ( ! is_user_type_disabled( 'blog' ) && current_user_can( 'manage_options' ) ) {
$follower_count = sprintf(
// translators: %s: number of followers.
_n(
'%s Follower (Blog)',
'%s Followers (Blog)',
count_followers( Actors::BLOG_USER_ID ),
'activitypub'
),
\number_format_i18n( count_followers( Actors::BLOG_USER_ID ) )
);
$items['activitypub-followers-blog'] = sprintf(
'%3$s',
\esc_url( \admin_url( 'options-general.php?page=activitypub&tab=followers' ) ),
\esc_attr__( 'The Blog\'s followers', 'activitypub' ),
\esc_html( $follower_count )
);
}
\remove_filter( 'number_format_i18n', '\Activitypub\custom_large_numbers' );
return $items;
}
/**
* Add a "Fediverse Preview ⁂" link to the row actions.
*
* @param array $actions The existing actions.
* @param \WP_Post $post The post object.
*
* @return array The modified actions.
*/
public static function row_actions( $actions, $post ) {
// check if the post is enabled for ActivityPub.
if (
! \post_type_supports( \get_post_type( $post ), 'activitypub' ) ||
! in_array( $post->post_status, array( 'pending', 'draft', 'future', 'publish' ), true ) ||
! \current_user_can( 'edit_post', $post->ID ) ||
ACTIVITYPUB_CONTENT_VISIBILITY_LOCAL === get_content_visibility( $post->ID ) ||
( site_supports_blocks() && \use_block_editor_for_post_type( $post->post_type ) )
) {
return $actions;
}
$preview_url = add_query_arg( 'activitypub', 'true', \get_preview_post_link( $post ) );
$actions['activitypub'] = sprintf(
'%s',
\esc_url( $preview_url ),
\esc_html__( 'Fediverse Preview ⁂', 'activitypub' )
);
return $actions;
}
/**
* Add plugin settings link.
*
* @param array $actions The current actions.
*/
public static function add_plugin_settings_link( $actions ) {
$actions[] = \sprintf(
'%2s',
\menu_page_url( 'activitypub', false ),
\__( 'Settings', 'activitypub' )
);
return $actions;
}
/**
* Display plugin upgrade notice to users.
*
* @param array $data The plugin data.
* @param object $update The plugin update data.
*/
public static function plugin_update_message( $data, $update ) {
if ( ! isset( $update->upgrade_notice ) ) {
return;
}
echo '
' . wp_strip_all_tags( $update->upgrade_notice ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
/**
* Adds metabox on wp-admin/tools.php.
*/
public static function tool_box() {
\load_template( ACTIVITYPUB_PLUGIN_DIR . 'templates/toolbox.php' );
}
}