PerformanceView::class,
'authors' => AuthorsView::class,
'single-author' => SingleAuthorView::class
];
/**
* @var WordCountService
*/
private $wordsCount;
public function __construct()
{
parent::__construct();
$this->setFilters();
}
protected function setFilters() {
$this->filters = FilterGenerator::create()
->dropdown('pt', [
'label' => esc_html__('Post Type', 'wp-statistics'),
'panel' => true,
'attributes' => [
'data-type' => 'post-type',
'data-source' => 'getPostTypes',
],
])
->get();
return $this->filters;
}
protected function init()
{
$this->wordsCount = new WordCountService();
$this->disableScreenOption();
$this->inaccurateDataNotice();
$this->checkWordCountMetaNotice();
$this->processWordCountInBackgroundAction();
}
private function inaccurateDataNotice()
{
$postType = Request::get('pt', 'post');
if (!post_type_supports($postType, 'author')) {
$message = sprintf(
__('This post type doesn’t support authors, affecting the accuracy of author performance data. To fix this, please enable author support for this post type. Learn more.', 'wp-statistics'),
'https://wp-statistics.com/resources/enabling-author-support-for-your-post-types/?utm_source=wp-statistics&utm_medium=link&utm_campaign=doc'
);
Notice::addNotice($message, 'inaccurate_data_notice', 'warning', false);
}
}
/**
* Check for posts without word count meta key
*
* @return void
*/
private function checkWordCountMetaNotice()
{
/** @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('author-analytics')
);
$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 processWordCountInBackgroundAction()
{
// 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('author-analytics'));
exit;
}
// Initialize and dispatch the CalculatePostWordsCount class
BackgroundProcessFactory::processWordCountForPosts();
wp_redirect(Menus::admin_url('author-analytics'));
exit;
}
}