Removed obsolete code from opencase_defaults
This commit is contained in:
parent
f617fc207e
commit
5f790c73c7
@ -28,31 +28,6 @@ function opencase_defaults_help($route_name, RouteMatchInterface $route_match) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Implements hook_preprocess_page_title
|
|
||||||
*
|
|
||||||
* Modify the page title to include more information
|
|
||||||
*/
|
|
||||||
function opencase_defaults_preprocess_page_title(&$variables) {
|
|
||||||
|
|
||||||
$route_name = \Drupal::routeMatch()->getRouteName();
|
|
||||||
switch ($route_name) {
|
|
||||||
case 'entity.oc_case.canonical':
|
|
||||||
$case = \Drupal::routeMatch()->getParameter('oc_case');
|
|
||||||
$variables['title'] = $case->getName() . ": Case Details and Files";
|
|
||||||
break;
|
|
||||||
case 'view.cases.page_1':
|
|
||||||
$actor_id = \Drupal::routeMatch()->getParameter('actor_id');
|
|
||||||
$actor = \Drupal::entityTypeManager()->getStorage('oc_actor')->load($actor_id);
|
|
||||||
$variables['title'] = $actor->getName() . ": Cases";
|
|
||||||
break;
|
|
||||||
case 'view.activities.page_1':
|
|
||||||
$case_id = \Drupal::routeMatch()->getParameter('case_id');
|
|
||||||
$case = \Drupal::entityTypeManager()->getStorage('oc_case')->load($case_id);
|
|
||||||
$variables['title'] = $case->getName() . ": Activities";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* Implements hook_theme().
|
* Implements hook_theme().
|
||||||
*/
|
*/
|
||||||
@ -64,33 +39,6 @@ function opencase_defaults_theme() {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Implements hook_block_access
|
|
||||||
*
|
|
||||||
* Forbids the opencase_contextual_menu block on pages where it has no content.
|
|
||||||
* (Without this, it was displaying an empty sidebar)
|
|
||||||
*/
|
|
||||||
function opencase_defaults_block_access(\Drupal\block\Entity\Block $block, $operation, \Drupal\Core\Session\AccountInterface $account) {
|
|
||||||
if ($operation == 'view' && $block->getPluginId() == 'opencase_contextual_menu') {
|
|
||||||
$route_name = \Drupal::routeMatch()->getRouteName();
|
|
||||||
$routes_where_it_should_be_shown = [
|
|
||||||
'entity.oc_actor.canonical',
|
|
||||||
'entity.oc_actor.edit_form',
|
|
||||||
'view.cases.page_1',
|
|
||||||
'entity.oc_case.canonical',
|
|
||||||
'entity.oc_case.edit_form',
|
|
||||||
'entity.oc_case.add_form',
|
|
||||||
'view.activities.page_1',
|
|
||||||
'entity.oc_activity.canonical',
|
|
||||||
'entity.oc_activity.edit_form',
|
|
||||||
'entity.oc_activity.add_form',
|
|
||||||
];
|
|
||||||
return AccessResult::forbiddenIf(!in_array($route_name, $routes_where_it_should_be_shown))->addCacheableDependency($block);
|
|
||||||
}
|
|
||||||
|
|
||||||
// No opinion.
|
|
||||||
return AccessResult::neutral();
|
|
||||||
}
|
|
||||||
|
|
||||||
function opencase_defaults_entity_base_field_info($entity_type) {
|
function opencase_defaults_entity_base_field_info($entity_type) {
|
||||||
$fields = array();
|
$fields = array();
|
||||||
@ -108,47 +56,9 @@ function opencase_defaults_entity_base_field_info($entity_type) {
|
|||||||
'weight' => -6,
|
'weight' => -6,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add Involved Parties field to cases
|
|
||||||
if ($entity_type->id() === 'oc_case') {
|
|
||||||
$fields['actors_involved'] = BaseFieldDefinition::create('entity_reference')
|
|
||||||
->setLabel(t('Involved Parties'))
|
|
||||||
->setDescription(t('People involved in this case. To add one, start typing their name.'))
|
|
||||||
->setSetting('target_type', 'oc_actor')
|
|
||||||
->setSetting('handler', 'default')
|
|
||||||
->setTranslatable(TRUE)
|
|
||||||
->setCardinality(-1)
|
|
||||||
->setDisplayOptions('form', [
|
|
||||||
'label' => 'above',
|
|
||||||
'type' => 'entity_reference_autocomplete',
|
|
||||||
'weight' => -2,
|
|
||||||
'settings' => [
|
|
||||||
'match_operator' => 'CONTAINS',
|
|
||||||
'size' => '60',
|
|
||||||
'autocomplete_type' => 'tags',
|
|
||||||
'placeholder' => '',
|
|
||||||
],
|
|
||||||
])
|
|
||||||
->setDisplayOptions('view', [
|
|
||||||
'label' => 'above',
|
|
||||||
])
|
|
||||||
->setDefaultValueCallback('opencase_defaults_actors_involved_callback')
|
|
||||||
->setRequired(TRUE);
|
|
||||||
}
|
|
||||||
return $fields;
|
return $fields;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* When creating a case, it sets the first involved party to the actor
|
|
||||||
* id from the URL, and the second to the author's linked actor
|
|
||||||
* (if it exists and is different)
|
|
||||||
*/
|
|
||||||
function opencase_defaults_actors_involved_callback() {
|
|
||||||
$author_linked_actor_id = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id())->get('field_linked_opencase_actor')->target_id;
|
|
||||||
$currently_viewed_actor_id = \Drupal::request()->query->get('actor_id');
|
|
||||||
return array_unique([$currently_viewed_actor_id, $author_linked_actor_id]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implements hook_form_ID_alter
|
* Implements hook_form_ID_alter
|
||||||
*/
|
*/
|
||||||
|
@ -8,16 +8,6 @@ namespace Drupal\opencase;
|
|||||||
*/
|
*/
|
||||||
class EntityTypeRelations {
|
class EntityTypeRelations {
|
||||||
|
|
||||||
|
|
||||||
public static function getAllowedActorTypesForCaseType($case_type) {
|
|
||||||
$base_field_override = \Drupal\Core\Field\Entity\BaseFieldOverride::load("oc_case.$case_type.actors_involved");
|
|
||||||
$allowedActorTypes = array();
|
|
||||||
if ($base_field_override) {
|
|
||||||
$allowedActorTypes = $base_field_override->getSettings()['handler_settings']['target_bundles'];
|
|
||||||
}
|
|
||||||
return $allowedActorTypes; // // format: ['volunteer' => 0, 'client' => 'client']
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getAllowedActivityTypesForCaseType($case_type) {
|
public static function getAllowedActivityTypesForCaseType($case_type) {
|
||||||
$caseTypeConfig = \Drupal::entityTypeManager()->getStorage('oc_case_type')->load($case_type);
|
$caseTypeConfig = \Drupal::entityTypeManager()->getStorage('oc_case_type')->load($case_type);
|
||||||
$allowedActivityTypes = $caseTypeConfig->get('allowedActivityTypes'); // format: ['application' => 'application', 'interview' => 0]
|
$allowedActivityTypes = $caseTypeConfig->get('allowedActivityTypes'); // format: ['application' => 'application', 'interview' => 0]
|
||||||
|
@ -1,244 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Drupal\opencase\Plugin\Block;
|
|
||||||
|
|
||||||
use Drupal\opencase\EntityTypeRelations;
|
|
||||||
use Drupal\Core\Block\BlockBase;
|
|
||||||
use Drupal\Core\Link;
|
|
||||||
use Drupal\Core\Url;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides a 'ContextualMenu' block.
|
|
||||||
*
|
|
||||||
* Displays contextual links on certain pages.
|
|
||||||
* The block is forbidden by hook_block_access on other pages, so if more are added they need adding there too.
|
|
||||||
*
|
|
||||||
* @Block(
|
|
||||||
* id = "opencase_contextual_menu",
|
|
||||||
* admin_label = @Translation("OpenCase Contextual Menu"),
|
|
||||||
* )
|
|
||||||
*/
|
|
||||||
class ContextualMenu extends BlockBase {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function build() {
|
|
||||||
|
|
||||||
$route_name = \Drupal::routeMatch()->getRouteName();
|
|
||||||
switch ($route_name) {
|
|
||||||
case 'entity.oc_actor.canonical':
|
|
||||||
case 'entity.oc_actor.edit_form':
|
|
||||||
$markup = $this->actorPage();
|
|
||||||
break;
|
|
||||||
case 'view.cases.page_1':
|
|
||||||
$markup = $this->caseListPageForActor();
|
|
||||||
break;
|
|
||||||
case 'entity.oc_case.canonical':
|
|
||||||
case 'entity.oc_case.edit_form':
|
|
||||||
$markup = $this->casePage();
|
|
||||||
break;
|
|
||||||
case 'entity.oc_case.add_form':
|
|
||||||
$markup = $this->caseAddPage();
|
|
||||||
break;
|
|
||||||
case 'view.activities.page_1':
|
|
||||||
$markup = $this->activityListPage();
|
|
||||||
break;
|
|
||||||
case 'entity.oc_activity.canonical':
|
|
||||||
case 'entity.oc_activity.edit_form':
|
|
||||||
$markup = $this->activityPage();
|
|
||||||
break;
|
|
||||||
case 'entity.oc_activity.add_form':
|
|
||||||
$markup = $this->activityAddPage();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
$build = [];
|
|
||||||
$build['contextual_menu'] = [
|
|
||||||
'#markup' => "<div id='opencase_contextual_menu'>$markup</div",
|
|
||||||
'#cache' => ['max-age' => 0]
|
|
||||||
];
|
|
||||||
return $build;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Contextual menu for Actor page
|
|
||||||
* - Link to case list for that actor
|
|
||||||
*/
|
|
||||||
private function actorPage() {
|
|
||||||
$actor_id = \Drupal::routeMatch()->getParameter('oc_actor')->id();
|
|
||||||
$link = $this->getCaseListLink('oc_actor', $actor_id);
|
|
||||||
return $this->asNavLinks([$link]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Contextual menu for Case list page
|
|
||||||
* - Link to actor whose case list this is
|
|
||||||
* - Links to add cases of various types
|
|
||||||
* - Store the actor id in the session, so that the user experiences
|
|
||||||
* a hierachy actor->case->activities which they can navigate
|
|
||||||
*/
|
|
||||||
private function caseListPageForActor() {
|
|
||||||
$actor_id = \Drupal::routeMatch()->getParameter('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->generateLinksForAddingNewCasesForActor($actor, $title, $query);
|
|
||||||
return $markup;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Contextual menu for Case page
|
|
||||||
* - Link either the case list for the actor stored in the session (because their case list page was previously loaded)
|
|
||||||
* or the home page
|
|
||||||
* - Link to Activity list for that case
|
|
||||||
*/
|
|
||||||
private function casePage() {
|
|
||||||
$case = \Drupal::routeMatch()->getParameter('oc_case');
|
|
||||||
$links = [$this->getCaseListLinkForParentEntity(), $this->getActivityListLink($case)];
|
|
||||||
return $this->asNavLinks($links);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Contextual menu for Add-New-Case page
|
|
||||||
* - 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() {
|
|
||||||
$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
|
|
||||||
* - Links to add activities of various types
|
|
||||||
*/
|
|
||||||
private function activityListPage() {
|
|
||||||
$case_id = \Drupal::routeMatch()->getParameter('case_id');
|
|
||||||
$case = \Drupal::entityTypeManager()->getStorage('oc_case')->load($case_id);
|
|
||||||
$url = $case->toUrl();
|
|
||||||
$link = Link::fromTextAndUrl(t($case->getName() .": Case Details and Files"), $url)->toString();
|
|
||||||
$markup = $this->asNavLinks([$link]);
|
|
||||||
$current_path = \Drupal::service('path.current')->getPath();
|
|
||||||
return $markup . $this->generateLinksForAddingNewActivities($case, "Add activity", ['case_id' => $case_id, 'destination' => $current_path]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Contextual menu for Activity page
|
|
||||||
* - Link to the activity list for the case
|
|
||||||
*/
|
|
||||||
private function activityPage() {
|
|
||||||
$activity = \Drupal::routeMatch()->getParameter('oc_activity');
|
|
||||||
$case = $activity->oc_case->entity;
|
|
||||||
$link = $this->getActivityListLink($case);
|
|
||||||
return $this->asNavLinks([$link]);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Contextual menu for Add-New-Activity page
|
|
||||||
* - Link to the activity list for the case
|
|
||||||
*/
|
|
||||||
private function activityAddPage() {
|
|
||||||
$case_id = \Drupal::request()->query->get('case_id');
|
|
||||||
$case = \Drupal::entityTypeManager()->getStorage('oc_case')->load($case_id);
|
|
||||||
$link = $this->getActivityListLink($case);
|
|
||||||
return $this->asNavLinks([$link]);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Given an case entity, returns a link to the activity list
|
|
||||||
*/
|
|
||||||
private function getActivityListLink($case) {
|
|
||||||
$url = Url::fromRoute('view.activities.page_1', ['case_id' => $case->id()]);
|
|
||||||
return Link::fromTextAndUrl(t($case->getName() .": Activities"), $url)->toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Render given links as nav links div with heading
|
|
||||||
*/
|
|
||||||
private function asNavLinks(array $links) {
|
|
||||||
$markup = '';
|
|
||||||
foreach($links as $link) {
|
|
||||||
$markup .= "<p>$link</p>";
|
|
||||||
}
|
|
||||||
$title = t("Go to:");
|
|
||||||
return "<div class='opencase_nav_links'><h1>$title</h1>$markup</div>";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* returns html markup.
|
|
||||||
*/
|
|
||||||
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
|
|
||||||
// Now we pick just the allowed ones and produced an array of labels keyed by machine name
|
|
||||||
$allowedCaseTypes = array();
|
|
||||||
foreach(array_keys($allCaseTypes) as $caseType) {
|
|
||||||
if (in_array($actor_type, EntityTypeRelations::getAllowedActorTypesForCaseType($caseType))) {
|
|
||||||
$allowedCaseTypes[$caseType] = $allCaseTypes[$caseType]['label'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$title = t($title);
|
|
||||||
$markup = "<h1>$title: </h1>";
|
|
||||||
foreach($allowedCaseTypes as $machine_name => $label) {
|
|
||||||
$url = \Drupal\Core\Url::fromRoute("entity.oc_case.add_form", ['oc_case_type' => $machine_name]);
|
|
||||||
$url->setOption('query', $query);
|
|
||||||
$link = \Drupal\Core\Link::fromTextAndUrl($label, $url)->toString();
|
|
||||||
$markup .= "<p>$link</p>";
|
|
||||||
}
|
|
||||||
return "<div class='opencase_add_links'>$markup</div>";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* returns html markup.
|
|
||||||
*/
|
|
||||||
private function generateLinksForAddingNewActivities($case, $title, $query = []) {
|
|
||||||
$title = t($title);
|
|
||||||
$markup = "<h1>$title: </h1>";
|
|
||||||
$caseType = $case->bundle();
|
|
||||||
$allActivityTypes = \Drupal::service('entity_type.bundle.info')->getBundleInfo('oc_activity');
|
|
||||||
// $allActivityTypes is array where the key is the machine name and the value is array containing label
|
|
||||||
// Now we pick just the allowed ones and produced an array of labels keyed by machine name
|
|
||||||
$allowedActivityTypes = EntityTypeRelations::getAllowedActivityTypesForCaseType($caseType);
|
|
||||||
foreach($allowedActivityTypes as $machine_name => $is_allowed) {
|
|
||||||
if ($is_allowed) {
|
|
||||||
$label = $allActivityTypes[$machine_name]['label'];
|
|
||||||
$url = \Drupal\Core\Url::fromRoute("entity.oc_activity.add_form", ['oc_activity_type' => $machine_name]);
|
|
||||||
$url->setOption('query', $query);
|
|
||||||
$link = \Drupal\Core\Link::fromTextAndUrl($label, $url)->toString();
|
|
||||||
$markup .= "<p>$link</p>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return "<div class='opencase_add_links'>$markup</div>";
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user