/** * Generates a render array of the applicable bundles for the flag.. * * @param \Drupal\flag\FlagInterface $flag * The flag entity. * * @return array * A render array of the applicable bundles for the flag.. */ protected function getBundles(FlagInterface $flag) { $bundles = $flag->getBundles(); if (empty($bundles)) { return [ '#markup' => '<em>' . $this->t('All') . '</em>', '#allowed_tags' => ['em'], ]; } return [ '#markup' => implode(', ', $bundles), ]; }
/** * {@inheritdoc} */ public function unflag(FlagInterface $flag, EntityInterface $entity, AccountInterface $account = NULL) { $bundles = $flag->getBundles(); // Check the entity type corresponds to the flag type. if ($flag->getFlaggableEntityTypeId() != $entity->getEntityTypeId()) { throw new \LogicException('The flag does not apply to entities of this type.'); } // Check the bundle is allowed by the flag. if (!empty($bundles) && !in_array($entity->bundle(), $bundles)) { throw new \LogicException('The flag does not apply to the bundle of the entity.'); } $flagging = $this->getFlagging($flag, $entity, $account); // Check whether there is an existing flagging for the combination of flag, // entity, and user. if (!$flagging) { throw new \LogicException('The entity is not flagged by the user.'); } $this->eventDispatcher->dispatch(FlagEvents::ENTITY_UNFLAGGED, new FlaggingEvent($flag, $entity)); $flagging->delete(); }