You are here

public function CivicrmInlineEntityFormController::entityFormValidate in CiviCRM Entity 7.2

Validates the entity form.

Parameters

$entity_form: The entity form.

$form_state: The form state of the parent form.

Overrides EntityInlineEntityFormController::entityFormValidate

File

modules/civicrm_entity_inline/includes/civicrm.civicrm_entity_inline.inc, line 233

Class

CivicrmInlineEntityFormController

Code

public function entityFormValidate($entity_form, &$form_state) {
  $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'];
  if ($op == 'edit') {
    foreach ($form_state['inline_entity_form'][$ief_id]['entities'] as $delta => &$entity_array) {
      if (isset($form_state['values'][$field_name]['und']['entities'][$delta]['form'])) {

        //$entity = $entity_array['entity'];
        foreach ($form_state['values'][$field_name]['und']['entities'][$delta]['form'] as $key => $value) {

          //$entity->{$key} = $value;
          if (!is_array($value)) {
            $entity_array['entity']->{$key} = $value;
          }
          else {
            if (isset($value['value'])) {
              $entity_array['entity']->{$key} = $value['value'];
            }
            else {
              $entity_array['entity']->{$key} = $value;
            }
          }
        }
      }
    }
  }
  elseif ($op == 'create' || $op == 'add') {
    $entity = $entity_form['#entity'];
    $child_form_state_values = drupal_array_get_nested_value($form_state['values'], $entity_form['#parents']);
    foreach ($child_form_state_values as $key => $value) {
      if (!is_array($value)) {
        $entity->{$key} = $value;
      }
      elseif (isset($value['value'])) {
        $entity->{$key} = $value['value'];
      }
      else {
        $entity->{$key} = $value;
      }
    }
  }
  if ($op == 'create' || $op == 'add' || $op == 'edit') {

    // validate civicrm data
    $entity_metadata_info = entity_get_property_info($entity_type);
    foreach ($form_state['inline_entity_form'][$ief_id]['entities'] as $delta => $ent_array) {
      foreach ($entity_metadata_info['properties'] as $name => $info) {
        if (!empty($info['type'])) {

          // integer validation
          if ($info['type'] == 'integer') {

            //text field validation
            if (isset($entity_form[$name]['#type']) && $entity_form[$name]['#type'] == 'textfield') {
              if (isset($form_state['values'][$field_name][LANGUAGE_NONE]['entities'][$delta]['form'][$name]) && strlen($form_state['values'][$field_name][LANGUAGE_NONE]['entities'][$delta]['form'][$name]) && (string) (int) $form_state['values'][$field_name][LANGUAGE_NONE]['entities'][$delta]['form'][$name] !== (string) $form_state['values'][$field_name][LANGUAGE_NONE]['entities'][$delta]['form'][$name]) {
                form_set_error($field_name . '][' . LANGUAGE_NONE . '][entities][' . $delta . '][form][' . $name, t('Value must be an integer. e.g (1, 154, 0)'));
              }
            }
          }
          elseif ($info['type'] == 'decimal') {

            //text field validation
            if (isset($entity_form[$name]['#type']) && $entity_form[$name]['#type'] == 'textfield') {
              if (isset($form_state['values'][$field_name][LANGUAGE_NONE]['entities'][$delta]['form'][$name]) && strlen($form_state['values'][$field_name][LANGUAGE_NONE]['entities'][$delta]['form'][$name]) && !is_numeric($form_state['values'][$field_name][LANGUAGE_NONE]['entities'][$delta]['form'][$name])) {
                form_set_error($field_name . '][' . LANGUAGE_NONE . '][entities][' . $delta . '][form][' . $name, t('Value must be an number. e.g (1, 1.26, -1.3)'));
              }
            }
          }
        }
      }

      // validate name for contact
      if ($entity_type == 'civicrm_contact' && isset($form_state['values'][$field_name][LANGUAGE_NONE]['entities'][$delta]['form']['contact_type'])) {
        if ($form_state['values'][$field_name][LANGUAGE_NONE]['entities'][$delta]['form']['contact_type'] == 'Individual') {
          if (!isset($entity_form['first_name']) && !isset($entity_form['middle_name']) && !isset($entity_form['last_name'])) {
            form_set_error($field_name . '][' . LANGUAGE_NONE . '][entities][' . $delta . '][form][' . 'contact_type', t('Individual contact type, form must include at least one of first, middle, or last name fields.'));
          }
          elseif (empty($form_state['values'][$field_name][LANGUAGE_NONE]['entities'][$delta]['form']['first_name']) && empty($form_state['values'][$field_name][LANGUAGE_NONE]['entities'][$delta]['form']['middle_name']) && empty($form_state['values'][$field_name][LANGUAGE_NONE]['entities'][$delta]['form']['last_name'])) {
            form_set_error($field_name . '][' . LANGUAGE_NONE . '][entities][' . $delta . '][form][' . 'first_name', t('At least one of first, middle, or last names must be set when contact type is set to Individual.'));
            form_set_error($field_name . '][' . LANGUAGE_NONE . '][entities][' . $delta . '][form][' . 'middle_name');
            form_set_error($field_name . '][' . LANGUAGE_NONE . '][entities][' . $delta . '][form][' . 'last_name');
          }
        }
        elseif ($form_state['values'][$field_name][LANGUAGE_NONE]['entities'][$delta]['form']['contact_type'] == 'Household') {
          if (!isset($entity_form['household_name'])) {
            form_set_error($field_name . '][' . LANGUAGE_NONE . '][entities][' . $delta . '][form][' . 'contact_type', t('Household contact type, form must include the household name field.'));
          }
          elseif (empty($form_state['values'][$field_name][LANGUAGE_NONE]['entities'][$delta]['form']['household_name'])) {
            form_set_error($field_name . '][' . LANGUAGE_NONE . '][entities][' . $delta . '][form][' . 'household_name', t('Household name is required when contact type is set to Household'));
          }
        }
        elseif ($form_state['values'][$field_name][LANGUAGE_NONE]['entities'][$delta]['form']['contact_type'] == 'Organization') {
          if (!isset($entity_form['organization_name'])) {
            form_set_error($field_name . '][' . LANGUAGE_NONE . '][entities][' . $delta . '][form][' . 'contact_type', t('Organization contact type, form must include the organization name field.'));
          }
          elseif (empty($form_state['values'][$field_name][LANGUAGE_NONE]['entities'][$delta]['form']['organization_name'])) {
            form_set_error($field_name . '][' . LANGUAGE_NONE . '][entities][' . $delta . '][form][' . 'organization_name', t('Organization name is required when contact type is set to Organization.'));
          }
        }
      }
      field_attach_form_validate($entity_type, $ent_array['entity'], $entity_form, $form_state);
    }
  }
  parent::entityFormValidate($entity_form, $form_state);
}