Commit 16897efa authored by Nathaniel Burnett's avatar Nathaniel Burnett
Browse files

Issue #3118709 by Nathaniel: Support media input for photos image entity add form

parent 8666ce69
Loading
Loading
Loading
Loading
+16 −4
Changes for src/Form/PhotosAdminSettingsForm.php: 16 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -237,15 +237,27 @@ class PhotosAdminSettingsForm extends ConfigFormBase {
      if ($fieldType == 'entity_reference') {
        // Check if media field allows image.
        $fieldSettings = $fieldData->getSettings();
        if (isset($fieldSettings['handler_settings']['target_bundles'])
          && !empty($fieldSettings['handler_settings']['target_bundles'])
          && in_array('image', $fieldSettings['handler_settings']['target_bundles'])) {
          $fieldOptions[$key] = $this->t('Media: :fieldKey', [
        if ($fieldSettings['handler'] == 'default:media'
          && isset($fieldSettings['handler_settings']['target_bundles'])
          && !empty($fieldSettings['handler_settings']['target_bundles'])) {
          // Check all media bundle fields for image.
          foreach ($fieldSettings['handler_settings']['target_bundles'] as $mediaBundle) {
            $mediaFields = $this->entityFieldManager->getFieldDefinitions('media', $mediaBundle);
            foreach ($mediaFields as $mediaFieldKey => $mediaFieldData) {
              $fieldType = $mediaFieldData->getType();
              // Check all image fields in media bundle.
              if ($fieldType == 'image' && $mediaFieldKey != 'thumbnail') {
                $fieldOptions[$key . ':' . $mediaFieldKey . ':' . $mediaBundle] = $this->t('Media: :fieldKey::mediaFieldKey::mediaBundle', [
                  ':fieldKey' => $key,
                  ':mediaFieldKey' => $mediaFieldKey,
                  ':mediaBundle' => $mediaBundle,
                ]);
              }
            }
          }
        }
      }
    }
    if (!empty($fieldOptions)) {
      $form['upload']['multi_upload_default_field'] = [
        '#type' => 'select',
+18 −15
Changes for src/PhotosUpload.php: 18 added lines, 15 removed lines.
Original line number Diff line number Diff line
@@ -160,13 +160,14 @@ class PhotosUpload implements PhotosUploadInterface {
          'description' => isset($file->des) ? $file->des : '',
        ];
        // Check if photos_image has default field_image.
        // @todo allow field to be changed in advanced settings?
        $uploadField = \Drupal::config('photos.settings')->get('multi_upload_default_field');
        $uploadFieldParts = explode(':', $uploadField);
        $field = isset($uploadFieldParts[0]) ? $uploadFieldParts[0] : 'field_image';
        $allBundleFields = \Drupal::service('entity_field.manager')->getFieldDefinitions('photos_image', 'photos_image');
        if (isset($allBundleFields[$uploadField])) {
          $fieldType = $allBundleFields[$uploadField]->getType();
        if (isset($allBundleFields[$field])) {
          $fieldType = $allBundleFields[$field]->getType();
          if ($fieldType == 'image') {
            $newPhotosImageEntity[$uploadField] = [
            $newPhotosImageEntity[$field] = [
              'target_id' => $fid,
              'alt' => $title,
              'title' => $title,
@@ -177,20 +178,22 @@ class PhotosUpload implements PhotosUploadInterface {
          else {
            // Check media fields.
            if ($fieldType == 'entity_reference') {
              // Check if media field allows image.
              $fieldSettings = $allBundleFields[$uploadField]->getSettings();
              if (isset($fieldSettings['handler_settings']['target_bundles'])
                && !empty($fieldSettings['handler_settings']['target_bundles'])
                && in_array('image', $fieldSettings['handler_settings']['target_bundles'])) {
                $media = Media::create([
                  'bundle' => 'image',
              $mediaField = isset($uploadFieldParts[1]) ? $uploadFieldParts[1] : '';
              $mediaBundle = isset($uploadFieldParts[2]) ? $uploadFieldParts[2] : '';
              if ($mediaField && $mediaBundle) {
                // Create new media entity.
                $values = [
                  'bundle' => $mediaBundle,
                  'uid' => \Drupal::currentUser()->id(),
                  'field_media_image' => [
                ];
                $values[$mediaField] = [
                  'target_id' => $file->id(),
                  ],
                ]);
                ];
                $media = Media::create($values);
                // @todo media name?
                $media->setName('Photos Image ' . $file->id())->setPublished(TRUE)->save();
                $newPhotosImageEntity[$uploadField] = [
                // Set photos_image media reference field.
                $newPhotosImageEntity[$field] = [
                  'target_id' => $media->id(),
                ];
              }