View source
<?php
namespace Drupal\eck\Form\EntityType;
use Drupal\Core\Entity\EntityFieldManagerInterface;
use Drupal\Core\Entity\EntityForm;
use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Entity\EntityStorageInterface;
class EckEntityTypeFormBase extends EntityForm {
protected $eckEntityTypeStorage;
protected $entityFieldManager;
public function __construct(EntityStorageInterface $eck_entity_type_storage, EntityFieldManagerInterface $entity_field_manager) {
$this->eckEntityTypeStorage = $eck_entity_type_storage;
$this->entityFieldManager = $entity_field_manager;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('entity_type.manager')
->getStorage('eck_entity_type'), $container
->get('entity_field.manager'));
}
public function buildForm(array $form, FormStateInterface $form_state) {
$form = parent::buildForm($form, $form_state);
$eck_entity_type = $this->entity;
$form['label'] = [
'#type' => 'textfield',
'#title' => $this
->t('Label'),
'#maxlength' => 255,
'#default_value' => $eck_entity_type
->label(),
'#required' => TRUE,
];
$form['id'] = [
'#type' => 'machine_name',
'#title' => $this
->t('Machine name'),
'#maxlength' => 32,
'#default_value' => $eck_entity_type
->id(),
'#machine_name' => [
'exists' => [
$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' => !$eck_entity_type
->isNew(),
];
$form['base_fields'] = [
'#type' => 'fieldset',
'#title' => $this
->t('Available base fields'),
];
$config = \Drupal::config('eck.eck_entity_type.' . $eck_entity_type
->id());
foreach ([
'created',
'changed',
'uid',
'title',
'status',
] as $field) {
$title = $field === 'uid' ? 'author' : $field;
$form['base_fields'][$field] = [
'#type' => 'checkbox',
'#title' => $this
->t('%field field', [
'%field' => ucfirst($title),
]),
'#default_value' => $config
->get($field),
];
}
return $form;
}
public function exists($entity_id, array $element, FormStateInterface $form_state) {
$query = $this->eckEntityTypeStorage
->getQuery()
->accessCheck(FALSE);
$result = $query
->condition('id', $element['#field_prefix'] . $entity_id)
->execute();
return (bool) $result;
}
protected function actions(array $form, FormStateInterface $form_state) {
$actions = parent::actions($form, $form_state);
$actions['submit']['#value'] = $this
->t('Save');
return $actions;
}
public function save(array $form, FormStateInterface $form_state) {
$status = $this->entity
->save();
$messageArgs = [
'%label' => $this->entity
->label(),
];
$message = $this
->t('Entity type %label has been added.', $messageArgs);
if ($status === SAVED_UPDATED) {
$message = $this
->t('Entity type %label has been updated.', $messageArgs);
}
\Drupal::messenger()
->addMessage($message);
$form_state
->setRedirect('eck.entity_type.list');
}
}