diff --git a/lib/Frs/FieldDefinition.php b/lib/Frs/FieldDefinition.php index 282c8d2..89bd5c0 100644 --- a/lib/Frs/FieldDefinition.php +++ b/lib/Frs/FieldDefinition.php @@ -38,6 +38,60 @@ class FieldDefinition 'fields' => array(), ); } + + foreach ($this->fieldData['fields'] as $key=>$meta) { + $groupName = $this->fieldData['groups'][$meta['group']]; + $byGroup[$groupName]['fields'][] = $meta; + } + return $byGroup; } + + /** + * Adds the given $values or default values and replaces $placeholders. Also + * adds some helping attributes to fields. + * + * @param mixed[] Key-value-array of values (value) to assign to fields (key) + * @param string[] Key-value-array of values (value) to replace placeholders (key) with + */ + public function addFieldValues($values = array(), $placeholders = array()) + { + foreach ($this->fieldData['fields'] as $key=>$meta) { + $meta['field_id'] = $key; + $groupName = $this->fieldData['groups'][$meta['group']]; + $meta['group_name'] = $groupName; + + // Assign session value if set, or use default if set + if (isset($values[$key])) { + $meta['value'] = $values[$key]; + + switch ($meta['type']) { + case 'datetime': + $meta['value_unixtime'] = strtotime($meta['value']); + break; + } + + } elseif (isset($meta['default'])) { + if (isset($placeholders[$meta['default']])) { + $meta['value'] = $placeholders[$meta['default']]; + } else { + $meta['value'] = $meta['default']; + } + } + + // Field type marker for Mustache + $meta['fieldtype_' . $meta['type']] = true; + + // Add useful default values for some types + switch ($meta['type']) { + case 'datetime': + $meta['min'] = date('Y-m-d'); + $meta['today'] = date('Y-m-d'); + break; + } + + // Add to fieldlist + $this->fieldData['fields'][$key] = $meta; + } + } } diff --git a/prep_form.php b/prep_form.php index e0e964f..4f47b42 100644 --- a/prep_form.php +++ b/prep_form.php @@ -10,44 +10,16 @@ if (!isset($action)) { $skey = 'form_' . $action; $fd = new FieldDefinition($action); -$field_data = $fd->getFieldData(); + +$placeholders = array( + 'USER_NAME' => $data['user']['name_first'] . ' ' . $data['user']['name_last'], + 'USER_EMAIL' => $data['user']['email'], +); + +$fd->addFieldValues($_SESSION[$skey], $placeholders); + $by_group = $fd->getGroups(); -// Assign fields to groups, fill in (default) values -foreach ($field_data['fields'] as $key=>$meta) { - $meta['field_id'] = $key; - $group_name = $field_data['groups'][$meta['group']]; - $meta['group_name'] = $group_name; - - // Assign session value if set, or use default if set - if (isset($_SESSION[$skey][$key])) { - $meta['value'] = $_SESSION[$skey][$key]; - } elseif (isset($meta['default'])) { - switch ($meta['default']) { - case 'USER_NAME': - $meta['value'] = $data['user']['name_first'] . ' ' . $data['user']['name_last']; - break; - case 'USER_EMAIL': - $meta['value'] = $data['user']['email']; - break; - default: - $meta['value'] = $meta['default']; - break; - } - } - - // Field type marker for Mustache - $meta['fieldtype_' . $meta['type']] = true; - - // Add useful default values for some types - if ($meta['type'] == 'datetime') { - $meta['min'] = date('Y-m-d'); - } - - // Add to fieldlist - $by_group[$group_name]['fields'][] = $meta; -} - // Convert hash to list for Mustache compatibility $by_group = array_values($by_group); diff --git a/prep_mail.php b/prep_mail.php index 82740d6..8f885e3 100644 --- a/prep_mail.php +++ b/prep_mail.php @@ -10,36 +10,11 @@ if (!isset($action)) { $skey = 'form_' . $action; $fd = new FieldDefinition($action); -$field_data = $fd->getFieldData(); +$fd->addFieldValues($_SESSION[$skey]); -$fields = array(); +$fieldData = $fd->getFieldData(); -// Assign fields to groups, fill in (default) values -foreach ($field_data['fields'] as $key=>$meta) { - $meta['field_id'] = $key; - - // Assign session value if set, or use default if set - if (isset($_SESSION[$skey][$key])) { - $meta['value'] = $_SESSION[$skey][$key]; - - switch ($meta['type']) { - case 'datetime': - $meta['value_unixtime'] = strtotime($meta['value']); - break; - } - } - - // Field type marker for Mustache - $meta['fieldtype_' . $meta['type']] = true; - - // Add useful default values for some types - if ($meta['type'] == 'datetime') { - $meta['today'] = date('Y-m-d'); - } - - // Add to fieldlist - $fields[$key] = $meta; -} +$fields = $fieldData['fields']; if ($debug) { print_r($fields);