contextual menu parameterised
This commit is contained in:
parent
27cb58512e
commit
17f8ddba2e
@ -32,7 +32,7 @@ class ContextualMenu extends BlockBase {
|
|||||||
$markup = $this->actorPage();
|
$markup = $this->actorPage();
|
||||||
break;
|
break;
|
||||||
case 'view.cases.page_1':
|
case 'view.cases.page_1':
|
||||||
$markup = $this->caseListPage();
|
$markup = $this->caseListPageForActor();
|
||||||
break;
|
break;
|
||||||
case 'entity.oc_case.canonical':
|
case 'entity.oc_case.canonical':
|
||||||
case 'entity.oc_case.edit_form':
|
case 'entity.oc_case.edit_form':
|
||||||
@ -67,8 +67,8 @@ class ContextualMenu extends BlockBase {
|
|||||||
* - Link to case list for that actor
|
* - Link to case list for that actor
|
||||||
*/
|
*/
|
||||||
private function actorPage() {
|
private function actorPage() {
|
||||||
$actor = \Drupal::routeMatch()->getParameter('oc_actor');
|
$actor_id = \Drupal::routeMatch()->getParameter('oc_actor')->id();
|
||||||
$link = $this->getCaseListLink($actor);
|
$link = $this->getCaseListLink('oc_actor', $actor_id);
|
||||||
return $this->asNavLinks([$link]);
|
return $this->asNavLinks([$link]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,16 +79,17 @@ class ContextualMenu extends BlockBase {
|
|||||||
* - Store the actor id in the session, so that the user experiences
|
* - Store the actor id in the session, so that the user experiences
|
||||||
* a hierachy actor->case->activities which they can navigate
|
* a hierachy actor->case->activities which they can navigate
|
||||||
*/
|
*/
|
||||||
private function caseListPage() {
|
private function caseListPageForActor() {
|
||||||
$actor_id = \Drupal::routeMatch()->getParameter('actor_id');
|
$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);
|
$actor = \Drupal::entityTypeManager()->getStorage('oc_actor')->load($actor_id);
|
||||||
$link = $actor->toLink()->toString();
|
$link = $actor->toLink()->toString();
|
||||||
$markup = $this->asNavLinks([$link]);
|
$markup = $this->asNavLinks([$link]);
|
||||||
$current_path = \Drupal::service('path.current')->getPath();
|
$current_path = \Drupal::service('path.current')->getPath();
|
||||||
$title = "Add new case";
|
$title = "Add new case";
|
||||||
$query = ['actor_id' => $actor_id, 'destination' => $current_path];
|
$query = ['actor_id' => $actor_id, 'destination' => $current_path];
|
||||||
$markup .= $this->generateLinksForAddingNewCases($actor, $title, $query);
|
$markup .= $this->generateLinksForAddingNewCasesForActor($actor, $title, $query);
|
||||||
return $markup;
|
return $markup;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,32 +101,40 @@ class ContextualMenu extends BlockBase {
|
|||||||
*/
|
*/
|
||||||
private function casePage() {
|
private function casePage() {
|
||||||
$case = \Drupal::routeMatch()->getParameter('oc_case');
|
$case = \Drupal::routeMatch()->getParameter('oc_case');
|
||||||
$actor_id = \Drupal::service('user.private_tempstore')->get('opencase')->get('actor_id');
|
$links = [$this->getCaseListLinkForParentEntity(), $this->getActivityListLink($case)];
|
||||||
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)];
|
|
||||||
return $this->asNavLinks($links);
|
return $this->asNavLinks($links);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Contextual menu for Add-New-Case page
|
* 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() {
|
private function caseAddPage() {
|
||||||
$actor_id = \Drupal::service('user.private_tempstore')->get('opencase')->get('actor_id');
|
$link = $this->getCaseListLinkForParentEntity();
|
||||||
$actor = \Drupal::entityTypeManager()->getStorage('oc_actor')->load($actor_id);
|
|
||||||
$link = $this->getCaseListLink($actor);
|
|
||||||
return $this->asNavLinks([$link]);
|
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
|
* Contextual menu for Activity list page
|
||||||
* - Link to the case that the activity list is for
|
* - 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();
|
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
|
* Render given links as nav links div with heading
|
||||||
*/
|
*/
|
||||||
@ -204,7 +197,7 @@ class ContextualMenu extends BlockBase {
|
|||||||
/**
|
/**
|
||||||
* returns html markup.
|
* returns html markup.
|
||||||
*/
|
*/
|
||||||
private function generateLinksForAddingNewCases($actor, $title, $query = []) {
|
private function generateLinksForAddingNewCasesForActor($actor, $title, $query = []) {
|
||||||
$actor_type = $actor->bundle();
|
$actor_type = $actor->bundle();
|
||||||
$allCaseTypes = \Drupal::service('entity_type.bundle.info')->getBundleInfo('oc_case');
|
$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
|
// $allCaseTypes is array where the key is the machine name and the value is array containing label
|
||||||
|
Reference in New Issue
Block a user