68 lines
1.5 KiB
PHP
68 lines
1.5 KiB
PHP
<?php
|
|
namespace Activitypub\Peer;
|
|
|
|
/**
|
|
* ActivityPub Users DB-Class
|
|
*
|
|
* @author Matthias Pfefferle
|
|
*/
|
|
class Users {
|
|
|
|
/**
|
|
* Undocumented function
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function get_user_by_various( $data ) {
|
|
|
|
}
|
|
|
|
/**
|
|
* Examine a url and try to determine the author ID it represents.
|
|
*
|
|
* Checks are supposedly from the hosted site blog.
|
|
*
|
|
* @param string $url Permalink to check.
|
|
*
|
|
* @return int User ID, or 0 on failure.
|
|
*/
|
|
public static function url_to_authorid( $url ) {
|
|
global $wp_rewrite;
|
|
|
|
// check if url hase the same host
|
|
if ( \wp_parse_url( \site_url(), \PHP_URL_HOST ) !== \wp_parse_url( $url, \PHP_URL_HOST ) ) {
|
|
return 0;
|
|
}
|
|
|
|
// first, check to see if there is a 'author=N' to match against
|
|
if ( \preg_match( '/[?&]author=(\d+)/i', $url, $values ) ) {
|
|
$id = \absint( $values[1] );
|
|
if ( $id ) {
|
|
return $id;
|
|
}
|
|
}
|
|
|
|
// check to see if we are using rewrite rules
|
|
$rewrite = $wp_rewrite->wp_rewrite_rules();
|
|
|
|
// not using rewrite rules, and 'author=N' method failed, so we're out of options
|
|
if ( empty( $rewrite ) ) {
|
|
return 0;
|
|
}
|
|
|
|
// generate rewrite rule for the author url
|
|
$author_rewrite = $wp_rewrite->get_author_permastruct();
|
|
$author_regexp = \str_replace( '%author%', '', $author_rewrite );
|
|
|
|
// match the rewrite rule with the passed url
|
|
if ( \preg_match( '/https?:\/\/(.+)' . \preg_quote( $author_regexp, '/' ) . '([^\/]+)/i', $url, $match ) ) {
|
|
$user = \get_user_by( 'slug', $match[2] );
|
|
if ( $user ) {
|
|
return $user->ID;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
}
|