236 lines
5.2 KiB
PHP
236 lines
5.2 KiB
PHP
<?php
|
|
namespace AIOSEO\Plugin\Common\Admin;
|
|
|
|
// Exit if accessed directly.
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* Class that holds our dashboard widget.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
class Dashboard {
|
|
/**
|
|
* Class Constructor.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
public function __construct() {
|
|
add_action( 'wp_dashboard_setup', [ $this, 'addDashboardWidgets' ] );
|
|
}
|
|
|
|
/**
|
|
* Registers our dashboard widgets.
|
|
*
|
|
* @since 4.2.0
|
|
*
|
|
* @return void
|
|
*/
|
|
public function addDashboardWidgets() {
|
|
// Add the SEO Setup widget.
|
|
if (
|
|
$this->canShowWidget( 'seoSetup' ) &&
|
|
apply_filters( 'aioseo_show_seo_setup', true ) &&
|
|
( aioseo()->access->isAdmin() || aioseo()->access->hasCapability( 'aioseo_setup_wizard' ) ) &&
|
|
! aioseo()->standalone->setupWizard->isCompleted()
|
|
) {
|
|
wp_add_dashboard_widget(
|
|
'aioseo-seo-setup',
|
|
// Translators: 1 - The plugin short name ("AIOSEO").
|
|
sprintf( esc_html__( '%s Setup', 'all-in-one-seo-pack' ), AIOSEO_PLUGIN_SHORT_NAME ),
|
|
[
|
|
$this,
|
|
'outputSeoSetup',
|
|
],
|
|
null,
|
|
null,
|
|
'normal',
|
|
'high'
|
|
);
|
|
}
|
|
|
|
// Add the SEO Checklist widget.
|
|
if (
|
|
$this->canShowWidget( 'seoChecklist' ) &&
|
|
apply_filters( 'aioseo_show_seo_checklist', true ) &&
|
|
( aioseo()->access->isAdmin() || aioseo()->access->hasCapability( 'aioseo_setup_wizard' ) ) &&
|
|
aioseo()->standalone->setupWizard->isCompleted()
|
|
) {
|
|
wp_add_dashboard_widget(
|
|
'aioseo-seo-checklist',
|
|
// Translators: 1 - The plugin short name ("AIOSEO").
|
|
sprintf( esc_html__( '%s Checklist', 'all-in-one-seo-pack' ), AIOSEO_PLUGIN_SHORT_NAME ),
|
|
[
|
|
$this,
|
|
'outputSeoChecklist',
|
|
],
|
|
null,
|
|
null,
|
|
'normal',
|
|
'high'
|
|
);
|
|
}
|
|
|
|
// Add the Overview widget.
|
|
if (
|
|
$this->canShowWidget( 'seoOverview' ) &&
|
|
apply_filters( 'aioseo_show_seo_overview', true ) &&
|
|
( aioseo()->access->isAdmin() || aioseo()->access->hasCapability( 'aioseo_page_analysis' ) ) &&
|
|
aioseo()->options->advanced->truSeo
|
|
) {
|
|
wp_add_dashboard_widget(
|
|
'aioseo-overview',
|
|
// Translators: 1 - The plugin short name ("AIOSEO").
|
|
sprintf( esc_html__( '%s Overview', 'all-in-one-seo-pack' ), AIOSEO_PLUGIN_SHORT_NAME ),
|
|
[
|
|
$this,
|
|
'outputSeoOverview',
|
|
]
|
|
);
|
|
}
|
|
|
|
// Add the News widget.
|
|
if (
|
|
$this->canShowWidget( 'seoNews' ) &&
|
|
apply_filters( 'aioseo_show_seo_news', true ) &&
|
|
aioseo()->access->isAdmin()
|
|
) {
|
|
wp_add_dashboard_widget(
|
|
'aioseo-rss-feed',
|
|
esc_html__( 'SEO News', 'all-in-one-seo-pack' ),
|
|
[
|
|
$this,
|
|
'displayRssDashboardWidget',
|
|
]
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Whether or not to show the widget.
|
|
*
|
|
* @since 4.0.0
|
|
* @version 4.2.8
|
|
*
|
|
* @param string $widget The widget to check if can show.
|
|
* @return boolean True if yes, false otherwise.
|
|
*/
|
|
protected function canShowWidget( $widget ) { // phpcs:disable VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Output the SEO Setup widget.
|
|
*
|
|
* @since 4.2.0
|
|
*
|
|
* @return void
|
|
*/
|
|
public function outputSeoSetup() {
|
|
$this->output( 'aioseo-seo-setup-app' );
|
|
}
|
|
|
|
/**
|
|
* Output the SEO Checklist widget.
|
|
*
|
|
* @since 4.2.0
|
|
*
|
|
* @return void
|
|
*/
|
|
public function outputSeoChecklist() {
|
|
$this->output( 'aioseo-seo-checklist-app' );
|
|
}
|
|
|
|
/**
|
|
* Output the SEO Overview widget.
|
|
*
|
|
* @since 4.2.0
|
|
*
|
|
* @return void
|
|
*/
|
|
public function outputSeoOverview() {
|
|
$this->output( 'aioseo-overview-app' );
|
|
}
|
|
|
|
/**
|
|
* Output the widget wrapper for the Vue App.
|
|
*
|
|
* @since 4.2.0
|
|
*
|
|
* @param string $appId The App ID to print out.
|
|
* @return void
|
|
*/
|
|
private function output( $appId ) {
|
|
// Enqueue the scripts for the widget.
|
|
$this->enqueue();
|
|
|
|
// Opening tag.
|
|
echo '<div id="' . esc_attr( $appId ) . '">';
|
|
|
|
// Loader element.
|
|
require AIOSEO_DIR . '/app/Common/Views/parts/loader.php';
|
|
|
|
// Closing tag.
|
|
echo '</div>';
|
|
}
|
|
|
|
/**
|
|
* Enqueue the scripts and styles.
|
|
*
|
|
* @since 4.2.0
|
|
*
|
|
* @return void
|
|
*/
|
|
private function enqueue() {
|
|
aioseo()->core->assets->load( 'src/vue/standalone/dashboard-widgets/main.js', [], aioseo()->helpers->getVueData( 'dashboard' ) );
|
|
}
|
|
|
|
/**
|
|
* Display RSS Dashboard Widget
|
|
*
|
|
* @since 4.0.0
|
|
*
|
|
* @return void
|
|
*/
|
|
public function displayRssDashboardWidget() {
|
|
// Check if the user has chosen not to display this widget through screen options.
|
|
$currentScreen = aioseo()->helpers->getCurrentScreen();
|
|
if ( empty( $currentScreen->id ) ) {
|
|
return;
|
|
}
|
|
|
|
$hiddenWidgets = get_user_meta( get_current_user_id(), 'metaboxhidden_' . $currentScreen->id );
|
|
if ( $hiddenWidgets && count( $hiddenWidgets ) > 0 && is_array( $hiddenWidgets[0] ) && in_array( 'aioseo-rss-feed', $hiddenWidgets[0], true ) ) {
|
|
return;
|
|
}
|
|
|
|
$rssItems = aioseo()->helpers->fetchAioseoArticles();
|
|
if ( ! $rssItems ) {
|
|
esc_html_e( 'Temporarily unable to load feed.', 'all-in-one-seo-pack' );
|
|
|
|
return;
|
|
}
|
|
?>
|
|
<ul>
|
|
<?php
|
|
foreach ( $rssItems as $item ) {
|
|
?>
|
|
<li>
|
|
<a target="_blank" href="<?php echo esc_url( $item['url'] ); ?>" rel="noopener noreferrer">
|
|
<?php echo esc_html( $item['title'] ); ?>
|
|
</a>
|
|
<span><?php echo esc_html( $item['date'] ); ?></span>
|
|
<div>
|
|
<?php echo esc_html( wp_strip_all_tags( $item['content'] ) ) . '...'; ?>
|
|
</div>
|
|
</li>
|
|
<?php
|
|
}
|
|
|
|
?>
|
|
</ul>
|
|
<?php
|
|
}
|
|
}
|