public function CivicrmInlineEntityFormController::entityFormSubmit in CiviCRM Entity 7.2
Handles the submission of an entity form.
Prepares the entity stored in $entity_form['#entity'] for saving by copying the values from the form to matching properties and, if the entity is fieldable, invoking Field API submit.
Parameters
$entity_form: The entity form.
$form_state: The form state of the parent form.
Overrides EntityInlineEntityFormController::entityFormSubmit
File
- modules/
civicrm_entity_inline/ includes/ civicrm.civicrm_entity_inline.inc, line 348
Class
Code
public function entityFormSubmit(&$entity_form, &$form_state) {
//$entity_type = $form_state['entity_type'];
$entity_type = $entity_form['#entity_type'];
$ief_id = $entity_form['#ief_id'];
$field_name = $form_state['inline_entity_form'][$ief_id]['instance']['field_name'];
$op = $entity_form['#op'];
civicrm_initialize();
$civicrm_entity_fields = civicrm_api(substr_replace($entity_type, '', 0, 8), 'getfields', array(
'version' => 3,
'action' => 'create',
));
if ($op == 'edit') {
foreach ($form_state['inline_entity_form'][$ief_id]['entities'] as $k => &$entity_array) {
if (isset($form_state['values'][$field_name]['und']['entities'][$k]['form'])) {
foreach ($form_state['values'][$field_name]['und']['entities'][$k]['form'] as $key => $value) {
if (substr($key, 0, 7) == 'custom_') {
if ($civicrm_entity_fields['values'][$key]['html_type'] == 'CheckBox') {
if (is_array($value)) {
$stored_value = array();
foreach ($value as $option => $checkbox_value) {
if ($checkbox_value) {
$stored_value[] = $option;
}
}
$entity_array['entity']->{$key} = !empty($stored_value) ? $stored_value : array(
'',
);
}
}
else {
if (is_array($value) && isset($value['value'])) {
$value = $value['value'];
$form_state['values'][$field_name]['und']['entities'][$k]['form'][$key] = $value;
}
$entity_array['entity']->{$key} = $value;
}
if (!empty($civicrm_entity_fields['values'][$key]['is_view'])) {
unset($entity_array['entity']->{$key});
}
}
else {
if (is_array($value) && isset($value['value'])) {
$value = $value['value'];
$form_state['values'][$field_name]['und']['entities'][$k]['form'][$key] = $value;
}
$entity_array['entity']->{$key} = $value;
}
}
if ($entity_array['entity']->is_new = isset($entity_array['entity']->is_new) ? $entity_array['entity']->is_new : 0) {
$entity_array['entity']->created = time();
}
$entity_array['entity']->changed = time();
field_attach_submit($entity_type, $entity_array['entity'], $entity_form, $form_state);
}
}
}
elseif ($op == 'create' || $op == 'add') {
$entity = $entity_form['#entity'];
$child_form_state_values = drupal_array_get_nested_value($form_state['values'], $entity_form['#parents']);
$field_info = field_info_field($field_name);
$field_target_id_column = !empty($field_info['settings']['target_id_column']) ? $field_info['settings']['target_id_column'] : '';
$field_host_source_id = !empty($field_info['settings']['host_source_id']) ? $field_info['settings']['host_source_id'] : '';
$this
->fillEntityValues($child_form_state_values, $entity, $civicrm_entity_fields);
if (!empty($entity->is_new) && !empty($entity->id)) {
$entity->is_new = FALSE;
if ($entity_type == 'civicrm_contact') {
$entity->contact_id = $entity->id;
}
}
if ($entity->is_new = isset($entity->is_new) ? $entity->is_new : 0) {
$entity->created = time();
}
$entity->changed = time();
// First parent name is not the field name, then this reference field is nested inside another
if ($field_name != $entity_form['#parents'][0]) {
$parent_field_parents = array();
foreach ($entity_form['#parents'] as $index => $name) {
$parent_field_parents[] = $name;
if ($name == $field_name) {
unset($parent_field_parents[$index]);
$parent_field_name = $entity_form['#parents'][$index - 3];
break;
}
}
$parent_field_info = field_info_field($parent_field_name);
if (!empty($parent_field_info['settings']['target_type'])) {
$parent_field_entity_type = $parent_field_info['settings']['target_type'];
}
elseif (!empty($parent_field_info['settings']['target_entity_type'])) {
$parent_field_entity_type = $parent_field_info['settings']['target_entity_type'];
}
if (!empty($parent_field_parents) && !empty($parent_field_entity_type) && !empty($field_host_source_id) && !empty($field_target_id_column)) {
$parent_submitted_values = drupal_array_get_nested_value($form_state['values'], $parent_field_parents);
if (empty($parent_submitted_values[$field_host_source_id])) {
// save parent entity and update something?
$parent_field_entity = new CivicrmEntity(array(), $parent_field_entity_type);
$this
->fillEntityValues($parent_submitted_values, $parent_field_entity, $civicrm_entity_fields);
$parent_field_wrapper = entity_metadata_wrapper($parent_field_entity_type, $parent_field_entity);
$parent_field_wrapper
->save();
$parent_submitted_values[$field_host_source_id] = $parent_field_wrapper->{$field_host_source_id}
->value();
if ($parent_field_entity_type == 'civicrm_contact') {
$parent_field_wrapper->contact_id
->set($parent_field_wrapper->{$field_host_source_id}
->value());
$parent_submitted_values['contact_id'] = $parent_field_wrapper->{$field_host_source_id}
->value();
}
$child_form_state_values[$field_target_id_column] = $parent_field_wrapper->{$field_host_source_id}
->value();
//$entity->{$field_target_id_column} = $parent_field_wrapper->{$field_host_source_id}->value();
drupal_array_set_nested_value($form_state['values'], $parent_field_parents, $parent_submitted_values);
foreach ($form_state['inline_entity_form'] as $iefid => $ief_data) {
if ($ief_data['instance']['field_name'] == $parent_field_name) {
$entity_count = count($form_state['inline_entity_form'][$iefid]['entities']);
//$form_state['inline_entity_form'][$iefid]['entities'][$entity_count]['entity'] = $parent_field_wrapper->value();
if ($parent_field_entity_type == 'civicrm_contact') {
//$form_state['inline_entity_form'][$iefid]['entities'][$entity_count]['entity']->contact_id = $parent_field_wrapper->{$field_host_source_id}->value();
}
//$form_state['inline_entity_form'][$iefid]['entities'][$entity_count]['needs_save'] = FALSE;
}
}
}
else {
$child_form_state_values[$field_target_id_column] = $parent_submitted_values[$field_host_source_id];
//$entity->{$field_target_id_column} = $parent_submitted_values[$field_host_source_id];
}
}
}
drupal_array_set_nested_value($form_state['values'], $entity_form['#parents'], $child_form_state_values);
}
// Add in created and changed times.
parent::entityFormSubmit($entity_form, $form_state);
}