Security update for Core, with self-updated composer
[yaffs-website] / web / core / modules / settings_tray / src / Form / SystemBrandingOffCanvasForm.php
diff --git a/web/core/modules/settings_tray/src/Form/SystemBrandingOffCanvasForm.php b/web/core/modules/settings_tray/src/Form/SystemBrandingOffCanvasForm.php
new file mode 100644 (file)
index 0000000..bc5ad3b
--- /dev/null
@@ -0,0 +1,119 @@
+<?php
+
+namespace Drupal\settings_tray\Form;
+
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Plugin\PluginFormBase;
+use Drupal\Core\Session\AccountInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * The off-canvas form handler for the SystemBrandingBlock.
+ *
+ * @see settings_tray_block_alter()
+ *
+ * @internal
+ */
+class SystemBrandingOffCanvasForm extends PluginFormBase implements ContainerInjectionInterface {
+
+  /**
+   * The block plugin.
+   *
+   * @var \Drupal\Core\Block\BlockPluginInterface
+   */
+  protected $plugin;
+
+  /**
+   * The config factory.
+   *
+   * @var \Drupal\Core\Config\ConfigFactoryInterface
+   */
+  protected $configFactory;
+
+  /**
+   * The current user.
+   *
+   * @var \Drupal\Core\Session\AccountInterface
+   */
+  protected $currentUser;
+
+  /**
+   * SystemBrandingOffCanvasForm constructor.
+   *
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
+   *   The config factory.
+   * @param \Drupal\Core\Session\AccountInterface $current_user
+   *   The current user.
+   */
+  public function __construct(ConfigFactoryInterface $config_factory, AccountInterface $current_user) {
+    $this->configFactory = $config_factory;
+    $this->currentUser = $current_user;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('config.factory'),
+      $container->get('current_user')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form = $this->plugin->buildConfigurationForm($form, $form_state);
+
+    $form['block_branding']['#type'] = 'details';
+    $form['block_branding']['#weight'] = 10;
+
+    // Unset links to Site Information form, we can make these changes here.
+    unset($form['block_branding']['use_site_name']['#description'], $form['block_branding']['use_site_slogan']['#description']);
+
+    $site_config = $this->configFactory->getEditable('system.site');
+    $form['site_information'] = [
+      '#type' => 'details',
+      '#title' => t('Site details'),
+      '#open' => TRUE,
+      '#access' => $this->currentUser->hasPermission('administer site configuration'),
+    ];
+    $form['site_information']['site_name'] = [
+      '#type' => 'textfield',
+      '#title' => t('Site name'),
+      '#default_value' => $site_config->get('name'),
+      '#required' => TRUE,
+    ];
+    $form['site_information']['site_slogan'] = [
+      '#type' => 'textfield',
+      '#title' => t('Slogan'),
+      '#default_value' => $site_config->get('slogan'),
+      '#description' => t("How this is used depends on your site's theme."),
+    ];
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $this->plugin->validateConfigurationForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $site_info = $form_state->getValue('site_information');
+    $this->configFactory->getEditable('system.site')
+      ->set('name', $site_info['site_name'])
+      ->set('slogan', $site_info['site_slogan'])
+      ->save();
+    $this->plugin->submitConfigurationForm($form, $form_state);
+  }
+
+}