diff --git a/Command/CreateFieldsOnReportsCommand.php b/Command/CreateFieldsOnReportsCommand.php deleted file mode 100644 index 29da7f194..000000000 --- a/Command/CreateFieldsOnReportsCommand.php +++ /dev/null @@ -1,201 +0,0 @@ - - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -namespace Chill\ReportBundle\Command; - - -use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputOption; -use Symfony\Component\Console\Output\OutputInterface; -use Chill\CustomFieldsBundle\Entity\CustomFieldsGroup; -use Symfony\Component\Yaml\Parser; -use Symfony\Component\Yaml\Exception\ParseException; -use Chill\CustomFieldsBundle\Entity\CustomField; - -/** - * - * - * @author Julien Fastré - */ -class CreateFieldsOnReportsCommand extends ContainerAwareCommand -{ - - const ARG_PATH = 'path'; - const ARG_DELETE = 'delete'; - - protected function configure() - { - $this->setName('chill:report:custom_fields:create') - ->setDescription('Associate custom fields on reports. Fields must be ' - . 'described in a yml file.') - ->addArgument(self::ARG_PATH, InputOption::VALUE_REQUIRED, - 'Path to description file') - ->addOption(self::ARG_DELETE, null, InputOption::VALUE_NONE, - 'If set, delete existing fields') - ; - } - - protected function execute(InputInterface $input, OutputInterface $output) - { - $dialog = $this->getHelperSet()->get('dialog'); - $em = $this->getContainer() - ->get('doctrine.orm.default_entity_manager'); - - $customFieldsGroups = $em - ->getRepository('ChillCustomFieldsBundle:CustomFieldsGroup') - ->findBy(array('entity' => 'Chill\ReportBundle\Entity\Report')) - ; - - if (count($customFieldsGroups) === 0) { - $output->writeln('There aren\'t any CustomFieldsGroup recorded' - . ' on Reports. Please create at least one.'); - } - - $table = $this->getHelperSet()->get('table'); - $table->setHeaders(array_merge(array('id'), $this->getContainer() - ->getParameter('chill_main.available_languages'))) - ->setRows($this->_prepareRows($customFieldsGroups)); - $table->render($output); - - $customFieldsGroup = $dialog->askAndValidate($output, - "Enter the customfieldGroup's id on which the custom fields " - . "should be added :", - function($answer) use ($customFieldsGroups) { - foreach ($customFieldsGroups as $customFieldsGroup) { - if ($answer == $customFieldsGroup->getId()) { - return $customFieldsGroup; - } - } - - throw new \RunTimeException('The id does not match an existing ' - . 'CustomFieldsGroup'); - } - ); - - if ($input->getOption(self::ARG_DELETE)) { - foreach ($customFieldsGroup->getCustomFields() as $field) { - $em->remove($field); - } - } - - $fieldsInput = $this->_parse($input->getArgument(self::ARG_PATH), - $output); - - $fields = $this->_addFields($customFieldsGroup, $fieldsInput, $output); - - - } - - private function _prepareRows ($customFieldsGroups) - { - $rows = array(); - $languages = $this->getContainer() - ->getParameter('chill_main.available_languages'); - - array_walk($customFieldsGroups, - function(CustomFieldsGroup $customFieldGroup, $key) - use ($languages, &$rows) { - //var_dump($customFieldGroup->getName()); - $row = array( - $customFieldGroup->getId() - ); - foreach ($languages as $lang) { - //todo replace with service to find lang when available - $row[] = (isset($customFieldGroup->getName()[$lang])) ? - $customFieldGroup->getName()[$lang] : - 'Not available in this language'; - } - $rows[] = $row; - } - ); - - return $rows; - } - - private function _parse($path, OutputInterface $output) - { - $parser = new Parser(); - - if (!file_exists($path)) { - throw new \RunTimeException("file does not exist"); - } - - try { - $values = $parser->parse(file_get_contents($path)); - } catch (ParseException $ex) { - throw new \RunTimeException("The yaml file is not valid", 0, $ex); - } - - - return $values; - } - - private function _addFields(CustomFieldsGroup $group, $values, OutputInterface $output) - { - $cfProvider = $this->getContainer()->get('chill.custom_field.provider'); - - $em = $this->getContainer()->get('doctrine.orm.entity_manager'); - - $languages = $this->getContainer() - ->getParameter('chill_main.available_languages'); - - foreach($values['fields'] as $slug => $field) { - //check the cf type exists - $cfType = $cfProvider->getCustomFieldByType($field['type']); - if ($cfType === NULL) { - throw new \RunTimeException('the type '.$field['type'].' ' - . 'does not exists'); - } - - $cf = new CustomField(); - $cf->setSlug($slug) - ->setName($field['name']) - ->setOptions(isset($field['options']) ? $field['options'] : array() ) - ->setOrdering($field['ordering']) - ->setType($field['type']) - ->setCustomFieldsGroup($group) - ; - - //add to table - $names = array(); - foreach ($languages as $lang) { - //todo replace with service to find lang when available - $names[] = (isset($cf->getName()[$lang])) ? - $cf->getName()[$lang] : - 'Not available in this language'; - } - - - if ($this->getContainer()->get('validator')->validate($cf)) { - $em->persist($cf); - $output->writeln("Adding Custom Field of type " - .$cf->getType()."\t with slug ".$cf->getSlug(). - "\t and names : ".implode($names, ', ').""); - } else { - throw new \RunTimeException("Error in field ".$slug); - } - - } - - $em->flush(); - } -}