| Current Path : /home/x/b/o/xbodynamge/namtation/wp-content/ |
| Current File : /home/x/b/o/xbodynamge/namtation/wp-content/Notices.php.tar |
home/xbodynamge/namtation/wp-content/plugins/all-in-one-seo-pack/app/Lite/Admin/Notices/Notices.php 0000644 00000004706 15113700164 0027270 0 ustar 00 <?php
namespace AIOSEO\Plugin\Lite\Admin\Notices;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
use AIOSEO\Plugin\Common\Admin\Notices as CommonNotices;
use AIOSEO\Plugin\Common\Models;
/**
* Lite version of the notices class.
*
* @since 4.0.0
*/
class Notices extends CommonNotices\Notices {
/**
* Initialize the internal notices.
*
* @since 4.0.0
*
* @return void
*/
protected function initInternalNotices() {
parent::initInternalNotices();
$this->wooUpsellNotice();
}
/**
* Validates the notification type.
*
* @since 4.0.0
*
* @param string $type The notification type we are targeting.
* @return boolean True if yes, false if no.
*/
public function validateType( $type ) {
$validated = parent::validateType( $type );
// Any lite notification should pass here.
if ( 'lite' === $type ) {
$validated = true;
}
return $validated;
}
/**
* Add a notice if WooCommerce is detected and not licensed or running Lite.
*
* @since 4.0.0
*
* @return void
*/
private function wooUpsellNotice() {
$notification = Models\Notification::getNotificationByName( 'woo-upsell' );
if (
! class_exists( 'WooCommerce' )
) {
if ( $notification->exists() ) {
Models\Notification::deleteNotificationByName( 'woo-upsell' );
}
return;
}
if ( $notification->exists() ) {
return;
}
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'woo-upsell',
// Translators: 1 - "WooCommerce".
'title' => sprintf( __( 'Advanced %1$s Support', 'all-in-one-seo-pack' ), 'WooCommerce' ),
// Translators: 1 - "WooCommerce", 2 - The plugin short name ("AIOSEO").
'content' => sprintf( __( 'We have detected you are running %1$s. Upgrade to %2$s to unlock our advanced eCommerce SEO features, including SEO for Product Categories and more.', 'all-in-one-seo-pack' ), 'WooCommerce', AIOSEO_PLUGIN_SHORT_NAME . ' Pro' ), // phpcs:ignore Generic.Files.LineLength.MaxExceeded
'type' => 'info',
'level' => [ 'all' ],
// Translators: 1 - "Pro".
'button1_label' => sprintf( __( 'Upgrade to %1$s', 'all-in-one-seo-pack' ), 'Pro' ),
'button1_action' => html_entity_decode( apply_filters( 'aioseo_upgrade_link', aioseo()->helpers->utmUrl( AIOSEO_MARKETING_URL . 'lite-upgrade/', 'woo-notification-upsell', false ) ) ),
'start' => gmdate( 'Y-m-d H:i:s' )
] );
}
} xbodynamge/namtation/wp-content/plugins/all-in-one-seo-pack/app/Common/SearchStatistics/Notices.php 0000644 00000013237 15113701360 0030366 0 ustar 00 home <?php
namespace AIOSEO\Plugin\Common\SearchStatistics;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
use AIOSEO\Plugin\Common\Models;
/**
* Handles the notices for the Search Statistics.
*
* @since 4.6.2
*/
class Notices {
/**
* Class constructor.
*
* @since 4.6.2
*/
public function __construct() {
if ( ! is_admin() ) {
return;
}
add_action( 'init', [ $this, 'init' ] );
}
/**
* Initialize the class.
*
* @since 4.6.2
*
* @return void
*/
public function init() {
$this->siteConnected();
$this->siteVerified();
$this->sitemapHasErrors();
}
/**
* Add a notice if the site is not connected.
*
* @since 4.6.2
*
* @return void
*/
private function siteConnected() {
$notification = Models\Notification::getNotificationByName( 'search-console-site-not-connected' );
if ( aioseo()->searchStatistics->api->auth->isConnected() ) {
if ( $notification->exists() ) {
Models\Notification::deleteNotificationByName( 'search-console-site-not-connected' );
}
return;
}
if ( $notification->exists() ) {
return;
}
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'search-console-site-not-connected',
'title' => __( 'Have you connected your site to Google Search Console?', 'all-in-one-seo-pack' ),
'content' => sprintf(
// Translators: 1 - The plugin short name ("AIOSEO").
__( '%1$s can now verify whether your site is correctly verified with Google Search Console and that your sitemaps have been submitted correctly. Connect with Google Search Console now to ensure your content is being added to Google as soon as possible for increased rankings.', 'all-in-one-seo-pack' ), // phpcs:ignore Generic.Files.LineLength.MaxExceeded
AIOSEO_PLUGIN_SHORT_NAME
),
'type' => 'warning',
'level' => [ 'all' ],
'button1_label' => __( 'Connect to Google Search Console', 'all-in-one-seo-pack' ),
'button1_action' => 'https://route#aioseo-settings&aioseo-scroll=google-search-console-settings&aioseo-highlight=google-search-console-settings:webmaster-tools?activetool=googleSearchConsole', // phpcs:ignore Generic.Files.LineLength.MaxExceeded
'start' => gmdate( 'Y-m-d H:i:s' )
] );
}
/**
* Add a notice if the site is not verified or was deleted.
*
* @since 4.6.2
*
* @return void
*/
private function siteVerified() {
$notification = Models\Notification::getNotificationByName( 'search-console-site-not-verified' );
if (
! aioseo()->searchStatistics->api->auth->isConnected() ||
aioseo()->internalOptions->searchStatistics->site->verified ||
0 === aioseo()->internalOptions->searchStatistics->site->lastFetch // Not fetched yet.
) {
if ( $notification->exists() ) {
Models\Notification::deleteNotificationByName( 'search-console-site-not-verified' );
}
return;
}
if ( $notification->exists() ) {
return;
}
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'search-console-site-not-verified',
'title' => __( 'Your site was removed from Google Search Console.', 'all-in-one-seo-pack' ),
'content' => __( 'We detected that your site has been removed from Google Search Console. If this was done in error, click below to re-sync and resolve this issue.', 'all-in-one-seo-pack' ), // phpcs:ignore Generic.Files.LineLength.MaxExceeded
'type' => 'warning',
'level' => [ 'all' ],
'button1_label' => __( 'Reconnect Google Search Console', 'all-in-one-seo-pack' ),
'button1_action' => 'https://route#aioseo-settings&aioseo-scroll=google-search-console-settings&aioseo-highlight=google-search-console-settings:webmaster-tools?activetool=googleSearchConsole', // phpcs:ignore Generic.Files.LineLength.MaxExceeded
'start' => gmdate( 'Y-m-d H:i:s' )
] );
}
/**
* Add a notice if the sitemap has errors.
*
* @since 4.6.2
*
* @return void
*/
private function sitemapHasErrors() {
$notification = Models\Notification::getNotificationByName( 'search-console-sitemap-has-errors' );
if (
! aioseo()->searchStatistics->api->auth->isConnected() ||
! aioseo()->internalOptions->searchStatistics->site->verified ||
0 === aioseo()->internalOptions->searchStatistics->sitemap->lastFetch || // Not fetched yet.
! aioseo()->searchStatistics->sitemap->getSitemapsWithErrors()
) {
if ( $notification->exists() ) {
Models\Notification::deleteNotificationByName( 'search-console-sitemap-has-errors' );
}
return;
}
if ( $notification->exists() ) {
return;
}
$lastFetch = aioseo()->internalOptions->searchStatistics->sitemap->lastFetch;
$lastFetch = date_i18n( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), $lastFetch );
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'search-console-sitemap-has-errors',
'title' => __( 'Your sitemap has errors.', 'all-in-one-seo-pack' ),
'content' => sprintf(
// Translators: 1 - Last fetch date.
__( 'We detected that your sitemap has errors. The last fetch was on %1$s. Click below to resolve this issue.', 'all-in-one-seo-pack' ), // phpcs:ignore Generic.Files.LineLength.MaxExceeded
$lastFetch
),
'type' => 'warning',
'level' => [ 'all' ],
'button1_label' => __( 'Fix Sitemap Errors', 'all-in-one-seo-pack' ),
'button1_action' => 'https://route#aioseo-sitemaps&open-modal=true:general-sitemap', // phpcs:ignore Generic.Files.LineLength.MaxExceeded
'start' => gmdate( 'Y-m-d H:i:s' )
] );
}
} home/xbodynamge/dev/wp-content/plugins/all-in-one-seo-pack/app/Common/SearchStatistics/Notices.php 0000644 00000013237 15114315444 0027236 0 ustar 00 <?php
namespace AIOSEO\Plugin\Common\SearchStatistics;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
use AIOSEO\Plugin\Common\Models;
/**
* Handles the notices for the Search Statistics.
*
* @since 4.6.2
*/
class Notices {
/**
* Class constructor.
*
* @since 4.6.2
*/
public function __construct() {
if ( ! is_admin() ) {
return;
}
add_action( 'init', [ $this, 'init' ] );
}
/**
* Initialize the class.
*
* @since 4.6.2
*
* @return void
*/
public function init() {
$this->siteConnected();
$this->siteVerified();
$this->sitemapHasErrors();
}
/**
* Add a notice if the site is not connected.
*
* @since 4.6.2
*
* @return void
*/
private function siteConnected() {
$notification = Models\Notification::getNotificationByName( 'search-console-site-not-connected' );
if ( aioseo()->searchStatistics->api->auth->isConnected() ) {
if ( $notification->exists() ) {
Models\Notification::deleteNotificationByName( 'search-console-site-not-connected' );
}
return;
}
if ( $notification->exists() ) {
return;
}
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'search-console-site-not-connected',
'title' => __( 'Have you connected your site to Google Search Console?', 'all-in-one-seo-pack' ),
'content' => sprintf(
// Translators: 1 - The plugin short name ("AIOSEO").
__( '%1$s can now verify whether your site is correctly verified with Google Search Console and that your sitemaps have been submitted correctly. Connect with Google Search Console now to ensure your content is being added to Google as soon as possible for increased rankings.', 'all-in-one-seo-pack' ), // phpcs:ignore Generic.Files.LineLength.MaxExceeded
AIOSEO_PLUGIN_SHORT_NAME
),
'type' => 'warning',
'level' => [ 'all' ],
'button1_label' => __( 'Connect to Google Search Console', 'all-in-one-seo-pack' ),
'button1_action' => 'https://route#aioseo-settings&aioseo-scroll=google-search-console-settings&aioseo-highlight=google-search-console-settings:webmaster-tools?activetool=googleSearchConsole', // phpcs:ignore Generic.Files.LineLength.MaxExceeded
'start' => gmdate( 'Y-m-d H:i:s' )
] );
}
/**
* Add a notice if the site is not verified or was deleted.
*
* @since 4.6.2
*
* @return void
*/
private function siteVerified() {
$notification = Models\Notification::getNotificationByName( 'search-console-site-not-verified' );
if (
! aioseo()->searchStatistics->api->auth->isConnected() ||
aioseo()->internalOptions->searchStatistics->site->verified ||
0 === aioseo()->internalOptions->searchStatistics->site->lastFetch // Not fetched yet.
) {
if ( $notification->exists() ) {
Models\Notification::deleteNotificationByName( 'search-console-site-not-verified' );
}
return;
}
if ( $notification->exists() ) {
return;
}
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'search-console-site-not-verified',
'title' => __( 'Your site was removed from Google Search Console.', 'all-in-one-seo-pack' ),
'content' => __( 'We detected that your site has been removed from Google Search Console. If this was done in error, click below to re-sync and resolve this issue.', 'all-in-one-seo-pack' ), // phpcs:ignore Generic.Files.LineLength.MaxExceeded
'type' => 'warning',
'level' => [ 'all' ],
'button1_label' => __( 'Reconnect Google Search Console', 'all-in-one-seo-pack' ),
'button1_action' => 'https://route#aioseo-settings&aioseo-scroll=google-search-console-settings&aioseo-highlight=google-search-console-settings:webmaster-tools?activetool=googleSearchConsole', // phpcs:ignore Generic.Files.LineLength.MaxExceeded
'start' => gmdate( 'Y-m-d H:i:s' )
] );
}
/**
* Add a notice if the sitemap has errors.
*
* @since 4.6.2
*
* @return void
*/
private function sitemapHasErrors() {
$notification = Models\Notification::getNotificationByName( 'search-console-sitemap-has-errors' );
if (
! aioseo()->searchStatistics->api->auth->isConnected() ||
! aioseo()->internalOptions->searchStatistics->site->verified ||
0 === aioseo()->internalOptions->searchStatistics->sitemap->lastFetch || // Not fetched yet.
! aioseo()->searchStatistics->sitemap->getSitemapsWithErrors()
) {
if ( $notification->exists() ) {
Models\Notification::deleteNotificationByName( 'search-console-sitemap-has-errors' );
}
return;
}
if ( $notification->exists() ) {
return;
}
$lastFetch = aioseo()->internalOptions->searchStatistics->sitemap->lastFetch;
$lastFetch = date_i18n( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), $lastFetch );
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'search-console-sitemap-has-errors',
'title' => __( 'Your sitemap has errors.', 'all-in-one-seo-pack' ),
'content' => sprintf(
// Translators: 1 - Last fetch date.
__( 'We detected that your sitemap has errors. The last fetch was on %1$s. Click below to resolve this issue.', 'all-in-one-seo-pack' ), // phpcs:ignore Generic.Files.LineLength.MaxExceeded
$lastFetch
),
'type' => 'warning',
'level' => [ 'all' ],
'button1_label' => __( 'Fix Sitemap Errors', 'all-in-one-seo-pack' ),
'button1_action' => 'https://route#aioseo-sitemaps&open-modal=true:general-sitemap', // phpcs:ignore Generic.Files.LineLength.MaxExceeded
'start' => gmdate( 'Y-m-d H:i:s' )
] );
}
} home/xbodynamge/dev/wp-content/plugins/all-in-one-seo-pack/app/Lite/Admin/Notices/Notices.php 0000644 00000004706 15114335604 0026060 0 ustar 00 <?php
namespace AIOSEO\Plugin\Lite\Admin\Notices;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
use AIOSEO\Plugin\Common\Admin\Notices as CommonNotices;
use AIOSEO\Plugin\Common\Models;
/**
* Lite version of the notices class.
*
* @since 4.0.0
*/
class Notices extends CommonNotices\Notices {
/**
* Initialize the internal notices.
*
* @since 4.0.0
*
* @return void
*/
protected function initInternalNotices() {
parent::initInternalNotices();
$this->wooUpsellNotice();
}
/**
* Validates the notification type.
*
* @since 4.0.0
*
* @param string $type The notification type we are targeting.
* @return boolean True if yes, false if no.
*/
public function validateType( $type ) {
$validated = parent::validateType( $type );
// Any lite notification should pass here.
if ( 'lite' === $type ) {
$validated = true;
}
return $validated;
}
/**
* Add a notice if WooCommerce is detected and not licensed or running Lite.
*
* @since 4.0.0
*
* @return void
*/
private function wooUpsellNotice() {
$notification = Models\Notification::getNotificationByName( 'woo-upsell' );
if (
! class_exists( 'WooCommerce' )
) {
if ( $notification->exists() ) {
Models\Notification::deleteNotificationByName( 'woo-upsell' );
}
return;
}
if ( $notification->exists() ) {
return;
}
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'woo-upsell',
// Translators: 1 - "WooCommerce".
'title' => sprintf( __( 'Advanced %1$s Support', 'all-in-one-seo-pack' ), 'WooCommerce' ),
// Translators: 1 - "WooCommerce", 2 - The plugin short name ("AIOSEO").
'content' => sprintf( __( 'We have detected you are running %1$s. Upgrade to %2$s to unlock our advanced eCommerce SEO features, including SEO for Product Categories and more.', 'all-in-one-seo-pack' ), 'WooCommerce', AIOSEO_PLUGIN_SHORT_NAME . ' Pro' ), // phpcs:ignore Generic.Files.LineLength.MaxExceeded
'type' => 'info',
'level' => [ 'all' ],
// Translators: 1 - "Pro".
'button1_label' => sprintf( __( 'Upgrade to %1$s', 'all-in-one-seo-pack' ), 'Pro' ),
'button1_action' => html_entity_decode( apply_filters( 'aioseo_upgrade_link', aioseo()->helpers->utmUrl( AIOSEO_MARKETING_URL . 'lite-upgrade/', 'woo-notification-upsell', false ) ) ),
'start' => gmdate( 'Y-m-d H:i:s' )
] );
}
} home/xbodynamge/dev/wp-content/plugins/all-in-one-seo-pack/app/Common/Admin/Notices/Notices.php 0000644 00000041164 15114444610 0026410 0 ustar 00 <?php
namespace AIOSEO\Plugin\Common\Admin\Notices;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
use AIOSEO\Plugin\Common\Models;
/**
* Abstract class that Pro and Lite both extend.
*
* @since 4.0.0
*/
class Notices {
/**
* Source of notifications content.
*
* @since 4.0.0
*
* @var string
*/
private $url = 'https://plugin-cdn.aioseo.com/wp-content/notifications.json';
/**
* Review class instance.
*
* @since 4.2.7
*
* @var Review
*/
private $review = null;
/**
* Migration class instance.
*
* @since 4.2.7
*
* @var Migration
*/
private $migration = null;
/**
* Import class instance.
*
* @since 4.2.7
*
* @var Import
*/
private $import = null;
/**
* DeprecatedWordPress class instance.
*
* @since 4.2.7
*
* @var DeprecatedWordPress
*/
private $deprecatedWordPress = null;
/**
* ConflictingPlugins class instance.
*
* @since 4.5.1
*
* @var ConflictingPlugins
*/
private $conflictingPlugins = null;
/**
* Class Constructor.
*
* @since 4.0.0
*/
public function __construct() {
add_action( 'aioseo_admin_notifications_update', [ $this, 'update' ] );
if ( ! is_admin() ) {
return;
}
add_action( 'updated_option', [ $this, 'maybeResetBlogVisibility' ], 10, 3 );
add_action( 'init', [ $this, 'init' ], 2 );
$this->review = new Review();
$this->migration = new Migration();
$this->import = new Import();
$this->deprecatedWordPress = new DeprecatedWordPress();
$this->conflictingPlugins = new ConflictingPlugins();
add_action( 'admin_notices', [ $this, 'notices' ] );
}
/**
* Initialize notifications.
*
* @since 4.0.0
*
* @return void
*/
public function init() {
// If our tables do not exist, create them now.
if ( ! aioseo()->core->db->tableExists( 'aioseo_notifications' ) ) {
aioseo()->updates->addInitialCustomTablesForV4();
}
$this->maybeUpdate();
$this->initInternalNotices();
$this->deleteInternalNotices();
}
/**
* Checks if we should update our notifications.
*
* @since 4.0.0
*
* @return void
*/
private function maybeUpdate() {
$nextRun = aioseo()->core->networkCache->get( 'admin_notifications_update' );
if ( null !== $nextRun && time() < $nextRun ) {
return;
}
// Schedule the action.
aioseo()->actionScheduler->scheduleAsync( 'aioseo_admin_notifications_update' );
// Update the cache.
aioseo()->core->networkCache->update( 'admin_notifications_update', time() + DAY_IN_SECONDS );
}
/**
* Update Notifications from the server.
*
* @since 4.0.0
*
* @return void
*/
public function update() {
$notifications = $this->fetch();
foreach ( $notifications as $notification ) {
// First, let's check to see if this notification already exists. If so, we want to override it.
$n = aioseo()->core->db
->start( 'aioseo_notifications' )
->where( 'notification_id', $notification->id )
->run()
->model( 'AIOSEO\\Plugin\\Common\\Models\\Notification' );
$buttons = [
'button1' => [
'label' => ! empty( $notification->btns->main->text ) ? $notification->btns->main->text : null,
'url' => ! empty( $notification->btns->main->url ) ? $notification->btns->main->url : null
],
'button2' => [
'label' => ! empty( $notification->btns->alt->text ) ? $notification->btns->alt->text : null,
'url' => ! empty( $notification->btns->alt->url ) ? $notification->btns->alt->url : null
]
];
if ( $n->exists() ) {
$n->title = $notification->title;
$n->content = $notification->content;
$n->type = ! empty( $notification->notification_type ) ? $notification->notification_type : 'info';
$n->level = $notification->type;
$n->notification_id = $notification->id;
$n->start = ! empty( $notification->start ) ? $notification->start : null;
$n->end = ! empty( $notification->end ) ? $notification->end : null;
$n->button1_label = $buttons['button1']['label'];
$n->button1_action = $buttons['button1']['url'];
$n->button2_label = $buttons['button2']['label'];
$n->button2_action = $buttons['button2']['url'];
$n->save();
continue;
}
$n = new Models\Notification();
$n->slug = uniqid();
$n->title = $notification->title;
$n->content = $notification->content;
$n->type = ! empty( $notification->notification_type ) ? $notification->notification_type : 'info';
$n->level = $notification->type;
$n->notification_id = $notification->id;
$n->start = ! empty( $notification->start ) ? $notification->start : null;
$n->end = ! empty( $notification->end ) ? $notification->end : null;
$n->button1_label = $buttons['button1']['label'];
$n->button1_action = $buttons['button1']['url'];
$n->button2_label = $buttons['button2']['label'];
$n->button2_action = $buttons['button2']['url'];
$n->dismissed = 0;
$n->save();
// Since we've added a new remote notification, let's show the notification drawer.
aioseo()->core->cache->update( 'show_notifications_drawer', true );
}
}
/**
* Fetches the feed of notifications.
*
* @since 4.0.0
*
* @return array An array of notifications.
*/
private function fetch() {
$response = aioseo()->helpers->wpRemoteGet( $this->getUrl() );
if ( is_wp_error( $response ) ) {
return [];
}
$body = wp_remote_retrieve_body( $response );
if ( empty( $body ) ) {
return [];
}
return $this->verify( json_decode( $body ) );
}
/**
* Verify notification data before it is saved.
*
* @since 4.0.0
*
* @param array $notifications Array of notifications items to verify.
* @return array An array of verified notifications.
*/
private function verify( $notifications ) {
$data = [];
if ( ! is_array( $notifications ) || empty( $notifications ) ) {
return $data;
}
foreach ( $notifications as $notification ) {
// The message and license should never be empty, if they are, ignore.
if ( empty( $notification->content ) || empty( $notification->type ) ) {
continue;
}
if ( ! is_array( $notification->type ) ) {
$notification->type = [ $notification->type ];
}
foreach ( $notification->type as $type ) {
// Ignore if type does not match.
if ( ! $this->validateType( $type ) ) {
continue 2;
}
}
// Ignore if expired.
if ( ! empty( $notification->end ) && time() > strtotime( $notification->end ) ) {
continue;
}
// Ignore if notification existed before installing AIOSEO.
// Prevents bombarding the user with notifications after activation.
$activated = aioseo()->internalOptions->internal->firstActivated( time() );
if (
! empty( $notification->start ) &&
$activated > strtotime( $notification->start )
) {
continue;
}
$data[] = $notification;
}
return $data;
}
/**
* Validates the notification type.
*
* @since 4.0.0
*
* @param string $type The notification type we are targeting.
* @return boolean True if yes, false if no.
*/
public function validateType( $type ) {
$validated = false;
if ( 'all' === $type ) {
$validated = true;
}
// Store notice if version matches.
if ( $this->versionMatch( aioseo()->version, $type ) ) {
$validated = true;
}
return $validated;
}
/**
* Version Compare.
*
* @since 4.0.0
*
* @param string $currentVersion The current version being used.
* @param string|array $compareVersion The version to compare with.
* @return bool True if we match, false if not.
*/
public function versionMatch( $currentVersion, $compareVersion ) {
if ( is_array( $compareVersion ) ) {
foreach ( $compareVersion as $compare_single ) { // phpcs:ignore Squiz.NamingConventions.ValidVariableName
$recursiveResult = $this->versionMatch( $currentVersion, $compare_single ); // phpcs:ignore Squiz.NamingConventions.ValidVariableName
if ( $recursiveResult ) {
return true;
}
}
return false;
}
$currentParse = explode( '.', $currentVersion );
if ( strpos( $compareVersion, '-' ) ) {
$compareParse = explode( '-', $compareVersion );
} elseif ( strpos( $compareVersion, '.' ) ) {
$compareParse = explode( '.', $compareVersion );
} else {
return false;
}
$currentCount = count( $currentParse );
$compareCount = count( $compareParse );
for ( $i = 0; $i < $currentCount || $i < $compareCount; $i++ ) {
if ( isset( $compareParse[ $i ] ) && 'x' === strtolower( $compareParse[ $i ] ) ) {
unset( $compareParse[ $i ] );
}
if ( ! isset( $currentParse[ $i ] ) ) {
unset( $compareParse[ $i ] );
} elseif ( ! isset( $compareParse[ $i ] ) ) {
unset( $currentParse[ $i ] );
}
}
foreach ( $compareParse as $index => $subNumber ) {
if ( $currentParse[ $index ] !== $subNumber ) {
return false;
}
}
return true;
}
/**
* Gets the URL for the notifications api.
*
* @since 4.0.0
*
* @return string The URL to use for the api requests.
*/
private function getUrl() {
if ( defined( 'AIOSEO_NOTIFICATIONS_URL' ) ) {
return AIOSEO_NOTIFICATIONS_URL;
}
return $this->url;
}
/**
* Add notices.
*
* @since 4.0.0
*
* @return void
*/
public function notices() {
// Double check we're actually in the admin before outputting anything.
if ( ! is_admin() ) {
return;
}
$this->review->maybeShowNotice();
$this->migration->maybeShowNotice();
$this->import->maybeShowNotice();
$this->deprecatedWordPress->maybeShowNotice();
$this->conflictingPlugins->maybeShowNotice();
}
/**
* Initialize the internal notices.
*
* @since 4.0.0
*
* @return void
*/
protected function initInternalNotices() {
$this->blogVisibility();
$this->descriptionFormat();
}
/**
* Deletes internal notices we no longer need.
*
* @since 4.0.0
*
* @return void
*/
protected function deleteInternalNotices() {
$pluginData = aioseo()->helpers->getPluginData();
if ( $pluginData['miPro']['installed'] || $pluginData['miLite']['installed'] ) {
$notification = Models\Notification::getNotificationByName( 'install-mi' );
if ( ! $notification->exists() ) {
return;
}
Models\Notification::deleteNotificationByName( 'install-mi' );
}
if ( $pluginData['optinMonster']['installed'] ) {
$notification = Models\Notification::getNotificationByName( 'install-om' );
if ( ! $notification->exists() ) {
return;
}
Models\Notification::deleteNotificationByName( 'install-om' );
}
}
/**
* Extends a notice by a (default) 1 week start date.
*
* @since 4.0.0
*
* @param string $notice The notice to extend.
* @param string $start How long to extend.
* @return void
*/
public function remindMeLater( $notice, $start = '+1 week' ) {
$notification = Models\Notification::getNotificationByName( $notice );
if ( ! $notification->exists() ) {
return;
}
$notification->start = gmdate( 'Y-m-d H:i:s', strtotime( $start ) );
$notification->save();
}
/**
* Add a notice if the blog is set to hidden.
*
* @since 4.0.0
*
* @return void
*/
private function blogVisibility() {
$notification = Models\Notification::getNotificationByName( 'blog-visibility' );
if ( get_option( 'blog_public' ) ) {
if ( $notification->exists() ) {
Models\Notification::deleteNotificationByName( 'blog-visibility' );
}
return;
}
if ( $notification->exists() || ! current_user_can( 'manage_options' ) ) {
return;
}
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'blog-visibility',
'title' => __( 'Search Engines Blocked', 'all-in-one-seo-pack' ),
'content' => sprintf(
// Translators: 1 - The plugin short name ("AIOSEO").
__( 'Warning: %1$s has detected that you are blocking access to search engines. You can change this in Settings > Reading if this was unintended.', 'all-in-one-seo-pack' ),
AIOSEO_PLUGIN_SHORT_NAME
),
'type' => 'error',
'level' => [ 'all' ],
'button1_label' => __( 'Fix Now', 'all-in-one-seo-pack' ),
'button1_action' => admin_url( 'options-reading.php' ),
'button2_label' => __( 'Remind Me Later', 'all-in-one-seo-pack' ),
'button2_action' => 'http://action#notification/blog-visibility-reminder',
'start' => gmdate( 'Y-m-d H:i:s' )
] );
}
/**
* Add a notice if the description format is missing the Description tag.
*
* @since 4.0.5
*
* @return void
*/
private function descriptionFormat() {
$notification = Models\Notification::getNotificationByName( 'description-format' );
if ( ! in_array( 'descriptionFormat', aioseo()->internalOptions->deprecatedOptions, true ) ) {
if ( $notification->exists() ) {
Models\Notification::deleteNotificationByName( 'description-format' );
}
return;
}
$descriptionFormat = aioseo()->options->deprecated->searchAppearance->global->descriptionFormat;
if ( false !== strpos( $descriptionFormat, '#description' ) ) {
if ( $notification->exists() ) {
Models\Notification::deleteNotificationByName( 'description-format' );
}
return;
}
if ( $notification->exists() ) {
return;
}
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'description-format',
'title' => __( 'Invalid Description Format', 'all-in-one-seo-pack' ),
'content' => sprintf(
// Translators: 1 - The plugin short name ("AIOSEO").
__( 'Warning: %1$s has detected that you may have an invalid description format. This could lead to descriptions not being properly applied to your content.', 'all-in-one-seo-pack' ),
AIOSEO_PLUGIN_SHORT_NAME
) . ' ' . __( 'A Description tag is required in order to properly display your meta descriptions on your site.', 'all-in-one-seo-pack' ),
'type' => 'error',
'level' => [ 'all' ],
'button1_label' => __( 'Fix Now', 'all-in-one-seo-pack' ),
'button1_action' => 'http://route#aioseo-search-appearance&aioseo-scroll=description-format&aioseo-highlight=description-format:advanced',
'button2_label' => __( 'Remind Me Later', 'all-in-one-seo-pack' ),
'button2_action' => 'http://action#notification/description-format-reminder',
'start' => gmdate( 'Y-m-d H:i:s' )
] );
}
/**
* Check if blog visibility is changing and add/delete the appropriate notification.
*
* @since 4.0.0
*
* @param string $optionName The name of the option we are checking.
* @param mixed $oldValue The old value.
* @param mixed $newValue The new value.
* @return void
*/
public function maybeResetBlogVisibility( $optionName, $oldValue = '', $newValue = '' ) {
if ( 'blog_public' === $optionName ) {
if ( 1 === intval( $newValue ) ) {
$notification = Models\Notification::getNotificationByName( 'blog-visibility' );
if ( ! $notification->exists() ) {
return;
}
Models\Notification::deleteNotificationByName( 'blog-visibility' );
return;
}
$this->blogVisibility();
}
}
/**
* Add a notice if the blog is set to hidden.
*
* @since 4.0.0
*
* @return void
*/
public function conflictingPlugins( $plugins = [] ) {
if ( empty( $plugins ) ) {
return;
}
$content = sprintf(
// Translators: 1 - The plugin short name ("AIOSEO").
__( 'Warning: %1$s has detected other active SEO or sitemap plugins. We recommend that you deactivate the following plugins to prevent any conflicts:', 'all-in-one-seo-pack' ),
AIOSEO_PLUGIN_SHORT_NAME
) . '<ul>';
foreach ( $plugins as $pluginName => $pluginPath ) {
$content .= '<li><strong>' . $pluginName . '</strong></li>';
}
$content .= '</ul>';
// Update an existing notice.
$notification = Models\Notification::getNotificationByName( 'conflicting-plugins' );
if ( $notification->exists() ) {
$notification->content = $content;
$notification->save();
return;
}
// Create a new one if it doesn't exist.
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'conflicting-plugins',
'title' => __( 'Conflicting Plugins Detected', 'all-in-one-seo-pack' ),
'content' => $content,
'type' => 'error',
'level' => [ 'all' ],
'button1_label' => __( 'Fix Now', 'all-in-one-seo-pack' ),
'button1_action' => 'http://action#sitemap/deactivate-conflicting-plugins?refresh',
'button2_label' => __( 'Remind Me Later', 'all-in-one-seo-pack' ),
'button2_action' => 'http://action#notification/conflicting-plugins-reminder',
'start' => gmdate( 'Y-m-d H:i:s' )
] );
}
} xbodynamge/namtation/wp-content/plugins/all-in-one-seo-pack/app/Common/Admin/Notices/Notices.php 0000644 00000041164 15115040634 0027544 0 ustar 00 home <?php
namespace AIOSEO\Plugin\Common\Admin\Notices;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
use AIOSEO\Plugin\Common\Models;
/**
* Abstract class that Pro and Lite both extend.
*
* @since 4.0.0
*/
class Notices {
/**
* Source of notifications content.
*
* @since 4.0.0
*
* @var string
*/
private $url = 'https://plugin-cdn.aioseo.com/wp-content/notifications.json';
/**
* Review class instance.
*
* @since 4.2.7
*
* @var Review
*/
private $review = null;
/**
* Migration class instance.
*
* @since 4.2.7
*
* @var Migration
*/
private $migration = null;
/**
* Import class instance.
*
* @since 4.2.7
*
* @var Import
*/
private $import = null;
/**
* DeprecatedWordPress class instance.
*
* @since 4.2.7
*
* @var DeprecatedWordPress
*/
private $deprecatedWordPress = null;
/**
* ConflictingPlugins class instance.
*
* @since 4.5.1
*
* @var ConflictingPlugins
*/
private $conflictingPlugins = null;
/**
* Class Constructor.
*
* @since 4.0.0
*/
public function __construct() {
add_action( 'aioseo_admin_notifications_update', [ $this, 'update' ] );
if ( ! is_admin() ) {
return;
}
add_action( 'updated_option', [ $this, 'maybeResetBlogVisibility' ], 10, 3 );
add_action( 'init', [ $this, 'init' ], 2 );
$this->review = new Review();
$this->migration = new Migration();
$this->import = new Import();
$this->deprecatedWordPress = new DeprecatedWordPress();
$this->conflictingPlugins = new ConflictingPlugins();
add_action( 'admin_notices', [ $this, 'notices' ] );
}
/**
* Initialize notifications.
*
* @since 4.0.0
*
* @return void
*/
public function init() {
// If our tables do not exist, create them now.
if ( ! aioseo()->core->db->tableExists( 'aioseo_notifications' ) ) {
aioseo()->updates->addInitialCustomTablesForV4();
}
$this->maybeUpdate();
$this->initInternalNotices();
$this->deleteInternalNotices();
}
/**
* Checks if we should update our notifications.
*
* @since 4.0.0
*
* @return void
*/
private function maybeUpdate() {
$nextRun = aioseo()->core->networkCache->get( 'admin_notifications_update' );
if ( null !== $nextRun && time() < $nextRun ) {
return;
}
// Schedule the action.
aioseo()->actionScheduler->scheduleAsync( 'aioseo_admin_notifications_update' );
// Update the cache.
aioseo()->core->networkCache->update( 'admin_notifications_update', time() + DAY_IN_SECONDS );
}
/**
* Update Notifications from the server.
*
* @since 4.0.0
*
* @return void
*/
public function update() {
$notifications = $this->fetch();
foreach ( $notifications as $notification ) {
// First, let's check to see if this notification already exists. If so, we want to override it.
$n = aioseo()->core->db
->start( 'aioseo_notifications' )
->where( 'notification_id', $notification->id )
->run()
->model( 'AIOSEO\\Plugin\\Common\\Models\\Notification' );
$buttons = [
'button1' => [
'label' => ! empty( $notification->btns->main->text ) ? $notification->btns->main->text : null,
'url' => ! empty( $notification->btns->main->url ) ? $notification->btns->main->url : null
],
'button2' => [
'label' => ! empty( $notification->btns->alt->text ) ? $notification->btns->alt->text : null,
'url' => ! empty( $notification->btns->alt->url ) ? $notification->btns->alt->url : null
]
];
if ( $n->exists() ) {
$n->title = $notification->title;
$n->content = $notification->content;
$n->type = ! empty( $notification->notification_type ) ? $notification->notification_type : 'info';
$n->level = $notification->type;
$n->notification_id = $notification->id;
$n->start = ! empty( $notification->start ) ? $notification->start : null;
$n->end = ! empty( $notification->end ) ? $notification->end : null;
$n->button1_label = $buttons['button1']['label'];
$n->button1_action = $buttons['button1']['url'];
$n->button2_label = $buttons['button2']['label'];
$n->button2_action = $buttons['button2']['url'];
$n->save();
continue;
}
$n = new Models\Notification();
$n->slug = uniqid();
$n->title = $notification->title;
$n->content = $notification->content;
$n->type = ! empty( $notification->notification_type ) ? $notification->notification_type : 'info';
$n->level = $notification->type;
$n->notification_id = $notification->id;
$n->start = ! empty( $notification->start ) ? $notification->start : null;
$n->end = ! empty( $notification->end ) ? $notification->end : null;
$n->button1_label = $buttons['button1']['label'];
$n->button1_action = $buttons['button1']['url'];
$n->button2_label = $buttons['button2']['label'];
$n->button2_action = $buttons['button2']['url'];
$n->dismissed = 0;
$n->save();
// Since we've added a new remote notification, let's show the notification drawer.
aioseo()->core->cache->update( 'show_notifications_drawer', true );
}
}
/**
* Fetches the feed of notifications.
*
* @since 4.0.0
*
* @return array An array of notifications.
*/
private function fetch() {
$response = aioseo()->helpers->wpRemoteGet( $this->getUrl() );
if ( is_wp_error( $response ) ) {
return [];
}
$body = wp_remote_retrieve_body( $response );
if ( empty( $body ) ) {
return [];
}
return $this->verify( json_decode( $body ) );
}
/**
* Verify notification data before it is saved.
*
* @since 4.0.0
*
* @param array $notifications Array of notifications items to verify.
* @return array An array of verified notifications.
*/
private function verify( $notifications ) {
$data = [];
if ( ! is_array( $notifications ) || empty( $notifications ) ) {
return $data;
}
foreach ( $notifications as $notification ) {
// The message and license should never be empty, if they are, ignore.
if ( empty( $notification->content ) || empty( $notification->type ) ) {
continue;
}
if ( ! is_array( $notification->type ) ) {
$notification->type = [ $notification->type ];
}
foreach ( $notification->type as $type ) {
// Ignore if type does not match.
if ( ! $this->validateType( $type ) ) {
continue 2;
}
}
// Ignore if expired.
if ( ! empty( $notification->end ) && time() > strtotime( $notification->end ) ) {
continue;
}
// Ignore if notification existed before installing AIOSEO.
// Prevents bombarding the user with notifications after activation.
$activated = aioseo()->internalOptions->internal->firstActivated( time() );
if (
! empty( $notification->start ) &&
$activated > strtotime( $notification->start )
) {
continue;
}
$data[] = $notification;
}
return $data;
}
/**
* Validates the notification type.
*
* @since 4.0.0
*
* @param string $type The notification type we are targeting.
* @return boolean True if yes, false if no.
*/
public function validateType( $type ) {
$validated = false;
if ( 'all' === $type ) {
$validated = true;
}
// Store notice if version matches.
if ( $this->versionMatch( aioseo()->version, $type ) ) {
$validated = true;
}
return $validated;
}
/**
* Version Compare.
*
* @since 4.0.0
*
* @param string $currentVersion The current version being used.
* @param string|array $compareVersion The version to compare with.
* @return bool True if we match, false if not.
*/
public function versionMatch( $currentVersion, $compareVersion ) {
if ( is_array( $compareVersion ) ) {
foreach ( $compareVersion as $compare_single ) { // phpcs:ignore Squiz.NamingConventions.ValidVariableName
$recursiveResult = $this->versionMatch( $currentVersion, $compare_single ); // phpcs:ignore Squiz.NamingConventions.ValidVariableName
if ( $recursiveResult ) {
return true;
}
}
return false;
}
$currentParse = explode( '.', $currentVersion );
if ( strpos( $compareVersion, '-' ) ) {
$compareParse = explode( '-', $compareVersion );
} elseif ( strpos( $compareVersion, '.' ) ) {
$compareParse = explode( '.', $compareVersion );
} else {
return false;
}
$currentCount = count( $currentParse );
$compareCount = count( $compareParse );
for ( $i = 0; $i < $currentCount || $i < $compareCount; $i++ ) {
if ( isset( $compareParse[ $i ] ) && 'x' === strtolower( $compareParse[ $i ] ) ) {
unset( $compareParse[ $i ] );
}
if ( ! isset( $currentParse[ $i ] ) ) {
unset( $compareParse[ $i ] );
} elseif ( ! isset( $compareParse[ $i ] ) ) {
unset( $currentParse[ $i ] );
}
}
foreach ( $compareParse as $index => $subNumber ) {
if ( $currentParse[ $index ] !== $subNumber ) {
return false;
}
}
return true;
}
/**
* Gets the URL for the notifications api.
*
* @since 4.0.0
*
* @return string The URL to use for the api requests.
*/
private function getUrl() {
if ( defined( 'AIOSEO_NOTIFICATIONS_URL' ) ) {
return AIOSEO_NOTIFICATIONS_URL;
}
return $this->url;
}
/**
* Add notices.
*
* @since 4.0.0
*
* @return void
*/
public function notices() {
// Double check we're actually in the admin before outputting anything.
if ( ! is_admin() ) {
return;
}
$this->review->maybeShowNotice();
$this->migration->maybeShowNotice();
$this->import->maybeShowNotice();
$this->deprecatedWordPress->maybeShowNotice();
$this->conflictingPlugins->maybeShowNotice();
}
/**
* Initialize the internal notices.
*
* @since 4.0.0
*
* @return void
*/
protected function initInternalNotices() {
$this->blogVisibility();
$this->descriptionFormat();
}
/**
* Deletes internal notices we no longer need.
*
* @since 4.0.0
*
* @return void
*/
protected function deleteInternalNotices() {
$pluginData = aioseo()->helpers->getPluginData();
if ( $pluginData['miPro']['installed'] || $pluginData['miLite']['installed'] ) {
$notification = Models\Notification::getNotificationByName( 'install-mi' );
if ( ! $notification->exists() ) {
return;
}
Models\Notification::deleteNotificationByName( 'install-mi' );
}
if ( $pluginData['optinMonster']['installed'] ) {
$notification = Models\Notification::getNotificationByName( 'install-om' );
if ( ! $notification->exists() ) {
return;
}
Models\Notification::deleteNotificationByName( 'install-om' );
}
}
/**
* Extends a notice by a (default) 1 week start date.
*
* @since 4.0.0
*
* @param string $notice The notice to extend.
* @param string $start How long to extend.
* @return void
*/
public function remindMeLater( $notice, $start = '+1 week' ) {
$notification = Models\Notification::getNotificationByName( $notice );
if ( ! $notification->exists() ) {
return;
}
$notification->start = gmdate( 'Y-m-d H:i:s', strtotime( $start ) );
$notification->save();
}
/**
* Add a notice if the blog is set to hidden.
*
* @since 4.0.0
*
* @return void
*/
private function blogVisibility() {
$notification = Models\Notification::getNotificationByName( 'blog-visibility' );
if ( get_option( 'blog_public' ) ) {
if ( $notification->exists() ) {
Models\Notification::deleteNotificationByName( 'blog-visibility' );
}
return;
}
if ( $notification->exists() || ! current_user_can( 'manage_options' ) ) {
return;
}
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'blog-visibility',
'title' => __( 'Search Engines Blocked', 'all-in-one-seo-pack' ),
'content' => sprintf(
// Translators: 1 - The plugin short name ("AIOSEO").
__( 'Warning: %1$s has detected that you are blocking access to search engines. You can change this in Settings > Reading if this was unintended.', 'all-in-one-seo-pack' ),
AIOSEO_PLUGIN_SHORT_NAME
),
'type' => 'error',
'level' => [ 'all' ],
'button1_label' => __( 'Fix Now', 'all-in-one-seo-pack' ),
'button1_action' => admin_url( 'options-reading.php' ),
'button2_label' => __( 'Remind Me Later', 'all-in-one-seo-pack' ),
'button2_action' => 'http://action#notification/blog-visibility-reminder',
'start' => gmdate( 'Y-m-d H:i:s' )
] );
}
/**
* Add a notice if the description format is missing the Description tag.
*
* @since 4.0.5
*
* @return void
*/
private function descriptionFormat() {
$notification = Models\Notification::getNotificationByName( 'description-format' );
if ( ! in_array( 'descriptionFormat', aioseo()->internalOptions->deprecatedOptions, true ) ) {
if ( $notification->exists() ) {
Models\Notification::deleteNotificationByName( 'description-format' );
}
return;
}
$descriptionFormat = aioseo()->options->deprecated->searchAppearance->global->descriptionFormat;
if ( false !== strpos( $descriptionFormat, '#description' ) ) {
if ( $notification->exists() ) {
Models\Notification::deleteNotificationByName( 'description-format' );
}
return;
}
if ( $notification->exists() ) {
return;
}
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'description-format',
'title' => __( 'Invalid Description Format', 'all-in-one-seo-pack' ),
'content' => sprintf(
// Translators: 1 - The plugin short name ("AIOSEO").
__( 'Warning: %1$s has detected that you may have an invalid description format. This could lead to descriptions not being properly applied to your content.', 'all-in-one-seo-pack' ),
AIOSEO_PLUGIN_SHORT_NAME
) . ' ' . __( 'A Description tag is required in order to properly display your meta descriptions on your site.', 'all-in-one-seo-pack' ),
'type' => 'error',
'level' => [ 'all' ],
'button1_label' => __( 'Fix Now', 'all-in-one-seo-pack' ),
'button1_action' => 'http://route#aioseo-search-appearance&aioseo-scroll=description-format&aioseo-highlight=description-format:advanced',
'button2_label' => __( 'Remind Me Later', 'all-in-one-seo-pack' ),
'button2_action' => 'http://action#notification/description-format-reminder',
'start' => gmdate( 'Y-m-d H:i:s' )
] );
}
/**
* Check if blog visibility is changing and add/delete the appropriate notification.
*
* @since 4.0.0
*
* @param string $optionName The name of the option we are checking.
* @param mixed $oldValue The old value.
* @param mixed $newValue The new value.
* @return void
*/
public function maybeResetBlogVisibility( $optionName, $oldValue = '', $newValue = '' ) {
if ( 'blog_public' === $optionName ) {
if ( 1 === intval( $newValue ) ) {
$notification = Models\Notification::getNotificationByName( 'blog-visibility' );
if ( ! $notification->exists() ) {
return;
}
Models\Notification::deleteNotificationByName( 'blog-visibility' );
return;
}
$this->blogVisibility();
}
}
/**
* Add a notice if the blog is set to hidden.
*
* @since 4.0.0
*
* @return void
*/
public function conflictingPlugins( $plugins = [] ) {
if ( empty( $plugins ) ) {
return;
}
$content = sprintf(
// Translators: 1 - The plugin short name ("AIOSEO").
__( 'Warning: %1$s has detected other active SEO or sitemap plugins. We recommend that you deactivate the following plugins to prevent any conflicts:', 'all-in-one-seo-pack' ),
AIOSEO_PLUGIN_SHORT_NAME
) . '<ul>';
foreach ( $plugins as $pluginName => $pluginPath ) {
$content .= '<li><strong>' . $pluginName . '</strong></li>';
}
$content .= '</ul>';
// Update an existing notice.
$notification = Models\Notification::getNotificationByName( 'conflicting-plugins' );
if ( $notification->exists() ) {
$notification->content = $content;
$notification->save();
return;
}
// Create a new one if it doesn't exist.
Models\Notification::addNotification( [
'slug' => uniqid(),
'notification_name' => 'conflicting-plugins',
'title' => __( 'Conflicting Plugins Detected', 'all-in-one-seo-pack' ),
'content' => $content,
'type' => 'error',
'level' => [ 'all' ],
'button1_label' => __( 'Fix Now', 'all-in-one-seo-pack' ),
'button1_action' => 'http://action#sitemap/deactivate-conflicting-plugins?refresh',
'button2_label' => __( 'Remind Me Later', 'all-in-one-seo-pack' ),
'button2_action' => 'http://action#notification/conflicting-plugins-reminder',
'start' => gmdate( 'Y-m-d H:i:s' )
] );
}
}