private function loadForm()
{
// create form
$this->frm = new FrontendForm('form' . $this->item['id']);
// exists and has fields
if (!empty($this->item) && !empty($this->item['fields'])) {
//dump($this->item['fields'] );die;
// loop fields
foreach ($this->item['fields'] as $field) {
// init
$item['name'] = 'field' . $field['id'];
$item['type'] = $field['type'];
$item['label'] = isset($field['settings']['label']) ? $field['settings']['label'] : '';
$item['placeholder'] = isset($field['settings']['placeholder']) ? $field['settings']['placeholder'] : null;
$item['classname'] = isset($field['settings']['classname']) ? $field['settings']['classname'] : null;
$item['required'] = isset($field['validations']['required']);
$item['validations'] = isset($field['validations']) ? $field['validations'] : [];
$item['html'] = '';
// form values
$values = isset($field['settings']['values']) ? $field['settings']['values'] : null;
$defaultValues = isset($field['settings']['default_values']) ? $field['settings']['default_values'] : null;
if ($field['type'] == 'dropdown') {
// values and labels are the same
$values = array_combine($values, $values);
// get index of selected item
$defaultIndex = array_search($defaultValues, $values, true);
if ($defaultIndex === false) {
$defaultIndex = null;
}
// create element
$ddm = $this->frm->addDropdown($item['name'], $values, $defaultIndex, false, $item['classname']);
// empty default element
$ddm->setDefaultElement('');
// add required attribute
if ($item['required']) {
$ddm->setAttribute('required', null);
}
$this->setCustomHTML5ErrorMessages($item, $ddm);
// get content
$item['html'] = $ddm->parse();
} elseif ($field['type'] == 'radiobutton') {
// create element
$rbt = $this->frm->addRadiobutton($item['name'], $values, $defaultValues, $item['classname']);
// get content
$item['html'] = $rbt->parse();
} elseif ($field['type'] == 'checkbox') {
// reset
$newValues = array();
// rebuild values
foreach ($values as $value) {
$newValues[] = array('label' => $value, 'value' => $value);
}
// create element
$chk = $this->frm->addMultiCheckbox($item['name'], $newValues, $defaultValues, $item['classname']);
// get content
$item['html'] = $chk->parse();
} elseif ($field['type'] == 'textbox') {
// create element
$txt = $this->frm->addText($item['name'], $defaultValues, 255, $item['classname']);
// add required attribute
if ($item['required']) {
$txt->setAttribute('required', null);
}
if (isset($item['validations']['email'])) {
$txt->setAttribute('type', 'email');
}
if (isset($item['validations']['numeric'])) {
$txt->setAttribute('type', 'number');
}
if ($item['placeholder']) {
$txt->setAttribute('placeholder', $item['placeholder']);
}
$this->setCustomHTML5ErrorMessages($item, $txt);
// get content
$item['html'] = $txt->parse();
} elseif ($field['type'] == 'datetime') {
// create element
if ($field['settings']['input_type'] == 'date') {
// calculate default value
$amount = $field['settings']['value_amount'];
$type = $field['settings']['value_type'];
if ($type != '') {
switch ($type) {
case 'today':
$defaultValues = date('Y-m-d');
// HTML5 input needs this format
break;
case 'day':
case 'week':
case 'month':
case 'year':
if ($amount != '') {
$defaultValues = date('Y-m-d', strtotime('+' . $amount . ' ' . $type));
}
break;
}
}
// Convert the php date format to a jquery date format
$dateFormatShortJS = FrontendFormBuilderModel::convertPHPDateToJquery($this->get('fork.settings')->get('Core', 'date_format_short'));
$datetime = $this->frm->addText($item['name'], $defaultValues, 255, 'inputDatefield ' . $item['classname'])->setAttributes(array('data-mask' => $dateFormatShortJS, 'data-firstday' => '1', 'type' => 'date', 'default-date' => !empty($defaultValues) ? date($this->get('fork.settings')->get('Core', 'date_format_short'), strtotime($defaultValues)) : ''));
} else {
$datetime = $this->frm->addText($item['name'], $defaultValues, 255, $item['classname'])->setAttributes(array('type' => 'time'));
}
// add required attribute
if ($item['required']) {
$datetime->setAttribute('required', null);
}
$this->setCustomHTML5ErrorMessages($item, $datetime);
// get content
$item['html'] = $datetime->parse();
} elseif ($field['type'] == 'textarea') {
// create element
$txt = $this->frm->addTextarea($item['name'], $defaultValues, $item['classname']);
$txt->setAttribute('cols', 30);
// add required attribute
if ($item['required']) {
$txt->setAttribute('required', null);
}
if ($item['placeholder']) {
$txt->setAttribute('placeholder', $item['placeholder']);
}
$this->setCustomHTML5ErrorMessages($item, $txt);
// get content
$item['html'] = $txt->parse();
} elseif ($field['type'] == 'heading') {
$item['html'] = '<h3>' . $values . '</h3>';
} elseif ($field['type'] == 'paragraph') {
$item['html'] = $values;
} elseif ($field['type'] == 'submit') {
$item['html'] = $values;
}
// add to list
$this->fieldsHTML[] = $item;
}
}
}