Version 1
[yaffs-website] / web / core / modules / views_ui / src / Form / BreakLockForm.php
diff --git a/web/core/modules/views_ui/src/Form/BreakLockForm.php b/web/core/modules/views_ui/src/Form/BreakLockForm.php
new file mode 100644 (file)
index 0000000..94a626f
--- /dev/null
@@ -0,0 +1,114 @@
+<?php
+
+namespace Drupal\views_ui\Form;
+
+use Drupal\Core\Entity\EntityConfirmFormBase;
+use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\user\SharedTempStoreFactory;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Builds the form to break the lock of an edited view.
+ */
+class BreakLockForm extends EntityConfirmFormBase {
+
+  /**
+   * Stores the Entity manager.
+   *
+   * @var \Drupal\Core\Entity\EntityManagerInterface
+   */
+  protected $entityManager;
+
+  /**
+   * Stores the user tempstore.
+   *
+   * @var \Drupal\user\SharedTempStore
+   */
+  protected $tempStore;
+
+  /**
+   * Constructs a \Drupal\views_ui\Form\BreakLockForm object.
+   *
+   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
+   *   The Entity manager.
+   * @param \Drupal\user\SharedTempStoreFactory $temp_store_factory
+   *   The factory for the temp store object.
+   */
+  public function __construct(EntityManagerInterface $entity_manager, SharedTempStoreFactory $temp_store_factory) {
+    $this->entityManager = $entity_manager;
+    $this->tempStore = $temp_store_factory->get('views');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('entity.manager'),
+      $container->get('user.shared_tempstore')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormId() {
+    return 'views_ui_break_lock_confirm';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getQuestion() {
+    return $this->t('Do you want to break the lock on view %name?', ['%name' => $this->entity->id()]);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDescription() {
+    $locked = $this->tempStore->getMetadata($this->entity->id());
+    $account = $this->entityManager->getStorage('user')->load($locked->owner);
+    $username = [
+      '#theme' => 'username',
+      '#account' => $account,
+    ];
+    return $this->t('By breaking this lock, any unsaved changes made by @user will be lost.', ['@user' => drupal_render($username)]);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCancelUrl() {
+    return $this->entity->urlInfo('edit-form');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfirmText() {
+    return $this->t('Break lock');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state) {
+    if (!$this->tempStore->getMetadata($this->entity->id())) {
+      $form['message']['#markup'] = $this->t('There is no lock on view %name to break.', ['%name' => $this->entity->id()]);
+      return $form;
+    }
+    return parent::buildForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+    $this->tempStore->delete($this->entity->id());
+    $form_state->setRedirectUrl($this->entity->urlInfo('edit-form'));
+    drupal_set_message($this->t('The lock has been broken and you may now edit this view.'));
+  }
+
+}