diff --git a/tools/migrations/migrate_from_symfony_3_to_5.sh b/tools/migrations/migrate_from_symfony_3_to_5.sh index 1374904c10b71d80334b9119122dc4af03a07e76..e0c26abe62cfaf5dc80d0f32cbf424eb92b11e4e 100755 --- a/tools/migrations/migrate_from_symfony_3_to_5.sh +++ b/tools/migrations/migrate_from_symfony_3_to_5.sh @@ -21,11 +21,23 @@ if [ "$backup" -ne 0 ]; then docker-compose exec mysql mysqldump -u root -p$MYSQL_ROOT_PASSWORD $MYSQL_DATABASE |\ grep -v Warning | docker exec -i $(docker-compose ps -q mysql) mysql -u root -p$MYSQL_ROOT_PASSWORD $BACKUP_DB + ret=$? + if [ $ret -ne 0 ]; then + echo "Backup failed, aborting" + exit $ret + fi echo "Backup done" else echo "A previous backup exists, skipping backup step" fi +echo -e "Please check the integrity of the backup databse $BACKUP_DB then type 'yes' to continue. \nThe next step will erase your database if the backup is incomplete you WILL LOOSE ALL YOUR DATA\n" +read next +if [ "$next" != 'yes' ]; then + echo "Aborting as you did not type yes" + exit 1 +fi + # # Step 2 Reload db with initial data # @@ -38,9 +50,9 @@ docker-compose exec memorekall-member composer reload-db # Columns renaming in the form pattern/replacement/sedopts declare -A COLUMNS_REPLACEMENTS -COLUMNS_REPLACEMENTS[user]='credential_expired/credentials_expired as credential_expired/' +COLUMNS_REPLACEMENTS[user]="roles,\(.*\)credential_expired/'[\"USER_ROLE\"]' as roles,\1credentials_expired as credential_expired/" # Old capsule table does not have a password field -COLUMNS_REPLACEMENTS[capsule]='password/NULL as password/' +COLUMNS_REPLACEMENTS[capsule]='password/SUBSTRING(edition_link, -40) as password/' TABLES="user reset_password_request capsule doctrine_migration_versions editeur_capsule" echo "SET foreign_key_checks = 0;" > $$.sql @@ -57,12 +69,9 @@ for table in $TABLES; do echo "DELETE FROM $MYSQL_DATABASE.$table;" >> $$.sql echo "INSERT INTO $MYSQL_DATABASE.$table ($COLUMNS) SELECT $COLUMNS_OLD FROM $BACKUP_DB.$table;" >> $$.sql done +# Ensure that dt_maj is not NULL +echo "UPDATE $MYSQL_DATABASE.capsule SET dt_maj=dt_crea WHERE dt_maj IS NULL;" >> $$.sql echo "SET foreign_key_checks = 1;" >> $$.sql cat $$.sql | docker exec -i $(docker-compose ps -q mysql) mysql -u root -p$MYSQL_ROOT_PASSWORD echo "All done" rm $$.sql - -# -# Step 4 Ensure entity are stored in JSON format and not array -# -