public function prepararCamposComplementares(array $data = array()) { $form = $this->getForm(); if (null === $form) { return null; } $formName = $form->getName(); $configuration = new FormConfiguration(); $config = $configuration->loadFormConfiguration($formName); $campos = $configuration->findCamposComplementares($formName); $camposValores = array(); if (count($campos) > 0) { foreach ($campos as $campo) { // Array de controle para salvar na tabela de campoformulariovalor $campoValor = array('codvalor' => null, 'codcampo' => $campo->getCodcampo(), 'codregistro' => null, 'valor' => null); $repository = ServiceLocator::getInstance()->getRepository('Entity\\' . ucwords($campo->getFormulario()->getNometabela())); $pk = $repository->getPrimaryKey(); // Verifica se o formulário tem primary key para buscar o valor do campo complementar if (!is_null($pk)) { // Captura o elemento dentro do formulário para depois saber o valor para buscar na entidade de configuração $elementPk = $form->getElement($pk); // Verifica se o elemento informado como primary key existe realmente no formulário if (!is_null($elementPk)) { // Busca o valor da campo com o nome da primary key dentro do formulário $valuePk = $elementPk->getValue(); $repoConfFormValor = $configuration->getRepoCampoFormularioValor(); $conf = $repoConfFormValor->getValue($campo->getCodcampo(), $valuePk); if (!$conf->isEmpty()) { $campoValor['codvalor'] = $conf->getCodvalor(); } $campoValor['codregistro'] = $valuePk; } if (array_key_exists($campo->getNomecampo(), $data)) { $campoValor['valor'] = $data[$campo->getNomecampo()]; } } $camposValores[$campo->getNomecampo()] = $campoValor; } } $this->_camposComplementares = $camposValores; return $this; }
public function carregarCamposComplementares($config, $entityCampoFormularioValor) { if (!$this->camposComplementaresCarregados) { $this->camposComplementaresCarregados = true; $configuration = new Configuration(); $campos = $configuration->findCamposComplementares($config->getNomeformulario()); if (count($campos) > 0) { foreach ($campos as $campo) { $element = $this->createElement($campo->getTipocampo(), $campo->getNomecampo())->setRequired($campo->getNotnull() === 's')->setValue($campo->getValorpadrao())->setAttribs(array('class' => $campo->getClass(), 'maxlength' => $campo->getMaxlength())); $repository = ServiceLocator::getInstance()->getRepository('Entity\\' . ucwords($campo->getFormulario()->getNometabela())); $pk = $repository->getPrimaryKey(); // Verifica se o formulário tem primary key para buscar o valor do campo complementar na tabela campoformulariovalor if (!is_null($pk)) { // Captura o elemento dentro do formulário para depois saber o valor para buscar na entidade de configuração $elementPk = $this->getElement($pk); // Verifica se o elemento informado como primary key existe realmente no formulário if (!is_null($elementPk)) { // Busca o valor da campo com o nome da primary key dentro do formulário $valuePk = $elementPk->getValue(); // Preenche o elemento com o valor salvo em formulariovalor $repoConfFormValor = ServiceLocator::getInstance()->getRepository($entityCampoFormularioValor); $conf = $repoConfFormValor->getValue($campo->getCodcampo(), $valuePk); if (!$conf->isEmpty()) { $element->setValue($conf->getValor()); } } } if ($campo->getLabel()) { //$element->setLabel(array('label' => $campo->getLabel(), 'class' => $campo->getLabelclass())); $element->setLabel(array('label' => $campo->getLabel())); } if ($campo->getPlaceholder()) { $element->setAttrib('placeholder', $campo->getPlaceholder()); } if ($campo->getExternalHTML()) { $element->setExternalHTML($campo->getExternalHTML()); } if ($campo->getMultiExternalHTML()) { $element->setMultiExternalHTML($campo->getMultiExternalHTML()); } if ($campo->getContent()) { $element->setContent($campo->getContent()); } if ($campo->getSeparador()) { $element->setSeparator($campo->getSeparador()); } if ((int) $campo->getCodvariavel() !== 0 && method_exists($element, 'setMultiOptions')) { $configVariavelValor = ConfigVariavel::getInstance(); $entityVariavelValor = $configVariavelValor->getEntityVariavelValor(); if ($entityVariavelValor) { $repoVariavel = ServiceLocator::getInstance()->getRepository($entityVariavelValor); $valores = $repoVariavel->fetchPairs($campo->getCodvariavel()); $element->setMultiOptions($valores); } } $campoPosterior = $campo->getCampoposterior(); if (null == $campoPosterior) { // Adiciona ao final do formulário $this->addElement($element); } else { // Posiciona o elemento no local definido no campo campoanterior $elements = $this->elements; $this->elements = array(); foreach ($elements as $item) { if ($item->getName() === $campoPosterior) { $this->addElement($element); } $this->addElement($item); } } } } } return $this; }