/** * Gets the moderation-form route. * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type. * * @return \Symfony\Component\Routing\Route|null * The generated route, if available. */ protected function getModerationFormRoute(EntityTypeInterface $entity_type) { if ($entity_type->hasLinkTemplate('moderation-form') && $entity_type->getFormClass('moderation')) { $entity_type_id = $entity_type->id(); $route = new Route($entity_type->getLinkTemplate('moderation-form')); $route->setDefaults(['_entity_form' => "{$entity_type_id}.moderation", '_title' => 'Moderation'])->setRequirement('_permission', 'administer moderation states')->setOption('parameters', [$entity_type_id => ['type' => 'entity:' . $entity_type_id]]); return $route; } }
/** * Returns the delete multiple form route. * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type. * * @return \Symfony\Component\Routing\Route|null * The generated route, if available. */ protected function deleteMultipleFormRoute(EntityTypeInterface $entity_type) { if ($entity_type->hasLinkTemplate('delete-multiple-form')) { $route = new Route($entity_type->getLinkTemplate('delete-multiple-form')); $route->setDefault('_form', '\\Drupal\\entity\\Form\\DeleteMultiple'); $route->setDefault('entity_type_id', $entity_type->id()); $route->setRequirement('_permission', $entity_type->getAdminPermission()); return $route; } }
/** * Returns the add form route. * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type. * * @return \Symfony\Component\Routing\Route|null * The generated route, if available. */ protected function addFormRoute(EntityTypeInterface $entity_type) { if ($entity_type->hasLinkTemplate('add-form')) { $route = new Route($entity_type->getLinkTemplate('add-form')); $route->setDefault('_controller', '\\Drupal\\entity\\Controller\\EntityCreateController::addForm'); $route->setDefault('_title_callback', '\\Drupal\\entity\\Controller\\EntityCreateController::addFormTitle'); $route->setDefault('entity_type_id', $entity_type->id()); $route->setRequirement('_entity_create_access', $entity_type->id()); return $route; } }
/** * Gets the entity revision view route. * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type. * * @return \Symfony\Component\Routing\Route|null * The generated route, if available. */ protected function getRevisionViewRoute(EntityTypeInterface $entity_type) { if ($entity_type->hasLinkTemplate('revision')) { $entity_type_id = $entity_type->id(); $route = new Route($entity_type->getLinkTemplate('revision')); $route->addDefaults(['_controller' => '\\Drupal\\entity\\Controller\\RevisionController::view', '_title_callback' => '\\Drupal\\Core\\Entity\\Controller\\EntityController::title']); $route->addRequirements(['_entity_access_revision' => "{$entity_type_id}.view"]); $route->setOption('parameters', [$entity_type->id() => ['type' => 'entity:' . $entity_type->id()], $entity_type->id() . '_revision' => ['type' => 'entity_revision:' . $entity_type->id()]]); return $route; } }
/** * Form submission handler for ContentTranslationHandler::entityFormAlter(). * * Takes care of content translation deletion. */ function entityFormDeleteTranslation($form, FormStateInterface $form_state) { /** @var \Drupal\Core\Entity\ContentEntityFormInterface $form_object */ $form_object = $form_state->getFormObject(); /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */ $entity = $form_object->getEntity(); $entity_type_id = $entity->getEntityTypeId(); if ($entity->access('delete') && $this->entityType->hasLinkTemplate('delete-form')) { $form_state->setRedirectUrl($entity->urlInfo('delete-form')); } else { $form_state->setRedirect('content_translation.translation_delete_' . $entity_type_id, [$entity_type_id => $entity->id(), 'language' => $form_object->getFormLangcode($form_state)]); } }
/** * Gets the moderation-form route. * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type. * * @return \Symfony\Component\Routing\Route|null * The generated route, if available. */ protected function getLatestVersionRoute(EntityTypeInterface $entity_type) { if ($entity_type->hasLinkTemplate('latest-version') && $entity_type->hasViewBuilderClass()) { $entity_type_id = $entity_type->id(); $route = new Route($entity_type->getLinkTemplate('latest-version')); $route->addDefaults(['_entity_view' => "{$entity_type_id}.full", '_title_callback' => '\\Drupal\\Core\\Entity\\Controller\\EntityController::title'])->setRequirement('_entity_access', "{$entity_type_id}.view")->setRequirement('_permission', 'view latest version,view any unpublished content')->setRequirement('_content_moderation_latest_version', 'TRUE')->setOption('_content_moderation_entity_type', $entity_type_id)->setOption('parameters', [$entity_type_id => ['type' => 'entity:' . $entity_type_id, 'load_forward_revision' => 1]]); // Entity types with serial IDs can specify this in their route // requirements, improving the matching process. if ($this->getEntityTypeIdKeyType($entity_type) === 'integer') { $route->setRequirement($entity_type_id, '\\d+'); } return $route; } }
/** * Gets the add-form route. * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type. * * @return \Symfony\Component\Routing\Route|null * The generated route, if available. */ protected function getAddFormRoute(EntityTypeInterface $entity_type) { if ($entity_type->hasLinkTemplate('add-form')) { $entity_type_id = $entity_type->id(); $parameters = [$entity_type_id => ['type' => 'entity:' . $entity_type_id]]; $route = new Route($entity_type->getLinkTemplate('add-form')); $bundle_entity_type_id = $entity_type->getBundleEntityType(); // Content entities with bundles are added via a dedicated controller. $route->setDefaults(['_controller' => 'Drupal\\drupalbristol_sponsors\\Controller\\SponsorEntityAddController::addForm', '_title_callback' => 'Drupal\\drupalbristol_sponsors\\Controller\\SponsorEntityAddController::getAddFormTitle'])->setRequirement('_entity_create_access', $entity_type_id . ':{' . $bundle_entity_type_id . '}'); $parameters[$bundle_entity_type_id] = ['type' => 'entity:' . $bundle_entity_type_id]; $route->setOption('parameters', $parameters)->setOption('_admin_route', TRUE); return $route; } }
/** * Sets the entity links in case corresponding link templates exist. * * @param array $data * The views data of the base table. */ protected function addEntityLinks(array &$data) { $entity_type_id = $this->entityType->id(); $t_arguments = ['@entity_type_label' => $this->entityType->getLabel()]; if ($this->entityType->hasLinkTemplate('canonical')) { $data['view_' . $entity_type_id] = ['field' => ['title' => $this->t('Link to @entity_type_label', $t_arguments), 'help' => $this->t('Provide a view link to the @entity_type_label.', $t_arguments), 'id' => 'entity_link']]; } if ($this->entityType->hasLinkTemplate('edit-form')) { $data['edit_' . $entity_type_id] = ['field' => ['title' => $this->t('Link to edit @entity_type_label', $t_arguments), 'help' => $this->t('Provide an edit link to the @entity_type_label.', $t_arguments), 'id' => 'entity_link_edit']]; } if ($this->entityType->hasLinkTemplate('delete-form')) { $data['delete_' . $entity_type_id] = ['field' => ['title' => $this->t('Link to delete @entity_type_label', $t_arguments), 'help' => $this->t('Provide a delete link to the @entity_type_label.', $t_arguments), 'id' => 'entity_link_delete']]; } }
/** * Gets the add-form route. * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type. * * @return \Symfony\Component\Routing\Route|null * The generated route, if available. */ protected function getAddFormRoute(EntityTypeInterface $entity_type) { if ($entity_type->hasLinkTemplate('add-form')) { $entity_type_id = $entity_type->id(); $route = new Route($entity_type->getLinkTemplate('add-form')); // Use the add form handler, if available, otherwise default. $operation = 'default'; if ($entity_type->getFormClass('add')) { $operation = 'add'; } $route->setDefaults(['_entity_form' => "{$entity_type_id}.{$operation}", '_title' => "Add {$entity_type->getLabel()}"])->setRequirement('_entity_create_access', $entity_type_id)->setOption('parameters', [$entity_type_id => ['type' => 'entity:' . $entity_type_id]])->setOption('_admin_route', TRUE); return $route; } }
/** * Gets the add-form route. * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type. * * @return \Symfony\Component\Routing\Route|null * The generated route, if available. */ protected function getAddFormRoute(EntityTypeInterface $entity_type) { if ($entity_type->hasLinkTemplate('add-form')) { $entity_type_id = $entity_type->id(); $parameters = [$entity_type_id => ['type' => 'entity:' . $entity_type_id]]; $route = new Route($entity_type->getLinkTemplate('add-form')); // Content entities with bundles are added via a dedicated controller. if ($bundle_entity_type_id = $entity_type->getBundleEntityType()) { $route->setDefaults(['_controller' => 'Drupal\\custom_page\\Controller\\CustomPageAddController::addForm', '_title_callback' => 'Drupal\\custom_page\\Controller\\CustomPageAddController::getAddFormTitle'])->setRequirement('_entity_create_access', $entity_type_id . ':{' . $bundle_entity_type_id . '}'); $parameters[$bundle_entity_type_id] = ['type' => 'entity:' . $bundle_entity_type_id]; } else { // Use the add form handler, if available, otherwise default. $operation = 'default'; if ($entity_type->getFormClass('add')) { $operation = 'add'; } $route->setDefaults(['_entity_form' => "{$entity_type_id}.{$operation}", '_title' => "Add {$entity_type->getLabel()}"])->setRequirement('_entity_create_access', $entity_type_id); } $route->setOption('parameters', $parameters)->setOption('_admin_route', TRUE); return $route; } }
/** * Gets the delete-form route. * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type. * * @return \Symfony\Component\Routing\Route|null * The generated route, if available. */ protected function getDeleteFormRoute(EntityTypeInterface $entity_type) { if ($entity_type->hasLinkTemplate('delete-form')) { $entity_type_id = $entity_type->id(); $route = new Route($entity_type->getLinkTemplate('delete-form')); $route->addDefaults(['_entity_form' => "{$entity_type_id}.delete", '_title_callback' => '\\Drupal\\Core\\Entity\\Controller\\EntityController::deleteTitle'])->setRequirement('_entity_access', "{$entity_type_id}.delete")->setOption('parameters', [$entity_type_id => ['type' => 'entity:' . $entity_type_id]]); // Entity types with serial IDs can specify this in their route // requirements, improving the matching process. if ($this->getEntityTypeIdKeyType($entity_type) === 'integer') { $route->setRequirement($entity_type_id, '\\d+'); } return $route; } }
/** * Gets the delete-form route. * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type. * * @return \Symfony\Component\Routing\Route|null * The generated route, if available. */ protected function getDeleteFormRoute(EntityTypeInterface $entity_type) { if ($entity_type->hasLinkTemplate('delete-form')) { $entity_type_id = $entity_type->id(); $route = new Route($entity_type->getLinkTemplate('delete-form')); $route->addDefaults(['_entity_form' => "{$entity_type_id}.delete", '_title_callback' => '\\Drupal\\Core\\Entity\\Controller\\EntityController::deleteTitle'])->setRequirement('_entity_access', "{$entity_type_id}.delete")->setOption('parameters', [$entity_type_id => ['type' => 'entity:' . $entity_type_id]]); return $route; } }
/** * Gets the entity revision version history route. * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type. * * @return \Symfony\Component\Routing\Route|null * The generated route, if available. */ protected function getRevisionHistoryRoute($entity_type) { if ($entity_type->hasLinkTemplate('version-history')) { $entity_type_id = $entity_type->id(); $route = new Route($entity_type->getLinkTemplate('version-history')); $route->addDefaults(['_controller' => '\\Drupal\\entity\\Controller\\RevisionOverviewController::revisionOverviewController', '_title' => 'Revisions']); $route->setRequirement('_entity_access_revision', "{$entity_type_id}.list"); $route->setOption('entity_type_id', $entity_type->id()); $route->setOption('parameters', [$entity_type->id() => ['type' => 'entity:' . $entity_type->id()]]); return $route; } }
/** * Gets the collection route. * * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type * The entity type. * * @return \Symfony\Component\Routing\Route|null * The generated route, if available. */ protected function getCollectionRoute(EntityTypeInterface $entity_type) { // If the entity type does not provide an admin permission, there is no way // to control access, so we cannot provide a route in a sensible way. if ($entity_type->hasLinkTemplate('collection') && $entity_type->hasListBuilderClass() && ($admin_permission = $entity_type->getAdminPermission())) { $route = new Route($entity_type->getLinkTemplate('collection')); $route->addDefaults(['_entity_list' => $entity_type->id(), '_title' => '@label entities', '_title_arguments' => ['@label' => $entity_type->getLabel()]])->setRequirement('_permission', $admin_permission); return $route; } }