check if a user is enabled or not
This commit is contained in:
parent
359cd57081
commit
58c04856c9
3 changed files with 72 additions and 18 deletions
|
@ -30,15 +30,27 @@ class User_Factory {
|
||||||
* @return \Acitvitypub\Model\User The User.
|
* @return \Acitvitypub\Model\User The User.
|
||||||
*/
|
*/
|
||||||
public static function get_by_id( $user_id ) {
|
public static function get_by_id( $user_id ) {
|
||||||
|
if ( is_string( $user_id ) || is_numeric( $user_id ) ) {
|
||||||
$user_id = (int) $user_id;
|
$user_id = (int) $user_id;
|
||||||
|
}
|
||||||
|
|
||||||
if ( self::BLOG_USER_ID === $user_id ) {
|
if (
|
||||||
|
self::BLOG_USER_ID === $user_id &&
|
||||||
|
is_user_enabled( $user_id )
|
||||||
|
) {
|
||||||
return new Blog_User( $user_id );
|
return new Blog_User( $user_id );
|
||||||
} elseif ( self::APPLICATION_USER_ID === $user_id ) {
|
} elseif (
|
||||||
|
self::APPLICATION_USER_ID === $user_id &&
|
||||||
|
is_user_enabled( $user_id )
|
||||||
|
) {
|
||||||
return new Application_User( $user_id );
|
return new Application_User( $user_id );
|
||||||
} else {
|
} elseif (
|
||||||
$user = get_user_by( 'ID', $user_id );
|
$user_id > 0 &&
|
||||||
if ( ! $user || ! \user_can( $user, 'publish_posts' ) ) {
|
is_user_enabled( $user_id )
|
||||||
|
) {
|
||||||
|
return new User( $user_id );
|
||||||
|
}
|
||||||
|
|
||||||
return new WP_Error(
|
return new WP_Error(
|
||||||
'activitypub_user_not_found',
|
'activitypub_user_not_found',
|
||||||
\__( 'User not found', 'activitypub' ),
|
\__( 'User not found', 'activitypub' ),
|
||||||
|
@ -46,10 +58,6 @@ class User_Factory {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new User( $user->ID );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the User by username.
|
* Get the User by username.
|
||||||
*
|
*
|
||||||
|
|
|
@ -277,3 +277,49 @@ function is_activitypub_request() {
|
||||||
function is_single_user_mode() {
|
function is_single_user_mode() {
|
||||||
return ACTIVITYPUB_SINGLE_USER_MODE;
|
return ACTIVITYPUB_SINGLE_USER_MODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function checks if a user is enabled for ActivityPub.
|
||||||
|
*
|
||||||
|
* @param int $user_id The User-ID.
|
||||||
|
*
|
||||||
|
* @return boolean True if the user is enabled, false otherwise.
|
||||||
|
*/
|
||||||
|
function is_user_enabled( $user_id ) {
|
||||||
|
switch ( $user_id ) {
|
||||||
|
// if the user is the application user, it's always enabled.
|
||||||
|
case \Activitypub\User_Factory::APPLICATION_USER_ID:
|
||||||
|
return true;
|
||||||
|
// if the user is the blog user, it's only enabled in single-user mode.
|
||||||
|
case \Activitypub\User_Factory::BLOG_USER_ID:
|
||||||
|
if ( is_single_user_mode() ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
// if the user is any other user, it's enabled if it can publish posts.
|
||||||
|
default:
|
||||||
|
if (
|
||||||
|
! is_single_user_mode() &&
|
||||||
|
\user_can( $user_id, 'publish_posts' )
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ! function_exists( 'get_self_link' ) ) {
|
||||||
|
/**
|
||||||
|
* Get the correct self URL
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
function get_self_link() {
|
||||||
|
$host = wp_parse_url( home_url() );
|
||||||
|
|
||||||
|
return esc_url( apply_filters( 'self_link', set_url_scheme( 'http://' . $host['host'] . wp_unslash( $_SERVER['REQUEST_URI'] ) ) ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -197,7 +197,7 @@ class Post {
|
||||||
* @return int the User ID.
|
* @return int the User ID.
|
||||||
*/
|
*/
|
||||||
public function get_user_id() {
|
public function get_user_id() {
|
||||||
return apply_filters( 'activitypub_post_user_id', $this->post_author, $this->post );
|
return apply_filters( 'activitypub_post_user_id', $this->get_post_author(), $this->post );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue