public function extractQueueData(Queue $queue, $data, $validate = false)
{
$result = array();
$errors = array();
$p = new \CHtmlPurifier();
foreach ($queue->getFormFields() as $field) {
$field_name = $field['form_name'];
if (@$field['type'] == 'widget') {
$class_name = 'OEModule\\PatientTicketing\\widgets\\' . $field['widget_name'];
$widget = new $class_name();
if (isset($data[$field['form_name']])) {
// if widget is missing don't validate
$result[$field_name] = $widget->extractFormData($data[$field['form_name']]);
if ($validate) {
$errors = array_merge($errors, $widget->validate($data[$field['form_name']]));
}
}
} else {
$result[$field_name] = $p->purify(@$data[$field_name]);
if ($validate) {
if ($field['required'] && !@$data[$field_name]) {
$errors[$field_name] = $field['label'] . ' is required';
} elseif (@$field['choices'] && @$data[$field_name]) {
$match = false;
foreach ($field['choices'] as $k => $v) {
if ($data[$field_name] == $k) {
$match = true;
break;
}
}
if (!$match) {
$errors[$field_name] = $field['label'] . ': invalid choice';
}
}
}
}
}
if ($validate) {
return array($result, $errors);
} else {
return $result;
}
}