public function ContextUIController::addReaction in Context 8
Same name and namespace in other branches
- 8.4 modules/context_ui/src/Controller/ContextUIController.php \Drupal\context_ui\Controller\ContextUIController::addReaction()
- 8.0 modules/context_ui/src/Controller/ContextUIController.php \Drupal\context_ui\Controller\ContextUIController::addReaction()
Add the specified reaction to the context.
Parameters
Request $request: The current request.
ContextInterface $context: The context to add the reaction to.
$reaction_id: The ID of the reaction to add.
Return value
1 string reference to 'ContextUIController::addReaction'
- context_ui.routing.yml in modules/context_ui/ context_ui.routing.yml 
- modules/context_ui/context_ui.routing.yml
File
- modules/context_ui/ src/ Controller/ ContextUIController.php, line 277 
Class
Namespace
Drupal\context_ui\ControllerCode
public function addReaction(Request $request, ContextInterface $context, $reaction_id) {
  if ($context
    ->hasReaction($reaction_id)) {
    throw new HttpException(403, 'The specified reaction had already been added to the context.');
  }
  // Create an instance of the reaction and add it to the context.
  try {
    $reaction = $this->contextReactionManager
      ->createInstance($reaction_id);
  } catch (PluginException $e) {
    throw new HttpException(400, $e
      ->getMessage());
  }
  // If one of the condition is "Current theme", prevent adding Theme reaction.
  // Else this will cause an infinite loop when checking for active contexts.
  if ($reaction_id == 'theme') {
    $conditions = $context
      ->getConditions();
    foreach ($conditions as $condition) {
      if ($condition
        ->getPluginId() == 'current_theme') {
        if ($request
          ->isXmlHttpRequest()) {
          $response = new AjaxResponse();
          $response
            ->addCommand(new CloseModalDialogCommand());
          $response
            ->addCommand(new OpenModalDialogCommand($this
            ->t("Theme reaction"), $this
            ->t("You can not place Theme reaction if Current theme condition is set."), [
            'width' => '700',
          ]));
          return $response;
        }
      }
    }
  }
  $context
    ->addReaction($reaction
    ->getConfiguration());
  $context
    ->save();
  // If the request is an AJAX request then return an AJAX response with
  // commands to replace the content on the page.
  if ($request
    ->isXmlHttpRequest()) {
    $response = new AjaxResponse();
    $contextForm = $this->contextManager
      ->getForm($context, 'edit');
    $response
      ->addCommand(new CloseModalDialogCommand());
    $response
      ->addCommand(new ReplaceCommand('#context-reactions', $contextForm['reactions']));
    return $response;
  }
  $url = $context
    ->urlInfo('edit-form');
  return $this
    ->redirect($url
    ->getRouteName(), $url
    ->getRouteParameters());
}