Exemple #1
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $force = $input->getOption('force');
     $config_si = $input->getOption('config');
     $installer = new Installer($this->getService('sugarcrm.application'), $input->getOption('source'), $config_si);
     try {
         $installer->run($force);
         $output->writeln('Installation was sucessfully completed.');
     } catch (InstallerException $e) {
         $logger = $this->getService('logger');
         $logger->error('An error occured during the installation.');
         $logger->error($e->getMessage());
         return ExitCode::EXIT_INSTALL_ERROR;
     }
 }
 /**
  * Extract the source archive into $this->getPath().
  * While extracting, we remove the top folder from the filename inside the archive.
  * For example, a file 'SugarPro-Full-7.2.1/soap.php' will get extracted to
  * <install_path>/soap.php .
  */
 public function extract()
 {
     $this->getLogger()->info("Extracting {$this->source} into " . $this->getPath() . '...');
     if (!is_dir($this->getPath()) || !$this->fs->isEmpty($this->getPath())) {
         throw new InstallerException("The target path {$this->getPath()} is not a directory or is not empty when extracting the archive.");
     }
     if (!is_file($this->source)) {
         throw new InstallerException("{$this->source} doesn't exists or is not a file.");
     }
     $zip = new \ZipArchive();
     if ($zip->open($this->source) !== true) {
         throw new InstallerException("Unable to open zip {$this->source}.");
     }
     $zip_paths = array();
     for ($i = 0; $i < $zip->numFiles; $i++) {
         $zip_paths[$i] = $zip->getNameIndex($i);
     }
     $target_paths = Installer::junkParent($zip_paths);
     foreach ($target_paths as $i => $name) {
         if (empty($name)) {
             continue;
         }
         $target_path = $this->getPath() . '/' . $name;
         // Check is name ends with '/' (directory name)
         if (strpos($name, '/', strlen($name) - 1) === false) {
             // We have a file name
             // We load each zipped file in memory.
             // It is much faster than getting the Stream handle.
             // For Sugar 7 archive we peak at 24MB so it shouldn't be an issue.
             $content = $zip->getFromIndex($i);
             if ($content === false) {
                 throw new InstallerException("Error while extracting {$name} from the archive.");
             }
             if (file_put_contents($target_path, $content) === false) {
                 throw new InstallerException("Error while writting to file {$target_path}.");
             }
         } else {
             // We have a dir name
             $this->fs->mkdir($target_path);
         }
     }
     if (!$zip->close()) {
         throw new InstallerException("Unable to close zip {$this->source}.");
     }
     $this->getLogger()->info('Extraction OK.');
 }
 /**
  * @group sugar
  */
 public function testInstall()
 {
     $this->assertFileExists(getenv('SUGARCRM_PATH'), 'Please specify the SUGARCRM_PATH from the environment or phpunit.xml file.');
     $install_path = getenv('SUGARCRM_PATH') . '/inetprocess_installer';
     $fs = new Filesystem();
     if ($fs->exists($install_path)) {
         $fs->remove($install_path);
     }
     $fs->mkdir($install_path);
     $installer = new Installer($this->newApp($install_path), __DIR__ . '/installer/Fake_Sugar.zip', __DIR__ . '/installer/config_si.php');
     $installer->run();
     $this->assertTrue($installer->getApplication()->isValid(), 'The install did not extract the zip archive correctly');
     $this->assertTrue($installer->getApplication()->isInstalled(), 'The installer did not perform the sugar installation correctly.');
     $sugar_config = $installer->getApplication()->getSugarConfig();
     $this->assertEquals('UTF-8', $sugar_config['default_export_charset']);
     $fs->remove($install_path);
 }