contextual menu parameterised
This commit is contained in:
parent
27cb58512e
commit
17f8ddba2e
@ -32,7 +32,7 @@ class ContextualMenu extends BlockBase {
|
||||
$markup = $this->actorPage();
|
||||
break;
|
||||
case 'view.cases.page_1':
|
||||
$markup = $this->caseListPage();
|
||||
$markup = $this->caseListPageForActor();
|
||||
break;
|
||||
case 'entity.oc_case.canonical':
|
||||
case 'entity.oc_case.edit_form':
|
||||
@ -67,8 +67,8 @@ class ContextualMenu extends BlockBase {
|
||||
* - Link to case list for that actor
|
||||
*/
|
||||
private function actorPage() {
|
||||
$actor = \Drupal::routeMatch()->getParameter('oc_actor');
|
||||
$link = $this->getCaseListLink($actor);
|
||||
$actor_id = \Drupal::routeMatch()->getParameter('oc_actor')->id();
|
||||
$link = $this->getCaseListLink('oc_actor', $actor_id);
|
||||
return $this->asNavLinks([$link]);
|
||||
}
|
||||
|
||||
@ -79,16 +79,17 @@ class ContextualMenu extends BlockBase {
|
||||
* - Store the actor id in the session, so that the user experiences
|
||||
* a hierachy actor->case->activities which they can navigate
|
||||
*/
|
||||
private function caseListPage() {
|
||||
private function caseListPageForActor() {
|
||||
$actor_id = \Drupal::routeMatch()->getParameter('actor_id');
|
||||
\Drupal::service('user.private_tempstore')->get('opencase')->set('actor_id', $actor_id);
|
||||
\Drupal::service('user.private_tempstore')->get('opencase')->set('parent_type', 'oc_actor');
|
||||
\Drupal::service('user.private_tempstore')->get('opencase')->set('parent_id', $actor_id);
|
||||
$actor = \Drupal::entityTypeManager()->getStorage('oc_actor')->load($actor_id);
|
||||
$link = $actor->toLink()->toString();
|
||||
$markup = $this->asNavLinks([$link]);
|
||||
$current_path = \Drupal::service('path.current')->getPath();
|
||||
$title = "Add new case";
|
||||
$query = ['actor_id' => $actor_id, 'destination' => $current_path];
|
||||
$markup .= $this->generateLinksForAddingNewCases($actor, $title, $query);
|
||||
$markup .= $this->generateLinksForAddingNewCasesForActor($actor, $title, $query);
|
||||
return $markup;
|
||||
}
|
||||
|
||||
@ -100,32 +101,40 @@ class ContextualMenu extends BlockBase {
|
||||
*/
|
||||
private function casePage() {
|
||||
$case = \Drupal::routeMatch()->getParameter('oc_case');
|
||||
$actor_id = \Drupal::service('user.private_tempstore')->get('opencase')->get('actor_id');
|
||||
if ($actor_id) { // there is not always one stored.
|
||||
$actor = \Drupal::entityTypeManager()->getStorage('oc_actor')->load($actor_id);
|
||||
if ($actor) { // actor may have been deleted.
|
||||
$caseListLink = $this->getCaseListLink($actor);
|
||||
} else {
|
||||
$caseListLink = $this->getCaseListLinkAll();
|
||||
}
|
||||
} else {
|
||||
$caseListLink = $this->getCaseListLinkAll();
|
||||
}
|
||||
$links = [$caseListLink, $this->getActivityListLink($case)];
|
||||
$links = [$this->getCaseListLinkForParentEntity(), $this->getActivityListLink($case)];
|
||||
return $this->asNavLinks($links);
|
||||
}
|
||||
|
||||
/**
|
||||
* Contextual menu for Add-New-Case page
|
||||
* - Link to Case list for the actor that is stored in the session
|
||||
* - Link to Case list for the parent entity (actor by default but plugins can change the type)
|
||||
* that is stored in the session
|
||||
*/
|
||||
private function caseAddPage() {
|
||||
$actor_id = \Drupal::service('user.private_tempstore')->get('opencase')->get('actor_id');
|
||||
$actor = \Drupal::entityTypeManager()->getStorage('oc_actor')->load($actor_id);
|
||||
$link = $this->getCaseListLink($actor);
|
||||
$link = $this->getCaseListLinkForParentEntity();
|
||||
return $this->asNavLinks([$link]);
|
||||
}
|
||||
|
||||
private function getCaseListLinkForParentEntity() {
|
||||
$parent_type = \Drupal::service('user.private_tempstore')->get('opencase')->get('parent_type');
|
||||
$parent_id = \Drupal::service('user.private_tempstore')->get('opencase')->get('parent_id');
|
||||
return $this->getCaseListLink($parent_type, $parent_id);
|
||||
}
|
||||
private function getCaseListLink($entity_type, $entity_id) {
|
||||
$url = "/opencase/$entity_type/$entity_id/case_list";
|
||||
$entity = \Drupal::entityTypeManager()->getStorage($entity_type)->load($entity_id);
|
||||
$link_text = $entity->getName(). ": Cases";
|
||||
return "<a href=$url>$link_text</a>";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a link to the list of all cases
|
||||
*/
|
||||
private function getCaseListLinkAll() {
|
||||
$url = Url::fromRoute('view.cases.page_2');
|
||||
return Link::fromTextAndUrl(t("All cases"), $url)->toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Contextual menu for Activity list page
|
||||
* - Link to the case that the activity list is for
|
||||
@ -173,22 +182,6 @@ class ContextualMenu extends BlockBase {
|
||||
return Link::fromTextAndUrl(t($case->getName() .": Activities"), $url)->toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Given an actor entity, returns a link to their case list
|
||||
*/
|
||||
private function getCaseListLink($actor) {
|
||||
$url = Url::fromRoute('view.cases.page_1', ['actor_id' => $actor->id()]);
|
||||
return Link::fromTextAndUrl(t($actor->getName(). ": Cases"), $url)->toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a link to the list of all cases
|
||||
*/
|
||||
private function getCaseListLinkAll() {
|
||||
$url = Url::fromRoute('view.cases.page_2');
|
||||
return Link::fromTextAndUrl(t("All cases"), $url)->toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Render given links as nav links div with heading
|
||||
*/
|
||||
@ -204,7 +197,7 @@ class ContextualMenu extends BlockBase {
|
||||
/**
|
||||
* returns html markup.
|
||||
*/
|
||||
private function generateLinksForAddingNewCases($actor, $title, $query = []) {
|
||||
private function generateLinksForAddingNewCasesForActor($actor, $title, $query = []) {
|
||||
$actor_type = $actor->bundle();
|
||||
$allCaseTypes = \Drupal::service('entity_type.bundle.info')->getBundleInfo('oc_case');
|
||||
// $allCaseTypes is array where the key is the machine name and the value is array containing label
|
||||
|
Reference in New Issue
Block a user