/**
  * @dataProvider setNameProvider
  */
 public function testSetName($sourceName, $expected)
 {
     // Arrange
     $a = new NodeTypeField();
     $a->setName($sourceName);
     // Assert
     $this->assertEquals($expected, $a->getName());
 }
 public function serializeToJsonProvider()
 {
     // Node type #1
     $nt1 = new NodeType();
     $nt1->setName('page type');
     // Node type #2
     $nt2 = new NodeType();
     $nt2->setName('blog post');
     $nt2->setDisplayName('Un blog post');
     $ntf1 = new NodeTypeField();
     $ntf1->setName('Title');
     $ntf1->setType(NodeTypeField::MARKDOWN_T);
     $nt2->addField($ntf1);
     return array(array(new NodeType(), ROADIZ_ROOT . '/tests/Fixtures/Handlers/nodeTypeHandler01.json'), array($nt1, ROADIZ_ROOT . '/tests/Fixtures/Handlers/nodeTypeHandler02.json'), array($nt2, ROADIZ_ROOT . '/tests/Fixtures/Handlers/nodeTypeHandler03.json'));
 }
 /**
  * Fill node-source content according to field type.
  *
  * @param mixed         $dataValue
  * @param NodesSources  $nodeSource
  * @param NodeTypeField $field
  *
  * @return void
  */
 public function setValueFromFieldType($dataValue, NodesSources $nodeSource, NodeTypeField $field)
 {
     switch ($field->getType()) {
         case NodeTypeField::DOCUMENTS_T:
             $hdlr = $nodeSource->getHandler();
             $hdlr->cleanDocumentsFromField($field);
             if (is_array($dataValue)) {
                 foreach ($dataValue as $documentId) {
                     $tempDoc = Kernel::getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Document', (int) $documentId);
                     if ($tempDoc !== null) {
                         $hdlr->addDocumentForField($tempDoc, $field);
                     }
                 }
             }
             break;
         case NodeTypeField::CUSTOM_FORMS_T:
             $hdlr = $nodeSource->getNode()->getHandler();
             $hdlr->cleanCustomFormsFromField($field);
             if (is_array($dataValue)) {
                 foreach ($dataValue as $customFormId) {
                     $tempCForm = Kernel::getService('em')->find('RZ\\Roadiz\\Core\\Entities\\CustomForm', (int) $customFormId);
                     if ($tempCForm !== null) {
                         $hdlr->addCustomFormForField($tempCForm, $field);
                     }
                 }
             }
             break;
         case NodeTypeField::NODES_T:
             $hdlr = $nodeSource->getNode()->getHandler();
             $hdlr->cleanNodesFromField($field);
             if (is_array($dataValue)) {
                 foreach ($dataValue as $nodeId) {
                     $tempNode = Kernel::getService('em')->find('RZ\\Roadiz\\Core\\Entities\\Node', (int) $nodeId);
                     if ($tempNode !== null) {
                         $hdlr->addNodeForField($tempNode, $field);
                     }
                 }
             }
             break;
         case NodeTypeField::CHILDREN_T:
             break;
         default:
             $setter = $field->getSetterName();
             $nodeSource->{$setter}($dataValue);
             break;
     }
 }
 private function executeCreation(InputInterface $input, OutputInterface $output)
 {
     $name = $input->getArgument('name');
     $nt = new NodeType();
     $nt->setName($name);
     $question0 = new Question('<question>Enter your node-type display name</question>: ', 'Neutral');
     $displayName = $this->questionHelper->ask($input, $output, $question0);
     $nt->setDisplayName($displayName);
     $question1 = new Question('<question>Enter your node-type description</question>: ', '');
     $description = $this->questionHelper->ask($input, $output, $question1);
     $nt->setDescription($description);
     $this->entityManager->persist($nt);
     $i = 1;
     while (true) {
         // Fields
         $field = new NodeTypeField();
         $field->setPosition($i);
         $questionfName = new Question('<question>[Field ' . $i . '] Enter field name</question>: ', 'content');
         $fName = $this->questionHelper->ask($input, $output, $questionfName);
         $field->setName($fName);
         $questionfLabel = new Question('<question>[Field ' . $i . '] Enter field label</question>: ', 'Your content');
         $fLabel = $this->questionHelper->ask($input, $output, $questionfLabel);
         $field->setLabel($fLabel);
         $questionfType = new Question('<question>[Field ' . $i . '] Enter field type</question>: ', 'MARKDOWN_T');
         $fType = $this->questionHelper->ask($input, $output, $questionfType);
         $fType = constant('RZ\\Roadiz\\Core\\Entities\\NodeTypeField::' . $fType);
         $field->setType($fType);
         $questionIndexed = new ConfirmationQuestion('<question>[Field ' . $i . '] Must field be indexed?</question>: ', false);
         if ($this->questionHelper->ask($input, $output, $questionIndexed)) {
             $field->setIndexed(true);
         }
         // Need to populate each side
         $nt->getFields()->add($field);
         $this->entityManager->persist($field);
         $field->setNodeType($nt);
         $questionAdd = new ConfirmationQuestion('<question>Do you want to add another field?</question>: ', true);
         if (!$this->questionHelper->ask($input, $output, $questionAdd)) {
             break;
         }
         $i++;
     }
     $this->entityManager->flush();
     $nt->getHandler()->regenerateEntityClass();
     $success = '<question>Node type ' . $nt->getName() . ' has been created.</question>' . PHP_EOL . '<info>Do not forget to update database schema!</info>';
     return $success;
 }