158 lines
4.1 KiB
PHP
158 lines
4.1 KiB
PHP
<?php
|
|
namespace AIOSEO\Plugin\Common\Admin;
|
|
|
|
// Exit if accessed directly.
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* Handles the pointers for the admin.
|
|
*
|
|
* @since 4.8.3
|
|
*/
|
|
class Pointers {
|
|
/**
|
|
* Class constructor.
|
|
*
|
|
* @since 4.8.3
|
|
*/
|
|
public function __construct() {
|
|
if ( ! is_admin() ) {
|
|
return;
|
|
}
|
|
|
|
add_action( 'admin_init', [ $this, 'maybeDismissPointer' ] );
|
|
add_action( 'in_admin_header', [ $this, 'init' ] );
|
|
}
|
|
|
|
/**
|
|
* Initializes the pointers.
|
|
*
|
|
* @since 4.8.3
|
|
*
|
|
* @return void
|
|
*/
|
|
public function init() {
|
|
$this->registerKwRankTracker();
|
|
}
|
|
|
|
/**
|
|
* Checks if a pointer should be dismissed.
|
|
*
|
|
* @since 4.8.3
|
|
*
|
|
* @return void
|
|
*/
|
|
public function maybeDismissPointer() {
|
|
if (
|
|
! isset( $_GET['aioseo-dismiss-pointer'] ) ||
|
|
! isset( $_GET['aioseo-dismiss-pointer-nonce'] ) ||
|
|
! wp_verify_nonce( sanitize_text_field( wp_unslash( $_GET['aioseo-dismiss-pointer-nonce'] ) ), 'aioseo-dismiss-pointer' )
|
|
) {
|
|
return;
|
|
}
|
|
|
|
$pointer = sanitize_text_field( wp_unslash( $_GET['aioseo-dismiss-pointer'] ) );
|
|
update_user_meta( get_current_user_id(), "_aioseo-$pointer-dismissed", true );
|
|
}
|
|
|
|
/**
|
|
* Registers a pointer.
|
|
*
|
|
* @since 4.8.3
|
|
*
|
|
* @return void
|
|
*/
|
|
public function registerPointer( $id, $pageSlug, $args ) {
|
|
if ( get_user_meta( get_current_user_id(), "_aioseo-$id-dismissed", true ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( "all-in-one-seo_page_aioseo-{$pageSlug}" === aioseo()->helpers->getCurrentScreen()->id ) {
|
|
return;
|
|
}
|
|
|
|
wp_enqueue_style( 'wp-pointer' );
|
|
wp_enqueue_script( 'wp-pointer' );
|
|
|
|
// phpcs:disable Squiz.PHP.EmbeddedPhp, Generic.WhiteSpace.ScopeIndent.IncorrectExact
|
|
?>
|
|
<script>
|
|
jQuery( document ).ready( function( $ ) {
|
|
const $menuItem = $( '#toplevel_page_aioseo' );
|
|
const $pointer = $menuItem.pointer( {
|
|
content :
|
|
"<h3><?php echo esc_html( $args['title'] ); ?><\/h3>" +
|
|
"<h4><?php echo esc_html( $args['subtitle'] ); ?><\/h4>" +
|
|
"<p><?php echo esc_html( $args['content'] ); ?><\/p>" +
|
|
"<?php
|
|
echo sprintf(
|
|
'<p><a class=\"button button-primary\" href=\"%s\">%s</a></p>',
|
|
esc_attr( esc_url( $args['url'] ) ),
|
|
esc_html( $args['button'] )
|
|
);
|
|
?>",
|
|
position : {
|
|
edge : <?php echo is_rtl() ? "'right'" : "'left'"; ?>,
|
|
align : 'center'
|
|
},
|
|
pointerWidth : 420,
|
|
show: function(event, el) {
|
|
el.pointer.addClass('aioseo-wp-pointer');
|
|
$menuItem.addClass('aioseo-pointer-active');
|
|
},
|
|
close : function() {
|
|
setTimeout(() => {
|
|
$menuItem.removeClass('aioseo-pointer-active');
|
|
}, 300);
|
|
jQuery.get(
|
|
window.location.href,
|
|
{
|
|
'aioseo-dismiss-pointer' : '<?php echo esc_js( $id ); ?>',
|
|
'aioseo-dismiss-pointer-nonce' : '<?php echo esc_js( wp_create_nonce( 'aioseo-dismiss-pointer' ) ); ?>'
|
|
}
|
|
);
|
|
}
|
|
} ).pointer('open');
|
|
|
|
$menuItem.append($('body .wp-pointer.aioseo-wp-pointer'));
|
|
} );
|
|
</script>
|
|
<?php
|
|
// phpcs:enable
|
|
}
|
|
|
|
/**
|
|
* Registers the KW Rank Tracker pointer.
|
|
*
|
|
* @since 4.8.3
|
|
*
|
|
* @return void
|
|
*/
|
|
public function registerKwRankTracker() {
|
|
if (
|
|
version_compare( aioseo()->version, '4.9.0', '>=' ) || // We only want to show this pointer up to 4.9.0.
|
|
! current_user_can( 'aioseo_search_statistics_settings' ) ||
|
|
(
|
|
is_object( aioseo()->license ) &&
|
|
aioseo()->license->hasCoreFeature( 'search-statistics', 'keyword-rank-tracker' ) &&
|
|
aioseo()->searchStatistics->api->auth->isConnected()
|
|
)
|
|
) {
|
|
return;
|
|
}
|
|
|
|
$nonce = wp_create_nonce( 'aioseo-dismiss-pointer' );
|
|
|
|
$args = [
|
|
'title' => 'NEW! Keyword Rank Tracker',
|
|
'subtitle' => 'Get insights into how your site is performing for your most important keywords',
|
|
'content' => 'Track keywords and combine them into groups to see how your site is performing for key topics in Google search results.',
|
|
'url' => admin_url( 'admin.php?aioseo-dismiss-pointer=kw-rank-tracker&aioseo-dismiss-pointer-nonce=' . $nonce . '&page=aioseo-search-statistics#/keyword-rank-tracker' ),
|
|
'button' => 'Unlock Keyword Rank Tracker'
|
|
];
|
|
|
|
$this->registerPointer( 'kw-rank-tracker', 'search-statistics', $args );
|
|
}
|
|
}
|