Interim commit.
[yaffs-website] / web / modules / contrib / entity_browser / src / Controllers / EntityBrowserFormController.php
1 <?php
2
3 namespace Drupal\entity_browser\Controllers;
4
5 use Drupal\Component\Utility\Xss;
6 use Drupal\Core\Controller\ControllerResolverInterface;
7 use Drupal\Core\Controller\HtmlFormController;
8 use Drupal\Core\DependencyInjection\ClassResolverInterface;
9 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
10 use Drupal\Core\Entity\EntityTypeManagerInterface;
11 use Drupal\Core\Form\FormBuilderInterface;
12 use Drupal\Core\Routing\RouteMatchInterface;
13 use Symfony\Component\DependencyInjection\ContainerInterface;
14 use Symfony\Component\HttpFoundation\Request;
15
16 /**
17  * Standalone entity browser page.
18  */
19 class EntityBrowserFormController extends HtmlFormController implements ContainerInjectionInterface {
20
21   /**
22    * Current route match service.
23    *
24    * @var \Drupal\Core\Routing\RouteMatchInterface
25    */
26   protected $currentRouteMatch;
27
28   /**
29    * The browser storage.
30    *
31    * @var \Drupal\Core\Entity\EntityStorageInterface
32    */
33   protected $browserStorage;
34
35   /**
36    * Current request.
37    *
38    * @var \Symfony\Component\HttpFoundation\Request
39    */
40   protected $request;
41
42   /**
43    * Constructs Entity browser form controller.
44    *
45    * @param \Drupal\Core\Controller\ControllerResolverInterface $controller_resolver
46    *   The controller resolver.
47    * @param \Drupal\Core\Form\FormBuilderInterface $form_builder
48    *   The form builder.
49    * @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver
50    *   The class resolver.
51    * @param RouteMatchInterface $route_match
52    *   Current route match service.
53    * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
54    *   Entity type manager service.
55    * @param \Symfony\Component\HttpFoundation\Request $request
56    *   Current request.
57    */
58   public function __construct(ControllerResolverInterface $controller_resolver, FormBuilderInterface $form_builder, ClassResolverInterface $class_resolver, RouteMatchInterface $route_match, EntityTypeManagerInterface $entity_type_manager, Request $request) {
59     parent::__construct($controller_resolver, $form_builder, $class_resolver);
60     $this->currentRouteMatch = $route_match;
61     $this->browserStorage = $entity_type_manager->getStorage('entity_browser');
62     $this->request = $request;
63     $this->formBuilder = $form_builder;
64   }
65
66   /**
67    * {@inheritdoc}
68    */
69   public static function create(ContainerInterface $container) {
70     return new static(
71       $container->get('controller_resolver'),
72       $container->get('form_builder'),
73       $container->get('class_resolver'),
74       $container->get('current_route_match'),
75       $container->get('entity.manager'),
76       $container->get('request_stack')->getCurrentRequest()
77     );
78   }
79
80   /**
81    * {@inheritdoc}
82    */
83   protected function getFormObject(RouteMatchInterface $route_match, $form_arg) {
84     $browser = $this->loadBrowser();
85     if ($original_path = $this->request->get('original_path')) {
86       $browser->addAdditionalWidgetParameters(['path_parts' => explode('/', $original_path)]);
87     }
88
89     return $browser->getFormObject();
90   }
91
92   /**
93    * Standalone entity browser title callback.
94    */
95   public function title() {
96     $browser = $this->loadBrowser();
97     return Xss::filter($browser->label());
98   }
99
100   /**
101    * Loads entity browser object for this page.
102    *
103    * @return \Drupal\entity_browser\EntityBrowserInterface
104    *   Loads the entity browser object
105    */
106   protected function loadBrowser() {
107     /** @var $route \Symfony\Component\Routing\Route */
108     $route = $this->currentRouteMatch->getRouteObject();
109     /** @var $browser \Drupal\entity_browser\EntityBrowserInterface */
110     return $this->browserStorage->load($route->getDefault('entity_browser_id'));
111   }
112
113 }