diff --git a/lib/classes/module/console/fieldsDelete.class.php b/lib/classes/module/console/fieldsDelete.class.php new file mode 100644 index 0000000000..6d8693af53 --- /dev/null +++ b/lib/classes/module/console/fieldsDelete.class.php @@ -0,0 +1,97 @@ +setDescription('Delete a documentation field from a Databox'); + + $this->addOption('sbas_id', 's', InputOption::VALUE_REQUIRED, 'Databox sbas_id'); + + $this->addOption('meta_struct_id', 'm', InputOption::VALUE_REQUIRED, 'Databox meta structure Id'); + + return $this; + } + + public function execute(InputInterface $input, OutputInterface $output) + { + + if (!$input->getOption('sbas_id')) + throw new \Exception('Missing argument sbas_id'); + + if (!$input->getOption('meta_struct_id')) + throw new \Exception('Missing argument meta_struct_id'); + + try + { + $databox = \databox::get_instance((int) $input->getOption('sbas_id')); + } + catch (\Exception $e) + { + $output->writeln("Invalid databox id "); + + return 1; + } + + try + { + $field = $databox->get_meta_structure()->get_element((int) $input->getOption('meta_struct_id')); + } + catch (\Exception $e) + { + $output->writeln("Invalid meta struct id "); + + return 1; + } + + + $dialog = $this->getHelperSet()->get('dialog'); + $continue = mb_strtolower( + $dialog->ask( + $output + , "About to delete " . $field->get_name() . " (y/N)" + , 'n' + ) + ); + + if($continue != 'y') + { + $output->writeln("Request canceled by user"); + return 1; + } + + $output->writeln("Deleting ... "); + + $field->delete(); + + $output->writeln("Done with success !"); + + return 0; + } + +} diff --git a/lib/classes/module/console/fieldsList.class.php b/lib/classes/module/console/fieldsList.class.php new file mode 100644 index 0000000000..ad9bb497d8 --- /dev/null +++ b/lib/classes/module/console/fieldsList.class.php @@ -0,0 +1,70 @@ +setDescription('List all databox fields'); + + return $this; + } + + public function execute(InputInterface $input, OutputInterface $output) + { + + $appbox = \appbox::get_instance(); + + foreach ($appbox->get_databoxes() as $databox) + { + /* @var $databox \databox */ + $output->writeln( + sprintf( + "\n ---------------- \nOn databox %s (sbas_id %d) :\n" + , $databox->get_viewname() + , $databox->get_sbas_id() + ) + ); + + foreach ($databox->get_meta_structure()->get_elements() as $field) + { + $output->writeln( + sprintf( + " %2d - %s (%s) %s" + , $field->get_id() + , $field->get_name() + , $field->get_type() + , ($field->is_multi() ? 'multi' : '') + ) + ); + } + } + + return 0; + } + +} diff --git a/lib/classes/module/console/fieldsMerge.class.php b/lib/classes/module/console/fieldsMerge.class.php new file mode 100644 index 0000000000..d3042a4732 --- /dev/null +++ b/lib/classes/module/console/fieldsMerge.class.php @@ -0,0 +1,284 @@ +setDescription('Merge databox structure fields'); + + $this->addOption( + 'source' + , 'f' + , InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY + , 'Metadata structure ids for source' + , array() + ); + + $this->addOption( + 'destination' + , 'd' + , InputOption::VALUE_REQUIRED + , 'Metadata structure id destination' + ); + + $this->addOption( + 'sbas_id' + , 's' + , InputOption::VALUE_REQUIRED + , 'Databox sbas_id' + ); + + $this->addOption( + 'separator' + , '' + , InputOption::VALUE_OPTIONAL + , 'Separator for concatenation (if destination is monovalued)' + , ';' + ); + + return $this; + } + + public function execute(InputInterface $input, OutputInterface $output) + { + $output->writeln(""); + + if (!$input->getOption('sbas_id')) + throw new \Exception('Missing argument sbas_id'); + + try + { + $databox = \databox::get_instance((int) $input->getOption('sbas_id')); + } + catch (\Exception $e) + { + $output->writeln("Invalid databox id "); + + return 1; + } + + $sources = array(); + + foreach ($input->getOption('source') as $source_id) + { + $sources[] = $databox->get_meta_structure()->get_element($source_id); + } + + if (count($sources) === 0) + throw new \Exception('No sources to proceed'); + + if (!$input->getOption('destination')) + throw new \Exception('Missing argument destination'); + + $separator = ' ' . $input->getOption('separator') . ' '; + + $destination = $databox->get_meta_structure()->get_element($input->getOption('destination')); + + $types = $multis = array(); + + foreach ($sources as $source) + { + array_push($types, $source->get_type()); + array_push($multis, $source->is_multi()); + } + + $types = array_unique($types); + $multis = array_unique($multis); + + if (count(array_unique($types)) > 1) + { + $output->writeln( + sprintf("Warning, trying to merge inconsistent types : %s\n" + , implode(', ', $types) + ) + ); + } + + if (count(array_unique($multis)) > 1) + { + $output->writeln( + sprintf( + "Warning, trying to merge mono and multi values fields\n" + ) + ); + } + + $field_names = array(); + foreach ($sources as $source) + { + $field_names[] = $source->get_name(); + } + + if (count($multis) == 1) + { + if ($multis[0] === false && !$destination->is_multi()) + { + $output->writeln( + sprintf( + "You are going to merge mono valued fields in a " + . "monovalued field, fields will be " + . "concatenated in the following order : %s" + , implode($separator, $field_names) + ) + ); + $this->displayHelpConcatenation($output); + } + elseif ($multis[0] === true && !$destination->is_multi()) + { + $output->writeln( + sprintf( + "You are going to merge multi valued fields in a " + . "monovalued field, fields will be " + . "concatenated in the following order : %s" + , implode(' ', $field_names) + ) + ); + $this->displayHelpConcatenation($output); + } + elseif ($multis[0] === false && $destination->is_multi()) + { + $output->writeln( + sprintf( + "You are going to merge mono valued fields in a " + . "multivalued field" + ) + ); + } + elseif ($multis[0] === true && $destination->is_multi()) + { + $output->writeln( + sprintf( + "You are going to merge multi valued fields in a " + . "multivalued field" + ) + ); + } + } + elseif ($destination->is_multi()) + { + $output->writeln( + sprintf( + "You are going to merge mixed valued fields in a " + . "multivalued field" + ) + ); + } + else + { + $output->writeln( + sprintf( + "You are going to merge mixed valued fields in a " + . "monovalued field, fields will be " + . "concatenated in the following order : %s" + , implode($separator, $field_names) + ) + ); + $this->displayHelpConcatenation($output); + } + + $start = 0; + $quantity = 100; + + do + { + $sql = 'SELECT record_id FROM record + ORDER BY record_id LIMIT ' . $start . ', ' . $quantity; + $stmt = $databox->get_connection()->prepare($sql); + $stmt->execute(); + $results = $stmt->fetchAll(PDO::FETCH_ASSOC); + $stmt->closeCursor(); + + foreach ($results as $row) + { + $record = $databox->get_record($row['record_id']); + + $datas = array(); + + foreach ($sources as $source) + { + try + { + $value = $record->get_caption()->get_field($source->get_name())->get_value(); + } + catch (\Exception $e) + { + $value = array(); + } + if (!is_array($value)) + { + $value = array($value); + } + + $datas = array_merge($datas, $value); + } + + $datas = array_unique($datas); + + if (!$destination->is_multi()) + { + $datas = array(implode($separator, $datas)); + } + + try + { + $record->get_caption()->get_field($destination->get_name())->set_value($datas); + } + catch (\Exception $e) + { + $record->set_metadatas( + array( + array( + 'meta_struct_id' => $destination->get_id() + , 'meta_id' => null + , 'value' => $datas + ) + ) + , true + ); + } + unset($record); + } + + $start += $quantity; + } + while (count($results) > 0); + + return 0; + } + + protected function displayHelpConcatenation(OutputInterface $output) + { + + $output->writeln("\nYou can choose the concatenation order in the " + . "commandline (first option is first value) and set a separator " + . "with the --separator option)"); + + return $this; + } + +} diff --git a/lib/classes/module/console/fieldsRename.class.php b/lib/classes/module/console/fieldsRename.class.php new file mode 100644 index 0000000000..992dd7ae10 --- /dev/null +++ b/lib/classes/module/console/fieldsRename.class.php @@ -0,0 +1,105 @@ +setDescription('Rename a documentation field from a Databox'); + + $this->addOption('sbas_id', 's', InputOption::VALUE_REQUIRED, 'Databox sbas_id'); + + $this->addOption('meta_struct_id', 'm', InputOption::VALUE_REQUIRED, 'Databox meta structure Id'); + + $this->addOption('name', 'n', InputOption::VALUE_REQUIRED, 'The new name'); + + return $this; + } + + public function execute(InputInterface $input, OutputInterface $output) + { + + if (!$input->getOption('sbas_id')) + throw new \Exception('Missing argument sbas_id'); + + if (!$input->getOption('meta_struct_id')) + throw new \Exception('Missing argument meta_struct_id'); + + if (!$input->getOption('name')) + throw new \Exception('Missing argument name'); + + $new_name = $input->getOption('name'); + + try + { + $databox = \databox::get_instance((int) $input->getOption('sbas_id')); + } + catch (\Exception $e) + { + $output->writeln("Invalid databox id "); + + return 1; + } + + try + { + $field = $databox->get_meta_structure()->get_element((int) $input->getArgument('meta_struct_id')); + } + catch (\Exception $e) + { + $output->writeln("Invalid meta struct id "); + + return 1; + } + + + $dialog = $this->getHelperSet()->get('dialog'); + $continue = mb_strtolower( + $dialog->ask( + $output + , "About to rename " . $field->get_name() . " into ".$new_name." (y/N)" + , 'n' + ) + ); + + if($continue != 'y') + { + $output->writeln("Request canceled by user"); + return 1; + } + + $output->writeln("Renaming ... "); + + $field->set_name($new_name); + $field->save(); + + $output->writeln("Done with success !"); + + return 0; + } + +}