addOption('write', 'w', null, 'Writes the configuration') ->addOption('enabled', 'e', null, 'Set the enable toggle to `true`') ->addArgument('type', null, 'The configuration type, either `nginx` or `apache`') ->setDescription('Generates Phraseanet xsendfile mapping configuration depending on databoxes configuration'); } /** * {@inheritdoc} */ protected function doExecute(InputInterface $input, OutputInterface $output) { $paths = $this->extractPath($this->container['phraseanet.appbox']); foreach ($paths as $path) { $this->container['filesystem']->mkdir($path); } $type = strtolower($input->getArgument('type')); $enabled = $input->getOption('enabled'); $factory = new XSendFileFactory($this->container['monolog'], true, $type, $this->computeMapping($paths)); $mode = $factory->getMode(true); $conf = array( 'enabled' => $enabled, 'type' => $type, 'mapping' => $mode->getMapping(), ); if ($input->getOption('write')) { $output->write("Writing configuration ..."); $this->container['phraseanet.configuration']['xsendfile'] = $conf; $output->writeln(" OK"); $output->writeln(""); $output->write("It is now strongly recommended to use xsendfile:dump-configuration command to upgrade your virtual-host"); } else { $output->writeln("Configuration will not be written, use --write option to write it"); $output->writeln(""); $output->writeln(Yaml::dump(array('xsendfile' => $conf), 4)); } return 0; } private function computeMapping($paths) { return array_merge(array( array('mount-point' => 'protected_lazaret', 'directory' => $this->container['root.path'] . '/tmp/lazaret'), array('mount-point' => 'protected_download', 'directory' => $this->container['root.path'] . '/tmp/download'), ), array_map(array($this, 'pathsToConf'), array_unique($paths))); } private function pathsToConf($path) { static $n = 0; $n++; return array('mount-point' => 'protected_dir_'.$n, 'directory' => $path); } private function extractPath(\appbox $appbox) { $paths = array(); foreach ($appbox->get_databoxes() as $databox) { $paths[] = (string) $databox->get_sxml_structure()->path; foreach ($databox->get_subdef_structure() as $group => $subdefs) { foreach ($subdefs as $subdef) { $paths[] = $subdef->get_path(); } } } return array_filter(array_unique($paths)); } }