v1.1.0
This commit is contained in:
parent
5cdf7f48e5
commit
2c300652a6
9 changed files with 230 additions and 82 deletions
|
|
@ -1,5 +1,24 @@
|
|||
== Changelog ==
|
||||
|
||||
= 1.1.0 =
|
||||
|
||||
_Release date: 2026-03-02_
|
||||
|
||||
**Fixed**
|
||||
|
||||
* `mlp_migrator_log` (the plugin's own table) was incorrectly listed in the System Status as an MLP2 table requiring renaming. It is now excluded from `get_original_tables()` as it already was from `rename_to_backup()`.
|
||||
|
||||
**Changed**
|
||||
|
||||
* MLP2 sitemeta keys (`inpsyde_multilingual*`) are now **renamed** to `mlp2bak_inpsyde_multilingual*` during the table preparation step, instead of being deleted. This makes the operation fully reversible.
|
||||
* Restoring original table names (`Restore original table names`) now also restores the original sitemeta key names.
|
||||
* Cleanup step (Step 6, "Delete MLP2 network settings") now also deletes the backed-up `mlp2bak_inpsyde_multilingual*` sitemeta keys alongside the existing `mlp_*` keys.
|
||||
|
||||
**Compatibility**
|
||||
|
||||
* WordPress: 6.7 – 6.9
|
||||
* PHP: 8.2 – 8.5
|
||||
|
||||
= 1.0.0 =
|
||||
|
||||
_Release date: 2026-02-27_
|
||||
|
|
|
|||
|
|
@ -90,10 +90,14 @@ class Robotstxt_Mlp2_Mlp5_Admin_Page {
|
|||
wp_die( esc_html__( 'You do not have permission to perform this action.', 'robotstxt-mlp2-mlp5' ) );
|
||||
}
|
||||
$result = Robotstxt_Mlp2_Mlp5_Table_Preparer::rename_to_backup();
|
||||
$sitemeta_renamed = Robotstxt_Mlp2_Mlp5_Table_Preparer::rename_mlp2_sitemeta();
|
||||
$args = array( 'renamed' => count( $result['renamed'] ) );
|
||||
if ( ! empty( $result['errors'] ) ) {
|
||||
$args['rename_errors'] = count( $result['errors'] );
|
||||
}
|
||||
if ( $sitemeta_renamed > 0 ) {
|
||||
$args['sitemeta_renamed'] = $sitemeta_renamed;
|
||||
}
|
||||
wp_safe_redirect( self::page_url( $args ) );
|
||||
exit;
|
||||
}
|
||||
|
|
@ -107,10 +111,14 @@ class Robotstxt_Mlp2_Mlp5_Admin_Page {
|
|||
wp_die( esc_html__( 'You do not have permission to perform this action.', 'robotstxt-mlp2-mlp5' ) );
|
||||
}
|
||||
$result = Robotstxt_Mlp2_Mlp5_Table_Preparer::restore_from_backup();
|
||||
$sitemeta_restored = Robotstxt_Mlp2_Mlp5_Table_Preparer::restore_mlp2_sitemeta();
|
||||
$args = array( 'restored' => count( $result['restored'] ) );
|
||||
if ( ! empty( $result['errors'] ) ) {
|
||||
$args['restore_errors'] = count( $result['errors'] );
|
||||
}
|
||||
if ( $sitemeta_restored > 0 ) {
|
||||
$args['sitemeta_restored'] = $sitemeta_restored;
|
||||
}
|
||||
wp_safe_redirect( self::page_url( $args ) );
|
||||
exit;
|
||||
}
|
||||
|
|
@ -423,6 +431,12 @@ class Robotstxt_Mlp2_Mlp5_Admin_Page {
|
|||
/* translators: %d: number of tables that could not be renamed */
|
||||
printf( '<div class="notice notice-error"><p>%s</p></div>', esc_html( sprintf( _n( '%d table could not be renamed. Check database permissions.', '%d tables could not be renamed. Check database permissions.', $count, 'robotstxt-mlp2-mlp5' ), $count ) ) ); // phpcs:ignore WordPress.WP.I18n.MismatchedPlaceholders
|
||||
}
|
||||
if ( isset( $_GET['sitemeta_renamed'] ) ) {
|
||||
printf( '<div class="notice notice-success is-dismissible"><p>%s</p></div>', esc_html__( 'MLP2 sitemeta backed up. MultilingualPress 5 can now activate cleanly.', 'robotstxt-mlp2-mlp5' ) );
|
||||
}
|
||||
if ( isset( $_GET['sitemeta_restored'] ) ) {
|
||||
printf( '<div class="notice notice-success is-dismissible"><p>%s</p></div>', esc_html__( 'MLP2 sitemeta restored to original keys.', 'robotstxt-mlp2-mlp5' ) );
|
||||
}
|
||||
if ( isset( $_GET['restored'] ) ) {
|
||||
$count = (int) $_GET['restored'];
|
||||
/* translators: %d: number of restored tables */
|
||||
|
|
|
|||
|
|
@ -80,26 +80,36 @@ class Robotstxt_Mlp2_Mlp5_Step_Cleanup {
|
|||
/**
|
||||
* Delete MLP2-related entries from wp_sitemeta.
|
||||
*
|
||||
* Removes all sitemeta keys whose name starts with 'mlp_' (MLP2 prefix).
|
||||
* Removes sitemeta keys matching 'mlp_*' (MLP2 prefix) and
|
||||
* 'mlp2bak_inpsyde_multilingual*' (backed-up MLP2 sitemeta).
|
||||
*
|
||||
* @return int Number of keys deleted.
|
||||
*/
|
||||
public static function remove_mlp2_sitemeta(): int {
|
||||
global $wpdb;
|
||||
|
||||
$like = $wpdb->esc_like( 'mlp_' ) . '%';
|
||||
$patterns = array(
|
||||
$wpdb->esc_like( 'mlp_' ) . '%',
|
||||
$wpdb->esc_like( Robotstxt_Mlp2_Mlp5_Table_Preparer::SITEMETA_BACKUP_PREFIX ) . '%',
|
||||
);
|
||||
|
||||
$keys = array();
|
||||
foreach ( $patterns as $like ) {
|
||||
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
|
||||
$keys = $wpdb->get_col(
|
||||
$found = $wpdb->get_col(
|
||||
$wpdb->prepare(
|
||||
"SELECT meta_key FROM {$wpdb->sitemeta} WHERE meta_key LIKE %s AND site_id = %d",
|
||||
$like,
|
||||
get_current_network_id()
|
||||
)
|
||||
);
|
||||
if ( is_array( $found ) ) {
|
||||
$keys = array_merge( $keys, $found );
|
||||
}
|
||||
}
|
||||
|
||||
$deleted = 0;
|
||||
foreach ( (array) $keys as $key ) {
|
||||
foreach ( array_unique( $keys ) as $key ) {
|
||||
if ( delete_site_option( $key ) ) {
|
||||
++$deleted;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,7 +84,8 @@ class Robotstxt_Mlp2_Mlp5_Table_Preparer {
|
|||
}
|
||||
|
||||
/**
|
||||
* Return all tables in the database with the original MLP2 prefix.
|
||||
* Return all tables in the database with the original MLP2 prefix,
|
||||
* excluding tables that belong to this plugin.
|
||||
*
|
||||
* @return string[] Array of full table names.
|
||||
*/
|
||||
|
|
@ -96,7 +97,21 @@ class Robotstxt_Mlp2_Mlp5_Table_Preparer {
|
|||
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
|
||||
$tables = $wpdb->get_col( $wpdb->prepare( 'SHOW TABLES LIKE %s', $like ) );
|
||||
|
||||
return is_array( $tables ) ? $tables : array();
|
||||
if ( ! is_array( $tables ) ) {
|
||||
return array();
|
||||
}
|
||||
|
||||
$prefix = $wpdb->base_prefix . self::ORIGINAL_FRAGMENT;
|
||||
|
||||
return array_values(
|
||||
array_filter(
|
||||
$tables,
|
||||
static function ( string $table ) use ( $prefix ): bool {
|
||||
$suffix = substr( $table, strlen( $prefix ) );
|
||||
return ! in_array( $suffix, self::PLUGIN_TABLE_SUFFIXES, true );
|
||||
}
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -115,6 +130,73 @@ class Robotstxt_Mlp2_Mlp5_Table_Preparer {
|
|||
return is_array( $tables ) ? $tables : array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sitemeta key prefix used by MLP2 that blocks MLP5 activation.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const SITEMETA_ORIGINAL_PREFIX = 'inpsyde_multilingual';
|
||||
|
||||
/**
|
||||
* Prefix prepended to MLP2 sitemeta keys when backing them up.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const SITEMETA_BACKUP_PREFIX = 'mlp2bak_inpsyde_multilingual';
|
||||
|
||||
/**
|
||||
* Rename MLP2 blocking sitemeta keys to backup names.
|
||||
*
|
||||
* MLP5's SystemChecker detects any sitemeta key starting with
|
||||
* `inpsyde_multilingual` and refuses to activate. This method renames
|
||||
* those keys to `mlp2bak_inpsyde_multilingual*` so MLP5 can activate
|
||||
* cleanly while the original data is preserved for restore or cleanup.
|
||||
*
|
||||
* @return int Number of sitemeta rows renamed.
|
||||
*/
|
||||
public static function rename_mlp2_sitemeta(): int {
|
||||
global $wpdb;
|
||||
|
||||
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
|
||||
$renamed = $wpdb->query(
|
||||
$wpdb->prepare(
|
||||
"UPDATE {$wpdb->sitemeta} SET meta_key = CONCAT( %s, SUBSTR( meta_key, %d ) ) WHERE meta_key LIKE %s AND site_id = %d",
|
||||
'mlp2bak_',
|
||||
1,
|
||||
$wpdb->esc_like( self::SITEMETA_ORIGINAL_PREFIX ) . '%',
|
||||
get_current_network_id()
|
||||
)
|
||||
);
|
||||
|
||||
return is_int( $renamed ) ? $renamed : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore backup sitemeta keys to their original MLP2 names.
|
||||
*
|
||||
* Reverses rename_mlp2_sitemeta(). Only use this before MLP5 has been
|
||||
* activated, as restoring these keys will block MLP5 activation again.
|
||||
*
|
||||
* @return int Number of sitemeta rows restored.
|
||||
*/
|
||||
public static function restore_mlp2_sitemeta(): int {
|
||||
global $wpdb;
|
||||
|
||||
$prefix_length = strlen( 'mlp2bak_' ) + 1; // SUBSTR is 1-indexed.
|
||||
|
||||
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
|
||||
$restored = $wpdb->query(
|
||||
$wpdb->prepare(
|
||||
"UPDATE {$wpdb->sitemeta} SET meta_key = SUBSTR( meta_key, %d ) WHERE meta_key LIKE %s AND site_id = %d",
|
||||
$prefix_length,
|
||||
$wpdb->esc_like( self::SITEMETA_BACKUP_PREFIX ) . '%',
|
||||
get_current_network_id()
|
||||
)
|
||||
);
|
||||
|
||||
return is_int( $restored ) ? $restored : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether any original MLP2 tables exist in the database.
|
||||
*
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -112,6 +112,12 @@ msgstr "Limpieza completada."
|
|||
msgid "Cleanup confirmation invalid. Type DELETE exactly."
|
||||
msgstr "Confirmación de limpieza inválida. Escribe DELETE exactamente."
|
||||
|
||||
msgid "MLP2 sitemeta backed up. MultilingualPress 5 can now activate cleanly."
|
||||
msgstr "Sitemeta de MLP2 respaldado. MultilingualPress 5 ya puede activarse sin problemas."
|
||||
|
||||
msgid "MLP2 sitemeta restored to original keys."
|
||||
msgstr "Sitemeta de MLP2 restaurado a sus claves originales."
|
||||
|
||||
msgid "Action required: MLP2 tables must be renamed before MultilingualPress 5 can be activated."
|
||||
msgstr "Acción requerida: las tablas de MLP2 deben renombrarse antes de activar MultilingualPress 5."
|
||||
|
||||
|
|
|
|||
|
|
@ -2,14 +2,14 @@
|
|||
# This file is distributed under the GPL-3.0-or-later.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: MLP2 to MLP5 (by ROBOTSTXT) 1.0.0\n"
|
||||
"Project-Id-Version: MLP2 to MLP5 (by ROBOTSTXT) 1.1.0\n"
|
||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/robotstxt-mlp2-mlp5\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"POT-Creation-Date: 2026-02-27T10:21:22+00:00\n"
|
||||
"POT-Creation-Date: 2026-03-02T14:12:27+00:00\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"X-Generator: WP-CLI 2.12.0\n"
|
||||
"X-Domain: robotstxt-mlp2-mlp5\n"
|
||||
|
|
@ -40,7 +40,7 @@ msgid "https://git.robotstxt.es/ROBOTSTXT"
|
|||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:61
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:290
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:298
|
||||
msgid "MLP2 to MLP5 Migrator"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -49,59 +49,59 @@ msgid "MLP Migrator"
|
|||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:90
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:107
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:131
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:254
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:111
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:139
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:262
|
||||
msgid "You do not have permission to perform this action."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:271
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:279
|
||||
msgid "You do not have permission to access this page."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:321
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:329
|
||||
msgid "Preflight"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:322
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:330
|
||||
msgid "Analysis"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:323
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:331
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-verification.php:30
|
||||
msgid "Site Relations"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:324
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:332
|
||||
msgid "Content Relations"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:325
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:333
|
||||
msgid "Verification"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:326
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:334
|
||||
msgid "Cleanup"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:383
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:391
|
||||
msgid "Reset migration (start over)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:385
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:393
|
||||
msgid "This will reset the wizard to Step 1 and clear the migration log. It does not modify MLP5 data."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:389
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:397
|
||||
msgid "Reset wizard"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:398
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:406
|
||||
msgid "System status"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %d: number of renamed tables
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:419
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:427
|
||||
#, php-format
|
||||
msgid "%d table renamed successfully."
|
||||
msgid_plural "%d tables renamed successfully."
|
||||
|
|
@ -109,15 +109,23 @@ msgstr[0] ""
|
|||
msgstr[1] ""
|
||||
|
||||
#. translators: %d: number of tables that could not be renamed
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:424
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:432
|
||||
#, php-format
|
||||
msgid "%d table could not be renamed. Check database permissions."
|
||||
msgid_plural "%d tables could not be renamed. Check database permissions."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:435
|
||||
msgid "MLP2 sitemeta backed up. MultilingualPress 5 can now activate cleanly."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:438
|
||||
msgid "MLP2 sitemeta restored to original keys."
|
||||
msgstr ""
|
||||
|
||||
#. translators: %d: number of restored tables
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:429
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:443
|
||||
#, php-format
|
||||
msgid "%d table restored to original name."
|
||||
msgid_plural "%d tables restored to original names."
|
||||
|
|
@ -125,127 +133,127 @@ msgstr[0] ""
|
|||
msgstr[1] ""
|
||||
|
||||
#. translators: %d: number of tables that could not be restored
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:434
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:448
|
||||
#, php-format
|
||||
msgid "%d table could not be restored. Check database permissions."
|
||||
msgid_plural "%d tables could not be restored. Check database permissions."
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:437
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:451
|
||||
msgid "Wizard reset. You can start the migration from Step 1."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:440
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:454
|
||||
msgid "Cleanup completed."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:443
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:457
|
||||
msgid "Cleanup confirmation invalid. Type DELETE exactly."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:458
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:472
|
||||
msgid "Action required: MLP2 tables must be renamed before MultilingualPress 5 can be activated."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:461
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:475
|
||||
msgid "MLP2 tables renamed. Now go to Network Admin > Plugins and activate MultilingualPress 5."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:464
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:478
|
||||
msgid "Warning: both original and backup MLP2 tables were found. Investigate before proceeding."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:467
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:481
|
||||
msgid "No MLP2 tables found. Migration cannot proceed. Restore your database from a backup."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:494
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:508
|
||||
msgid "System Status"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:498
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:512
|
||||
msgid "MLP2 tables (original names)"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %d: number of tables
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:501
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:515
|
||||
#, php-format
|
||||
msgid "%d table — must be renamed"
|
||||
msgid_plural "%d tables — must be renamed"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:503
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:517
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:508
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:522
|
||||
msgid "MLP2 tables (backup copies)"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %d: number of backup tables
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:511
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:525
|
||||
#, php-format
|
||||
msgid "%d backup table ready"
|
||||
msgid_plural "%d backup tables ready"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:513
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:527
|
||||
msgid "Not yet renamed"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:518
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:532
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-preflight.php:105
|
||||
msgid "MultilingualPress 5 (network-active)"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s: version
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:521
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:535
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-preflight.php:108
|
||||
#, php-format
|
||||
msgid "Active (v%s)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:523
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:537
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-preflight.php:110
|
||||
msgid "Not active"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:544
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:558
|
||||
msgid "Step 1 — Rename MLP2 Tables"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:545
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:559
|
||||
msgid "MultilingualPress 5 cannot activate while the original MLP2 table names are present. Click below to rename them to temporary backup copies ({prefix}mlp2bak_*). This is safe and fully reversible."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:549
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:563
|
||||
msgid "Rename MLP2 tables (prepare for MLP5 activation)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:558
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:572
|
||||
msgid "Step 2 — Activate MultilingualPress 5"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:559
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:573
|
||||
msgid "MLP2 tables have been renamed. MultilingualPress 5 can now be activated without the old-version compatibility error."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:560
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:574
|
||||
msgid "Go to Network Admin › Plugins"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:569
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:583
|
||||
msgid "Emergency: restore original MLP2 table names"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:571
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:585
|
||||
msgid "This renames backup tables back to their original MLP2 names. Only use this before MLP5 has been activated."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:575
|
||||
#: includes/class-robotstxt-mlp2-mlp5-admin-page.php:589
|
||||
msgid "Restore original table names"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -363,45 +371,45 @@ msgid "Backup table dropped: %s"
|
|||
msgstr ""
|
||||
|
||||
#. translators: %d: key count
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:108
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:118
|
||||
#, php-format
|
||||
msgid "Removed %d MLP2 sitemeta entries."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:119
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:129
|
||||
msgid "Step 6 — Cleanup (Optional)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:122
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:132
|
||||
msgid "Migration complete!"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:122
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:132
|
||||
msgid "MultilingualPress 5 is now configured with your migrated data. Verify that everything works before performing the optional cleanup below."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:125
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:135
|
||||
msgid "The cleanup actions below are optional and irreversible. MultilingualPress 5 will work correctly whether or not you perform them."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:138
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:148
|
||||
msgid "Deactivate MultilingualPress 2 (network-wide)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:140
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:150
|
||||
msgid "Deactivate MultilingualPress 2"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:141
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:151
|
||||
msgid "already inactive"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:148
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:158
|
||||
msgid "Delete MLP2 backup database tables"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %d: table count
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:149
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:159
|
||||
#, php-format
|
||||
msgid "%d table"
|
||||
msgid_plural "%d tables"
|
||||
|
|
@ -409,19 +417,19 @@ msgstr[0] ""
|
|||
msgstr[1] ""
|
||||
|
||||
#. translators: %d: table count
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:150
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:160
|
||||
msgid "Irreversible. Only do this after verifying the migration in MLP5."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:156
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:166
|
||||
msgid "Delete MLP2 network settings from wp_sitemeta"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:163
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:173
|
||||
msgid "Type DELETE to confirm:"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:169
|
||||
#: includes/class-robotstxt-mlp2-mlp5-step-cleanup.php:179
|
||||
msgid "Proceed with cleanup"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
|||
13
readme.txt
13
readme.txt
|
|
@ -3,9 +3,9 @@ Contributors: javiercasares, robotstxt
|
|||
Tags: multisite, multilingual, multilingualpress, migration, mlp
|
||||
Requires at least: 6.7
|
||||
Tested up to: 6.9
|
||||
Stable tag: 1.0.0
|
||||
Stable tag: 1.1.0
|
||||
Requires PHP: 8.2
|
||||
Version: 1.0.0
|
||||
Version: 1.1.0
|
||||
License: GPL-3.0-or-later
|
||||
License URI: https://www.gnu.org/licenses/gpl-3.0.txt
|
||||
Network: true
|
||||
|
|
@ -373,6 +373,15 @@ PHP 8.2 through 8.5. Note that MultilingualPress 2 is not compatible with PHP 8.
|
|||
|
||||
== Changelog ==
|
||||
|
||||
= 1.1.0 =
|
||||
|
||||
_Release date: 2026-03-02_
|
||||
|
||||
* MLP2 sitemeta keys (`inpsyde_multilingual*`) are now renamed to `mlp2bak_inpsyde_multilingual*` during table preparation instead of being deleted, making the operation fully reversible.
|
||||
* Restoring original table names also restores the original sitemeta keys.
|
||||
* Cleanup step (Step 6) now also deletes the backed-up sitemeta keys.
|
||||
* Fixed: `mlp_migrator_log` (plugin's own table) was incorrectly listed as an MLP2 table requiring renaming.
|
||||
|
||||
= 1.0.0 =
|
||||
|
||||
_Release date: 2026-02-27_
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
* Plugin Name: MLP2 to MLP5 (by ROBOTSTXT)
|
||||
* Plugin URI: https://git.robotstxt.es/ROBOTSTXT/robotstxt-mlp2-mlp5
|
||||
* Description: Guided, safe, and reversible migration from MultilingualPress 2 to MultilingualPress 5.
|
||||
* Version: 1.0.0
|
||||
* Version: 1.1.0
|
||||
* Author: ROBOTSTXT
|
||||
* Author URI: https://git.robotstxt.es/ROBOTSTXT
|
||||
* License: GPL-3.0-or-later
|
||||
|
|
@ -31,7 +31,7 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|||
* in the `mlp_migrator_db_version` sitemeta key and runs any pending upgrade
|
||||
* routines automatically on the next request after a plugin update.
|
||||
*/
|
||||
define( 'ROBOTSTXT_MLP2_MLP5_VERSION', '1.0.0' );
|
||||
define( 'ROBOTSTXT_MLP2_MLP5_VERSION', '1.1.0' );
|
||||
define( 'ROBOTSTXT_MLP2_MLP5_DB_VERSION', '1.0' );
|
||||
|
||||
require_once __DIR__ . '/includes/class-robotstxt-mlp2-mlp5-logger.php';
|
||||
|
|
|
|||
Loading…
Reference in a new issue