/** * This function returns the HtmlElements to display for 1:n relations * * @todo this only works with single valued identifiers * @param array $assocMapping Mapping information for this relation * @param string $entityClass FQCN of the foreign entity * @param int $entityId ID of the local entity * @return array Set of \Cx\Core\Html\Model\Entity\HtmlElement instances */ protected function getIdentifyingDisplayValue($assocMapping, $entityClass, $entityId) { global $_CORELANG; $localEntityMetadata = \Env::get('em')->getClassMetadata($this->entityClass); $localEntityIdentifierField = $localEntityMetadata->getSingleIdentifierFieldName(); $localEntityRepo = \Env::get('em')->getRepository($this->entityClass); $localEntity = $localEntityRepo->find($entityId); if (!$localEntity) { throw new \Exception('Entity not found'); } $foreignEntityGetter = 'get' . preg_replace('/_([a-z])/', '\\1', ucfirst($assocMapping["fieldName"])); $foreignEntities = $localEntity->{$foreignEntityGetter}(); $htmlElements = array(); foreach ($foreignEntities as $index => $foreignEntity) { // entity base implements __toString() $displayValue = (string) $foreignEntity; $foreignEntityMetadata = \Env::get('em')->getClassMetadata(get_class($foreignEntity)); $foreignEntityIdentifierField = $foreignEntityMetadata->getSingleIdentifierFieldName(); $entityValueSerialized = 'vg_increment_number=' . $this->formId; $fieldsToParse = $foreignEntityMetadata->fieldNames; foreach ($fieldsToParse as $dbColName => $fieldName) { $entityValueSerialized .= '&' . $fieldName . '=' . $this->getDataElementValueAsString($foreignEntityMetadata->getFieldValue($foreignEntity, $fieldName)); } // add relations foreach ($foreignEntityMetadata->associationMappings as $foreignAssocMapping) { if (!$foreignAssocMapping['isOwningSide']) { continue; } $joinColumns = reset($foreignAssocMapping['joinColumns']); // if the association is a backreference to our main entity we skip it if ($foreignAssocMapping['targetEntity'] == $this->entityClass && $joinColumns['referencedColumnName'] == $localEntityIdentifierField) { continue; } $foreignForeignEntity = $foreignEntityMetadata->getFieldValue($foreignEntity, $foreignAssocMapping['fieldName']); if (!$foreignForeignEntity) { continue; } $foreignEntityIdentifierGetter = 'get' . preg_replace('/_([a-z])/', '\\1', ucfirst($foreignEntityIdentifierField)); $entityValueSerialized .= '&' . $foreignAssocMapping['fieldName'] . '=' . $foreignForeignEntity->{$foreignEntityIdentifierGetter}(); } $sorroundingDiv = new \Cx\Core\Html\Model\Entity\HtmlElement('div'); $sorroundingDiv->setAttribute('class', 'oneToManyEntryRow'); $displaySpan = new \Cx\Core\Html\Model\Entity\HtmlElement('span'); $displaySpan->addChild(new \Cx\Core\Html\Model\Entity\TextElement($displayValue)); $displaySpan->allowDirectClose(false); $hiddenInput = new \Cx\Core\Html\Model\Entity\DataElement('input'); $hiddenInput->setAttributes(array('type' => 'hidden', 'name' => $this->createCssClassNameFromEntity($entityClass) . '[]', 'value' => $entityValueSerialized)); $editLink = new \Cx\Core\Html\Model\Entity\HtmlElement('a'); $editLink->setAttributes(array('class' => 'edit', 'title' => $_CORELANG['TXT_EDIT'])); $editLink->allowDirectClose(false); $deleteLink = new \Cx\Core\Html\Model\Entity\HtmlElement('a'); $deleteLink->setAttributes(array('onclick' => 'deleteAssociationMappingEntry(this)', 'class' => 'remove existing', 'title' => $_CORELANG['TXT_DELETE'])); $deleteLink->allowDirectClose(false); $sorroundingDiv->addChild($displaySpan); $sorroundingDiv->addChild($hiddenInput); $sorroundingDiv->addChild($editLink); $sorroundingDiv->addChild($deleteLink); $htmlElements[] = $sorroundingDiv; } return $htmlElements; }
public function getDataElementGroup($field, $dataElement, $fieldOptions = array()) { global $_ARRAYLANG; $group = new \Cx\Core\Html\Model\Entity\HtmlElement('div'); $group->setAttribute('class', 'group'); $label = new \Cx\Core\Html\Model\Entity\HtmlElement('label'); $label->setAttribute('for', 'form-' . $this->formId . '-' . $field); $fieldHeader = $field; if (isset($fieldOptions['formtext'])) { $fieldHeader = FormGenerator::getFormLabel($fieldOptions, 'formtext'); } else { if (isset($fieldOptions['header'])) { $fieldHeader = FormGenerator::getFormLabel($fieldOptions, 'header'); } } $label->addChild(new \Cx\Core\Html\Model\Entity\TextElement($fieldHeader . ' ')); $group->addChild($label); $controls = new \Cx\Core\Html\Model\Entity\HtmlElement('div'); $controls->setAttribute('class', 'controls'); $controls->addChild($dataElement); if (isset($fieldOptions['tooltip'])) { $tooltipTrigger = new \Cx\Core\Html\Model\Entity\HtmlElement('span'); $tooltipTrigger->setAttribute('class', 'icon-info tooltip-trigger'); $tooltipTrigger->allowDirectClose(false); $tooltipMessage = new \Cx\Core\Html\Model\Entity\HtmlElement('span'); $tooltipMessage->setAttribute('class', 'tooltip-message'); $tooltipMessage->addChild(new \Cx\Core\Html\Model\Entity\TextElement($fieldOptions['tooltip'])); $controls->addChild($tooltipTrigger); $controls->addChild($tooltipMessage); } $group->addChild($controls); return $group; }