SlideGroupBaseForm.php in Drupal Slider 8
Same filename and directory in other branches
Namespace
Drupal\drupal_slider\FormFile
src/Form/SlideGroupBaseForm.phpView source
<?php
namespace Drupal\drupal_slider\Form;
use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Entity\EntityForm;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Link;
/**
* Class SlideGroupBaseForm.
*/
class SlideGroupBaseForm extends EntityForm {
/**
* Protected variable.
*
* @var \Drupal\Core\Entity\EntityStorageInterface
*/
protected $entityStorage;
/**
* Function __construct.
*/
public function __construct(EntityStorageInterface $entity_storage) {
$this->entityStorage = $entity_storage;
}
/**
* Function create.
*/
public static function create(ContainerInterface $container) {
$form = new static($container
->get('entity_type.manager')
->getStorage('drupal_slider_slide_grouping'));
$form
->setMessenger($container
->get('messenger'));
return $form;
}
/**
* Function buildForm.
*/
public function buildForm(array $form, FormStateInterface $form_state) {
// Get anything we need from the base class.
$form = parent::buildForm($form, $form_state);
$slideGroup = $this->entity;
$form['#tree'] = TRUE;
$form['label'] = [
'#type' => 'textfield',
'#title' => $this
->t('Slide Group Name'),
'#maxlength' => 255,
'#default_value' => $slideGroup
->label(),
'#required' => TRUE,
];
$form['id'] = [
'#type' => 'machine_name',
'#title' => $this
->t('Machine name'),
'#default_value' => $slideGroup
->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' => !$slideGroup
->isNew(),
];
$form['slides'] = [
'#type' => 'table',
'#header' => [
$this
->t('Slide number'),
$this
->t('Slides'),
$this
->t('Weight'),
],
'#empty' => $this
->t('Sorry, There are no groups!'),
'#prefix' => '<div id="names-fieldset-wrapper">',
'#suffix' => '</div>',
// TableDrag: Each array value is a list of callback arguments for
// drupal_add_tabledrag(). The #id of the table is automatically
// prepended; if there is none, an HTML ID is auto-generated.
'#tabledrag' => [
[
'action' => 'order',
'relationship' => 'sibling',
'group' => 'table-sort-weight',
],
],
];
return $form;
}
/**
* Checks for an existing Slide group.
*/
public function exists($entity_id, array $element, FormStateInterface $form_state) {
$query = $this->entityStorage
->getQuery();
// 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;
}
/**
* Callback for both ajax-enabled buttons.
*
* Selects and returns the fieldset with the names in it.
*/
public function addmoreCallback(array &$form, FormStateInterface $form_state) {
return $form['slides'];
}
/**
* Submit handler for the "add-one-more" button.
*
* Increments the max counter and causes a rebuild.
*/
public function addOne(array &$form, FormStateInterface $form_state) {
$name_field = $form_state
->get('num_names');
$add_button = $name_field + 1;
$form_state
->set('num_names', $add_button);
// Since our buildForm() method relies on the value of 'num_names' to
// generate 'name' form elements, we have to tell the form to rebuild. If we
// don't do this, the form builder will not call buildForm().
$form_state
->setRebuild();
}
/**
* Submit handler for the "remove one" button.
*
* Decrements the max counter and causes a form rebuild.
*/
public function removeCallback(array &$form, FormStateInterface $form_state) {
$name_field = $form_state
->get('num_names');
if ($name_field > 1) {
$remove_button = $name_field - 1;
$form_state
->set('num_names', $remove_button);
}
// Since our buildForm() method relies on the value of 'num_names' to
// generate 'name' form elements, we have to tell the form to rebuild. If we
// don't do this, the form builder will not call buildForm().
$form_state
->setRebuild();
}
/**
* Overrides Drupal\Core\Entity\EntityFormController::actions().
*
* To set the submit button text, we need to override 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().
*
* Saves the entity. This is called after submit() has built the entity from
* the form values. Do not override submit() as save() is the preferred
* method for entity form controllers.
*
* @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.
*/
public function save(array $form, FormStateInterface $form_state) {
// EntityForm provides us with the entity we're working on.
$slideGroup = $this
->getEntity();
// Drupal already populated the form values in the entity object. Each
// form field was saved as a public variable in the entity class. PHP
// allows Drupal to do this even if the method is not defined ahead of
// time.
$status = $slideGroup
->save();
// Grab the URL of the new entity. We'll use it in the message.
$url = $slideGroup
->toUrl();
// Create an edit link.
$edit_link = Link::fromTextAndUrl($this
->t('Edit'), $url)
->toString();
if ($status == SAVED_UPDATED) {
// If we edited an existing entity...
$this
->messenger()
->addMessage($this
->t('Slide Group %label has been updated.', [
'%label' => $slideGroup
->label(),
]));
$this
->logger('contact')
->notice('Slide Group %label has been updated.', [
'%label' => $slideGroup
->label(),
'link' => $edit_link,
]);
}
else {
// If we created a new entity...
$this
->messenger()
->addMessage($this
->t('Slide Group %label has been added.', [
'%label' => $slideGroup
->label(),
]));
$this
->logger('contact')
->notice('Slide Group %label has been added.', [
'%label' => $slideGroup
->label(),
'link' => $edit_link,
]);
}
// Redirect the user back to the listing route after the save operation.
$form_state
->setRedirect('entity.drupal_slider_slide_grouping.list');
}
}
Classes
Name | Description |
---|---|
SlideGroupBaseForm | Class SlideGroupBaseForm. |