function render()
{
$aHtml = [];
$oMorpho = $this->getMorpho();
$oMorpho->elements()->reset();
foreach ($oMorpho->elements() as $oElement) {
# Setting current prop value for element
# Set on empty (just created) FormMorphology
# And obtained from Model instance
$oElement->setValue($this->modelInstance()->get($oElement->option("prop")));
$aHtml[] = $oElement->render();
}
$elements = implode("\n", $aHtml);
$sModelClass = $this->sModelClass;
######################################################
# Displaying messages
######################################################
if ($this->submitted()) {
# There were errors detected during execute()
# Error messages are displayed
if (!empty($this->aErrors)) {
$this->sDisplayMessage = "";
$aMessages = [];
reset($this->aErrors);
foreach ($this->aErrors as $aError) {
if (trim($aError["message"]) === "") {
continue;
}
$aMessages[] = $aError["message"];
}
$this->sDisplayMessage = \Formal\Core\Message::error(implode("<br />", $aMessages), "Validation error");
}
}
$sSubmittedFlagName = $this->submitSignatureName();
if ($this->option("close") === true) {
$sCloseUrl = $this->option("closeurl");
$sCloseButton = '<a class="btn" href="' . $sCloseUrl . '">Close</a>';
} else {
$sCloseButton = "";
}
if (!isset($_SESSION['CSRF_TOKEN'])) {
throw new \LogicException('A CSRF token must be set in the session. Try clearing your cookies and logging in again');
}
$csrfToken = htmlspecialchars($_SESSION['CSRF_TOKEN']);
$sActionUrl = $this->option("action");
$sHtml = <<<HTML
<form class="form-horizontal" action="{$sActionUrl}" method="post" enctype="multipart/formdata">
<input type="hidden" name="{$sSubmittedFlagName}" value="1" />
<input type="hidden" name="refreshed" value="0" />
<input type="hidden" name="CSRF_TOKEN" value="{$csrfToken}" />
<fieldset>
<legend style="line-height: 40px;">{$this->sDisplayTitle}</legend>
{$this->sDisplayMessage}
{$elements}
<div class="form-actions">
<button type="submit" class="btn btn-primary">Save changes</button>
{$sCloseButton}
</div>
</fieldset>
</form>
HTML;
return $sHtml;
}