Skip to content
Snippets Groups Projects
Commit 3dbfe527 authored by Tasneem Natshah's avatar Tasneem Natshah
Browse files

Issue #3347682: Update the module to work with the entity

parent ff83c0c9
No related branches found
No related tags found
No related merge requests found
<?php
namespace Drupal\webnewsletter\Entity;
use Drupal\Core\Entity\EntityChangedTrait;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Entity\RevisionableContentEntityBase;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\user\EntityOwnerTrait;
use Drupal\webnewsletter\WebnewsletterEmailsInterface;
/**
* Defines the web newsletter emails entity class.
*
* @ContentEntityType(
* id = "webnewsletter_emails",
* label = @Translation("Web Newsletter Emails"),
* label_collection = @Translation("Web Newsletter Emailss"),
* label_singular = @Translation("web newsletter emails"),
* label_plural = @Translation("web newsletter emailss"),
* label_count = @PluralTranslation(
* singular = "@count web newsletter emailss",
* plural = "@count web newsletter emailss",
* ),
* handlers = {
* "list_builder" = "Drupal\webnewsletter\WebnewsletterEmailsListBuilder",
* "views_data" = "Drupal\views\EntityViewsData",
* "access" = "Drupal\webnewsletter\WebnewsletterEmailsAccessControlHandler",
* "form" = {
* "add" = "Drupal\webnewsletter\Form\WebnewsletterEmailsForm",
* "edit" = "Drupal\webnewsletter\Form\WebnewsletterEmailsForm",
* "delete" = "Drupal\Core\Entity\ContentEntityDeleteForm",
* },
* "route_provider" = {
* "html" = "Drupal\Core\Entity\Routing\AdminHtmlRouteProvider",
* }
* },
* base_table = "webnewsletter_emails",
* revision_table = "webnewsletter_emails_revision",
* show_revision_ui = TRUE,
* admin_permission = "administer webnewsletter emails",
* entity_keys = {
* "id" = "id",
* "revision" = "revision_id",
* "label" = "id",
* "uuid" = "uuid",
* "owner" = "uid",
* },
* revision_metadata_keys = {
* "revision_user" = "revision_uid",
* "revision_created" = "revision_timestamp",
* "revision_log_message" = "revision_log",
* },
* links = {
* "collection" = "/admin/config/webnewsletter/emails/",
* "add-form" = "/admin/config/webnewsletter/email/add",
* "canonical" = "/admin/config/webnewsletter/email/{webnewsletter_emails}",
* "edit-form" = "/admin/config/webnewsletter/email/{webnewsletter_emails}/edit",
* "delete-form" = "/admin/config/webnewsletter/email/{webnewsletter_emails}/delete",
* },
* field_ui_base_route = "entity.webnewsletter_emails.settings",
* )
*/
class WebnewsletterEmails extends RevisionableContentEntityBase implements WebnewsletterEmailsInterface {
use EntityChangedTrait;
use EntityOwnerTrait;
/**
* {@inheritdoc}
*/
public function preSave(EntityStorageInterface $storage) {
parent::preSave($storage);
if (!$this->getOwnerId()) {
// If no owner has been set explicitly, make the anonymous user the owner.
$this->setOwnerId(0);
}
}
/**
* {@inheritdoc}
*/
public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
$fields = parent::baseFieldDefinitions($entity_type);
$fields['uid'] = BaseFieldDefinition::create('entity_reference')
->setRevisionable(TRUE)
->setLabel(t('Author'))
->setSetting('target_type', 'user')
->setDefaultValueCallback(static::class . '::getDefaultEntityOwner')
->setDisplayOptions('form', [
'type' => 'entity_reference_autocomplete',
'settings' => [
'match_operator' => 'CONTAINS',
'size' => 60,
'placeholder' => '',
],
'weight' => 15,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayOptions('view', [
'label' => 'above',
'type' => 'author',
'weight' => 15,
])
->setDisplayConfigurable('view', TRUE);
$fields['created'] = BaseFieldDefinition::create('created')
->setLabel(t('Authored on'))
->setDescription(t('The time that the web newsletter emails was created.'))
->setDisplayOptions('view', [
'label' => 'above',
'type' => 'timestamp',
'weight' => 20,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayOptions('form', [
'type' => 'datetime_timestamp',
'weight' => 20,
])
->setDisplayConfigurable('view', TRUE);
$fields['changed'] = BaseFieldDefinition::create('changed')
->setLabel(t('Changed'))
->setDescription(t('The time that the web newsletter emails was last edited.'));
return $fields;
}
}
<?php
namespace Drupal\webnewsletter\Form;
use Drupal\Core\Entity\ContentEntityForm;
use Drupal\Core\Form\FormStateInterface;
/**
* Form controller for the web newsletter emails entity edit forms.
*/
class WebnewsletterEmailsForm extends ContentEntityForm {
/**
* {@inheritdoc}
*/
public function save(array $form, FormStateInterface $form_state) {
$result = parent::save($form, $form_state);
$entity = $this->getEntity();
$message_arguments = ['%label' => $entity->toLink()->toString()];
$logger_arguments = [
'%label' => $entity->label(),
'link' => $entity->toLink($this->t('View'))->toString(),
];
switch ($result) {
case SAVED_NEW:
$this->messenger()->addStatus($this->t('New web newsletter emails %label has been created.', $message_arguments));
$this->logger('webnewsletter')->notice('Created new web newsletter emails %label', $logger_arguments);
break;
case SAVED_UPDATED:
$this->messenger()->addStatus($this->t('The web newsletter emails %label has been updated.', $message_arguments));
$this->logger('webnewsletter')->notice('Updated web newsletter emails %label.', $logger_arguments);
break;
}
$form_state->setRedirect('entity.webnewsletter_emails.canonical', ['webnewsletter_emails' => $entity->id()]);
return $result;
}
}
<?php
namespace Drupal\webnewsletter\Form;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
/**
* Configuration form for a web newsletter emails entity type.
*/
class WebnewsletterEmailsSettingsForm extends FormBase {
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'webnewsletter_emails_settings';
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$form['settings'] = [
'#markup' => $this->t('Settings form for a web newsletter emails entity type.'),
];
$form['actions'] = [
'#type' => 'actions',
];
$form['actions']['submit'] = [
'#type' => 'submit',
'#value' => $this->t('Save'),
];
return $form;
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$this->messenger()->addStatus($this->t('The configuration has been updated.'));
}
}
<?php
namespace Drupal\webnewsletter;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Entity\EntityAccessControlHandler;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Session\AccountInterface;
/**
* Defines the access control handler for the web newsletter emails entity type.
*/
class WebnewsletterEmailsAccessControlHandler extends EntityAccessControlHandler {
/**
* {@inheritdoc}
*/
protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
switch ($operation) {
case 'view':
return AccessResult::allowedIfHasPermission($account, 'view web newsletter emails');
case 'update':
return AccessResult::allowedIfHasPermissions(
$account,
['edit web newsletter emails', 'administer web newsletter emails'],
'OR',
);
case 'delete':
return AccessResult::allowedIfHasPermissions(
$account,
['delete web newsletter emails', 'administer web newsletter emails'],
'OR',
);
default:
// No opinion.
return AccessResult::neutral();
}
}
/**
* {@inheritdoc}
*/
protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) {
return AccessResult::allowedIfHasPermissions(
$account,
['create web newsletter emails', 'administer web newsletter emails'],
'OR',
);
}
}
<?php
namespace Drupal\webnewsletter;
use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\Core\Entity\EntityChangedInterface;
use Drupal\user\EntityOwnerInterface;
/**
* Provides an interface defining a web newsletter emails entity type.
*/
interface WebnewsletterEmailsInterface extends ContentEntityInterface, EntityOwnerInterface, EntityChangedInterface {
}
<?php
namespace Drupal\webnewsletter;
use Drupal\Core\Datetime\DateFormatterInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\EntityListBuilder;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Provides a list controller for the web newsletter emails entity type.
*/
class WebnewsletterEmailsListBuilder extends EntityListBuilder {
/**
* The date formatter service.
*
* @var \Drupal\Core\Datetime\DateFormatterInterface
*/
protected $dateFormatter;
/**
* Constructs a new WebnewsletterEmailsListBuilder object.
*
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
* The entity type definition.
* @param \Drupal\Core\Entity\EntityStorageInterface $storage
* The entity storage class.
* @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
* The date formatter service.
*/
public function __construct(EntityTypeInterface $entity_type, EntityStorageInterface $storage, DateFormatterInterface $date_formatter) {
parent::__construct($entity_type, $storage);
$this->dateFormatter = $date_formatter;
}
/**
* {@inheritdoc}
*/
public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
return new static(
$entity_type,
$container->get('entity_type.manager')->getStorage($entity_type->id()),
$container->get('date.formatter')
);
}
/**
* {@inheritdoc}
*/
public function render() {
$build['table'] = parent::render();
$total = $this->getStorage()
->getQuery()
->accessCheck(FALSE)
->count()
->execute();
$build['summary']['#markup'] = $this->t('Total web newsletter emailss: @total', ['@total' => $total]);
return $build;
}
/**
* {@inheritdoc}
*/
public function buildHeader() {
$header['id'] = $this->t('ID');
$header['uid'] = $this->t('Author');
$header['created'] = $this->t('Created');
$header['changed'] = $this->t('Updated');
return $header + parent::buildHeader();
}
/**
* {@inheritdoc}
*/
public function buildRow(EntityInterface $entity) {
/** @var \Drupal\webnewsletter\WebnewsletterEmailsInterface $entity */
$row['id'] = $entity->toLink();
$row['uid']['data'] = [
'#theme' => 'username',
'#account' => $entity->getOwner(),
];
$row['created'] = $this->dateFormatter->format($entity->get('created')->value);
$row['changed'] = $this->dateFormatter->format($entity->getChangedTime());
return $row + parent::buildRow($entity);
}
}
webnewsletter_emails.add_form:
title: 'Add web newsletter emails'
route_name: entity.webnewsletter_emails.add_form
appears_on:
- entity.webnewsletter_emails.collection
entity.webnewsletter_emails.settings:
title: 'Web Newsletter Emails'
description: 'Configure a Web Newsletter Emails entity type.'
route_name: entity.webnewsletter_emails.settings
parent: system.admin_structure
entity.webnewsletter_emails.collection:
title: 'Web Newsletter Emailss'
description: 'List of web newsletter emailss.'
route_name: entity.webnewsletter_emails.collection
parent: system.admin_content
entity.webnewsletter_emails.settings:
title: 'Settings'
route_name: entity.webnewsletter_emails.settings
base_route: entity.webnewsletter_emails.settings
entity.webnewsletter_emails.view:
title: 'View'
route_name: entity.webnewsletter_emails.canonical
base_route: entity.webnewsletter_emails.canonical
entity.webnewsletter_emails.edit_form:
title: 'Edit'
route_name: entity.webnewsletter_emails.edit_form
base_route: entity.webnewsletter_emails.canonical
entity.webnewsletter_emails.delete_form:
title: 'Delete'
route_name: entity.webnewsletter_emails.delete_form
base_route: entity.webnewsletter_emails.canonical
weight: 10
entity.webnewsletter_emails.collection:
title: 'Web Newsletter Emailss'
route_name: entity.webnewsletter_emails.collection
base_route: system.admin_content
weight: 10
administer web newsletter emails:
title: 'Administer web newsletter emails settings'
restrict access: true
delete web newsletter emails:
title: Delete web newsletter emails
create web newsletter emails:
title: Create web newsletter emails
view web newsletter emails:
title: View web newsletter emails
edit web newsletter emails:
title: Edit web newsletter emails
entity.webnewsletter_emails.settings:
path: 'admin/structure/webnewsletter-emails'
defaults:
_form: '\Drupal\webnewsletter\Form\WebnewsletterEmailsSettingsForm'
_title: 'Web Newsletter Emails'
requirements:
_permission: 'administer web newsletter emails'
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment