tmgmt-8.x-1.x-dev/translators/tmgmt_file/tmgmt_file.module

translators/tmgmt_file/tmgmt_file.module
<?php

use Drupal\Core\Form\FormStateInterface;
use Drupal\file\Entity\File;
use Drupal\tmgmt\Entity\Job;
use Drupal\tmgmt\JobInterface;

/**
 * @file
 * Module file of the translation management test module.
 */

/**
 * Implements hook_theme().
 */
function tmgmt_file_theme() {
  return array(
    'tmgmt_file_html_template' => array(
      'path' => \Drupal::service('extension.list.module')->getPath('tmgmt_file') . '/templates',
      'template' => 'tmgmt_file_html_template',
      'variables' => array('tjid' => NULL, 'source_language' => NULL, 'target_language' => NULL, 'items' => NULL),
    ),
  );
}

/**
 * Import form submit callback.
 */
function tmgmt_file_import_form_submit(array $form, FormStateInterface $form_state) {
  // Ensure we have the file uploaded.
  $job = $form_state->getFormObject()->getEntity();
  $supported_formats = array_keys(Drupal::service('plugin.manager.tmgmt_file.format')->getDefinitions());
  if ($file = file_save_upload('file', ['FileExtension' => ['extensions' => implode(' ', $supported_formats)]], FALSE, 0)) {
    $extension = pathinfo($file->getFileUri(), PATHINFO_EXTENSION);
    $plugin = \Drupal::service('plugin.manager.tmgmt_file.format')->createInstance(strtolower($extension));
    if ($plugin) {
      // Validate the file on job.
      $validated_job = $plugin->validateImport($file->getFileUri(), $job);
      if (!$validated_job) {
        $job->addMessage('Failed to validate file, import aborted.', array(), 'error');
      }
      elseif ($validated_job->id() != $job->id()) {
        $job->addMessage('The imported file job id @file_id does not match the job id @job_id.', array(
          '@file_id' => $validated_job->id(),
          '@job_id' => $job->id(),
        ), 'error');
      }
      else {
        try {
          // Validation successful, start import.
          $job->addTranslatedData($plugin->import($file->getFileUri()));
          $job->addMessage('Successfully imported file.');
        } catch (Exception $e) {
          $job->addMessage('File import failed with the following message: @message', array('@message' => $e->getMessage()), 'error');
        }
      }
    }
  }
  tmgmt_write_request_messages($job);
}

/**
 * Implements hook_tmgmt_job_delete().
 */
function tmgmt_file_tmgmt_job_delete(JobInterface $job) {
  // Ignore jobs that don't have a file translator.
  if (!$job->hasTranslator() || $job->getTranslator()->getPluginId() != 'file') {
    return;
  }

  // Check if there are any files that need to be deleted.
  // @todo There doesn't seem to be an API function for this...
  $args = array(
    ':module' => 'tmgmt_file',
    ':type' => 'tmgmt_job',
    ':id' => $job->id(),
  );
  $result = \Drupal::database()->query('SELECT fid FROM {file_usage} WHERE module = :module and type = :type and id = :id', $args);
  $fids = $result->fetchCol();
  if (!empty($fids)) {
    // Remove file usage record.
    /** @var \Drupal\file\FileUsage\FileUsageInterface $file_usage */
    $file_usage = \Drupal::service('file.usage');
    foreach (File::loadMultiple($fids) as $file) {
      $file_usage->delete($file, 'tmgmt_file', 'tmgmt_job', $job->id());
      // If this was the last usage, FileUsageBase marks the file as temporary
      // for delayed deletion. Because we know it is not needed, delete the file
      // immediately.
      $usage = $file_usage->listUsage($file);
      if (empty($usage)) {
        $file->delete();
      }
    }
  }
}

/**
 * Implements hook_file_download().
 */
function tmgmt_file_file_download($uri) {
  // Get the file record based on the URI. If not in the database just return.
  $fids = \Drupal::entityQuery('file')
    ->accessCheck(TRUE)
    ->condition('uri', $uri)
    ->execute();
  if ($fids) {
    $files = \Drupal\file\Entity\File::loadMultiple($fids);
    foreach ($files as $item) {
      // Since some database servers sometimes use a case-insensitive comparison
      // by default, double check that the filename is an exact match.
      if ($item->getFileUri() === $uri) {
        $file = $item;
        break;
      }
    }
  }
  if (!isset($file)) {
    return;
  }

  // Check if this file belongs to a job.
  $usage_list = \Drupal::service('file.usage')->listUsage($file);
  if (!isset($usage_list['tmgmt_file']['tmgmt_job'])) {
    return;
  }

  foreach (Job::loadMultiple(array_keys($usage_list['tmgmt_file']['tmgmt_job'])) as $job) {
    if ($job->access('view')) {
      // Access is granted.
      $headers = file_get_content_headers($file);
      return $headers;
    }
  }

  // Returning nothing means access denied unless another module specifically
  // grants access.
}

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

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