szurubooru/src/Services/UpgradeService.php
Marcin Kurczewski 632bac8661 Added "use ..." statements
This version ditches backwards compatibility with PHP earlier than 5.6.
2014-10-18 18:48:36 +02:00

79 lines
1.9 KiB
PHP

<?php
namespace Szurubooru\Services;
use Szurubooru\Config;
use Szurubooru\DatabaseConnection;
use Szurubooru\Upgrades\IUpgrade;
use Szurubooru\Upgrades\UpgradeRepository;
final class UpgradeService
{
private $config;
private $upgrades;
private $databaseConnection;
private $executedUpgradeNames = [];
public function __construct(
Config $config,
DatabaseConnection $databaseConnection,
UpgradeRepository $upgradeRepository)
{
$this->config = $config;
$this->databaseConnection = $databaseConnection;
$this->upgrades = $upgradeRepository->getUpgrades();
$this->loadExecutedUpgradeNames();
}
public function runUpgradesVerbose()
{
$this->runUpgrades(true);
}
public function runUpgradesQuiet()
{
$this->runUpgrades(false);
}
private function runUpgrades($verbose)
{
foreach ($this->upgrades as $upgrade)
{
if ($this->isUpgradeNeeded($upgrade))
{
if ($verbose)
echo 'Running ' . get_class($upgrade) . PHP_EOL;
$this->runUpgrade($upgrade);
}
}
}
private function isUpgradeNeeded(IUpgrade $upgrade)
{
return !in_array(get_class($upgrade), $this->executedUpgradeNames);
}
private function runUpgrade(IUpgrade $upgrade)
{
$upgrade->run($this->databaseConnection);
$this->executedUpgradeNames[] = get_class($upgrade);
$this->saveExecutedUpgradeNames();
}
private function loadExecutedUpgradeNames()
{
$infoFilePath = $this->getExecutedUpgradeNamesFilePath();
if (!file_exists($infoFilePath))
return;
$this->executedUpgradeNames = explode("\n", file_get_contents($infoFilePath));
}
private function saveExecutedUpgradeNames()
{
$infoFilePath = $this->getExecutedUpgradeNamesFilePath();
file_put_contents($infoFilePath, implode("\n", $this->executedUpgradeNames));
}
private function getExecutedUpgradeNamesFilePath()
{
return $this->config->getDataDirectory() . DIRECTORY_SEPARATOR . 'executed_upgrades.txt';
}
}