class TestSource

Test source plugin implementation.

Plugin annotation


@SourcePlugin(
  id = "test_source",
  label = @Translation("Test source"),
  description = @Translation("Simple source for testing purposes.")
)

Hierarchy

Expanded class hierarchy of TestSource

File

tmgmt_test/src/Plugin/tmgmt/Source/TestSource.php, line 20

Namespace

Drupal\tmgmt_test\Plugin\tmgmt\Source
View source
class TestSource extends SourcePluginBase {

  /**
   * {@inheritdoc}
   */
  public function getUrl(JobItemInterface $job_item) {

    // Provide logic which allows to test for source which is either accessible
    // or not accessible to anonymous user. This is may then be used to test if
    // the source url is attached to the job comment sent to a translation
    // service.
    if ($job_item
      ->getItemType() == 'test_not_accessible') {
      return Url::fromRoute('system.admin');
    }
    else {
      return Url::fromRoute('<front>');
    }
  }

  /**
   * {@inheritdoc}
   */
  public function getLabel(JobItemInterface $job_item) {
    $label = $this->pluginId . ':' . $job_item
      ->getItemType() . ':' . $job_item
      ->getItemId();

    // We need to test if job and job item labels get properly truncated,
    // therefore in case the job item type is "test_with_long_label" we append
    // further text to the existing label.
    if ($job_item
      ->getItemType() == 'test_with_long_label') {
      $label .= 'Some very long and boring label that definitely exceeds hundred and twenty eight characters which is the maximum character count for the job item label.';
    }
    return $label;
  }

  /**
   * {@inheritdoc}
   */
  public function getData(JobItemInterface $job_item) {

    // Allow tests to set custom source data.
    $source = \Drupal::state()
      ->get('tmgmt.test_source_data', array(
      'dummy' => array(
        'deep_nesting' => array(
          '#text' => 'Text for job item with type @type and id @id.',
          '#label' => 'Label for job item with type @type and id @id.',
          '#translate' => TRUE,
        ),
      ),
    ));
    $variables = array(
      '@type' => $job_item
        ->getItemType(),
      '@id' => $job_item
        ->getItemId(),
    );
    $this
      ->replacePlaceholders($source, $variables);
    return $source;
  }

  /**
   * Will replace placeholders in the #text offsets.
   *
   * @param array $data
   *   Data structures where to replace placeholders.
   * @param $variables
   *   Key value pairs.
   */
  protected function replacePlaceholders(&$data, $variables) {
    foreach (Element::children($data) as $key) {
      if (isset($data[$key]['#text'])) {
        $data[$key]['#text'] = (string) new FormattableMarkup($data[$key]['#text'], $variables);
      }
      else {
        $this
          ->replacePlaceholders($data[$key], $variables);
      }
    }
  }

  /**
   * {@inheritdoc}
   */
  public function saveTranslation(JobItemInterface $job_item, $target_langcode) {

    // Set a variable that can be checked later for a given job item.
    $data = $job_item
      ->getData();
    if (isset($data['dummy']['deep_nesting']['#translation']['#text']) && $data['dummy']['deep_nesting']['#translation']['#text'] == 'Invalid translation that will cause an exception') {
      throw new \Exception('The translation cannot be saved.');
    }
    \Drupal::state()
      ->set('tmgmt_test_saved_translation_' . $job_item
      ->getItemType() . '_' . $job_item
      ->getItemId(), $job_item
      ->getData());
    return TRUE;
  }

  /**
   * {@inheritdoc}
   */
  public function getExistingLangCodes(JobItemInterface $job_item) {
    return array_keys(\Drupal::languageManager()
      ->getLanguages());
  }

  /**
   * {@inheritdoc}
   */
  public function getSourceLangCode(JobItemInterface $job_item) {
    $source_languages = \Drupal::state()
      ->get('tmgmt.test_source_languages', array());
    if (isset($source_languages[$job_item
      ->id()])) {
      return $source_languages[$job_item
        ->id()];
    }
    return 'en';
  }

}

Members

Namesort descending Modifiers Type Description Overrides
SourcePluginBase::getItemTypeLabel public function Returns the label of a source item type. Overrides SourcePluginInterface::getItemTypeLabel 2
SourcePluginBase::getItemTypes public function Returns an array of translatable source item types. Overrides SourcePluginInterface::getItemTypes 3
SourcePluginBase::getType public function Returns the type of a job item. Overrides SourcePluginInterface::getType 3
TestSource::getData public function Returns an array with the data structured for translation. Overrides SourcePluginInterface::getData 1
TestSource::getExistingLangCodes public function Gets existing translation language codes of the job item source. Overrides SourcePluginBase::getExistingLangCodes
TestSource::getLabel public function Return a title for this job item. Overrides SourcePluginBase::getLabel
TestSource::getSourceLangCode public function Gets language code of the job item source. Overrides SourcePluginInterface::getSourceLangCode
TestSource::getUrl public function Returns the Uri for this job item. Overrides SourcePluginBase::getUrl
TestSource::replacePlaceholders protected function Will replace placeholders in the #text offsets.
TestSource::saveTranslation public function Saves a translation. Overrides SourcePluginInterface::saveTranslation