You are here

function flag_flag_insert in Flag 8.4

Implements hook_ENTITY_TYPE_insert().

File

./flag.module, line 597
The Flag module.

Code

function flag_flag_insert(FlagInterface $flag) {
  if ($flag
    ->isSyncing()) {

    // Do not create actions when config is progress of synchronization.
    return;
  }

  // The action plugin cache needs to detect the new flag.

  /** @var \Drupal\Core\Action\ActionManager $action_manager */
  $action_manager = \Drupal::service('plugin.manager.action');
  $action_manager
    ->clearCachedDefinitions();

  // Add the flag/unflag actions for this flag and entity combination.
  $flag_id = 'flag_action.' . $flag
    ->id() . '_flag';
  if (!Action::load($flag_id)) {
    $action = Action::create([
      'id' => $flag_id,
      'type' => $flag
        ->getFlaggableEntityTypeId(),
      'label' => $flag
        ->getShortText('flag'),
      'plugin' => 'flag_action:' . $flag
        ->id() . '_flag',
      'configuration' => [
        'flag_id' => $flag
          ->id(),
        'flag_action' => 'flag',
      ],
    ]);
    $action
      ->trustData()
      ->save();
  }
  $unflag_id = 'flag_action.' . $flag
    ->id() . '_unflag';
  if (!Action::load($unflag_id)) {
    $action = Action::create([
      'id' => $unflag_id,
      'type' => $flag
        ->getFlaggableEntityTypeId(),
      'label' => $flag
        ->getShortText('unflag'),
      'plugin' => 'flag_action:' . $flag
        ->id() . '_unflag',
      'configuration' => [
        'flag_id' => $flag
          ->id(),
        'flag_action' => 'unflag',
      ],
    ]);
    $action
      ->trustData()
      ->save();
  }
}