--- /dev/null
+<?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);
+ }
+
+}