Version 1
[yaffs-website] / web / core / modules / system / tests / modules / entity_test / src / EntityTestForm.php
diff --git a/web/core/modules/system/tests/modules/entity_test/src/EntityTestForm.php b/web/core/modules/system/tests/modules/entity_test/src/EntityTestForm.php
new file mode 100644 (file)
index 0000000..e4c5114
--- /dev/null
@@ -0,0 +1,86 @@
+<?php
+
+namespace Drupal\entity_test;
+
+use Drupal\Component\Utility\Random;
+use Drupal\Core\Entity\ContentEntityForm;
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Form controller for the test entity edit forms.
+ */
+class EntityTestForm extends ContentEntityForm {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function prepareEntity() {
+    if (empty($this->entity->name->value)) {
+      // Assign a random name to new EntityTest entities, to avoid repetition in
+      // tests.
+      $random = new Random();
+      $this->entity->name->value = $random->name();
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function form(array $form, FormStateInterface $form_state) {
+    $form = parent::form($form, $form_state);
+    $entity = $this->entity;
+
+    // @todo: Is there a better way to check if an entity type is revisionable?
+    if ($entity->getEntityType()->hasKey('revision') && !$entity->isNew()) {
+      $form['revision'] = [
+        '#type' => 'checkbox',
+        '#title' => t('Create new revision'),
+        '#default_value' => $entity->isNewRevision(),
+      ];
+    }
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function save(array $form, FormStateInterface $form_state) {
+    try {
+      $entity = $this->entity;
+
+      // Save as a new revision if requested to do so.
+      if (!$form_state->isValueEmpty('revision')) {
+        $entity->setNewRevision();
+      }
+
+      $is_new = $entity->isNew();
+      $entity->save();
+
+      if ($is_new) {
+        $message = t('%entity_type @id has been created.', ['@id' => $entity->id(), '%entity_type' => $entity->getEntityTypeId()]);
+      }
+      else {
+        $message = t('%entity_type @id has been updated.', ['@id' => $entity->id(), '%entity_type' => $entity->getEntityTypeId()]);
+      }
+      drupal_set_message($message);
+
+      if ($entity->id()) {
+        $entity_type = $entity->getEntityTypeId();
+        $form_state->setRedirect(
+          "entity.$entity_type.edit_form",
+          [$entity_type => $entity->id()]
+        );
+      }
+      else {
+        // Error on save.
+        drupal_set_message(t('The entity could not be saved.'), 'error');
+        $form_state->setRebuild();
+      }
+    }
+    catch (\Exception $e) {
+      \Drupal::state()->set('entity_test.form.save.exception', get_class($e) . ': ' . $e->getMessage());
+    }
+  }
+
+}