晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
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/rainic/www/wp-contentTZh/plugins/elementor/app/modules/import-export/processes/ |
Upload File : |
<?php
namespace Elementor\App\Modules\ImportExport\Processes;
use Elementor\App\Modules\ImportExport\Module;
use Elementor\App\Modules\ImportExport\Runners\Revert\Elementor_Content;
use Elementor\App\Modules\ImportExport\Runners\Revert\Revert_Runner_Base;
use Elementor\App\Modules\ImportExport\Runners\Revert\Plugins;
use Elementor\App\Modules\ImportExport\Runners\Revert\Site_Settings;
use Elementor\App\Modules\ImportExport\Runners\Revert\Taxonomies;
use Elementor\App\Modules\ImportExport\Runners\Revert\Templates;
use Elementor\App\Modules\ImportExport\Runners\Revert\Wp_Content;
use Elementor\App\Modules\ImportExport\Utils;
class Revert {
/**
* @var Revert_Runner_Base[]
*/
protected $runners = [];
private $import_sessions;
private $revert_sessions;
public function __construct() {
$this->import_sessions = self::get_import_sessions();
$this->revert_sessions = self::get_revert_sessions();
}
/**
* Register a runner.
*
* @param Revert_Runner_Base $runner_instance
*/
public function register( Revert_Runner_Base $runner_instance ) {
$this->runners[ $runner_instance::get_name() ] = $runner_instance;
}
public function register_default_runners() {
$this->register( new Site_Settings() );
$this->register( new Plugins() );
$this->register( new Templates() );
$this->register( new Taxonomies() );
$this->register( new Elementor_Content() );
$this->register( new Wp_Content() );
}
/**
* Execute the revert process.
*
* @throws \Exception If no revert runners have been specified.
*/
public function run() {
if ( empty( $this->runners ) ) {
throw new \Exception( 'Couldn’t execute the revert process because no revert runners have been specified. Try again by specifying revert runners.' );
}
$import_session = $this->get_last_import_session();
if ( empty( $import_session ) ) {
throw new \Exception( 'Couldn’t execute the revert process because there are no import sessions to revert.' );
}
// fallback if the import session failed and doesn't have the runners metadata
if ( ! isset( $import_session['runners'] ) && isset( $import_session['instance_data'] ) ) {
$import_session['runners'] = $import_session['instance_data']['runners_import_metadata'] ?? [];
}
foreach ( $this->runners as $runner ) {
if ( $runner->should_revert( $import_session ) ) {
$runner->revert( $import_session );
}
}
$this->revert_attachments( $import_session );
$this->delete_last_import_data();
}
public static function get_import_sessions() {
$import_sessions = Utils::get_import_sessions();
if ( ! $import_sessions ) {
return [];
}
usort( $import_sessions, function( $a, $b ) {
return strcmp( $a['start_timestamp'], $b['start_timestamp'] );
} );
return $import_sessions;
}
public static function get_revert_sessions() {
$revert_sessions = get_option( Module::OPTION_KEY_ELEMENTOR_REVERT_SESSIONS );
if ( ! $revert_sessions ) {
return [];
}
return $revert_sessions;
}
public function get_last_import_session() {
$import_sessions = $this->import_sessions;
if ( empty( $import_sessions ) ) {
return [];
}
return end( $import_sessions );
}
public function get_penultimate_import_session() {
$sessions_data = $this->import_sessions;
$penultimate_element_value = [];
if ( empty( $sessions_data ) ) {
return [];
}
end( $sessions_data );
prev( $sessions_data );
if ( ! is_null( key( $sessions_data ) ) ) {
$penultimate_element_value = current( $sessions_data );
}
return $penultimate_element_value;
}
private function delete_last_import_data() {
$import_sessions = $this->import_sessions;
$revert_sessions = $this->revert_sessions;
$reverted_session = array_pop( $import_sessions );
$revert_sessions[] = [
'session_id' => $reverted_session['session_id'],
'kit_title' => $reverted_session['kit_title'],
'kit_name' => $reverted_session['kit_name'],
'kit_thumbnail' => $reverted_session['kit_thumbnail'],
'source' => $reverted_session['kit_source'],
'user_id' => get_current_user_id(),
'import_timestamp' => $reverted_session['start_timestamp'],
'revert_timestamp' => current_time( 'timestamp' ),
];
update_option( Module::OPTION_KEY_ELEMENTOR_IMPORT_SESSIONS, $import_sessions, false );
update_option( Module::OPTION_KEY_ELEMENTOR_REVERT_SESSIONS, $revert_sessions, false );
$this->import_sessions = $import_sessions;
$this->revert_sessions = $revert_sessions;
}
private function revert_attachments( $data ) {
$query_args = [
'post_type' => 'attachment',
'post_status' => 'any',
'posts_per_page' => -1,
'meta_query' => [
[
'key' => Module::META_KEY_ELEMENTOR_IMPORT_SESSION_ID,
'value' => $data['session_id'],
],
],
];
$query = new \WP_Query( $query_args );
foreach ( $query->posts as $post ) {
wp_delete_attachment( $post->ID, true );
}
}
}