is_dashboard_page() ) {
return;
}
add_action( 'admin_enqueue_scripts', [ $this, 'calculate_unprocessed' ], 9 );
add_action( 'admin_enqueue_scripts', [ $this, 'enqueue' ], 10 );
add_action( 'admin_footer', [ $this, 'modal_box' ], 20 );
add_action( 'wpseo_tools_overview_list_items', [ $this, 'show_tools_overview_item' ], 10 );
}
/**
* Calculates the number of unprocessed items per post type.
*
* @return void
*/
public function calculate_unprocessed() {
$this->public_post_types = apply_filters( 'wpseo_link_count_post_types', WPSEO_Post_Type::get_accessible_post_types() );
if ( is_array( $this->public_post_types ) && $this->public_post_types !== [] ) {
$this->unprocessed = WPSEO_Link_Query::get_unprocessed_count( $this->public_post_types );
}
}
/**
* Adds an item to the tools page overview list.
*
* @return void
*/
public function show_tools_overview_item() {
echo '
';
echo '' . esc_html__( 'Text link counter', 'wordpress-seo' ) . ' ';
if ( ! $this->has_unprocessed() ) {
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: `message_already_indexed` is considered a safe method.
echo $this->message_already_indexed();
}
if ( $this->has_unprocessed() ) {
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Reason: `message_start_indexing` is considered a safe method.
printf( '%s', $this->message_start_indexing() );
}
echo '
';
}
/**
* Generates the model box.
*
* @return void
*/
public function modal_box() {
if ( ! $this->is_dashboard_page() ) {
return;
}
// Adding the thickbox.
add_thickbox();
$blocks = [];
if ( ! $this->has_unprocessed() ) {
$inner_text = sprintf(
'
%s
',
esc_html__( 'All your texts are already counted, there is no need to count them again.', 'wordpress-seo' )
);
}
if ( $this->has_unprocessed() ) {
$progress = sprintf(
/* translators: 1: expands to a containing the number of items recalculated. 2: expands to a containing the total number of items. */
esc_html__( 'Text %1$s of %2$s processed.', 'wordpress-seo' ),
'0',
sprintf( '%d', $this->get_unprocessed_count() )
);
$inner_text = '';
$inner_text .= sprintf( '
%s
', $progress );
}
$blocks[] = sprintf(
'
%s
%s
',
esc_html__( 'Counting links in your texts', 'wordpress-seo' ),
$inner_text
);
?>
', $blocks );
?>
enqueue_script( 'reindex-links' );
$data = [
'amount' => $this->get_unprocessed_count(),
'restApi' => [
'root' => esc_url_raw( rest_url() ),
'endpoint' => WPSEO_Link_Reindex_Post_Endpoint::REST_NAMESPACE . '/' . WPSEO_Link_Reindex_Post_Endpoint::ENDPOINT_QUERY,
'nonce' => wp_create_nonce( 'wp_rest' ),
],
'message' => [
'indexingCompleted' => $this->message_already_indexed(),
],
'l10n' => [
'calculationInProgress' => __( 'Calculation in progress...', 'wordpress-seo' ),
'calculationCompleted' => __( 'Calculation completed.', 'wordpress-seo' ),
],
];
wp_localize_script( WPSEO_Admin_Asset_Manager::PREFIX . 'reindex-links', 'yoastReindexLinksData', [ 'data' => $data ] );
}
/**
* Checks if the current page is the dashboard page.
*
* @return bool True when current page is the dashboard page.
*/
protected function is_dashboard_page() {
return ( filter_input( INPUT_GET, 'page' ) === 'wpseo_tools' );
}
/**
* Retrieves the string to display when everything has been indexed.
*
* @return string The message to show when everything has been indexed.
*/
public function message_already_indexed() {
return '' . esc_html__( 'Good job! All the links in your texts have been counted.', 'wordpress-seo' );
}
/**
* Returns if there are unprocessed items.
*
* @return bool True if there are unprocessed items.
*/
public function has_unprocessed() {
return $this->unprocessed > 0;
}
/**
* Returns the number of unprocessed items.
*
* @return int Number of unprocessed items.
*/
public function get_unprocessed_count() {
return $this->unprocessed;
}
/**
* Retrieves the message to show starting indexation.
*
* @return string The message.
*/
public function message_start_indexing() {
return sprintf(
'%2$s',
175,
esc_attr__( 'Count links in your texts', 'wordpress-seo' )
);
}
}