TabsView::class, 'single' => SingleView::class, 'single-resource' => SingleResourceView::class ]; private $wordsCount; public function __construct() { parent::__construct(); $this->setFilters(); } protected function setFilters() { $this->filters = FilterGenerator::create() ->dropdown('qp', [ 'label' => esc_html__('Query Parameter', 'wp-statistics'), 'panel' => true, 'searchable' => true, 'attributes' => [ 'data-type' => 'query-params', 'data-source' => 'getQueryParameters', ], ]) ->get(); return $this->filters; } protected function init() { $this->wordsCount = new WordCountService(); $this->disableScreenOption(); $this->processWordCountMeta(); $this->processWordCountInBackground(); } private function processWordCountMeta() { /** @var SourceChannelUpdater $backgroundProcess */ $backgroundProcess = WP_Statistics()->getBackgroundProcess('calculate_post_words_count'); if (!$backgroundProcess->is_initiated() && $this->wordsCount->isActive()) { $actionUrl = add_query_arg( [ 'action' => 'process_word_count', 'nonce' => wp_create_nonce('process_word_count_nonce') ], Menus::admin_url($this->pageSlug) ); $message = sprintf( __('Please click here to process the word count in the background. This is necessary for accurate analytics.', 'wp-statistics'), esc_url($actionUrl) ); Notice::addNotice($message, 'word_count_prompt', 'info', false); } } private function processWordCountInBackground() { // Check the action and nonce if (!Request::compare('action', 'process_word_count')) { return; } check_admin_referer('process_word_count_nonce', 'nonce'); /** @var SourceChannelUpdater $backgroundProcess */ $backgroundProcess = WP_Statistics()->getBackgroundProcess('calculate_post_words_count'); if ($backgroundProcess->is_active()) { Notice::addFlashNotice(__('Word count processing is already started.', 'wp-statistics')); wp_redirect(Menus::admin_url($this->pageSlug)); exit; } // Initialize and dispatch the CalculatePostWordsCount class BackgroundProcessFactory::processWordCountForPosts(); wp_redirect(Menus::admin_url($this->pageSlug)); exit; } }