Newscoop\Installer\Services\DatabaseService::loadGeoData PHP Метод

loadGeoData() публичный Метод

Fill datatabase with geodata
public loadGeoData ( Doctrine\DBAL\Connection $connection ) : boolean
$connection Doctrine\DBAL\Connection
Результат boolean
    public function loadGeoData($connection)
    {
        $which_output = '';
        $which_ret = '';
        @exec('which mysql', $which_output, $which_ret);
        if (is_array($which_output) && isset($which_output[0])) {
            $mysql_client_command = $which_output[0];
            if (!$this->withMysqlAllIsOk($mysql_client_command)) {
                return false;
            }
            $last_dir = getcwd();
            $work_dir = __DIR__ . '/../../../../install/Resources/sql';
            chdir($work_dir);
            $db_host = $connection->getHost();
            $db_port = $connection->getPort();
            $db_user = $connection->getUsername();
            $db_pass = $connection->getPassword();
            $db_name = $connection->getDatabase();
            $access_params = '';
            $access_params .= ' -h ' . escapeshellarg($db_host);
            if (!empty($db_port)) {
                $access_params .= ' -P ' . escapeshellarg('' . $db_port);
            }
            $access_params .= ' -u ' . escapeshellarg($db_user);
            if (!empty($db_pass)) {
                $access_params .= ' -p' . escapeshellarg($db_pass);
            }
            $access_params .= ' -D ' . escapeshellarg($db_name);
            $cmd_string = escapeshellcmd($mysql_client_command) . $access_params . ' --local-infile=1 < ' . 'geonames.sql';
            $cmd_output = array();
            $cmd_retval = 0;
            exec($cmd_string, $cmd_output, $cmd_retval);
            chdir($last_dir);
            if (!empty($cmd_retval)) {
                return false;
            }
            return true;
        }
    }

Usage Example

 /**
  * @see Console\Command\Command
  */
 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>');
 }