commerce_smart_importer-8.x-1.0-alpha1/src/Controller/OverrideController.php

src/Controller/OverrideController.php
<?php

namespace Drupal\commerce_smart_importer\Controller;

use Drupal\commerce_smart_importer\ImportingParameters;
use Drupal\commerce_smart_importer\Plugin\CommerceSmartImporterService;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Session\AccountProxy;
use Drupal\commerce_smart_importer\CommerceSmartImporterConstants;

/**
 * Controller used to override values in import.
 */
class OverrideController extends ControllerBase {

  /**
   * Current user.
   *
   * @var \Drupal\Core\Session\AccountProxy
   */
  protected $currentUser;

  /**
   * Smart importer general service.
   *
   * @var \Drupal\commerce_smart_importer\Plugin\CommerceSmartImporterService
   */
  protected $importerService;

  /**
   * OverrideController constructor.
   */
  public function __construct(AccountProxy $user, CommerceSmartImporterService $service) {
    $this->currentUser = $user;
    $this->importerService = $service;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static (
      $container->get('current_user'),
      $container->get('commerce_smart_importer.service')
    );
  }

  /**
   * Main function for overriding.
   */
  public function overrideValue(Request $request) {

    $import = $request->request->get('import_name');
    $row = $request->request->get('row');
    $index = $request->request->get('index');
    $value = $request->request->get('value');
    $entity_type = $request->request->get('field_type');
    $dir = $this->importFolder($import);

    if ($dir === FALSE) {
      return new Response('No import under this name');
    }

    $field_definitions = $this->importerService->getFieldDefinition();
    $field_definition = $field_definitions[$entity_type][$index];
    $values = explode('|', $value);
    $parameters = new ImportingParameters();
    $parameters->incorrectValues = FALSE;
    $parameters->defaultValues = FALSE;
    $parameters->exceedsCardinality = FALSE;
    $parameters->duplicateValues = FALSE;
    $field_log = $this->importerService->formatMultipleFieldValues($values, $field_definition, $parameters, []);
    $this->importerService->duplicateValuesPass($field_log);
    $this->importerService->cardinalityPass($field_log, $field_definition);
    $this->importerService->useDefaultValuePass($field_log, $field_definition);
    $this->importerService->requiredPass($field_log, $field_definition);
    $accepted = $parameters->matchOneFieldLog($field_log);
    if ($accepted) {
      $this->putOverrideValue($row, $value, $field_definition, $entity_type, $dir);
      return new Response('Successfully overridden value');
    }
    else {
      return new Response('Override was unsuccessful');
    }

  }

  /**
   * Finds import folder.
   */
  private function importFolder($import_name) {
    $dir = scandir(CommerceSmartImporterConstants::TEMP_DIR);
    foreach ($dir as $imports) {
      if (is_dir(CommerceSmartImporterConstants::TEMP_DIR . '/' . $imports)) {
        if ($imports == $import_name) {
          return CommerceSmartImporterConstants::TEMP_DIR . '/' . $imports;
        }
      }
    }
    return FALSE;
  }

  /**
   * Puts override value in save folder.
   */
  private function putOverrideValue($row, $value, $field_definition, $type, $save_folder) {
    if (!is_file($save_folder . '/override_values.json')) {
      touch($save_folder . '/override_values.json');
      $json = [];
    }
    else {
      $json = json_decode(file_get_contents($save_folder . '/override_values.json'), TRUE);
    }
    $json[$row][$type][$field_definition['machine_names']] = $value;
    file_put_contents($save_folder . '/override_values.json', json_encode($json, JSON_UNESCAPED_UNICODE));
  }

}

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

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