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;
 | |
| 	}
 | |
| }
 |