. */ namespace App\Services\ImportExportSystem\PartKeeprImporter; use App\Doctrine\Purger\ResetAutoIncrementORMPurger; use Doctrine\ORM\EntityManagerInterface; /** * This service contains various helper functions for the PartKeeprImporter (like purging the database). */ class PKImportHelper { protected EntityManagerInterface $em; public function __construct(EntityManagerInterface $em) { $this->em = $em; } /** * Purges the database tables for the import, so that all data can be created from scratch. * Existing users and groups are not purged. * This is needed to avoid ID collisions. * @return void */ public function purgeDatabaseForImport(): void { //We use the ResetAutoIncrementORMPurger to reset the auto increment values of the tables. Also it normalizes table names before checking for exclusion. $purger = new ResetAutoIncrementORMPurger($this->em, ['users', 'groups', 'u2f_keys', 'internal', 'migration_versions']); $purger->purge(); } /** * Extracts the current database schema version from the PartKeepr XML dump. * @param array $data * @return string */ public function getDatabaseSchemaVersion(array $data): string { if (!isset($data['schemaversions'])) { throw new \RuntimeException('Could not find schema version in XML dump!'); } return end($data['schemaversions'])['version']; } /** * Checks that the database schema of the PartKeepr XML dump is compatible with the importer * @param array $data * @return bool True if the schema is compatible, false otherwise */ public function checkVersion(array $data): bool { return $this->getDatabaseSchemaVersion($data) === '20170601175559'; } }