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

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

class 
InstallPackageCommand extends Command
{
    protected function 
configure()
    {
        
$this
            
->setName('c5:package-install')
            ->
addOption('full-content-swap'nullInputOption::VALUE_NONE'If this option is specified a full content swap will be performed (if the package supports it)')
            ->
setDescription('Install a concrete5 package')
            ->
addArgument('package'InputArgument::REQUIRED'The handle of the package to be installed')
            ->
addArgument('package-options'InputArgument::IS_ARRAY'List of key-value pairs to pass to the package install routine (example: foo=bar baz=foo)')
            ->
setHelp(<<<EOT
Returns codes:
  0 operation completed successfully
  1 errors occurred
EOT
            )
        ;
    }

    protected function 
execute(InputInterface $inputOutputInterface $output)
    {
        
$rc 0;
        try {
            
$pkgHandle $input->getArgument('package');
            
$packageOptions = array();
            foreach (
$input->getArgument('package-options') as $keyValuePair) {
                list(
$key$value) = explode('='$keyValuePair2);
                
$key trim($key);
                if (
substr($key, -2) === '[]') {
                    
$isArray true;
                    
$key rtrim(substr($key0, -2));
                } else {
                    
$isArray false;
                }
                if (
$key === '' || !isset($value)) {
                    throw new 
Exception(sprintf("Unable to parse the package option '%s': it must be in the form of key=value"$keyValuePair));
                }
                if (isset(
$packageOptions[$key])) {
                    if (!(
$isArray && is_array($packageOptions[$key]))) {
                        throw new 
Exception(sprintf("Duplicated package option '%s'"$key));
                    }
                    
$packageOptions[$key][] = $value;
                } else {
                    
$packageOptions[$key] = $isArray ? ((array) $value) : $value;
                }
            }

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

            
$output->write('Checking preconditions... ');
            
$test Package::testForInstall($pkgHandle);
            if (
$test !== true) {
                throw new 
Exception(implode("n"Package::mapError($r)));
            }
            
$output->writeln('<info>good.</info>');

            
$output->write('Installing package... ');
            
$pkgInstalled $pkg->install($packageOptions);
            
$output->writeln('<info>done.</info>');

            if (
$pkg->allowsFullContentSwap() && $input->getOption('full-content-swap')) {
                
$output->write('Performing full content swap... ');
                
$pkg->swapContent(array());
                
$output->writeln('<info>done.</info>');
            }
        } catch (
Exception $x) {
            
$output->writeln('<error>'.$x->getMessage().'</error>');
            
$rc 1;
        }

        return 
$rc;
    }
}
Онлайн: 4
Реклама