outline-8.x-1.x-dev/src/EntryForm.php
src/EntryForm.php
<?php
namespace Drupal\outline;
use Drupal\Core\Entity\ContentEntityForm;
use Drupal\Core\Entity\EntityMalformedException;
use Drupal\Core\Entity\EntityStorageException;
use Drupal\Core\Form\FormStateInterface;
use Drupal\outline\EntryInterface;
/**
* Base for handler for outline entry edit forms.
*/
class EntryForm extends ContentEntityForm {
/**
* {@inheritdoc}
*/
public function form(array $form, FormStateInterface $form_state) {
$entry = $this->entity;
$outline_storage = $this->entityTypeManager->getStorage('outline');
$outline = $outline_storage->load($entry->bundle());
//$entry_storage = $this->entityManager->getStorage('outline_entry');
$form_state->set(['outline', 'parent'],$entry->getParent());
$form_state->set(['outline', 'outline'], $outline);
// Settings
$form['settings'] = [
'#type' => 'details',
'#title' => $this->t('Settings'),
'#open' => FALSE,
'#weight' => 30,
];
// Weight
$form['settings']['weight'] = [
'#type' => 'textfield',
'#title' => $this->t('Weight'),
'#size' => 6,
'#default_value' => $entry->getWeight(),
'#description' => $this->t('Terms are displayed in ascending order by weight.'),
'#required' => TRUE,
'#weight' => 40,
];
// Outline id.
$form['oid'] = [
'#type' => 'value',
'#value' => $outline->id(),
];
// Entry id.
$form['eid'] = [
'#type' => 'value',
'#value' => $entry->id(),
];
return parent::form($form, $form_state, $entry);
}
/**
* {@inheritdoc}
*/
public function validateForm(array &$form, FormStateInterface $form_state) {
parent::validateForm($form, $form_state);
// Ensure numeric values.
if ($form_state->hasValue('weight') && !is_numeric($form_state->getValue('weight'))) {
$form_state->setErrorByName('weight', $this->t('Weight value must be numeric.'));
}
}
/**
* {@inheritdoc}
*/
public function buildEntity(array $form, FormStateInterface $form_state) {
$entry = parent::buildEntity($form, $form_state);
// Prevent leading and trailing spaces in entry names.
$entry->setName(trim($entry->getName()));
return $entry;
}
/**
* {@inheritdoc}
* @throws EntityMalformedException|EntityStorageException
*/
public function save(array $form, FormStateInterface $form_state) {
$entry = $this->entity;
$result = $entry->save();
$link = $entry->toLink($this->t('Edit'), 'edit-form')->toString();
switch ($result) {
case SAVED_NEW:
\Drupal::messenger()->addStatus($this->t('Created new entry %entry.', ['%entry' => $entry->getName()]));
$this->logger('outline')
->notice('Created new entry %entry.', [
'%entry' => $entry->getName(),
'link' => $link,
]);
break;
case SAVED_UPDATED:
\Drupal::messenger()->addStatus($this->t('Updated entry %entry.', ['%entry' => $entry->getName()]));
$this->logger('outline')
->notice('Updated entry %entry.', [
'%entry' => $entry->getName(),
'link' => $link,
]);
break;
}
$form_state->setValue('eid', $entry->id());
$form_state->set('eid', $entry->id());
}
}
