Mercurial > hg > isophonics-drupal-site
diff modules/contrib/migrate_tools/src/Form/MigrationGroupFormBase.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules/contrib/migrate_tools/src/Form/MigrationGroupFormBase.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,184 @@ +<?php + +namespace Drupal\migrate_tools\Form; + +use Drupal\Core\Entity\EntityForm; +use Drupal\Core\Entity\Query\QueryFactory; +use Drupal\Core\Form\FormStateInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Drupal\migrate_plus\Entity\MigrationGroupInterface; + +/** + * Class MigrationGroupFormBase. + * + * @package Drupal\migrate_tools\Form + * + * @ingroup migrate_tools + */ +class MigrationGroupFormBase extends EntityForm { + + /** + * @var \Drupal\Core\Entity\Query\QueryFactory + */ + protected $entityQueryFactory; + + /** + * Construct the MigrationGroupFormBase. + * + * For simple entity forms, there's no need for a constructor. Our migration group form + * base, however, requires an entity query factory to be injected into it + * from the container. We later use this query factory to build an entity + * query for the exists() method. + * + * @param \Drupal\Core\Entity\Query\QueryFactory $query_factory + * An entity query factory for the migration group entity type. + */ + public function __construct(QueryFactory $query_factory) { + $this->entityQueryFactory = $query_factory; + } + + /** + * Factory method for MigrationGroupFormBase. + * + * @param \Symfony\Component\DependencyInjection\ContainerInterface $container + * A container interface service. + * + * @return \Drupal\migrate_tools\Form\MigrationFormBase + * + */ + public static function create(ContainerInterface $container) { + return new static($container->get('entity.query')); + } + + /** + * Overrides Drupal\Core\Entity\EntityFormController::form(). + * + * Builds the entity add/edit form. + * + * @param array $form + * An associative array containing the structure of the form. + * @param \Drupal\Core\Form\FormStateInterface $form_state + * An associative array containing the current state of the form. + * + * @return array + * An associative array containing the migration group add/edit form. + */ + public function buildForm(array $form, FormStateInterface $form_state) { + // Get anything we need from the base class. + $form = parent::buildForm($form, $form_state); + + /** @var MigrationGroupInterface $migration_group */ + $migration_group = $this->entity; + + // Build the form. + $form['label'] = array( + '#type' => 'textfield', + '#title' => $this->t('Label'), + '#maxlength' => 255, + '#default_value' => $migration_group->label(), + '#required' => TRUE, + ); + $form['id'] = array( + '#type' => 'machine_name', + '#title' => $this->t('Machine name'), + '#default_value' => $migration_group->id(), + '#machine_name' => array( + 'exists' => array($this, 'exists'), + 'replace_pattern' => '([^a-z0-9_]+)|(^custom$)', + 'error' => 'The machine-readable name must be unique, and can only contain lowercase letters, numbers, and underscores. Additionally, it can not be the reserved word "custom".', + ), + '#disabled' => !$migration_group->isNew(), + ); + $form['description'] = array( + '#type' => 'textfield', + '#title' => $this->t('Description'), + '#maxlength' => 255, + '#default_value' => $migration_group->get('description'), + ); + $form['source_type'] = array( + '#type' => 'textfield', + '#title' => $this->t('Source type'), + '#description' => $this->t('Type of source system the group is migrating from, for example "Drupal 6" or "WordPress 4".'), + '#maxlength' => 255, + '#default_value' => $migration_group->get('source_type'), + ); + + // Return the form. + return $form; + } + + /** + * Checks for an existing migration group. + * + * @param string|int $entity_id + * The entity ID. + * @param array $element + * The form element. + * @param FormStateInterface $form_state + * The form state. + * + * @return bool + * TRUE if this format already exists, FALSE otherwise. + */ + public function exists($entity_id, array $element, FormStateInterface $form_state) { + // Use the query factory to build a new migration group entity query. + $query = $this->entityQueryFactory->get('migration_group'); + + // Query the entity ID to see if its in use. + $result = $query->condition('id', $element['#field_prefix'] . $entity_id) + ->execute(); + + // We don't need to return the ID, only if it exists or not. + return (bool) $result; + } + + /** + * Overrides Drupal\Core\Entity\EntityFormController::actions(). + * + * @param array $form + * An associative array containing the structure of the form. + * @param \Drupal\Core\Form\FormStateInterface $form_state + * An associative array containing the current state of the form. + * + * @return array + * An array of supported actions for the current entity form. + */ + protected function actions(array $form, FormStateInterface $form_state) { + // Get the basic actins from the base class. + $actions = parent::actions($form, $form_state); + + // Change the submit button text. + $actions['submit']['#value'] = $this->t('Save'); + + // Return the result. + return $actions; + } + + /** + * Overrides Drupal\Core\Entity\EntityFormController::save(). + * + * @param array $form + * An associative array containing the structure of the form. + * @param \Drupal\Core\Form\FormStateInterface $form_state + * An associative array containing the current state of the form. + * + * @return $this + */ + public function save(array $form, FormStateInterface $form_state) { + $migration_group = $this->getEntity(); + $status = $migration_group->save(); + + if ($status == SAVED_UPDATED) { + // If we edited an existing entity... + drupal_set_message($this->t('Migration group %label has been updated.', array('%label' => $migration_group->label()))); + } + else { + // If we created a new entity... + drupal_set_message($this->t('Migration group %label has been added.', array('%label' => $migration_group->label()))); + } + + // Redirect the user back to the listing route after the save operation. + $form_state->setRedirect('entity.migration_group.list'); + } + +}