You are here

public function LingotekActionsManagementSubscriber::onConfigSave in Lingotek Translation 8.2

Same name and namespace in other branches
  1. 4.0.x src/Plugin/Action/Subscriber/LingotekActionsManagementSubscriber.php \Drupal\lingotek\Plugin\Action\Subscriber\LingotekActionsManagementSubscriber::onConfigSave()
  2. 3.0.x src/Plugin/Action/Subscriber/LingotekActionsManagementSubscriber.php \Drupal\lingotek\Plugin\Action\Subscriber\LingotekActionsManagementSubscriber::onConfigSave()
  3. 3.1.x src/Plugin/Action/Subscriber/LingotekActionsManagementSubscriber.php \Drupal\lingotek\Plugin\Action\Subscriber\LingotekActionsManagementSubscriber::onConfigSave()
  4. 3.2.x src/Plugin/Action/Subscriber/LingotekActionsManagementSubscriber.php \Drupal\lingotek\Plugin\Action\Subscriber\LingotekActionsManagementSubscriber::onConfigSave()
  5. 3.3.x src/Plugin/Action/Subscriber/LingotekActionsManagementSubscriber.php \Drupal\lingotek\Plugin\Action\Subscriber\LingotekActionsManagementSubscriber::onConfigSave()
  6. 3.4.x src/Plugin/Action/Subscriber/LingotekActionsManagementSubscriber.php \Drupal\lingotek\Plugin\Action\Subscriber\LingotekActionsManagementSubscriber::onConfigSave()
  7. 3.5.x src/Plugin/Action/Subscriber/LingotekActionsManagementSubscriber.php \Drupal\lingotek\Plugin\Action\Subscriber\LingotekActionsManagementSubscriber::onConfigSave()
  8. 3.6.x src/Plugin/Action/Subscriber/LingotekActionsManagementSubscriber.php \Drupal\lingotek\Plugin\Action\Subscriber\LingotekActionsManagementSubscriber::onConfigSave()
  9. 3.7.x src/Plugin/Action/Subscriber/LingotekActionsManagementSubscriber.php \Drupal\lingotek\Plugin\Action\Subscriber\LingotekActionsManagementSubscriber::onConfigSave()
  10. 3.8.x src/Plugin/Action/Subscriber/LingotekActionsManagementSubscriber.php \Drupal\lingotek\Plugin\Action\Subscriber\LingotekActionsManagementSubscriber::onConfigSave()

Creates and deletes the actions associated with the enabled entities.

Parameters

\Drupal\Core\Config\ConfigCrudEvent $event: The configuration event.

File

src/Plugin/Action/Subscriber/LingotekActionsManagementSubscriber.php, line 68

Class

LingotekActionsManagementSubscriber

Namespace

Drupal\lingotek\Plugin\Action\Subscriber

Code

public function onConfigSave(ConfigCrudEvent $event) {
  if (\Drupal::isConfigSyncing()) {
    return;
  }
  $actions = [
    'entity:lingotek_upload_action',
    'entity:lingotek_check_upload_action',
    'entity:lingotek_request_translations_action',
    'entity:lingotek_check_translations_action',
    'entity:lingotek_download_translations_action',
    'entity:lingotek_cancel_action',
    'entity:lingotek_delete_translations_action',
  ];
  $lang_actions = [
    'entity:lingotek_check_translation_action',
    'entity:lingotek_download_translation_action',
    'entity:lingotek_request_translation_action',
    'entity:lingotek_delete_translation_action',
    'entity:lingotek_cancel_translation_action',
  ];
  $config = $event
    ->getConfig();
  $configName = $config
    ->getName();
  if ($configName === 'lingotek.settings' && $event
    ->isChanged('translate.entity')) {
    $entity_types = $this->entityTypeManager
      ->getDefinitions();
    $enabled_entity_types = $this->lingotekConfiguration
      ->getEnabledEntityTypes();
    foreach ($entity_types as $entity_type_id => $entity_type) {
      foreach ($actions as $action) {
        $pluginId = $action . ':' . $entity_type_id;

        /** @var \Drupal\Component\Plugin\Definition\PluginDefinitionInterface $plugin */
        $plugin = $this->actionManager
          ->getDefinition($pluginId);
        $action_id = $entity_type_id . '_' . str_replace('entity:', '', $action);
        $existingAction = $this->entityTypeManager
          ->getStorage('action')
          ->load($action_id);
        if (isset($enabled_entity_types[$entity_type_id]) && !$existingAction) {
          Action::create([
            'id' => $action_id,
            'label' => $plugin['label'],
            'type' => $entity_type_id,
            'plugin' => $pluginId,
            'configuration' => [],
          ])
            ->save();
        }
        elseif (!isset($enabled_entity_types[$entity_type_id]) && $existingAction) {
          $existingAction
            ->delete();
        }
      }
      $languages = \Drupal::languageManager()
        ->getLanguages();
      foreach ($lang_actions as $action) {
        foreach ($languages as $langcode => $language) {
          $pluginId = $action . ':' . $entity_type_id;

          /** @var \Drupal\Component\Plugin\Definition\PluginDefinitionInterface $plugin */
          $plugin = $this->actionManager
            ->getDefinition($pluginId, FALSE);
          $action_id = $entity_type_id . '_' . $langcode . '_' . str_replace('entity:', '', $action);
          $existingAction = $this->entityTypeManager
            ->getStorage('action')
            ->load($action_id);
          if ($plugin && isset($enabled_entity_types[$entity_type_id]) && !$existingAction) {
            Action::create([
              'id' => $action_id,
              'label' => new FormattableMarkup($plugin['action_label'], [
                '@entity_label' => $entity_type
                  ->getSingularLabel(),
                '@language' => $language
                  ->getName(),
              ]),
              'type' => $entity_type_id,
              'plugin' => $pluginId,
              'configuration' => [
                'language' => $langcode,
              ],
            ])
              ->save();
          }
          elseif (!isset($enabled_entity_types[$entity_type_id]) && $existingAction) {
            $existingAction
              ->delete();
          }
        }
      }
    }
  }
  if (0 === strpos($configName, 'language.entity.')) {
    $langcode = $config
      ->get('id');
    $langname = $config
      ->get('label');
    $entity_types = $this->entityTypeManager
      ->getDefinitions();
    $enabled_entity_types = $this->lingotekConfiguration
      ->getEnabledEntityTypes();
    foreach ($entity_types as $entity_type_id => $entity_type) {
      foreach ($lang_actions as $action) {
        $pluginId = $action . ':' . $entity_type_id;

        /** @var \Drupal\Component\Plugin\Definition\PluginDefinitionInterface $plugin */
        $plugin = $this->actionManager
          ->getDefinition($pluginId, FALSE);
        $action_id = $entity_type_id . '_' . $langcode . '_' . str_replace('entity:', '', $action);
        $existingAction = $this->entityTypeManager
          ->getStorage('action')
          ->load($action_id);
        if ($plugin && isset($enabled_entity_types[$entity_type_id]) && !$existingAction) {
          Action::create([
            'id' => $action_id,
            'label' => new FormattableMarkup($plugin['action_label'], [
              '@entity_label' => $entity_type
                ->getSingularLabel(),
              '@language' => $langname,
            ]),
            'type' => $entity_type_id,
            'plugin' => $pluginId,
            'configuration' => [
              'language' => $langcode,
            ],
          ])
            ->save();
        }
        elseif (!isset($enabled_entity_types[$entity_type_id]) && $existingAction) {
          $existingAction
            ->delete();
        }
      }
    }
  }
}