Passed
Push — master ( ebd15c...0c2c47 )
by Vladyslav
02:20
created

Down::run()   A

Complexity

Conditions 6
Paths 9

Size

Total Lines 20
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 13
dl 0
loc 20
rs 9.2222
c 0
b 0
f 0
cc 6
nc 9
nop 0
1
<?php
2
3
namespace Vados\MigrationRunner\command;
4
5
use Vados\MigrationRunner\Helpers;
6
use Vados\MigrationRunner\migration\Migration;
7
use Vados\MigrationRunner\models\TblMigration;
8
use Vados\MigrationRunner\providers\PathProvider;
9
use Phalcon\Mvc\Model\Resultset\Simple;
10
11
/**
12
 * Class Down
13
 * @package Vados\MigrationRunner\command
14
 */
15
class Down extends MigrationRun implements ICommand
16
{
17
    /**
18
     * @var array
19
     */
20
    private $params;
21
22
    /**
23
     * @var int
24
     */
25
    private $runCount = 1;
26
27
    /**
28
     * Down constructor.
29
     * @param array $params
30
     */
31
    public function __construct(array $params)
32
    {
33
        parent::__construct();
34
        $this->params = $params;
35
        if (isset($params[0])) {
36
            $this->runCount = (int)$params[0];
37
        }
38
    }
39
40
    public function run()
41
    {
42
        /** @var Simple $migrations */
43
        $migrations = TblMigration::find([
44
            'order' => 'id DESC',
45
            'limit' => $this->runCount
46
        ]);
47
        if ($migrations->count()) {
48
            foreach ($migrations as $migration) {
49
                /** @var TblMigration $migration */
50
                echo $migration->getMigration() . PHP_EOL;
51
            }
52
            if ($this->actionConfirmation('Revert the above migrations?')) {
53
                foreach ($migrations as $migration) {
54
                    /** @var TblMigration $migration */
55
                    echo "Migration {$migration->getMigration()}: ";
56
                    $result = $this->down($migration);
57
                    echo Helpers::boolToString($result) . PHP_EOL;
58
                    if (!$result) {
59
                        break;
60
                    }
61
                }
62
            }
63
        }
64
    }
65
66
    /**
67
     * @param TblMigration $migration
68
     * @return bool
69
     */
70
    private function down(TblMigration $migration): bool
71
    {
72
        if (file_exists(PathProvider::getMigrationDir() . DIRECTORY_SEPARATOR . $migration->getMigration())) {
73
            require_once PathProvider::getMigrationDir() . DIRECTORY_SEPARATOR . $migration->getMigration();
74
            $migrationClass = substr($migration->getMigration(), 0, -4);
75
            /** @var Migration $m */
76
            $m = new $migrationClass();
77
            if ($m->safeRun('down')) {
78
                $migration->delete();
79
                return true;
80
            }
81
        }
82
        return false;
83
    }
84
}