basket_imex-10.x-dev/modules/basket_excel/basket_excel.module

modules/basket_excel/basket_excel.module
<?php

/**
 * @file
 * Module for organization of import and export of goods by *.xls.
 */

use Drupal\basket_excel\generateFile;
use Drupal\basket_excel\Plugin\IMEX\BasketExcel;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\Element;
use Drupal\Core\Render\Markup;
use Drupal\Core\Url;

/**
 * Implements hook_basket_translate_context_alter().
 */
function basket_excel_basket_translate_context_alter(&$context) {
  $context[] = 'basket_excel';
}

/**
 * Implements hook_form_alter().
 */
function basket_excel_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  switch ($form_id) {
    case'basket_imex_form':

      /** @var \Drupal\basket\Basket $basket */
      $basket = \Drupal::getContainer()->get('Basket');

      $download = \Drupal::request()->query->get('download');
      $system = \Drupal::request()->query->get('system');
      $systemBase = str_replace(':', '_', $system);
      $imexEntity = NULL;

      if (str_contains($system, 'imex_multis:')) {
        $imexEntity = \Drupal::entityTypeManager()->getStorage('imex_multi_entity')
          ->load(str_replace('imex_multis:', '', $system));
        if (!empty($imexEntity)) {
          $system = $imexEntity->get('system');
        }
      }

      if (!empty($download) && $system == 'excel') {
        if (!empty(\Drupal::request()->query->get('run'))) {
          (new generateFile($systemBase))->run($download, $imexEntity);
          exit;
        }
        foreach (Element::children($form) as $formKey) {
          $form[$formKey]['#access'] = FALSE;
        }
        $downloadUrl = Url::fromRoute('basket.admin.pages', [
          'page_type' => 'stock-imex',
        ], [
          'query' => [
            'system' => Drupal::request()->query->get('system'),
            'download' => $download,
            'run' => 1,
          ],
        ])->toString();
        $query = \Drupal::request()->query->all();
        unset($query['download']);
        $closeUrl = Url::fromRoute('<current>', [], ['query' => $query])->toString();
        $form['export'] = [
          '#prefix' => '<div id="export_finish">',
          '#suffix' => '</div>',
          [
            '#prefix' => '<div class="b_content">',
            '#suffix' => '</div>',
            [
              '#type' => 'inline_template',
              '#template' => '<b>{{ title }}</b><br/>{{ text }}',
              '#context' => [
                'title' => $basket->translate('basket_excel')->t('Export completed successfully.'),
                'text' => $basket->translate('basket_excel')->t('If the automatic download has not started - click on the @link@.', [
                  '@link@' => Markup::create(
                    '<a href="' . $downloadUrl . '">' . $basket->translate('basket_excel')->t('link') . '</a>'
                  ),
                ]),
              ],
            ], [
              '#type' => 'inline_template',
              '#template' => '<br/><a href="{{ url }}" class="download">{{text}}</a>',
              '#context' => [
                'text' => $basket->translate('basket_excel')->t('Close page'),
                'url' => $closeUrl,
              ],
            ], [
              '#markup' => Markup::create('<script type="text/javascript">window.location.href="' . $downloadUrl . '";</script>'),
            ],
          ],
        ];
      }
      elseif (!empty($system) && $system == 'excel') {
        if (!empty($form['imex'])) {
          $form['imex_description'] = [
            '#type' => 'details',
            '#title' => \Drupal::service('Basket')->translate('basket_excel')->t('Additional Information'),
            '#weight' => 100,
            [
              '#theme' => 'basket_excel_description',
              '#info' => [
                'rows' => (new generateFile($systemBase))->getColumnInfos(),
              ],
            ],
          ];
        }
      }
      break;
  }
}

/**
 * Implements hook_theme().
 */
function basket_excel_theme() {
  return [
    'basket_excel_description' => [
      'variables' => [
        'info' => NULL,
      ],
    ],
  ];
}

/**
 * Implements hook_element_info_alter().
 */
function basket_excel_element_info_alter(array &$info) {
  if (!empty($info['managed_file'])) {
    $info['managed_file']['#process'][] = [
      BasketExcel::class,
      'managedFileProcess',
    ];
  }
}

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

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