View source
<?php
namespace Drupal\apigee_edge_teams\Entity;
use Drupal\apigee_edge\Entity\EdgeEntityRouteProvider;
use Drupal\apigee_edge_teams\Controller\TeamMembersList;
use Drupal\apigee_edge_teams\Form\AddTeamMembersForm;
use Drupal\apigee_edge_teams\Form\EditTeamMemberForm;
use Drupal\apigee_edge_teams\Form\RemoveTeamMemberForm;
use Drupal\apigee_edge_teams\TeamContextManagerInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use Symfony\Component\Routing\Route;
class TeamRouteProvider extends EdgeEntityRouteProvider {
use TeamRoutingHelperTrait;
public function getRoutes(EntityTypeInterface $entity_type) {
$collection = parent::getRoutes($entity_type);
$entity_type_id = $entity_type
->id();
if ($list_team_members = $this
->getListTeamMembersRoute($entity_type)) {
$collection
->add("entity.{$entity_type_id}.members", $list_team_members);
}
if ($add_team_members = $this
->getAddTeamMembersRoute($entity_type)) {
$collection
->add("entity.{$entity_type_id}.add_members", $add_team_members);
}
if ($edit_team_member = $this
->getEditTeamMemberRoute($entity_type)) {
$collection
->add("entity.{$entity_type_id}.member.edit", $edit_team_member);
}
if ($remove_team_member = $this
->getRemoveTeamMemberRoute($entity_type)) {
$collection
->add("entity.{$entity_type_id}.member.remove", $remove_team_member);
}
return $collection;
}
protected function getCanonicalRoute(EntityTypeInterface $entity_type) {
$route = parent::getCanonicalRoute($entity_type);
$route
->setOption(TeamContextManagerInterface::DEVELOPER_ROUTE_OPTION_NAME, 'entity.user.canonical');
return $route;
}
protected function getCollectionRoute(EntityTypeInterface $entity_type) {
$route = parent::getCollectionRoute($entity_type);
if ($route) {
$route
->setDefault('_title_callback', 'apigee_edge_teams_team_listing_page_title');
$requirements = $route
->getRequirements();
unset($requirements['_permission']);
$requirements['_user_is_logged_in'] = 'TRUE';
$route
->setRequirements($requirements);
}
return $route;
}
protected function getListTeamMembersRoute(EntityTypeInterface $entity_type) {
if ($entity_type
->hasLinkTemplate('members')) {
$route = new Route($entity_type
->getLinkTemplate('members'));
$route
->setDefault('_controller', TeamMembersList::class . '::overview');
$route
->setDefault('_title_callback', TeamTitleProvider::class . '::teamMembersList');
$route
->setDefault('entity_type_id', $entity_type
->id());
$this
->ensureTeamParameter($route);
$route
->setRequirement('_apigee_edge_teams_manage_team_access', 'TRUE');
return $route;
}
return NULL;
}
protected function getAddTeamMembersRoute(EntityTypeInterface $entity_type) {
if ($entity_type
->hasLinkTemplate('add-members')) {
$route = new Route($entity_type
->getLinkTemplate('add-members'));
$route
->setDefault('_form', AddTeamMembersForm::class);
$route
->setDefault('_title', 'Invite members');
$route
->setDefault('entity_type_id', $entity_type
->id());
$this
->ensureTeamParameter($route);
$route
->setRequirement('_apigee_edge_teams_manage_team_access', 'TRUE');
return $route;
}
return NULL;
}
protected function getEditTeamMemberRoute(EntityTypeInterface $entity_type) {
$route = new Route('/teams/{team}/members/{developer}/edit');
$route
->setDefault('_form', EditTeamMemberForm::class);
$route
->setDefault('_title', 'Edit member');
$route
->setDefault('entity_type_id', $entity_type
->id());
$route
->setRequirement('_apigee_edge_teams_manage_team_access', 'TRUE');
$route
->setOption('parameters', [
'team' => [
'type' => 'entity:team',
'converter' => 'paramconverter.entity',
],
'developer' => [
'converter' => 'paramconverter.developer_with_user',
],
]);
return $route;
}
protected function getRemoveTeamMemberRoute(EntityTypeInterface $entity_type) {
$route = new Route('/teams/{team}/members/{developer}/remove');
$route
->setDefault('_form', RemoveTeamMemberForm::class);
$route
->setDefault('_title', 'Remove member');
$route
->setDefault('entity_type_id', $entity_type
->id());
$route
->setRequirement('_apigee_edge_teams_manage_team_access', 'TRUE');
$route
->setOption('parameters', [
'team' => [
'type' => 'entity:team',
'converter' => 'paramconverter.entity',
],
'developer' => [
'converter' => 'paramconverter.developer_with_user',
],
]);
return $route;
}
}