D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
opt
/
psa
/
admin
/
plib
/
modules
/
git
/
vendor
/
plesk
/
db-upgrader
/
src
/
Filename :
MigrationManager.php
back
Copy
<?php // Copyright 1999-2017. Parallels IP Holdings GmbH. All Rights Reserved. namespace PleskExt\Upgrader; class MigrationManager { /** @var null|\Zend_Db_Adapter_Abstract */ private $_dbAdapter = null; private $_migrationsDir = null; public function __construct(\Zend_Db_Adapter_Abstract $dbAdapter, $migrationsDir = null) { $this->_dbAdapter = $dbAdapter; $this->_migrationsDir = $migrationsDir ?: __DIR__ . DIRECTORY_SEPARATOR; } public function initSchema() { $initSchema = file_get_contents($this->_migrationsDir . DIRECTORY_SEPARATOR . 'init_schema.sql'); $initSchema = preg_replace('/^--.*$/m', '', $initSchema); $queries = array_map('trim', explode(';', str_replace(["\n", "\r"], '', $initSchema))); foreach ($queries as $query) { if (empty($query)) { continue; } $this->_dbAdapter->query($query); } } public function applyMigrations() { foreach ($this->loadMigrations($this->_getCurrentDbVersion()) as $migrationFile) { $migration = new Migration($migrationFile); $migration->run($this->_dbAdapter); } } public function loadMigrations($currentDbVersion) { $migrationsToApply = []; $migrations = glob($this->_migrationsDir . "//*.sql"); foreach ($migrations as $migrationFile) { if (false !== strpos($migrationFile, 'init_schema.sql')) { continue; } if ($this->getDbVersionByMigration(basename($migrationFile)) <= $currentDbVersion) { continue; } $migrationsToApply[] = $migrationFile; } return $migrationsToApply; } public function getDbVersionByMigration($migration) { return substr($migration, 0, strpos($migration, '_')); } private function _getCurrentDbVersion() { return (new Versions(['db' => $this->_dbAdapter]))->getDbVersion(); } }