class MessageForm
Same name in this branch
- 11.x core/modules/migrate/src/Form/MessageForm.php \Drupal\migrate\Form\MessageForm
Same name and namespace in other branches
- 10 core/modules/contact/src/MessageForm.php \Drupal\contact\MessageForm
- 10 core/modules/migrate/src/Form/MessageForm.php \Drupal\migrate\Form\MessageForm
- 9 core/modules/contact/src/MessageForm.php \Drupal\contact\MessageForm
- 8.9.x core/modules/contact/src/MessageForm.php \Drupal\contact\MessageForm
Form controller for contact message forms.
@internal
Hierarchy
- class \Drupal\Core\Form\FormBase implements \Drupal\Core\Form\FormInterface, \Drupal\Core\DependencyInjection\ContainerInjectionInterface uses \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Logger\LoggerChannelTrait, \Drupal\Core\Messenger\MessengerTrait, \Drupal\Core\Routing\RedirectDestinationTrait, \Drupal\Core\StringTranslation\StringTranslationTrait
- class \Drupal\Core\Entity\EntityForm implements \Drupal\Core\Entity\EntityFormInterface extends \Drupal\Core\Form\FormBase
- class \Drupal\Core\Entity\ContentEntityForm implements \Drupal\Core\Entity\ContentEntityFormInterface extends \Drupal\Core\Entity\EntityForm
- class \Drupal\contact\MessageForm extends \Drupal\Core\Entity\ContentEntityForm
- class \Drupal\Core\Entity\ContentEntityForm implements \Drupal\Core\Entity\ContentEntityFormInterface extends \Drupal\Core\Entity\EntityForm
- class \Drupal\Core\Entity\EntityForm implements \Drupal\Core\Entity\EntityFormInterface extends \Drupal\Core\Form\FormBase
Expanded class hierarchy of MessageForm
1 file declares its use of MessageForm
- Message.php in core/
modules/ contact/ src/ Entity/ Message.php
File
-
core/
modules/ contact/ src/ MessageForm.php, line 20
Namespace
Drupal\contactView source
class MessageForm extends ContentEntityForm {
/**
* The message being used by this form.
*
* @var \Drupal\contact\MessageInterface
*/
protected $entity;
/**
* The flood control mechanism.
*
* @var \Drupal\Core\Flood\FloodInterface
*/
protected $flood;
/**
* The language manager service.
*
* @var \Drupal\Core\Language\LanguageManagerInterface
*/
protected $languageManager;
/**
* The contact mail handler service.
*
* @var \Drupal\contact\MailHandlerInterface
*/
protected $mailHandler;
/**
* The date formatter service.
*
* @var \Drupal\Core\Datetime\DateFormatterInterface
*/
protected $dateFormatter;
/**
* Constructs a MessageForm object.
*
* @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository
* The entity repository.
* @param \Drupal\Core\Flood\FloodInterface $flood
* The flood control mechanism.
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
* The language manager service.
* @param \Drupal\contact\MailHandlerInterface $mail_handler
* The contact mail handler service.
* @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
* The date service.
* @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $entity_type_bundle_info
* The entity type bundle service.
* @param \Drupal\Component\Datetime\TimeInterface $time
* The time service.
*/
public function __construct(EntityRepositoryInterface $entity_repository, FloodInterface $flood, LanguageManagerInterface $language_manager, MailHandlerInterface $mail_handler, DateFormatterInterface $date_formatter, ?EntityTypeBundleInfoInterface $entity_type_bundle_info = NULL, ?TimeInterface $time = NULL) {
parent::__construct($entity_repository, $entity_type_bundle_info, $time);
$this->flood = $flood;
$this->languageManager = $language_manager;
$this->mailHandler = $mail_handler;
$this->dateFormatter = $date_formatter;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static($container->get('entity.repository'), $container->get('flood'), $container->get('language_manager'), $container->get('contact.mail_handler'), $container->get('date.formatter'), $container->get('entity_type.bundle.info'), $container->get('datetime.time'));
}
/**
* {@inheritdoc}
*/
public function form(array $form, FormStateInterface $form_state) {
$user = $this->currentUser();
$message = $this->entity;
$form = parent::form($form, $form_state);
$form['#attributes']['class'][] = 'contact-form';
if (!empty($message->preview)) {
$form['preview'] = [
'#theme_wrappers' => [
'container__preview',
],
'#attributes' => [
'class' => [
'preview',
],
],
];
$form['preview']['message'] = $this->entityTypeManager
->getViewBuilder('contact_message')
->view($message, 'full');
}
$form['name'] = [
'#type' => 'textfield',
'#title' => $this->t('Your name'),
'#maxlength' => 255,
'#required' => TRUE,
];
$form['mail'] = [
'#type' => 'email',
'#title' => $this->t('Your email address'),
'#required' => TRUE,
];
// Do not allow authenticated users to alter the name or email values to
// prevent the impersonation of other users.
if ($user->isAuthenticated()) {
$form['name']['#type'] = 'item';
$form['name']['#value'] = $user->getDisplayName();
$form['name']['#required'] = FALSE;
$form['name']['#plain_text'] = $user->getDisplayName();
$form['mail']['#type'] = 'item';
$form['mail']['#value'] = $user->getEmail();
$form['mail']['#required'] = FALSE;
$form['mail']['#plain_text'] = $user->getEmail();
}
// The user contact form has a preset recipient.
if ($message->isPersonal()) {
$form['recipient'] = [
'#type' => 'item',
'#title' => $this->t('To'),
'#value' => $message->getPersonalRecipient()
->id(),
'name' => [
'#theme' => 'username',
'#account' => $message->getPersonalRecipient(),
],
];
}
$form['copy'] = [
'#type' => 'checkbox',
'#title' => $this->t('Send yourself a copy'),
// Do not allow anonymous users to send themselves a copy, because it can
// be abused to spam people.
'#access' => $user->isAuthenticated(),
];
return $form;
}
/**
* {@inheritdoc}
*/
public function actions(array $form, FormStateInterface $form_state) {
$elements = parent::actions($form, $form_state);
$elements['submit']['#value'] = $this->t('Send message');
$elements['preview'] = [
'#type' => 'submit',
'#value' => $this->t('Preview'),
'#submit' => [
'::submitForm',
'::preview',
],
'#access' => !empty($form_state->getStorage()['form_display']
->getComponent('preview')),
];
return $elements;
}
/**
* Form submission handler for the 'preview' action.
*/
public function preview(array $form, FormStateInterface $form_state) {
$message = $this->entity;
$message->preview = TRUE;
$form_state->setRebuild();
}
/**
* {@inheritdoc}
*/
public function validateForm(array &$form, FormStateInterface $form_state) {
$message = parent::validateForm($form, $form_state);
// Check if flood control has been activated for sending emails.
if (!$this->currentUser()
->hasPermission('administer contact forms') && (!$message->isPersonal() || !$this->currentUser()
->hasPermission('administer users'))) {
$limit = $this->config('contact.settings')
->get('flood.limit');
$interval = $this->config('contact.settings')
->get('flood.interval');
if (!$this->flood
->isAllowed('contact', $limit, $interval)) {
$form_state->setErrorByName('', $this->t('You cannot send more than %limit messages in @interval. Try again later.', [
'%limit' => $limit,
'@interval' => $this->dateFormatter
->formatInterval($interval),
]));
}
}
return $message;
}
/**
* {@inheritdoc}
*/
public function save(array $form, FormStateInterface $form_state) {
$message = $this->entity;
$user = $this->currentUser();
// Save the message. In core this is a no-op but should contrib wish to
// implement message storage, this will make the task of swapping in a real
// storage controller straight-forward.
$message->save();
$this->mailHandler
->sendMailMessages($message, $user);
$contact_form = $message->getContactForm();
$this->flood
->register('contact', $this->config('contact.settings')
->get('flood.interval'));
if ($submission_message = $contact_form->getMessage()) {
$this->messenger()
->addStatus($submission_message);
}
// To avoid false error messages caused by flood control, redirect away from
// the contact form; either to the contacted user account or the front page.
if ($message->isPersonal() && $user->hasPermission('access user profiles')) {
$form_state->setRedirectUrl($message->getPersonalRecipient()
->toUrl());
}
else {
$form_state->setRedirectUrl($contact_form->getRedirectUrl());
}
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title | Overrides |
---|---|---|---|---|---|
ContentEntityForm::$entityRepository | protected | property | The entity repository service. | ||
ContentEntityForm::$entityTypeBundleInfo | protected | property | The entity type bundle info service. | ||
ContentEntityForm::$time | protected | property | The time service. | ||
ContentEntityForm::addRevisionableFormFields | protected | function | Add revision form fields if the entity enabled the UI. | ||
ContentEntityForm::buildEntity | public | function | Overrides EntityForm::buildEntity | 4 | |
ContentEntityForm::copyFormValuesToEntity | protected | function | Overrides EntityForm::copyFormValuesToEntity | ||
ContentEntityForm::flagViolations | protected | function | Flags violations for the current form. | 4 | |
ContentEntityForm::getBundleEntity | protected | function | Returns the bundle entity of the entity, or NULL if there is none. | ||
ContentEntityForm::getEditedFieldNames | protected | function | Gets the names of all fields edited in the form. | 4 | |
ContentEntityForm::getFormDisplay | public | function | Overrides ContentEntityFormInterface::getFormDisplay | ||
ContentEntityForm::getFormLangcode | public | function | Overrides ContentEntityFormInterface::getFormLangcode | ||
ContentEntityForm::getNewRevisionDefault | protected | function | Should new revisions created on default. | ||
ContentEntityForm::init | protected | function | Initializes the form state and the entity before the first form build. | Overrides EntityForm::init | 1 |
ContentEntityForm::initFormLangcodes | protected | function | Initializes form language code values. | ||
ContentEntityForm::isDefaultFormLangcode | public | function | Overrides ContentEntityFormInterface::isDefaultFormLangcode | ||
ContentEntityForm::prepareEntity | protected | function | Overrides EntityForm::prepareEntity | 1 | |
ContentEntityForm::setFormDisplay | public | function | Overrides ContentEntityFormInterface::setFormDisplay | ||
ContentEntityForm::showRevisionUi | protected | function | Checks whether the revision form fields should be added to the form. | ||
ContentEntityForm::submitForm | public | function | Overrides EntityForm::submitForm | 3 | |
ContentEntityForm::updateChangedTime | public | function | Updates the changed time of the entity. | ||
ContentEntityForm::updateFormLangcode | public | function | Updates the form language to reflect any change to the entity language. | ||
DependencySerializationTrait::$_entityStorages | protected | property | An array of entity type IDs keyed by the property name of their storages. | ||
DependencySerializationTrait::$_serviceIds | protected | property | An array of service IDs keyed by property name used for serialization. | ||
DependencySerializationTrait::__sleep | public | function | 2 | ||
DependencySerializationTrait::__wakeup | public | function | 2 | ||
EntityForm::$entityTypeManager | protected | property | The entity type manager. | 3 | |
EntityForm::$moduleHandler | protected | property | The module handler service. | 2 | |
EntityForm::$operation | protected | property | The name of the current operation. | ||
EntityForm::actionsElement | protected | function | Returns the action form element for the current entity form. | ||
EntityForm::afterBuild | public | function | Form element #after_build callback: Updates the entity with submitted data. | 1 | |
EntityForm::buildForm | public | function | Overrides FormInterface::buildForm | 12 | |
EntityForm::getBaseFormId | public | function | Overrides BaseFormIdInterface::getBaseFormId | 3 | |
EntityForm::getEntity | public | function | Overrides EntityFormInterface::getEntity | ||
EntityForm::getEntityFromRouteMatch | public | function | Overrides EntityFormInterface::getEntityFromRouteMatch | 3 | |
EntityForm::getFormId | public | function | Overrides FormInterface::getFormId | 13 | |
EntityForm::getOperation | public | function | Overrides EntityFormInterface::getOperation | ||
EntityForm::prepareInvokeAll | protected | function | Invokes the specified prepare hook variant. | ||
EntityForm::processForm | public | function | Process callback: assigns weights and hides extra fields. | ||
EntityForm::setEntity | public | function | Overrides EntityFormInterface::setEntity | ||
EntityForm::setEntityTypeManager | public | function | Overrides EntityFormInterface::setEntityTypeManager | ||
EntityForm::setModuleHandler | public | function | Overrides EntityFormInterface::setModuleHandler | ||
EntityForm::setOperation | public | function | Overrides EntityFormInterface::setOperation | ||
FormBase::$configFactory | protected | property | The config factory. | 2 | |
FormBase::$requestStack | protected | property | The request stack. | 1 | |
FormBase::$routeMatch | protected | property | The route match. | ||
FormBase::config | protected | function | Retrieves a configuration object. | ||
FormBase::configFactory | protected | function | Gets the config factory for this form. | 2 | |
FormBase::container | private | function | Returns the service container. | ||
FormBase::currentUser | protected | function | Gets the current user. | 2 | |
FormBase::getRequest | protected | function | Gets the request object. | ||
FormBase::getRouteMatch | protected | function | Gets the route match. | ||
FormBase::logger | protected | function | Gets the logger for a specific channel. | ||
FormBase::redirect | protected | function | Returns a redirect response object for the specified route. | ||
FormBase::resetConfigFactory | public | function | Resets the configuration factory. | ||
FormBase::setConfigFactory | public | function | Sets the config factory for this form. | ||
FormBase::setRequestStack | public | function | Sets the request stack object to use. | ||
LoggerChannelTrait::$loggerFactory | protected | property | The logger channel factory service. | ||
LoggerChannelTrait::getLogger | protected | function | Gets the logger for a specific channel. | ||
LoggerChannelTrait::setLoggerFactory | public | function | Injects the logger channel factory. | ||
MessageForm::$dateFormatter | protected | property | The date formatter service. | ||
MessageForm::$entity | protected | property | The message being used by this form. | Overrides ContentEntityForm::$entity | |
MessageForm::$flood | protected | property | The flood control mechanism. | ||
MessageForm::$languageManager | protected | property | The language manager service. | ||
MessageForm::$mailHandler | protected | property | The contact mail handler service. | ||
MessageForm::actions | public | function | Overrides EntityForm::actions | ||
MessageForm::create | public static | function | Overrides ContentEntityForm::create | ||
MessageForm::form | public | function | Overrides ContentEntityForm::form | ||
MessageForm::preview | public | function | Form submission handler for the 'preview' action. | ||
MessageForm::save | public | function | Overrides EntityForm::save | ||
MessageForm::validateForm | public | function | Overrides ContentEntityForm::validateForm | ||
MessageForm::__construct | public | function | Constructs a MessageForm object. | Overrides ContentEntityForm::__construct | |
MessengerTrait::$messenger | protected | property | The messenger. | 25 | |
MessengerTrait::messenger | public | function | Gets the messenger. | 25 | |
MessengerTrait::setMessenger | public | function | Sets the messenger. | ||
RedirectDestinationTrait::$redirectDestination | protected | property | The redirect destination service. | 2 | |
RedirectDestinationTrait::getDestinationArray | protected | function | Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url. | ||
RedirectDestinationTrait::getRedirectDestination | protected | function | Returns the redirect destination service. | ||
RedirectDestinationTrait::setRedirectDestination | public | function | Sets the redirect destination service. | ||
StringTranslationTrait::$stringTranslation | protected | property | The string translation service. | 3 | |
StringTranslationTrait::formatPlural | protected | function | Formats a string containing a count of items. | ||
StringTranslationTrait::getNumberOfPlurals | protected | function | Returns the number of plurals supported by a given language. | ||
StringTranslationTrait::getStringTranslation | protected | function | Gets the string translation service. | ||
StringTranslationTrait::setStringTranslation | public | function | Sets the string translation service to use. | 2 | |
StringTranslationTrait::t | protected | function | Translates a string to the current language or to a given language. | 1 |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.