You are here

public function MediaGalleryImportForm::submitForm in Media Gallery 8

Form submission handler.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Overrides FormInterface::submitForm

File

modules/media_gallery_import/src/Form/MediaGalleryImportForm.php, line 84

Class

MediaGalleryImportForm
Defines a Media Gallery Import Form.

Namespace

Drupal\media_gallery_import\Form

Code

public function submitForm(array &$form, FormStateInterface $form_state) {
  $import_dir = 'public://media_gallery_export';
  if (!$this->fileSystemInterface
    ->prepareDirectory($import_dir)) {
    $this
      ->messenger()
      ->addMessage($this
      ->t('Directory media_gallery_export does not exists! Aborting.'));
    return;
  }
  $import_dir_path = $this->fileSystemInterface
    ->realpath($import_dir);
  $galleries_storage = $this->entityTypeManager
    ->getStorage('media_gallery');
  $galleries_csv = fopen($import_dir_path . '/galleries.csv', 'r');
  while (($galleries_data = fgetcsv($galleries_csv, 0, ';')) !== FALSE) {
    $gallery_id = $galleries_data[0];
    $gallery_title = $galleries_data[1];
    $gallery_desc = $galleries_data[2];

    // Create Gallery if doesn't exists.
    $gallery = $galleries_storage
      ->create([
      'title' => $gallery_title,
      'description' => $gallery_desc,
    ]);
    $gallery
      ->save();
    $gallery_dir = $import_dir . '/' . $gallery_id;
    $gallery_dir_path = $this->fileSystemInterface
      ->realpath($gallery_dir);
    $gallery_csv = fopen($gallery_dir_path . '/gallery.csv', 'r');
    $files_dir = 'public://' . date('Y') . '-' . date('m');
    if (!$this->fileSystemInterface
      ->prepareDirectory($files_dir, FileSystemInterface::CREATE_DIRECTORY)) {
      $this
        ->messenger()
        ->addMessage($this
        ->t('Can not create directory to import files! Aborting.'));
      return;
    }
    while (($gallery_data = fgetcsv($gallery_csv, 255, ';')) !== FALSE) {
      $filename = $gallery_data[0];
      $file_title = $gallery_data[1];
      $file_path = $gallery_dir . '/' . $filename;
      $file_new_path = $files_dir . '/' . $filename;
      copy($file_path, $file_new_path);

      // Create file entity.
      $file = File::create([
        'filename' => $filename,
        'uri' => $file_new_path,
        'status' => 1,
      ]);
      $file
        ->setPermanent();
      $file
        ->save();

      // Create media image entity.
      $image_media = Media::create([
        'bundle' => 'image',
        'field_media_image' => [
          'target_id' => $file
            ->id(),
          'alt' => $file_title,
        ],
      ]);
      $image_media
        ->save();

      // Attach media to gallery.
      $gallery->images[] = $image_media;
      $gallery
        ->save();
    }
    fclose($gallery_csv);
  }
  fclose($galleries_csv);
  $this
    ->messenger()
    ->addMessage($this
    ->t('Your galleries were imported!'));
}