晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/stando/www/wp-content/plugins/wordpress-seo-premium/premium/classes/ |
Upload File : |
<?php
/**
* WPSEO Premium plugin file.
*
* @package WPSEO\Premium\Classes
*/
/**
* This class represents the fetching of a full name for a user who has filled in a Facebook profile url. The class
* will try to fetch the full name via the Facebook following plugin (widget). If the user has chosen to disallow
* following of his profile, there isn't returned any name - only an empty string.
*
* To prevent doing request all the time, the obtained name will be stored as user meta for the user.
*/
class WPSEO_Facebook_Profile {
const TRANSIENT_NAME = 'yoast_facebook_profiles';
/**
* URL providing us the full name belonging to the user.
*
* @var string
*/
private $facebook_endpoint = 'https://www.facebook.com/plugins/follow.php?href=';
/**
* Sets the AJAX action hook, to catch the AJAX request for getting the name on Facebook.
*/
public function set_hooks() {
add_action( 'wp_ajax_wpseo_get_facebook_name', [ $this, 'ajax_get_facebook_name' ] );
}
/**
* Sets the user id and prints the full Facebook name.
*/
public function ajax_get_facebook_name() {
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
check_ajax_referer( 'get_facebook_name' );
$user_id = (int) filter_input( INPUT_GET, 'user_id' );
$facebook_profile = $this->get_facebook_profile( $user_id );
// Only try to get the name when the user has a profile set.
if ( $facebook_profile !== '' ) {
wp_die( esc_html( $this->get_name( $facebook_profile ) ) );
}
wp_die();
}
}
/**
* Get the Facebook profile url from the user profile.
*
* @param int $user_id The user to get the Facebook profile field for.
*
* @return string URL or empty string if the field is not set or empty.
*/
private function get_facebook_profile( $user_id ) {
$facebook_profile = get_the_author_meta( 'facebook', $user_id );
if ( ! empty( $facebook_profile ) ) {
return $facebook_profile;
}
return '';
}
/**
* Get the name used on Facebook from the transient cache, if the name isn't
* fetched already get it from the Facebook follow widget.
*
* @param string $facebook_profile The profile to get.
*
* @return string
*/
private function get_name( $facebook_profile ) {
$cached_facebook_name = $this->get_cached_name( $facebook_profile );
if ( $cached_facebook_name !== false ) {
return $cached_facebook_name;
}
$facebook_name = $this->get_name_from_facebook( $facebook_profile );
$this->set_cached_name( $facebook_profile, $facebook_name );
return $facebook_name;
}
/**
* Returns the stored name from the user meta.
*
* @param string $facebook_profile The Facebook profile to look for.
*
* @return string|bool
*/
private function get_cached_name( $facebook_profile ) {
$facebook_profiles = get_transient( self::TRANSIENT_NAME );
if ( is_array( $facebook_profiles ) && array_key_exists( $facebook_profile, $facebook_profiles ) ) {
return $facebook_profiles[ $facebook_profile ];
}
return false;
}
/**
* Stores the fetched Facebook name to the user meta.
*
* @param string $facebook_profile The Facebook profile belonging to the name.
* @param string $facebook_name The name the user got on Facebook.
*/
private function set_cached_name( $facebook_profile, $facebook_name ) {
$facebook_profiles = get_transient( self::TRANSIENT_NAME );
$facebook_profiles[ $facebook_profile ] = $facebook_name;
set_transient( self::TRANSIENT_NAME, $facebook_profiles, DAY_IN_SECONDS );
}
/**
* Do request to Facebook to get the HTML for the follow widget.
*
* @param string $facebook_profile The profile URL to lookup.
*
* @return string
*/
private function get_name_from_facebook( $facebook_profile ) {
$response = wp_remote_get(
$this->facebook_endpoint . $facebook_profile,
[
'headers' => [ 'Accept-Language' => 'en_US' ],
]
);
if ( wp_remote_retrieve_response_code( $response ) === 200 ) {
return $this->extract_name_from_response(
wp_remote_retrieve_body( $response )
);
}
return '';
}
/**
* Try to extract the full name from the response.
*
* @param string $response_body The response HTML to lookup for the full name.
*
* @return string
*/
private function extract_name_from_response( $response_body ) {
$full_name_regex = '/<div class="pluginButton pluginButtonInline pluginConnectButtonDisconnected" title="Follow(.*)'s public updates">/i';
if ( preg_match( $full_name_regex, $response_body, $matches ) ) {
if ( ! empty( $matches[1] ) ) {
return $matches[1];
}
}
return '';
}
}