1 file.module file_managed_file_validate(&$element, &$form_state)

Render API callback: Validates the managed_file element.

This function is assigned as a #element_validate callback in file_element_info().

File

core/modules/file/file.module, line 1660
Defines a "managed_file" Form API field and a "file" field for Field module.

Code

function file_managed_file_validate(&$element, &$form_state) {
  // If referencing an existing file, only allow if there are existing
  // references. This prevents unmanaged files from being deleted if this
  // item were to be deleted.
  $clicked_button = end($form_state['triggering_element']['#parents']);
  if ($clicked_button != 'remove_button' && !empty($element['fid']['#value'])) {
    // Use the parent element's processed #value to get a proper array of FIDs,
    // since $element['fid']['#value'] may be a comma-separated string for
    // multiple file elements.
    $fids = (array) $element['#value']['fid'];
    foreach ($fids as $fid) {
      if ($file = file_load($fid)) {
        if ($file->status == FILE_STATUS_PERMANENT) {
          $references = file_usage_list($file);
          if (empty($references)) {
            form_error($element, t('The file used in the !name field may not be referenced.', array('!name' => $element['#title'])));
          }
        }
      }
      else {
        form_error($element, t('The file referenced by the !name field does not exist.', array('!name' => $element['#title'])));
      }
    }
  }

  // Check required property based on the FID.
  if ($element['#required'] && empty($element['fid']['#value']) && !in_array($clicked_button, array('upload_button', 'remove_button'))) {
    form_error($element['upload'], t('!name field is required.', array('!name' => $element['#title'])));
  }

  // Consolidate the array value of this field to only the FID value.
  if (!$element['#extended']) {
    form_set_value($element, $element['fid']['#value'], $form_state);
  }
}