setDescription('Installs a plugin to Phraseanet') ->addArgument('source', InputArgument::REQUIRED, 'The source is a folder'); } protected function doExecutePluginAction(InputInterface $input, OutputInterface $output) { $source = $input->getArgument('source'); $temporaryDir = $this->container['temporary-filesystem']->createTemporaryDirectory(); $output->write("Importing $source..."); $this->container['plugins.importer']->import($source, $temporaryDir); $output->writeln(" OK"); $output->write("Validating plugin..."); $manifest = $this->container['plugins.plugins-validator']->validatePlugin($temporaryDir); $output->writeln(" OK found ".$manifest->getName().""); $targetDir = $this->container['plugins.directory'] . DIRECTORY_SEPARATOR . $manifest->getName(); $output->write("Setting up composer..."); $this->container['plugins.composer-installer']->install($temporaryDir); $output->writeln(" OK"); $output->write("Installing plugin ".$manifest->getName()."..."); $this->container['filesystem']->mirror($temporaryDir, $targetDir); $output->writeln(" OK"); $output->write("Copying public files ".$manifest->getName()."..."); $this->container['plugins.assets-manager']->update($manifest); $output->writeln(" OK"); $output->write("Removing temporary directory..."); $this->container['filesystem']->remove($temporaryDir); $output->writeln(" OK"); $output->write("Activating plugin..."); $this->container['conf']->set(['plugins', $manifest->getName(), 'enabled'], true); $output->writeln(" OK"); $this->updateConfigFiles($input, $output); return 0; } }