public function buildView(FormView $view, FormInterface $form) { $repo = $this->em->getRepository($form->getAttribute('class')); $nodeEmpty[] = array('id' => null, 'title' => 'Aucun', 'icon' => null, '__children' => null); $treeNodes = $repo->childrenHierarchy(null, false, array('decorate' => false)); $treeArray = array_merge($nodeEmpty, $treeNodes); $treeHtml = $this->createHtmlTree($treeArray, 0); $vars = $view->getVars(); $value = $vars['value']; if ($value != null) { $selectedNode = $repo->find($value); $treepath = $this->getTreePath($selectedNode); } else { $treepath = '/'; } $view->set('configs', $form->getAttribute('configs'))->set('class', $form->getAttribute('class'))->set('property', $form->getAttribute('property'))->set('treeHtml', $treeHtml)->set('treePath', $treepath); }
/** * Renders a template. * * 1. This function first looks for a block named "_<view id>_<section>", * 2. if such a block is not found the function will look for a block named * "<type name>_<section>", * 3. the type name is recursively replaced by the parent type name until a * corresponding block is found * * @param FormView $view The form view * @param string $section The section to render (i.e. 'row', 'widget', 'label', ...) * @param array $variables Additional variables * * @return string The html markup * * @throws FormException if no template block exists to render the given section of the view */ protected function renderSection(FormView $view, $section, array $variables = array()) { $mainTemplate = in_array($section, array('row', 'widget')); if ($mainTemplate && $view->isRendered()) { return ''; } $template = null; $custom = '_' . $view->getVar('id'); $rendering = $custom . $section; if (isset($this->varStack[$rendering])) { $typeIndex = $this->varStack[$rendering]['typeIndex'] - 1; $types = $this->varStack[$rendering]['types']; $variables = array_replace_recursive($this->varStack[$rendering]['variables'], $variables); } else { $types = $view->getVar('types'); $types[] = $view->getVar('full_block_name'); $typeIndex = count($types) - 1; $variables = array_replace_recursive($view->getVars(), $variables); $this->varStack[$rendering]['types'] = $types; } $this->varStack[$rendering]['variables'] = $variables; do { $types[$typeIndex] .= '_' . $section; $template = $this->lookupTemplate($view, $types[$typeIndex]); if ($template) { $this->varStack[$rendering]['typeIndex'] = $typeIndex; $this->context[] = array('variables' => $variables, 'view' => $view); $html = $this->engine->render($template, $variables); array_pop($this->context); unset($this->varStack[$rendering]); if ($mainTemplate) { $view->setRendered(); } return trim($html); } } while (--$typeIndex >= 0); throw new FormException(sprintf('Unable to render the form as none of the following blocks exist: "%s".', implode('", "', array_reverse($types)))); }
/** * {@inheritdoc} */ public function buildView(FormView $view, FormInterface $form) { $items = $form->getClientData(); $deleteForm = array(); $showForm = array(); $formVars = $view->getVars(); $fieldTypeName = $formVars['name']; if ($form->getAttribute('searchForm') == null) { $metaClass = $this->em->getClassMetadata($form->getAttribute('entityName'))->rootEntityName; $formType = str_replace('Entity', 'Form', $metaClass) . 'SearchType'; } else { $formType = $form->getAttribute('searchForm'); } $entityForm = $this->formFactory->create(new $formType()); $columns = array(); $columnsType = array(); $columnsLabels = null; $itr = 0; if ($form->getAttribute('columns') == null) { foreach ($entityForm as $field) { if ($field->getName() != '_token') { if ($itr >= 4) { break; } $type = $this->lowbiSystem->guessFormFieldType($field); $columns[] = $field->getName(); $columnsType[] = $type; $columnsLabels[$field->getName()] = $field->getAttribute('label'); $itr++; } } } else { foreach ($entityForm as $item) { if (in_array($item->getName(), $form->getAttribute('columns'))) { $label = $item->getAttribute('label'); if (!$label) { $label = $item->getName(); } $columnsLabels[$item->getName()] = $item->getAttribute('label'); } } $columns = $form->getAttribute('columns'); $columnsType = $form->getAttribute('columnsType'); } if ($items != '' || $items != null) { $deleteForm[$items->getId()] = $this->createDeleteForm($items->getId(), $fieldTypeName)->createView(); $showForm[$items->getId()] = $this->createShowForm($items->getId())->createView(); } if ($form->getParent()->getClientData() != null) { if ($form->getParent()->getClientData()->getId() != null) { if (is_array($form->getClientData()) || is_object($form->getParent()->getClientData())) { $sourceEntityId = $form->getParent()->getClientData()->getId(); $sourceEntityName = $this->getBundleName(get_class($form->getParent()->getClientData())); } else { $sourceEntityId = $form->getClientData()->getOwner()->getId(); $sourceEntityName = $this->getBundleName(get_class($form->getClientData()->getOwner())); } } else { $sourceEntityId = null; $sourceEntityName = $this->getBundleName(get_class($form->getParent()->getClientData())); } } else { $sourceEntityId = null; $sourceEntityName = null; } //Create search form attributes $searchFormName = $formType; $searchForm = $this->formFactory->create(new $searchFormName()); foreach ($searchForm as $field) { $type = $this->lowbiSystem->guessFormFieldType($field); if ($type == 'Date') { $oldField = $field; $searchForm->offsetUnset($field->getName()); $label = $oldField->getAttribute('label'); if (!$label) { $label = $oldField->getName(); } $exForm = $this->formFactory->createNamedBuilder('form', $oldField->getName(), null, array('label' => $label))->add($oldField->getName() . '_start', 'lowbi_date', array('label' => ' '))->add($oldField->getName() . '_end', 'lowbi_date', array('label' => ' '))->getForm(); $searchForm->add($exForm); } } $extraForm = $this->createSearchForm($form, $fieldTypeName, $columns, $columnsType); $searchForm->add($extraForm); //disable actions when entire form is read only if ($form->getParent()->isReadOnly() || $sourceEntityId == null) { $actions = array('select' => false, 'remove' => false); } else { $actions = $form->getAttribute('actions'); } $view->set('configs', $form->getAttribute('configs'))->set('columns', $columns)->set('columnsType', $columnsType)->set('columnsLabel', $columnsLabels)->set('actions', $actions)->set('sourceEntityName', $sourceEntityName)->set('sourceEntityId', $sourceEntityId)->set('entityName', $form->getAttribute('entityName'))->set('searchForm', $searchForm->createView())->set('deleteForm', $deleteForm)->set('showForm', $showForm)->set('items', $items); }
protected function renderBlock(FormView $view, $blockName = null, array $variables = array()) { $variables = $view->getVars(); $type = null; foreach ($variables['block_prefixes'] as $blockPrefix) { if (in_array($blockPrefix, array('textarea', 'email', 'integer', 'money', 'number', 'password', 'percent', 'search', 'url', 'hidden', 'collection', 'choice'))) { $type = $blockPrefix; } } if ('rest' == $blockName) { return $this->renderFormRest($view, $blockName, $variables); } switch ($type) { // Text fields case 'textarea': return $this->renderTextareaWidget($view, $blockName, $variables); case 'email': return $this->renderEmailWidget($view, $blockName, $variables); case 'integer': return $this->renderIntegerWidget($view, $blockName, $variables); case 'money': return $this->renderMoneyWidget($view, $blockName, $variables); case 'number': return $this->renderNumberWidget($view, $blockName, $variables); case 'password': return $this->renderPasswordWidget($view, $blockName, $variables); case 'percent': return $this->renderPercentWidget($view, $blockName, $variables); case 'search': return $this->renderSearchWidget($view, $blockName, $variables); case 'url': return $this->renderUrlWidget($view, $blockName, $variables); case 'hidden': return $this->renderHiddenWidget($view, $blockName, $variables); case 'collection': return $this->renderCollectionWidget($view, $blockName, $variables); case 'choice': return $this->renderChoiceWidget($view, $blockName, $variables); } switch ($blockName) { case 'widget': return $this->renderFormWidget($view, $blockName, $variables); case 'row': return $this->renderFormRow($view, $blockName, $variables); } throw new \Exception(__METHOD__ . ' Oups ' . $view->getName() . ' // ' . $blockName . ' // ' . $blockNameSuffix); }