diff --git a/build.xml b/build.xml
index ff4819f3..0810f055 100644
--- a/build.xml
+++ b/build.xml
@@ -51,7 +51,6 @@
-
diff --git a/robo/RoboFile.php b/robo/RoboFile.php
index 8ad9f8ed..7b28e671 100644
--- a/robo/RoboFile.php
+++ b/robo/RoboFile.php
@@ -26,6 +26,7 @@ class RoboFile extends \Robo\Tasks
$this->includeCientConfig($client);
$this->say("DB Migrating " . $action . " for ". $client);
$migrationManager = new \Classes\Migration\MigrationManager();
+ $migrationManager->setMigrationPath(APP_BASE_PATH .'/migrations/');
$res = $migrationManager->runMigration($action);
$this->say("DB Migrating Result : " . print_r($res, true));
}
@@ -34,6 +35,7 @@ class RoboFile extends \Robo\Tasks
$this->includeCientConfig($client);
$this->say("Run all pending migrations " . " for ". $client);
$migrationManager = new \Classes\Migration\MigrationManager();
+ $migrationManager->setMigrationPath(APP_BASE_PATH .'/migrations/');
$migrationManager->queueMigrations();
$migrations = $migrationManager->getPendingMigrations();
foreach ($migrations as $migration) {
diff --git a/server.includes.inc.php b/server.includes.inc.php
index 5d598d19..7fc3d787 100644
--- a/server.includes.inc.php
+++ b/server.includes.inc.php
@@ -48,7 +48,9 @@ $notificationManager = new \Classes\NotificationManager();
\Classes\BaseService::getInstance()->setNotificationManager($notificationManager);
\Classes\BaseService::getInstance()->setSettingsManager($settingsManager);
\Classes\BaseService::getInstance()->setCustomFieldManager(new \Classes\CustomFieldManager());
-\Classes\BaseService::getInstance()->setMigrationManager(new \Classes\Migration\MigrationManager());
+$migrationManager = new \Classes\Migration\MigrationManager();
+$migrationManager->setMigrationPath(APP_BASE_PATH .'/migrations/');
+\Classes\BaseService::getInstance()->setMigrationManager($migrationManager);
$notificationManager->setBaseService($baseService);
diff --git a/src/Classes/Migration/MigrationManager.php b/src/Classes/Migration/MigrationManager.php
index bb726348..bbf5f318 100644
--- a/src/Classes/Migration/MigrationManager.php
+++ b/src/Classes/Migration/MigrationManager.php
@@ -14,18 +14,13 @@ use Utils\LogManager;
class MigrationManager
{
- private $migration_path;
+ private $migrationPath;
protected $db = null;
- public function __construct()
+ public function setMigrationPath($migrationPath)
{
- $this->migration_path = APP_BASE_PATH .'/migrations/';
- }
-
- public function setMigrationPath($migration_path)
- {
- $this->migration_path = $migration_path;
+ $this->migrationPath = $migrationPath;
}
public function getMigrationById($id)
@@ -63,10 +58,10 @@ class MigrationManager
{
$migrations = array();
- $ams = scandir($this->migration_path);
+ $ams = scandir($this->migrationPath);
foreach ($ams as $am) {
- if (is_file($this->migration_path . $am)) {
- $migrations[$am] = $this->migration_path . $am;
+ if (is_file($this->migrationPath . $am) && $am !== '.' && $am !== '..' && !empty($am)) {
+ $migrations[$am] = $this->migrationPath . $am;
}
}
@@ -84,19 +79,28 @@ class MigrationManager
if ($file == 'list.php') {
continue;
}
- $migration = new Migration();
- $migration->file = $file;
- $parts = explode("_", $file);
- $migration->version = intval($parts[1]);
- $migration->created = date("Y-m-d H:i:s");
- $migration->updated = date("Y-m-d H:i:s");
- $migration->status = 'Pending';
- $migration->Save();
+ $this->createMigration($file);
}
}
}
}
+ public function createMigration($file)
+ {
+ if (file_exists($this->migrationPath . $file)) {
+ $migration = new Migration();
+ $migration->file = $file;
+ $parts = explode("_", $file);
+ $migration->version = intval($parts[1]);
+ $migration->created = date("Y-m-d H:i:s");
+ $migration->updated = date("Y-m-d H:i:s");
+ $migration->status = 'Pending';
+ $migration->Save();
+ return true;
+ }
+ return false;
+ }
+
public function runPendingMigrations()
{
$migrations = $this->getPendingMigrations();
@@ -134,6 +138,27 @@ class MigrationManager
return false;
}
+ /**
+ * @param string $migrationFileName
+ * @return AbstractMigration
+ */
+
+ public function getMigrationObject($migrationFileName)
+ {
+ $path = $this->migrationPath . $migrationFileName;
+ $migrationName = str_replace('.php', '', $migrationFileName);
+ $migrationName = '\\Classes\\Migration\\'.$migrationName;
+
+ if (!class_exists($migrationName)) {
+ include $path;
+ }
+ if (!class_exists($migrationName)) {
+ return false;
+ }
+ /* @var AbstractMigration $migClass */
+ return new $migrationName($migrationFileName);
+ }
+
/**
* @param Migration $migration
* @return bool
@@ -144,20 +169,14 @@ class MigrationManager
return false;
}
- $path = $this->migration_path . $migration->file;
- if (!file_exists($path)) {
+ /* @var AbstractMigration $migObject */
+ $migObject = $this->getMigrationObject($migration->file);
+ if (!$migObject) {
return false;
}
- $migrationName = str_replace('.php', '', $migration->file);
- if (!class_exists('\\Classes\\Migration\\'.$migrationName)) {
- include $path;
- }
- /* @var AbstractMigration $migClass */
- $migrationName = '\\Classes\\Migration\\'.$migrationName;
- $migClass = new $migrationName($migration->file);
- $res = $migClass->up();
+ $res = $migObject->up();
if (!$res) {
- $migration->last_error = $migClass->getLastError();
+ $migration->last_error = $migObject->getLastError();
$migration->status = "UpError";
$migration->updated = date("Y-m-d H:i:s");
$migration->Save();
@@ -179,21 +198,14 @@ class MigrationManager
return false;
}
- $path = $this->migration_path . $migration->file;
- if (!file_exists($path)) {
+ /* @var AbstractMigration $migObject */
+ $migObject = $this->getMigrationObject($migration->file);
+ if (!$migObject) {
return false;
}
-
- $migrationName = str_replace('.php', '', $migration->file);
- if (!class_exists($migrationName)) {
- include $path;
- }
- /* @var AbstractMigration $migClass */
- $migrationName = '\\Classes\\Migration\\'.$migrationName;
- $migClass = new $migrationName($migration->file);
- $res = $migClass->down();
+ $res = $migObject->down();
if (!$res) {
- $migration->last_error = $migClass->getLastError();
+ $migration->last_error = $migObject->getLastError();
$migration->status = "DownError";
$migration->updated = date("Y-m-d H:i:s");
$migration->Save();
@@ -211,7 +223,7 @@ class MigrationManager
$migration = new Migration();
$migration->Load("1 = 1 order by id desc limit 1");
- include $this->migration_path . "list.php";
+ include $this->migrationPath . "list.php";
/* @var array $migrationList */
if (count($migrationList) > 0 && (empty($migration->id) || $migrationList[0].".php" != $migration->file)) {
LogManager::getInstance()->info("ensureMigrations - execute migrations");
diff --git a/test/integration/MigrationManagerIntegration.php b/test/integration/MigrationManagerIntegration.php
new file mode 100644
index 00000000..aec393e7
--- /dev/null
+++ b/test/integration/MigrationManagerIntegration.php
@@ -0,0 +1,46 @@
+migrationManager = new MigrationManager();
+ for ($i = 0; $i < 5; $i++) {
+ $migration = new Migration();
+ $migration->file = 'migration'.$i;
+ $migration->version = '190000';
+ $migration->created = date("Y-m-d H:i:s", intval(time()) - 10 * $i);
+ $migration->updated = date("Y-m-d H:i:s", intval(time()) - 10 * $i);
+ $migration->status = 'Pending';
+ $migration->Save();
+ }
+
+ }
+
+ protected function tearDown(){
+ parent::tearDown();
+ $migration = new Migration();
+ $migration->DB()->execute("delete from Migrations");
+ }
+
+ public function testGetCurrentMigrations() {
+ $migrations = $this->migrationManager->getCurrentMigrations();
+ self::assertEquals(5, count($migrations));
+ }
+
+
+}