You are here

class FieldEntryFormController in Flag 8.4

Provides a controller for the Field Entry link type.

Hierarchy

Expanded class hierarchy of FieldEntryFormController

File

src/Controller/FieldEntryFormController.php, line 16

Namespace

Drupal\flag\Controller
View source
class FieldEntryFormController extends ControllerBase {

  /**
   * The flag service.
   *
   * @var \Drupal\Flag\FlagServiceInterface
   */
  protected $flagService;

  /**
   * The session manager.
   *
   * @var \Drupal\Core\Session\SessionManagerInterface
   */
  protected $sessionManager;

  /**
   * Constructor.
   *
   * @param \Drupal\Core\Session\SessionManagerInterface $session_manager
   *   The session manager.
   * @param \Drupal\Flag\FlagServiceInterface $flag_service
   *   The flag service.
   */
  public function __construct(SessionManagerInterface $session_manager, FlagServiceInterface $flag_service) {
    $this->sessionManager = $session_manager;
    $this->flagService = $flag_service;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static($container
      ->get('session_manager'), $container
      ->get('flag'));
  }

  /**
   * Performs a flagging when called via a route.
   *
   * @param \Drupal\flag\FlagInterface $flag
   *   The flag entity.
   * @param int $entity_id
   *   The flaggable ID.
   *
   * @return array
   *   The processed form to create the flagging.
   *
   * @see \Drupal\flag\Plugin\ActionLink\AJAXactionLink
   */
  public function flag(FlagInterface $flag, $entity_id) {
    $flag_id = $flag
      ->id();

    // Set account and session ID to NULL to get the current user.
    $account = $session_id = NULL;
    $this->flagService
      ->populateFlaggerDefaults($account, $session_id);
    $flagging = $this
      ->entityTypeManager()
      ->getStorage('flagging')
      ->create([
      'flag_id' => $flag
        ->id(),
      'entity_type' => $flag
        ->getFlaggableEntityTypeId(),
      'entity_id' => $entity_id,
      'uid' => $account
        ->id(),
      'session_id' => $session_id,
    ]);
    return $this
      ->getForm($flagging, 'add');
  }

  /**
   * Return the flagging edit form.
   *
   * @param \Drupal\flag\FlagInterface $flag
   *   The flag entity.
   * @param mixed $entity_id
   *   The entity ID.
   *
   * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
   *   Thrown if the flagging could not be found.
   *
   * @return array
   *   The processed edit form for the given flagging.
   */
  public function edit(FlagInterface $flag, $entity_id) {
    $entity = $this->flagService
      ->getFlaggableById($flag, $entity_id);

    // If we couldn't find the flaggable, throw a 404.
    if (!$entity) {
      throw new NotFoundHttpException('The flagged entity could not be found.');
    }

    // Load the flagging from the flag and flaggable.
    $flagging = $this->flagService
      ->getFlagging($flag, $entity);

    // If we couldn't find the flagging, we can't edit. Throw a 404.
    if (!$flagging) {
      throw new NotFoundHttpException('The flagged entity could not be found.');
    }
    return $this
      ->getForm($flagging, 'edit');
  }

  /**
   * Performs an unflagging when called via a route.
   *
   * @param \Drupal\flag\FlagInterface $flag
   *   The flag entity.
   * @param int $entity_id
   *   The entity ID to unflag.
   *
   * @return array
   *   The processed delete form for the given flagging.
   *
   * @see \Drupal\flag\Plugin\ActionLink\AJAXactionLink
   *
   * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
   *   Thrown if the flagging could not be found.
   */
  public function unflag(FlagInterface $flag, $entity_id) {
    $entity = $this->flagService
      ->getFlaggableById($flag, $entity_id);

    // If we can't find the flaggable entity, throw a 404.
    if (!$entity) {
      throw new NotFoundHttpException('The flagging could not be found.');
    }

    // Load the flagging. If we can't find it, we can't unflag and throw a 404.
    $flagging = $this->flagService
      ->getFlagging($flag, $entity);
    if (!$flagging) {
      throw new NotFoundHttpException('The flagging could not be found.');
    }
    return $this
      ->getForm($flagging, 'delete');
  }

  /**
   * Title callback when creating a new flagging.
   *
   * @param \Drupal\flag\FlagInterface $flag
   *   The flag entity.
   * @param int $entity_id
   *   The entity ID to unflag.
   *
   * @return string
   *   The flag field entry form title.
   */
  public function flagTitle(FlagInterface $flag, $entity_id) {
    $link_type = $flag
      ->getLinkTypePlugin();
    return $link_type
      ->getFlagQuestion();
  }

  /**
   * Title callback when editing an existing flagging.
   *
   * @param \Drupal\flag\FlagInterface $flag
   *   The flag entity.
   * @param int $entity_id
   *   The entity ID to unflag.
   *
   * @return string
   *   The flag field entry form title.
   */
  public function editTitle(FlagInterface $flag, $entity_id) {
    $link_type = $flag
      ->getLinkTypePlugin();
    return $link_type
      ->getEditFlaggingTitle();
  }

  /**
   * Get the flag's field entry form.
   *
   * @param \Drupal\flag\FlaggingInterface $flagging
   *   The flagging from which to get the form.
   * @param string|null $operation
   *   (optional) The operation identifying the form variant to return.
   *   If no operation is specified then 'default' is used.
   *
   * @return array
   *   The processed form for the given flagging and operation.
   */
  protected function getForm(FlaggingInterface $flagging, $operation = 'default') {
    return $this
      ->entityFormBuilder()
      ->getForm($flagging, $operation);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ControllerBase::$configFactory protected property The configuration factory.
ControllerBase::$currentUser protected property The current user service. 1
ControllerBase::$entityFormBuilder protected property The entity form builder.
ControllerBase::$entityManager protected property The entity manager.
ControllerBase::$entityTypeManager protected property The entity type manager.
ControllerBase::$formBuilder protected property The form builder. 2
ControllerBase::$keyValue protected property The key-value storage. 1
ControllerBase::$languageManager protected property The language manager. 1
ControllerBase::$moduleHandler protected property The module handler. 2
ControllerBase::$stateService protected property The state service.
ControllerBase::cache protected function Returns the requested cache bin.
ControllerBase::config protected function Retrieves a configuration object.
ControllerBase::container private function Returns the service container.
ControllerBase::currentUser protected function Returns the current user. 1
ControllerBase::entityFormBuilder protected function Retrieves the entity form builder.
ControllerBase::entityManager Deprecated protected function Retrieves the entity manager service.
ControllerBase::entityTypeManager protected function Retrieves the entity type manager.
ControllerBase::formBuilder protected function Returns the form builder service. 2
ControllerBase::keyValue protected function Returns a key/value storage collection. 1
ControllerBase::languageManager protected function Returns the language manager service. 1
ControllerBase::moduleHandler protected function Returns the module handler. 2
ControllerBase::redirect protected function Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait::redirect
ControllerBase::state protected function Returns the state storage service.
FieldEntryFormController::$flagService protected property The flag service.
FieldEntryFormController::$sessionManager protected property The session manager.
FieldEntryFormController::create public static function Instantiates a new instance of this class. Overrides ControllerBase::create
FieldEntryFormController::edit public function Return the flagging edit form.
FieldEntryFormController::editTitle public function Title callback when editing an existing flagging.
FieldEntryFormController::flag public function Performs a flagging when called via a route.
FieldEntryFormController::flagTitle public function Title callback when creating a new flagging.
FieldEntryFormController::getForm protected function Get the flag's field entry form.
FieldEntryFormController::unflag public function Performs an unflagging when called via a route.
FieldEntryFormController::__construct public function Constructor.
LinkGeneratorTrait::$linkGenerator protected property The link generator. 1
LinkGeneratorTrait::getLinkGenerator Deprecated protected function Returns the link generator.
LinkGeneratorTrait::l Deprecated protected function Renders a link to a route given a route name and its parameters.
LinkGeneratorTrait::setLinkGenerator Deprecated public function Sets the link generator service.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
UrlGeneratorTrait::$urlGenerator protected property The url generator.
UrlGeneratorTrait::getUrlGenerator Deprecated protected function Returns the URL generator service.
UrlGeneratorTrait::setUrlGenerator Deprecated public function Sets the URL generator service.
UrlGeneratorTrait::url Deprecated protected function Generates a URL or path for a specific route based on the given parameters.