251 lines
7.2 KiB
PHP
251 lines
7.2 KiB
PHP
<?php
|
|
|
|
class stPackageDownloader
|
|
{
|
|
|
|
protected $message = "";
|
|
|
|
/**
|
|
* Wersje jezykowe
|
|
*
|
|
* @var sfI18N
|
|
*/
|
|
protected $i18n;
|
|
|
|
/**
|
|
* Kontekst aplikacji
|
|
*
|
|
* @var sfContext
|
|
*/
|
|
protected $context;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->context = sfContext::getInstance();
|
|
$this->i18n = $this->context->getI18N();
|
|
}
|
|
|
|
public function getMessage()
|
|
{
|
|
return $this->message;
|
|
}
|
|
|
|
public function close()
|
|
{
|
|
$this->removePackages();
|
|
|
|
$action = $this->context->getController()->genUrl('stInstallerWeb/syncList');
|
|
|
|
ob_start();
|
|
|
|
echo '<div style="clear: both">' . $this->i18n->__('Aktualizaje zostały pobrane', null, 'stInstallerWeb') . '</div>';
|
|
echo '<ul style="float:right" class="st_admin-actions">';
|
|
echo ' <li class="st_admin-action-add">';
|
|
echo ' <form method="post" class="button_to" action="' . $action . '">';
|
|
echo ' <input style="background-image: url(/images/update/red/icons/download.png)" value="' . $this->i18n->__('Instaluj pobrane aktualizacje', null, 'stInstallerWeb') . '" type="submit" />';
|
|
echo ' </form>';
|
|
echo ' </li>';
|
|
echo '</ul>';
|
|
echo '<br class="st_clear_all" />';
|
|
|
|
$this->message = ob_get_clean();
|
|
}
|
|
|
|
public static function getPackages()
|
|
{
|
|
$file = sfConfig::get('sf_root_dir') . '/install/db/.download-packages.reg';
|
|
|
|
if (file_exists($file))
|
|
{
|
|
return json_decode(file_get_contents($file), true);
|
|
}
|
|
else
|
|
return null;
|
|
}
|
|
|
|
public static function setPackages($packages)
|
|
{
|
|
file_put_contents(sfConfig::get('sf_root_dir') . '/install/db/.download-packages.reg', json_encode($packages));
|
|
}
|
|
|
|
public static function removePackages()
|
|
{
|
|
$file = sfConfig::get('sf_root_dir') . '/install/db/.download-packages.reg';
|
|
if (file_exists($file))
|
|
unlink($file);
|
|
}
|
|
|
|
public function initialize()
|
|
{
|
|
if ($this->getPackages() === null)
|
|
{
|
|
$upgradeType = $this->getUpgradeType();
|
|
|
|
if (isset($upgradeType['type']) && $upgradeType['type'] == 'package')
|
|
$dependencies = stPear::getDependencies(array($upgradeType['package'] => $upgradeType['version']));
|
|
else
|
|
$dependencies = stPear::getDependencies(stPear::getPackagesToUpgrade());
|
|
|
|
if (!empty($dependencies))
|
|
$this->setPackages($dependencies);
|
|
}
|
|
}
|
|
|
|
public static function getSteps()
|
|
{
|
|
if (self::getPackages() === null)
|
|
{
|
|
$instance = new stPackageDownloader();
|
|
$instance->initialize();
|
|
}
|
|
|
|
$packages = self::getPackages();
|
|
if (is_array($packages))
|
|
return count($packages) + 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
public function step($step = 0)
|
|
{
|
|
$package = $this->getPackageForStep();
|
|
|
|
if ($package !== null)
|
|
{
|
|
list($package, $version) = $package;
|
|
|
|
if ($step == 0)
|
|
{
|
|
$this->message = $this->i18n->__('Pobieranie', null, 'stInstallerWeb') . ': ' . $package . ' ' . $version;
|
|
return $step + 1;
|
|
}
|
|
|
|
stPear::runPearCommand(array('command' => 'upgrade', 'parameters' => array(stPearInfo::getInstance()->getDefaultChannel() . '/' . $package . '-' . $version), 'options' => array('nodeps' => true)), 'raw', true);
|
|
|
|
if ($this->getNextPackage() !== null)
|
|
{
|
|
list($nextPackage, $nextVersion) = $this->getNextPackage();
|
|
$this->message = $this->i18n->__('Pobieranie', null, 'stInstallerWeb') . ': ' . $nextPackage . ' ' . $nextVersion;
|
|
}
|
|
else
|
|
$this->message = $this->i18n->__('Kończenie pobierania plików', null, 'stInstallerWeb');
|
|
|
|
$this->setInstalled($package);
|
|
|
|
return $step + 1;
|
|
}
|
|
else
|
|
{
|
|
return $this->getSteps();
|
|
}
|
|
}
|
|
|
|
private function getPackageForStep()
|
|
{
|
|
foreach ($this->getPackages() as $package => $version)
|
|
if ($version != "installed")
|
|
return array($package, $version);
|
|
return null;
|
|
}
|
|
|
|
private function getNextPackage()
|
|
{
|
|
$packageList = $this->getPackages();
|
|
|
|
$next = false;
|
|
foreach ($packageList as $package => $version)
|
|
{
|
|
if ($version != 'installed')
|
|
{
|
|
if ($next == true)
|
|
return array($package, $version);
|
|
$next = true;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function setInstalled($package)
|
|
{
|
|
$packages = $this->getPackages();
|
|
$packages[$package] = 'installed';
|
|
$this->setPackages($packages);
|
|
}
|
|
|
|
public static function getUpgradeTypeFilePath()
|
|
{
|
|
return sfConfig::get('sf_root_dir') . '/install/db/.upgrade-type.reg';
|
|
}
|
|
|
|
public static function setUpgradeType($type, $package = null, $version = null)
|
|
{
|
|
$file = self::getUpgradeTypeFilePath();
|
|
|
|
if ($type == 'package' && ($package == null || $version == null))
|
|
throw new Exception('Package and version must be set.');
|
|
|
|
file_put_contents($file, json_encode(array('type' => $type, 'package' => $package, 'version' => $version)));
|
|
}
|
|
|
|
public static function getUpgradeType()
|
|
{
|
|
$file = self::getUpgradeTypeFilePath();
|
|
if (file_exists($file))
|
|
{
|
|
$content = json_decode(file_get_contents($file), true);
|
|
unlink($file);
|
|
return $content;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
static public function unlockPackagesList()
|
|
{
|
|
$remove = true;
|
|
$packages = self::getPackages();
|
|
if (is_array($packages))
|
|
{
|
|
foreach ($packages as $package => $version)
|
|
{
|
|
if ($version != 'installed')
|
|
$remove = false;
|
|
}
|
|
|
|
if ($remove)
|
|
self::removePackages();
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
class stSetupPackageDownloader extends stPackageDownloader
|
|
{
|
|
|
|
public function close()
|
|
{
|
|
$this->removePackages();
|
|
$this->message = $this->i18n->__('Aplikacje zostały pobrane', null, 'stInstallerWeb') . "<script type=\"text/javascript\">document.getElementById('stSetup-download_actions').style.visibility=\"visible\";</script>";
|
|
}
|
|
|
|
public function getTitle()
|
|
{
|
|
return $this->i18n->__('Pobieranie aplikacji', null, 'stInstallerWeb') . ': ';
|
|
}
|
|
|
|
public function getFatalMessage()
|
|
{
|
|
|
|
sfLoader::loadHelpers(array('Tag', 'Url', 'stUpdate'));
|
|
|
|
return $this->i18n->__('Wystąpił błąd podczas pobierania oprogramowania', null, 'stSetup') . ' ' .
|
|
st_program_name() . ', ' .
|
|
$this->i18n->__('większość problemów można rozwiązać korzystając z', null, 'stSetup') .
|
|
' <strong>' .
|
|
link_to($this->i18n->__('podręcznika instalacji', null, 'stSetup'), $this->i18n->__('http://www.sote.pl/trac/wiki/doc/soteshop_installation', null, 'stSetup'), array('target' => '_blank')) .
|
|
'</strong>';
|
|
}
|
|
}
|