local_translation-8.x-1.x-dev/modules/local_translation_content/src/Controller/LocalTranslationContentLanguageCtrl.php

modules/local_translation_content/src/Controller/LocalTranslationContentLanguageCtrl.php
<?php

namespace Drupal\local_translation_content\Controller;

use Drupal\Core\Language\Language;
use Drupal\node\NodeInterface;

/**
 * Class LocalTranslationContentLanguageCtrl.
 *
 * @package Drupal\local_translation_content\Controller
 */
class LocalTranslationContentLanguageCtrl {

  /**
   * List of langcodes that shouldn't be filtered.
   *
   * @var array
   */
  protected static $ignoredLangcodes = [
    Language::LANGCODE_NOT_APPLICABLE,
    Language::LANGCODE_NOT_SPECIFIED,
  ];

  /**
   * After build callback for the langcode element on node forms.
   *
   * @param array $element
   *   Element render-able array.
   *
   * @return array
   *   Updated element.
   */
  public static function nodeFormLangcodeAfterBuild(array $element) {
    // Prevent filtering for "non-restricted" users.
    if (!static::needsFiltering()) {
      return $element;
    }

    static::filter($element[0]['value']['#options']);
    return $element;
  }

  /**
   * Check for user's permissions that might allow to use any languages.
   *
   * @return bool
   *   TRUE - if filtering is needed, FALSE otherwise.
   */
  protected static function needsFiltering() {
    if (\Drupal::currentUser()->hasPermission('administer nodes')) {
      return FALSE;
    }
    $node = \Drupal::routeMatch()->getParameter('node');
    if ($node instanceof NodeInterface) {
      $permission = "create {$node->bundle()} content";
      return !\Drupal::currentUser()->hasPermission($permission);
    }
    return TRUE;
  }

  /**
   * Filter languages list.
   *
   * @param array &$options
   *   Dropdown options array.
   */
  protected static function filter(array &$options) {
    /** @var \Drupal\local_translation\Services\LocalTranslationUserSkills $skills */
    $skills = \Drupal::service('local_translation.user_skills');
    foreach ($options as $langcode => $label) {
      if (in_array($langcode, static::$ignoredLangcodes)) {
        continue;
      }
      if (!$skills->userHasSkill($langcode)) {
        unset($options[$langcode]);
      }
    }
  }

}

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

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