metis-3.0.x-dev/src/Form/MetisCodesCSVForm.php

src/Form/MetisCodesCSVForm.php
<?php

namespace Drupal\metis\Form;

use Drupal\Core\Form\FormStateInterface;

/**
 * Configure Metis settings for this site.
 */
class MetisCodesCSVForm extends MetisCodesForm {

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'metis_codes_csv';
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $form['file_csv'] = [
      '#type' => 'file',
      '#title' => t('CSV file with Metis codes'),
      '#description' => t('Please upload the <abbr title="Comma Separated Values">CSV</abbr> file with metis codes.'),
      '#upload_location' => 'private://metis',
      '#upload_validators' => [
        'file_validate_extensions' => ['csv'],
      ],
    ];

    $form = parent::buildForm($form, $form_state);
    unset($form['codes']);
    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function validateForm(array &$form, FormStateInterface $form_state) {
    // Attempt to save the uploaded file.
    $files = file_save_upload(
      'file_csv',
      [
        'file_validate_extensions' => ['csv'],
      ]
    );
    $file = array_pop($files);

    /** @var \Drupal\Core\File\FileSystemInterface $file_system */
    $file_system = \Drupal::service('file_system');
    $input = file_get_contents($file_system->realpath($file->getFileUri()));

    // Get rid of white spaces.
    $input = trim(str_replace(" ", "", $input));
    // Get rid of newline variations.
    $input = str_replace("\r\n", "\n", $input);
    // Split by line.
    $rows = explode("\n", $input);

    $codes = [];
    foreach ($rows as $row) {
      $items = explode(';', $row);

      // Prepare array for validation.
      $codes[] = [
        'public' => trim($items[0]),
        'private' => trim($items[1]),
        'server' => $form_state->getValue('server'),
      ];
    }

    // Add validated codes to $form_state.
    $form_state->setValue('validated', $this->codeValidation($codes));
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc