Newscoop\Tools\Console\Command\InstallNewscoopCommand::execute PHP Method

execute() protected method

See also: Console\Command\Command
protected execute ( Symfony\Component\Console\Input\InputInterface $input, Symfony\Component\Console\Output\OutputInterface $output )
$input Symfony\Component\Console\Input\InputInterface
$output Symfony\Component\Console\Output\OutputInterface
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $container = $this->getApplication()->getKernel()->getContainer();
        $output->writeln('<info>Welcome to Newscoop Installer.<info>');
        $symfonyRequirements = new \SymfonyRequirements();
        $requirements = $symfonyRequirements->getRequirements();
        $missingReq = array();
        foreach ($requirements as $req) {
            if (!$req->isFulfilled()) {
                $missingReq[] = $req->getTestMessage() . ' - ' . $req->getHelpText();
            }
        }
        $fixCommonIssues = $input->getOption('fix');
        if (count($missingReq) > 0 && !$fixCommonIssues) {
            $output->writeln('<info>Before we start we need to fix some requirements.<info>');
            $output->writeln('<info>Please read all messages and try to fix them:<info>');
            foreach ($missingReq as $value) {
                $output->writeln('<error>' . $value . '<error>');
            }
            $output->writeln('<error>Use --fix param to fix those errors<error>');
            return;
        } elseif (count($missingReq) > 0 && $fixCommonIssues) {
            $newscoopDir = realpath(__DIR__ . '/../../../../../');
            // set chmods for directories
            exec('chmod -R 777 ' . $newscoopDir . '/cache/');
            exec('chmod -R 777 ' . $newscoopDir . '/log/');
            exec('chmod -R 777 ' . $newscoopDir . '/conf/');
            exec('chmod -R 777 ' . $newscoopDir . '/library/Proxy/');
            exec('chmod -R 777 ' . $newscoopDir . '/themes/');
            exec('chmod -R 777 ' . $newscoopDir . '/plugins/');
            exec('chmod -R 777 ' . $newscoopDir . '/public/');
            exec('chmod -R 777 ' . $newscoopDir . '/images/');
        }
        $dbParams = array('driver' => 'pdo_mysql', 'charset' => 'utf8', 'host' => $input->getOption('database_server_name'), 'dbname' => $input->getOption('database_name'), 'port' => $input->getOption('database_server_port'));
        if ($input->getOption('database_user')) {
            $dbParams['user'] = $input->getOption('database_user');
        }
        if ($input->getOption('database_password')) {
            $dbParams['password'] = $input->getOption('database_password');
        }
        $databaseService = new Services\DatabaseService($container->get('logger'));
        $finishService = new Services\FinishService();
        $demositeService = new Services\DemositeService($container->get('logger'));
        $connection = DriverManager::getConnection($dbParams);
        try {
            $connection->connect();
            if ($connection->getDatabase() === null) {
                $databaseService->createNewscoopDatabase($connection);
            }
        } catch (\Exception $e) {
            if ($e->getCode() == '1049') {
                $databaseService->createNewscoopDatabase($connection);
            } elseif (strpos($e->getMessage(), 'database exists') === false) {
                throw $e;
            }
        }
        $output->writeln('<info>Successfully connected to database.<info>');
        $tables = $connection->fetchAll('SHOW TABLES', array());
        if (count($tables) == 0 || $input->getOption('database_override')) {
            $databaseService->fillNewscoopDatabase($connection);
            $databaseService->loadGeoData($connection);
            $databaseService->saveDatabaseConfiguration($connection);
        } else {
            throw new \Exception('There is already a database named ' . $connection->getDatabase() . '. If you are sure to overwrite it, use option --database_override. If not, just change the Database Name and continue.', 1);
        }
        $command = $this->getApplication()->find('cache:clear');
        $arguments = array('command' => 'cache:clear', '--no-warmup' => true);
        $inputCache = new ArrayInput($arguments);
        $command->run($inputCache, $output);
        $databaseService->installDatabaseSchema($connection, $input->getArgument('alias'), $input->getArgument('site_title'));
        $output->writeln('<info>Database schema has been processed successfully.<info>');
        $demositeService->installEmptyTheme();
        $output->writeln('<info>Empty theme has been installed successfully.<info>');
        $clearEm = \Doctrine\ORM\EntityManager::create($connection, $container->get('em')->getConfiguration(), $connection->getEventManager());
        $finishService->saveCronjobs(new \Newscoop\Services\SchedulerService($clearEm));
        $output->writeln('<info>Cronjobs have been saved successfully<info>');
        $finishService->generateProxies();
        $output->writeln('<info>Proxies have been generated successfully<info>');
        $finishService->installAssets();
        $output->writeln('<info>Assets have been installed successfully<info>');
        $finishService->saveInstanceConfig(array('site_title' => $input->getArgument('site_title'), 'user_email' => $input->getArgument('user_email'), 'recheck_user_password' => $input->getArgument('user_password')), $connection);
        $output->writeln('<info>Config have been saved successfully.<info>');
        if (!$input->getOption('no-client')) {
            $finishService->createDefaultOauthClient($input->getArgument('alias'));
            $output->writeln('<info>Default OAuth client has been created successfully.<info>');
        }
        $output->writeln('<info>Newscoop is installed.<info>');
    }
InstallNewscoopCommand