Updated all the contrib modules to their latest versions.
[yaffs-website] / web / modules / contrib / entity_browser / src / Form / EntityBrowserForm.php
index 340e425fd3cdb896f4d4f266aba1ac78ed23e440..bcecac1be0a2e37a12c6c29ead40d172d8cbf6c9 100644 (file)
@@ -11,6 +11,7 @@ use Drupal\entity_browser\DisplayAjaxInterface;
 use Drupal\entity_browser\EntityBrowserFormInterface;
 use Drupal\entity_browser\EntityBrowserInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
+use Drupal\Core\Render\RendererInterface;
 
 /**
  * The entity browser form.
@@ -38,6 +39,13 @@ class EntityBrowserForm extends FormBase implements EntityBrowserFormInterface {
    */
   protected $selectionStorage;
 
+  /**
+   * The renderer service.
+   *
+   * @var \Drupal\Core\Render\RendererInterface
+   */
+  protected $renderer;
+
   /**
    * Constructs a EntityBrowserForm object.
    *
@@ -45,10 +53,13 @@ class EntityBrowserForm extends FormBase implements EntityBrowserFormInterface {
    *   The UUID generator service.
    * @param \Drupal\Core\KeyValueStore\KeyValueStoreExpirableInterface $selection_storage
    *   Selection storage.
+   * @param \Drupal\Core\Render\RendererInterface $renderer
+   *   The renderer service.
    */
-  public function __construct(UuidInterface $uuid_generator, KeyValueStoreExpirableInterface $selection_storage) {
+  public function __construct(UuidInterface $uuid_generator, KeyValueStoreExpirableInterface $selection_storage, RendererInterface $renderer) {
     $this->uuidGenerator = $uuid_generator;
     $this->selectionStorage = $selection_storage;
+    $this->renderer = $renderer;
   }
 
   /**
@@ -57,7 +68,8 @@ class EntityBrowserForm extends FormBase implements EntityBrowserFormInterface {
   public static function create(ContainerInterface $container) {
     return new static(
       $container->get('uuid'),
-      $container->get('entity_browser.selection_storage')
+      $container->get('entity_browser.selection_storage'),
+      $container->get('renderer')
     );
   }
 
@@ -75,6 +87,13 @@ class EntityBrowserForm extends FormBase implements EntityBrowserFormInterface {
     $this->entityBrowser = $entity_browser;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getEntityBrowser() {
+    return $this->entityBrowser;
+  }
+
   /**
    * Initializes form state.
    *
@@ -124,16 +143,33 @@ class EntityBrowserForm extends FormBase implements EntityBrowserFormInterface {
       'widget' => 'widget',
       'selection_display' => 'selection_display',
     ];
+
+    if (!($current_widget_id = $this->getCurrentWidget($form_state))) {
+      drupal_set_message($this->t('No widgets are available.'), 'warning');
+      return $form;
+    }
+
     $this->entityBrowser
       ->getWidgetSelector()
-      ->setDefaultWidget($this->getCurrentWidget($form_state));
+      ->setDefaultWidget($current_widget_id);
     $form[$form['#browser_parts']['widget_selector']] = $this->entityBrowser
       ->getWidgetSelector()
       ->getForm($form, $form_state);
-    $form[$form['#browser_parts']['widget']] = $this->entityBrowser
-      ->getWidgets()
-      ->get($this->getCurrentWidget($form_state))
-      ->getForm($form, $form_state, $this->entityBrowser->getAdditionalWidgetParameters());
+
+    $widget = $this->entityBrowser->getWidget($current_widget_id);
+    if ($widget->access()->isAllowed()) {
+      $form[$form['#browser_parts']['widget']] = $widget->getForm($form, $form_state, $this->entityBrowser->getAdditionalWidgetParameters());
+    }
+    else {
+      drupal_set_message($this->t('Access to the widget forbidden.'), 'warning');
+    }
+
+    // Add cache access cache metadata from the widgets to the form directly as
+    // it is affected.
+    foreach ($this->entityBrowser->getWidgets() as $widget) {
+      /** @var \Drupal\entity_browser\WidgetInterface $widget */
+      $this->renderer->addCacheableDependency($form, $widget->access());
+    }
 
     $form[$form['#browser_parts']['selection_display']] = $this->entityBrowser
       ->getSelectionDisplay()