diff --git a/src/Plugin/Field/FieldWidget/FileBrowserWidget.php b/src/Plugin/Field/FieldWidget/FileBrowserWidget.php index d883f15..aa99e2d 100644 --- a/src/Plugin/Field/FieldWidget/FileBrowserWidget.php +++ b/src/Plugin/Field/FieldWidget/FileBrowserWidget.php @@ -209,38 +209,50 @@ class FileBrowserWidget extends EntityReferenceBrowserWidget { $view_mode = $widget_settings['view_mode']; $can_edit = (bool) $widget_settings['field_widget_edit']; $has_file_entity = $this->moduleHandler->moduleExists('file_entity'); - + $multiple = $this->fieldDefinition->getFieldStorageDefinition()->isMultiple(); $delta = 0; - $order_class = $field_machine_name . '-delta-order'; - - $current = [ - '#type' => 'table', - '#empty' => $this->t('No files yet'), - '#attributes' => ['class' => ['entities-list']], - '#tabledrag' => [ - [ - 'action' => 'order', - 'relationship' => 'sibling', - 'group' => $order_class, + + if ($multiple == FALSE) { + $current = [ + '#type' => 'container', + ]; + if (empty($entities)) { + $current['empty'] = [ + '#markup' => '

' . $this->t('No file selected.') .'

', + ]; + } + } + else { + $current = [ + '#type' => 'table', + '#empty' => $this->t('No files selected.'), + '#attributes' => ['class' => ['entities-list']], + '#tabledrag' => [ + [ + 'action' => 'order', + 'relationship' => 'sibling', + 'group' => $order_class, + ], ], - ], - ]; + ]; - if ($has_file_entity || $field_type == 'image' && !empty($widget_settings['preview_image_style'])) { - // Had the preview column if we have one. - $current['#header'][] = $this->t('Preview'); - } - // Add the filename if there is no view builder. - if (!$has_file_entity) { - $current['#header'][] = $this->t('Filename'); - } + if ($has_file_entity || $field_type == 'image' && !empty($widget_settings['preview_image_style'])) { + // Had the preview column if we have one. + $current['#header'][] = $this->t('Preview'); + } + + // Add the filename if there is no view builder. + if (!$has_file_entity) { + $current['#header'][] = $this->t('Filename'); + } - // Add the remaining columns. - $current['#header'][] = $this->t('Metadata'); - $current['#header'][] = ['data' => $this->t('Operations'), 'colspan' => 3]; - $current['#header'][] = $this->t('Order', [], ['context' => 'Sort order']); + // Add the remaining columns. + $current['#header'][] = $this->t('Metadata'); + $current['#header'][] = ['data' => $this->t('Operations'), 'colspan' => 3]; + $current['#header'][] = $this->t('Order', [], ['context' => 'Sort order']); + } /** @var \Drupal\file\FileInterface[] $entities */ foreach ($entities as $entity) { @@ -406,6 +418,7 @@ class FileBrowserWidget extends EntityReferenceBrowserWidget { '#delta' => count($entities), '#default_value' => $weight, '#attributes' => ['class' => [$order_class]], + '#access' => $multiple, ], ]; @@ -421,36 +434,40 @@ class FileBrowserWidget extends EntityReferenceBrowserWidget { * {@inheritdoc} */ public function massageFormValues(array $values, array $form, FormStateInterface $form_state) { - $ids = empty($values['target_id']) ? [] : explode(' ', trim($values['target_id'])); + if (!isset($values['current']) || !is_array($values['current'])) { + return []; + } + $return = []; + $ids = empty($values['target_id']) ? [] : preg_split('/\s/', trim($values['target_id'])); foreach ($ids as $id) { $id = explode(':', $id)[1]; - if (is_array($values['current']) && isset($values['current'][$id])) { - $item_values = [ - 'target_id' => $id, - '_weight' => $values['current'][$id]['_weight'], - ]; - if ($this->fieldDefinition->getType() == 'file') { - if (isset($values['current'][$id]['meta']['description'])) { - $item_values['description'] = $values['current'][$id]['meta']['description']; - } - if ($this->fieldDefinition->getSetting('display_field') && isset($values['current'][$id]['meta']['display_field'])) { - $item_values['display'] = $values['current'][$id]['meta']['display_field']; - } + if (!isset($values['current'][$id])) { + continue; + } + $item_values = [ + 'target_id' => $id, + '_weight' => $values['current'][$id]['_weight'], + ]; + if ($this->fieldDefinition->getType() == 'file') { + if (isset($values['current'][$id]['meta']['description'])) { + $item_values['description'] = $values['current'][$id]['meta']['description']; } - if ($this->fieldDefinition->getType() == 'image') { - if (isset($values['current'][$id]['meta']['alt'])) { - $item_values['alt'] = $values['current'][$id]['meta']['alt']; - } - if (isset($values['current'][$id]['meta']['title'])) { - $item_values['title'] = $values['current'][$id]['meta']['title']; - } + if ($this->fieldDefinition->getSetting('display_field') && isset($values['current'][$id]['meta']['display_field'])) { + $item_values['display'] = $values['current'][$id]['meta']['display_field']; + } + } + if ($this->fieldDefinition->getType() == 'image') { + if (isset($values['current'][$id]['meta']['alt'])) { + $item_values['alt'] = $values['current'][$id]['meta']['alt']; + } + if (isset($values['current'][$id]['meta']['title'])) { + $item_values['title'] = $values['current'][$id]['meta']['title']; } - $return[] = $item_values; } + $return[] = $item_values; } - // Return ourself as the structure doesn't match the default. usort($return, function ($a, $b) { return SortArray::sortByKeyInt($a, $b, '_weight'); });