You are here

function contact_storage_entity_type_alter in Contact Storage 8

Implements hook_entity_type_alter().

1 call to contact_storage_entity_type_alter()
contact_storage_install in ./contact_storage.install
Implements hook_install().

File

./contact_storage.module, line 338
Contains main module logic.

Code

function contact_storage_entity_type_alter(array &$entity_types) {

  /* @var $entity_types \Drupal\Core\Entity\EntityTypeInterface[] */

  // Set the controller class for nodes to an alternate implementation of the
  // Drupal\Core\Entity\EntityStorageInterface interface.
  $entity_types['contact_message']
    ->setStorageClass('\\Drupal\\Core\\Entity\\Sql\\SqlContentEntityStorage');
  $keys = $entity_types['contact_message']
    ->getKeys();
  $keys['id'] = 'id';
  $keys['label'] = 'subject';
  $entity_types['contact_message']
    ->set('entity_keys', $keys);
  $entity_types['contact_message']
    ->set('base_table', 'contact_message');

  // Add edit and delete forms.
  $entity_types['contact_message']
    ->setFormClass('edit', '\\Drupal\\contact_storage\\MessageEditForm');
  $entity_types['contact_message']
    ->setFormClass('delete', '\\Drupal\\Core\\Entity\\ContentEntityDeleteForm');
  $entity_types['contact_message']
    ->setFormClass('delete-multiple-confirm', 'Drupal\\Core\\Entity\\Form\\DeleteMultipleForm');

  // Add clone form for messages.
  $entity_types['contact_form']
    ->setFormClass('clone', '\\Drupal\\contact_storage\\Form\\ContactFormCloneForm');

  // Allow edit/delete links in list builder.
  $entity_types['contact_message']
    ->setLinkTemplate('collection', '/admin/structure/contact/messages');
  $entity_types['contact_message']
    ->setLinkTemplate('canonical', '/admin/structure/contact/messages/{contact_message}');
  $entity_types['contact_message']
    ->setLinkTemplate('edit-form', '/admin/structure/contact/messages/{contact_message}/edit');
  $entity_types['contact_message']
    ->setLinkTemplate('delete-form', '/admin/structure/contact/messages/{contact_message}/delete');
  $entity_types['contact_message']
    ->setLinkTemplate('delete-multiple-form', '/admin/structure/contact/messages/delete');

  // Add clone link for forms.
  $entity_types['contact_form']
    ->setLinkTemplate('clone-form', '/admin/structure/contact/manage/{contact_form}/clone');

  // Define the entity route provider.
  $route_providers = $entity_types['contact_message']
    ->getRouteProviderClasses();
  $route_providers['html'] = '\\Drupal\\contact_storage\\ContactRouteProvider';
  $entity_types['contact_message']
    ->setHandlerClass('route_provider', $route_providers);
  $entity_types['contact_form']
    ->setHandlerClass('route_provider', $route_providers);

  // @todo Replace with access control handler when not enough.
  $entity_types['contact_message']
    ->set('admin_permission', 'administer contact forms');

  // Integrate with Views.
  $entity_types['contact_message']
    ->setHandlerClass('views_data', '\\Drupal\\contact_storage\\MessageViewsData');
  $entity_types['contact_message']
    ->setListBuilderClass('\\Drupal\\Core\\Entity\\EntityListBuilder');
  $entity_types['contact_form']
    ->setViewBuilderClass('\\Drupal\\contact_storage\\ContactFormViewBuilder');

  // If the body of the message should be sent as HTML.
  if (\Drupal::config('contact_storage.settings')
    ->get('send_html')) {
    $entity_types['contact_message']
      ->setViewBuilderClass('Drupal\\contact_storage\\ContactMessageViewBuilder');
  }
  $keys = $entity_types['contact_form']
    ->getKeys();
  $keys['status'] = 'status';
  $entity_types['contact_form']
    ->set('entity_keys', $keys);

  // Handler classes and templates for the Enable and Disable options.
  $entity_types['contact_form']
    ->setFormClass('disable', ContactFormDisableForm::class)
    ->setFormClass('enable', ContactFormEnableForm::class)
    ->setLinkTemplate('enable', '/admin/structure/contact/view/{contact_form}/enable')
    ->setLinkTemplate('disable', '/admin/structure/contact/view/{contact_form}/disable');
}