protected function createForm($widgetId, $data)
{
$form = new \Ip\Form();
$form->setEnvironment(\Ip\Form::ENVIRONMENT_PUBLIC);
if (empty($data['fields']) || !is_array($data['fields'])) {
$data['fields'] = array();
}
foreach ($data['fields'] as $fieldKey => $field) {
if (!isset($field['type']) || !isset($field['label'])) {
continue;
}
if ($field['type'] == 'Fieldset') {
$label = empty($field['label']) ? '' : $field['label'];
$form->addFieldset(new \Ip\Form\Fieldset($label));
continue;
}
if (!isset($field['options'])) {
$field['options'] = array();
}
if (!isset($field['options']) || !is_array($field['options'])) {
$field['options'] = array();
}
if (!isset($field['required'])) {
$field['required'] = false;
}
$fieldType = Model::getFieldType($field['type']);
if ($fieldType) {
$fieldData = array('label' => $field['label'], 'name' => 'ipForm_field_' . $fieldKey, 'required' => $field['required'], 'options' => $field['options']);
try {
$newField = $fieldType->createField($fieldData);
$form->addField($newField);
} catch (\Ip\Exception\Content $e) {
ipLog()->error('FormWidget.failedAddField: Widget failed to add field.', array('widget' => 'Form', 'exception' => $e, 'fieldData' => $fieldData));
}
}
}
//special variable to post to widget controller
$field = new \Ip\Form\Field\Hidden(array('name' => 'sa', 'value' => 'Content.widgetPost'));
$form->addField($field);
$field = new \Ip\Form\Field\Hidden(array('name' => 'widgetId', 'value' => $widgetId));
$form->addField($field);
//antispam
$field = new \Ip\Form\Field\Antispam(array('name' => 'checkField'));
$form->addField($field);
//submit
if (!empty($data['buttonText'])) {
$value = $data['buttonText'];
} else {
$value = __('Send', 'Ip', false);
}
$field = new \Ip\Form\Field\Submit(array('value' => $value));
$form->addField($field);
return $form;
}