You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
199 lines
6.1 KiB
PHTML
199 lines
6.1 KiB
PHTML
8 months ago
|
<?php
|
||
|
/**
|
||
|
* The Import wizard step
|
||
|
*
|
||
|
* @since 0.9.0
|
||
|
* @package RankMath
|
||
|
* @subpackage RankMath\Wizard
|
||
|
* @author Rank Math <support@rankmath.com>
|
||
|
*/
|
||
|
|
||
|
namespace RankMath\Wizard;
|
||
|
|
||
|
use RankMath\KB;
|
||
|
use RankMath\Admin\Importers\Detector;
|
||
|
|
||
|
defined( 'ABSPATH' ) || exit;
|
||
|
|
||
|
/**
|
||
|
* Step class.
|
||
|
*/
|
||
|
class Import implements Wizard_Step {
|
||
|
|
||
|
/**
|
||
|
* Render step body.
|
||
|
*
|
||
|
* @param object $wizard Wizard class instance.
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function render( $wizard ) {
|
||
|
?>
|
||
|
<header>
|
||
|
<h1><?php esc_html_e( 'Import SEO Settings', 'rank-math' ); ?></h1>
|
||
|
<p><?php esc_html_e( 'You can import SEO settings from the following plugins:', 'rank-math' ); ?></p>
|
||
|
</header>
|
||
|
|
||
|
<?php $wizard->cmb->show_form(); ?>
|
||
|
|
||
|
|
||
|
<div id="import-progress-bar">
|
||
|
<div id="importProgress">
|
||
|
<div id="importBar"></div>
|
||
|
</div>
|
||
|
<span class="left"><strong><?php echo esc_html__( 'Importing: ', 'rank-math' ); ?></strong><span class="plugin-from"></span> </span>
|
||
|
<span class="right"><span class="number">0</span>% <?php echo esc_html__( 'Completed', 'rank-math' ); ?></span>
|
||
|
</div>
|
||
|
<textarea id="import-progress" class="import-progress-area large-text" disabled="disabled" rows="8"></textarea>
|
||
|
<footer class="form-footer wp-core-ui rank-math-ui">
|
||
|
<button type="submit" class="button button-secondary button-deactivate-plugins" data-deactivate-message="<?php esc_html_e( 'Deactivating Plugins...', 'rank-math' ); ?>"><?php esc_html_e( 'Skip, Don\'t Import Now', 'rank-math' ); ?></button>
|
||
|
<button type="submit" class="button button-primary button-continue" style="display:none"><?php esc_html_e( 'Continue', 'rank-math' ); ?></button>
|
||
|
<button type="submit" class="button button-primary button-import"><?php esc_html_e( 'Start Import', 'rank-math' ); ?></button>
|
||
|
</footer>
|
||
|
<?php
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Render form for step.
|
||
|
*
|
||
|
* @param object $wizard Wizard class instance.
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function form( $wizard ) {
|
||
|
$detector = new Detector();
|
||
|
$plugins = $detector->detect();
|
||
|
$plugins = $this->set_priority( $plugins );
|
||
|
|
||
|
$count = 0;
|
||
|
foreach ( $plugins as $slug => $plugin ) {
|
||
|
$checked = 'checked';
|
||
|
$multi_checked = 'multicheck-checked';
|
||
|
$choices = array_keys( $plugin['choices'] );
|
||
|
|
||
|
if ( isset( $plugin['checked'] ) && false === $plugin['checked'] ) {
|
||
|
$checked = '';
|
||
|
$multi_checked = '';
|
||
|
$choices = [];
|
||
|
}
|
||
|
|
||
|
$field_args = [
|
||
|
'id' => 'import_from_' . $slug,
|
||
|
'type' => 'group',
|
||
|
'description' => '<input type="checkbox" class="import-data" name="import[]" value="' . $slug . '" ' . $checked . ' data-plugin="' . $plugin['name'] . '" />',
|
||
|
'before_group' => 0 === $count ? '<h3 class="import-label">' . esc_html__( 'Input Data From:', 'rank-math' ) . '</h3>' : '',
|
||
|
'repeatable' => false,
|
||
|
'options' => [
|
||
|
'group_title' => $plugin['name'],
|
||
|
'sortable' => false,
|
||
|
'closed' => true,
|
||
|
],
|
||
|
];
|
||
|
|
||
|
$group_id = $wizard->cmb->add_field( $field_args );
|
||
|
$is_active = is_plugin_active( $plugin['file'] );
|
||
|
$wizard->cmb->add_group_field(
|
||
|
$group_id,
|
||
|
[
|
||
|
'id' => $slug . '_meta',
|
||
|
'type' => 'multicheck',
|
||
|
'repeatable' => false,
|
||
|
'desc' => $this->get_choice_description( $slug, $plugin, $is_active ),
|
||
|
'options' => $plugin['choices'],
|
||
|
'default' => $choices,
|
||
|
'dep' => [ [ 'import_from', $slug ] ],
|
||
|
'classes' => 'nob nopb cmb-multicheck-inline with-description ' . $multi_checked,
|
||
|
'attributes' => [ 'data-active' => $is_active ],
|
||
|
]
|
||
|
);
|
||
|
|
||
|
$count++;
|
||
|
|
||
|
// Add checkbox field to Recalculate SEO Scores.
|
||
|
// But not for Redirections.
|
||
|
if ( 'redirections' === $slug ) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
$wizard->cmb->add_group_field(
|
||
|
$group_id,
|
||
|
[
|
||
|
'id' => $slug . '_recalculate',
|
||
|
'type' => 'checkbox',
|
||
|
'repeatable' => false,
|
||
|
'desc' => esc_html__( 'Recalculate SEO Scores', 'rank-math' ),
|
||
|
'value' => 'recalculate',
|
||
|
'default' => 'recalculate',
|
||
|
'dep' => [ [ 'import_from', $slug ] ],
|
||
|
'classes' => 'nob nopb recalculate-scores',
|
||
|
'attributes' => [
|
||
|
'data-active' => $is_active,
|
||
|
'value' => 'recalculate',
|
||
|
],
|
||
|
]
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set plugins priority.
|
||
|
*
|
||
|
* @param array $plugins Array of detected plugins.
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
private function set_priority( $plugins ) {
|
||
|
$checked = false;
|
||
|
$priority = array_intersect( [ 'seopress', 'yoast', 'yoast-premium', 'aioseo' ], array_keys( $plugins ) );
|
||
|
|
||
|
foreach ( $priority as $slug ) {
|
||
|
if ( ! $checked ) {
|
||
|
$checked = true;
|
||
|
$plugins[ $slug ]['checked'] = true;
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
$plugins[ $slug ]['checked'] = false;
|
||
|
}
|
||
|
|
||
|
return $plugins;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Save handler for step.
|
||
|
*
|
||
|
* @param array $values Values to save.
|
||
|
* @param object $wizard Wizard class instance.
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function save( $values, $wizard ) {
|
||
|
delete_option( 'rank_math_yoast_block_posts' );
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get description for choice field.
|
||
|
*
|
||
|
* @param string $slug Plugin slug.
|
||
|
* @param array $plugin Plugin info array.
|
||
|
* @param boolean $is_active Is plugin active.
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
private function get_choice_description( $slug, $plugin, $is_active ) {
|
||
|
/* translators: 1 is plugin name */
|
||
|
$desc = 'aio-rich-snippet' === $slug ? esc_html__( 'Import meta data from the %1$s plugin.', 'rank-math' ) : esc_html__( 'Import settings and meta data from the %1$s plugin.', 'rank-math' );
|
||
|
|
||
|
/* translators: 2 is link to Knowledge Base article */
|
||
|
$desc .= ' ' . __( 'The process may take a few minutes if you have a large number of posts or pages <a href="%2$s" target="_blank">Learn more about the import process here.</a>', 'rank-math' );
|
||
|
|
||
|
if ( $is_active ) {
|
||
|
/* translators: 1 is plugin name */
|
||
|
$desc .= '<br>' . __( ' %1$s plugin will be disabled automatically moving forward to avoid conflicts. <strong>It is thus recommended to import the data you need now.</strong>', 'rank-math' );
|
||
|
}
|
||
|
|
||
|
return sprintf( wp_kses_post( $desc ), $plugin['name'], KB::get( 'seo-import', 'SW Import Step' ) );
|
||
|
}
|
||
|
}
|