1 {% extends "base/class.php.twig" %}
4 \Drupal\{{module}}\Controller\{{ entity_class }}Controller.
7 {% block namespace_class %}
8 namespace Drupal\{{ module }}\Controller;
12 use Drupal\Component\Utility\Xss;
13 use Drupal\Core\Controller\ControllerBase;
14 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
16 use Drupal\{{ module }}\Entity\{{ entity_class }}Interface;
18 {% block class_declaration %}
20 * Class {{ entity_class }}Controller.
22 * Returns responses for {{ label }} routes.
24 * @package Drupal\{{ module }}\Controller
26 class {{ entity_class }}Controller extends ControllerBase implements ContainerInjectionInterface {% endblock %}
28 {% block class_methods %}
30 * Displays a {{ label }} revision.
32 * @param int ${{ entity_name }}_revision
33 * The {{ label }} revision ID.
36 * An array suitable for drupal_render().
38 public function revisionShow(${{ entity_name }}_revision) {
39 ${{ entity_name }} = $this->entityManager()->getStorage('{{ entity_name }}')->loadRevision(${{ entity_name }}_revision);
40 $view_builder = $this->entityManager()->getViewBuilder('{{ entity_name }}');
42 return $view_builder->view(${{ entity_name }});
46 * Page title callback for a {{ label }} revision.
48 * @param int ${{ entity_name }}_revision
49 * The {{ label }} revision ID.
54 public function revisionPageTitle(${{ entity_name }}_revision) {
55 ${{ entity_name }} = $this->entityManager()->getStorage('{{ entity_name }}')->loadRevision(${{ entity_name }}_revision);
56 return $this->t('Revision of %title from %date', ['%title' => ${{ entity_name }}->label(), '%date' => format_date(${{ entity_name }}->getRevisionCreationTime())]);
60 * Generates an overview table of older revisions of a {{ label }} .
62 * @param \Drupal\{{ module }}\Entity\{{ entity_class }}Interface ${{ entity_name }}
63 * A {{ label }} object.
66 * An array as expected by drupal_render().
68 public function revisionOverview({{ entity_class }}Interface ${{ entity_name }}) {
69 $account = $this->currentUser();
70 $langcode = ${{ entity_name }}->language()->getId();
71 $langname = ${{ entity_name }}->language()->getName();
72 $languages = ${{ entity_name }}->getTranslationLanguages();
73 $has_translations = (count($languages) > 1);
74 ${{ entity_name }}_storage = $this->entityManager()->getStorage('{{ entity_name }}');
76 $build['#title'] = $has_translations ? $this->t('@langname revisions for %title', ['@langname' => $langname, '%title' => ${{ entity_name }}->label()]) : $this->t('Revisions for %title', ['%title' => ${{ entity_name }}->label()]);
77 $header = [$this->t('Revision'), $this->t('Operations')];
79 $revert_permission = (($account->hasPermission("revert all {{ label|lower }} revisions") || $account->hasPermission('administer {{ label|lower }} entities')));
80 $delete_permission = (($account->hasPermission("delete all {{ label|lower }} revisions") || $account->hasPermission('administer {{ label|lower }} entities')));
84 $vids = ${{ entity_name }}_storage->revisionIds(${{ entity_name }});
86 $latest_revision = TRUE;
88 foreach (array_reverse($vids) as $vid) {
89 /** @var \Drupal\{{ module }}\{{ entity_class }}Interface $revision */
90 $revision = ${{ entity_name }}_storage->loadRevision($vid);
91 // Only show revisions that are affected by the language that is being
93 if ($revision->hasTranslation($langcode) && $revision->getTranslation($langcode)->isRevisionTranslationAffected()) {
95 '#theme' => 'username',
96 '#account' => $revision->getRevisionUser(),
99 // Use revision link to link to revisions that are not active.
100 $date = \Drupal::service('date.formatter')->format($revision->getRevisionCreationTime(), 'short');
101 if ($vid != ${{ entity_name }}->getRevisionId()) {
102 $link = $this->l($date, new Url('entity.{{ entity_name }}.revision', ['{{ entity_name }}' => ${{ entity_name }}->id(), '{{ entity_name }}_revision' => $vid]));
105 $link = ${{ entity_name }}->link($date);
111 '#type' => 'inline_template',
112 '#template' => '{{ '{% trans %}{{ date }} by {{ username }}{% endtrans %}{% if message %}<p class="revision-log">{{ message }}</p>{% endif %}' }}',
115 'username' => \Drupal::service('renderer')->renderPlain($username),
116 'message' => ['#markup' => $revision->getRevisionLogMessage(), '#allowed_tags' => Xss::getHtmlTagList()],
122 if ($latest_revision) {
126 '#markup' => $this->t('Current revision'),
127 '#suffix' => '</em>',
130 foreach ($row as &$current) {
131 $current['class'] = ['revision-current'];
133 $latest_revision = FALSE;
137 if ($revert_permission) {
139 'title' => $this->t('Revert'),
140 {% if is_translatable %}
141 'url' => $has_translations ?
142 Url::fromRoute('entity.{{ entity_name }}.translation_revert', ['{{ entity_name }}' => ${{ entity_name }}->id(), '{{ entity_name }}_revision' => $vid, 'langcode' => $langcode]) :
143 Url::fromRoute('entity.{{ entity_name }}.revision_revert', ['{{ entity_name }}' => ${{ entity_name }}->id(), '{{ entity_name }}_revision' => $vid]),
145 'url' => Url::fromRoute('entity.{{ entity_name }}.revision_revert', ['{{ entity_name }}' => ${{ entity_name }}->id(), '{{ entity_name }}_revision' => $vid]),
150 if ($delete_permission) {
152 'title' => $this->t('Delete'),
153 'url' => Url::fromRoute('entity.{{ entity_name }}.revision_delete', ['{{ entity_name }}' => ${{ entity_name }}->id(), '{{ entity_name }}_revision' => $vid]),
159 '#type' => 'operations',
169 $build['{{ entity_name }}_revisions_table'] = [
172 '#header' => $header,