Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Console/Command/UpdatePackageCommand.php
Строк: 174
<?php
namespace ConcreteCoreConsoleCommand;

use 
SymfonyComponentConsoleCommandCommand;
use 
SymfonyComponentConsoleInputInputInterface;
use 
SymfonyComponentConsoleInputInputOption;
use 
SymfonyComponentConsoleInputInputArgument;
use 
SymfonyComponentConsoleOutputOutputInterface;
use 
Package;
use 
Exception;

class 
UpdatePackageCommand extends Command
{
    protected function 
configure()
    {
        
$this
            
->setName('c5:package-update')
            ->
addOption('all''a'InputOption::VALUE_NONE'Update all the installed packages')
            ->
addOption('force''f'InputOption::VALUE_NONE'Force update even if the package is already at last version')
            ->
addArgument('packages'InputArgument::IS_ARRAY'The handle of the package to be updated (multiple values allowed)')
            ->
setDescription('Update a concrete5 package')
            ->
setHelp(<<<EOT
Returns codes:
  0 operation completed successfully
  1 errors occurred
EOT
            )
        ;
    }

    protected function 
execute(InputInterface $inputOutputInterface $output)
    {
        
$rc 0;
        try {
            
$updatableHandles = array();
            
$force $input->getOption('force');
            if (
$input->getOption('all')) {
                if (
count($input->getArgument('packages')) > 0) {
                    throw new 
Exception('If you use the --all option you can't specify package handles.');
                }
                if ($force) {
                    foreach (Package::getInstalledHandles() as $pkgHandle) {
                        $updatableHandles[] = $pkgHandle;
                    }
                    if (empty($updatableHandles)) {
                        $output->writeln("No package has been found.");
                    }
                } else {
                    foreach (Package::getLocalUpgradeablePackages() as $pkg) {
                        $updatableHandles[] = $pkg->getPackageHandle();
                    }
                    if (empty($updatableHandles)) {
                        $output->writeln("No package needs to be updated.");
                    }
                }
            } else {
                $updatableHandles = $input->getArgument('
packages');
                if (empty($updatableHandles)) {
                    throw new Exception('
No package handle specified and the --all option has not been specified.');
                }
            }
            foreach ($updatableHandles as $updatableHandle) {
                try {
                    $this->updatePackage($updatableHandle, $output, $force);
                } catch (Exception $x) {
                    $output->writeln('
<error>'.$x->getMessage().'</error>');
                    $rc = 1;
                }
            }
        } catch (Exception $x) {
            $output->writeln('
<error>'.$x->getMessage().'</error>');
            $rc = 1;
        }

        return $rc;
    }

    protected function updatePackage($pkgHandle, OutputInterface $output, $force)
    {
        $output->write("Looking for package '
$pkgHandle'... ");
        $pkg = null;
        foreach (Package::getInstalledList() as $installed) {
            if ($installed->getPackageHandle() === $pkgHandle) {
                $pkg = $installed;
                break;
            }
        }
        if ($pkg === null) {
            throw new Exception(sprintf("No package with handle '
%s' is installed", $pkgHandle));
        }
        $output->writeln(sprintf('
<info>found (%s).</info>', $pkg->getPackageName()));

        $output->write('
Checking preconditions... ');
        $upPkg = null;
        foreach (Package::getLocalUpgradeablePackages() as $updatable) {
            if ($updatable->getPackageHandle() === $pkgHandle) {
                $upPkg = $updatable;
                break;
            }
        }
        if ($upPkg === null && $force !== true) {
            $output->writeln(sprintf("<info>the package is already up-to-date (v%s)</info>", $pkg->getPackageVersion()));
        } else {
            $test = Package::testForInstall($pkgHandle, false);
            if ($test !== true) {
                throw new Exception(implode("n", Package::mapError($r)));
            }
            $output->writeln('
<info>good.</info>');

            if ($upPkg === null) {
                $output->write(sprintf('
Forcing upgrade at v%s... ', $pkg->getPackageVersion()));
                $upPkg = Package::getByHandle($pkgHandle);
            } else {
                $output->write(sprintf('
Updating from v%s to v%s... ', $upPkg->getPackageCurrentlyInstalledVersion(), $upPkg->getPackageVersion()));
            }
            $upPkg->upgradeCoreData();
            $upPkg->upgrade();
            $output->writeln('
<info>done.</info>');
        }
    }
}
Онлайн: 4
Реклама