Skip to content

Commit

Permalink
Kunstmaan Installer
Browse files Browse the repository at this point in the history
  • Loading branch information
cv65kr committed Feb 19, 2018
1 parent d0a9be4 commit ef0773a
Show file tree
Hide file tree
Showing 5 changed files with 228 additions and 0 deletions.
8 changes: 8 additions & 0 deletions docs/03-01-intro.md
Expand Up @@ -43,6 +43,14 @@ At this point refreshing the page for your repository on GitHub will show you yo

> Please note that the [.gitignore](https://github.com/Kunstmaan/KunstmaanBundlesStandardEdition/blob/master/.gitignore#L4) file of the KunstmaanBundlesStandardEdition prevents committing your parameters.yml file into git. Depending on your needs, you could change this by removing that line from yout .gitignore file.
## Fast installation

```
bin/console kuma:install
```

Use above command to install kuma site or follow below steps.

## Generating a bundle

First, you should generate a bundle for your website specific code.
Expand Down
162 changes: 162 additions & 0 deletions src/Kunstmaan/GeneratorBundle/Command/InstallCommand.php
@@ -0,0 +1,162 @@
<?php

namespace Kunstmaan\GeneratorBundle\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Question\Question;
use Symfony\Component\Console\Output\NullOutput;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputDefinition;
use Symfony\Component\Console\Output\OutputInterface;
use Sensio\Bundle\GeneratorBundle\Command\Validators;
use Symfony\Component\Console\Question\ChoiceQuestion;
use Symfony\Component\Process\Exception\RuntimeException;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Sensio\Bundle\GeneratorBundle\Command\Helper\QuestionHelper;
use Symfony\Component\Debug\Exception\ContextErrorException;

/**
* Kunstmaan installer
*/
class InstallCommand extends Command
{
/**
* @var int
*/
private $commandSteps = 0;

/**
* @var ContainerInterface
*/
private $containter;

/**
* @param ContainerInterface $container Container
*/
public function __construct(ContainerInterface $container)
{
$this->container = $container;

parent::__construct();
}

protected function configure()
{
$this
->setName('kuma:install')
->setDescription('KunstmaanCMS installer.')
->setDefinition(
new InputDefinition(
[
new InputOption('namespace', '', InputOption::VALUE_REQUIRED, 'The namespace of the bundle to create'),
new InputOption('demosite', '', InputOption::VALUE_REQUIRED, 'Do you want create "demosite"'),
new InputOption('dir', '', InputOption::VALUE_REQUIRED, 'The directory where to create the bundle'),
new InputOption('bundle-name', '', InputOption::VALUE_REQUIRED, 'The optional bundle name')
]
)
);
;
}

protected function interact(InputInterface $input, OutputInterface $output)
{
$questionHelper = new QuestionHelper();

$outputStyle = new SymfonyStyle($input, $output);
$outputStyle->writeln('<info>Installing KunstmaanCms...</info>');
$outputStyle->writeln($this->getKunstmaanLogo());

$question = new Question(
$questionHelper->getQuestion('Bundle namespace', $input->getOption('namespace')),
$input->getOption('namespace')
);
$question->setValidator([Validators::class, 'validateBundleNamespace']);
$namespace = $questionHelper->ask($input, $output, $question);
$input->setOption('namespace', $namespace);

$question = new ChoiceQuestion(
'Do you want create "demosite"',
["No", "Yes"],
0
);
$question->setErrorMessage('Option "%s" is invalid.');
$demositeOption = $questionHelper->ask($input, $output, $question);

$input->setOption('demosite', $demositeOption);
$input->setOption('bundle-name', strtr($namespace, ['\\Bundle\\' => '', '\\' => '']));

$dir = $input->getOption('dir') ?: dirname($this->container->getParameter('kernel.root_dir')) . '/src';
$input->setOption('dir', $dir);

$output->writeln('<info>Installation start</info>');
}

protected function execute(InputInterface $input, OutputInterface $output)
{
$demositeOptions = ['--namespace' => $input->getOption('namespace')];
$demositeOptions = $input->getOption('demosite') === 'Yes'
? ['--demosite' => true]
: [];

$this
->executeCommand($output,'kuma:generate:bundle', [
'--namespace' => $input->getOption('namespace'),
'--dir' => $input->getOption('dir'),
'--bundle-name' => $input->getOption('bundle-name'),
])
->executeCommand($output,'kuma:generate:default-site', $demositeOptions)
->executeCommand($output,'doctrine:database:create')
->executeCommand($output,'doctrine:schema:drop', ['--force' => true])
->executeCommand($output,'doctrine:schema:create')
->executeCommand($output,'doctrine:fixtures:load')
->executeCommand($output,'kuma:generate:admin-tests', [
'--namespace' => $input->getOption('namespace')
])
;
}

protected function executeCommand(OutputInterface $output, $command, array $options = [])
{
$options = array_merge(
[
'--no-debug' => true,
'--no-interaction' => true
],
$options
);

$this->commandSteps++;
try {
$updateInput = new ArrayInput($options);
$updateInput->setInteractive(false);
$this->getApplication()->find($command)->run($updateInput, new NullOutput());
$output->writeln(sprintf('<info>Step %d: "%s" - [OK]</info>', $this->commandSteps, $command));
}
catch (RuntimeException $exception) {
$output->writeln(sprintf('<error>Step %d: "%s" - [FAILED]</error>', $this->commandSteps, $command));
}
catch (ContextErrorException $e) {
$output->writeln(sprintf('<error>Step %d: "%s" - [FAILED]</error>', $this->commandSteps, $command));
}

return $this;
}

protected function getKunstmaanLogo()
{
return '
/$$ /$$ /$$ /$$$$$$
| $$ /$$/ | $$ /$$__ $$
| $$ /$$/ /$$ /$$ /$$$$$$$ /$$$$$$$ /$$$$$$ /$$$$$$/$$$$ /$$$$$$ /$$$$$$ /$$$$$$$ | $$ \__/ /$$$$$$/$$$$ /$$$$$$$
| $$$$$/ | $$ | $$| $$__ $$ /$$_____/|_ $$_/ | $$_ $$_ $$ |____ $$ |____ $$| $$__ $$| $$ | $$_ $$_ $$ /$$_____/
| $$ $$ | $$ | $$| $$ \ $$| $$$$$$ | $$ | $$ \ $$ \ $$ /$$$$$$$ /$$$$$$$| $$ \ $$| $$ | $$ \ $$ \ $$| $$$$$$
| $$\ $$ | $$ | $$| $$ | $$ \____ $$ | $$ /$$| $$ | $$ | $$ /$$__ $$ /$$__ $$| $$ | $$| $$ $$| $$ | $$ | $$ \____ $$
| $$ \ $$| $$$$$$/| $$ | $$ /$$$$$$$/ | $$$$/| $$ | $$ | $$| $$$$$$$| $$$$$$$| $$ | $$| $$$$$$/| $$ | $$ | $$ /$$$$$$$/
|__/ \__/ \______/ |__/ |__/|_______/ \___/ |__/ |__/ |__/ \_______/ \_______/|__/ |__/ \______/ |__/ |__/ |__/|_______/
';
}
}
@@ -0,0 +1,25 @@
<?php

namespace Kunstmaan\GeneratorBundle\DependencyInjection;

use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;

/**
* This is the class that validates and merges configuration from your app/config files
*
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html#cookbook-bundles-extension-config-class}
*/
class Configuration implements ConfigurationInterface
{
/**
* {@inheritDoc}
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$treeBuilder->root('kunstmaan_generator');

return $treeBuilder;
}
}
@@ -0,0 +1,28 @@
<?php

namespace Kunstmaan\GeneratorBundle\DependencyInjection;

use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;

/**
* This is the class that loads and manages your bundle configuration
*
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html}
*/
class KunstmaanGeneratorExtension extends Extension
{
/**
* {@inheritDoc}
*/
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$this->processConfiguration($configuration, $configs);

$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
}
}
5 changes: 5 additions & 0 deletions src/Kunstmaan/GeneratorBundle/Resources/config/services.yml
@@ -0,0 +1,5 @@
services:
Kunstmaan\GeneratorBundle\Command\InstallCommand:
arguments: ['@service_container']
tags:
- { name: console.command }

0 comments on commit ef0773a

Please sign in to comment.