salesforce_mapping_ui.module in Salesforce Suite 8.4
Same filename and directory in other branches
Manages Salesforce object and Drupal entity mappings.
File
modules/salesforce_mapping_ui/salesforce_mapping_ui.moduleView source
<?php
/**
* @file
* Manages Salesforce object and Drupal entity mappings.
*/
use Drupal\Core\Entity\EntityInterface;
use Drupal\salesforce_mapping_ui\SalesforceMappingList;
use Drupal\salesforce_mapping_ui\Form\SalesforceMappingAddForm;
use Drupal\salesforce_mapping_ui\Form\SalesforceMappingEditForm;
use Drupal\salesforce_mapping_ui\Form\SalesforceMappingDisableForm;
use Drupal\salesforce_mapping_ui\Form\SalesforceMappingDeleteForm;
use Drupal\salesforce_mapping_ui\Form\SalesforceMappingEnableForm;
use Drupal\salesforce_mapping_ui\Form\SalesforceMappingFieldsForm;
use Drupal\salesforce_mapping_ui\MappedObjectList;
use Drupal\salesforce_mapping_ui\Form\MappedObjectForm;
/**
* Implements hook_entity_type_alter().
*/
function salesforce_mapping_ui_entity_type_alter(array &$entity_types) {
// There's no good way to add a link template based on existing mapping
// definitions while we're building entity type definitions. We can't load
// existing mappings, because to do that we need to load entity types which
// creates an infinite recursion. So, we set the link template on any
// mappable entity, and hide it for any entity types that don't have
// mappings.
foreach ($entity_types as $entity_type_id => $entity_type) {
if ($entity_type_id == 'salesforce_mapping' || $entity_type_id == 'salesforce_mapped_object') {
continue;
}
if ($entity_type
->hasViewBuilderClass() && $entity_type
->hasLinkTemplate('canonical')) {
$entity_type
->setLinkTemplate('salesforce', "/{$entity_type_id}/{{$entity_type_id}}/salesforce");
}
}
// Set our UI classes for SalesforceMappingEntity.
$entity_types['salesforce_mapping']
->setHandlerClass('list_builder', SalesforceMappingList::class);
$entity_types['salesforce_mapping']
->setFormClass('add', SalesforceMappingAddForm::class);
$entity_types['salesforce_mapping']
->setFormClass('edit', SalesforceMappingEditForm::class);
$entity_types['salesforce_mapping']
->setFormClass('disable', SalesforceMappingDisableForm::class);
$entity_types['salesforce_mapping']
->setFormClass('delete', SalesforceMappingDeleteForm::class);
$entity_types['salesforce_mapping']
->setFormClass('enable', SalesforceMappingEnableForm::class);
$entity_types['salesforce_mapping']
->setFormClass('fields', SalesforceMappingFieldsForm::class);
$entity_types['salesforce_mapping']
->setLinkTemplate('add-form', '/admin/structure/salesforce/mappings/add');
$entity_types['salesforce_mapping']
->setLinkTemplate('edit-form', '/admin/structure/salesforce/mappings/manage/{salesforce_mapping}');
$entity_types['salesforce_mapping']
->setLinkTemplate('delete-form', '/admin/structure/salesforce/mappings/manage/{salesforce_mapping}/delete');
// Set UI classes for MappedObject.
$entity_types['salesforce_mapped_object']
->setHandlerClass('list_builder', MappedObjectList::class);
$entity_types['salesforce_mapped_object']
->setFormClass('add', MappedObjectForm::class);
$entity_types['salesforce_mapped_object']
->setFormClass('edit', MappedObjectForm::class);
$entity_types['salesforce_mapped_object']
->setFormClass('delete', MappedObjectForm::class);
$entity_types['salesforce_mapped_object']
->setFormClass('default', MappedObjectForm::class);
$entity_types['salesforce_mapped_object']
->setLinkTemplate('add-form', '/admin/content/salesforce/add');
$entity_types['salesforce_mapped_object']
->setLinkTemplate('edit-form', '/admin/content/salesforce/{salesforce_mapped_object}/edit');
$entity_types['salesforce_mapped_object']
->setLinkTemplate('delete-form', '/admin/content/salesforce/{salesforce_mapped_object}/delete');
$entity_types['salesforce_mapped_object']
->setLinkTemplate('canonical', '/admin/content/salesforce/{salesforce_mapped_object}');
}
/**
* Implements hook_local_actions_alter().
*/
function salesforce_mapping_ui_menu_local_actions_alter(&$local_actions) {
foreach (\Drupal::entityTypeManager()
->getDefinitions() as $entity_type_id => $entity_type) {
if (\Drupal::entityTypeManager()
->getStorage('salesforce_mapping')
->loadByDrupal($entity_type_id)) {
$local_actions['salesforce_mapped_object.add_action']['appears_on'][] = "entity.{$entity_type_id}.salesforce";
}
}
}
/**
* Implements hook_entity_operation().
*/
function salesforce_mapping_ui_entity_operation(EntityInterface $entity) {
$operations = [];
if (\Drupal::entityTypeManager()
->getStorage('salesforce_mapping')
->loadByEntity($entity)) {
$operations['salesforce'] = [
'title' => t('Salesforce'),
'weight' => 200,
'url' => $entity
->toUrl('salesforce'),
];
}
return $operations;
}
/**
* Implements hook_entity_extra_field_info().
*/
function salesforce_mapping_ui_entity_extra_field_info() {
// Include Salesforce data for mapped entities.
// @TODO: these don't actually show up on the entity view. Have to implement hook_entity_view as well?
$extra = [];
$mappings = \Drupal::service('entity_type.manager')
->getStorage('salesforce_mapping')
->loadPushMappings();
foreach ($mappings as $mapping) {
$extra[$mapping->drupal_entity_type][$mapping->drupal_bundle] = [
'display' => [
'salesforce_id' => [
'label' => t('Salesforce Id'),
'description' => t('ID of a linked Salesforce object.'),
'weight' => 0,
],
'salesforce_last_sync' => [
'label' => t('Salesforce last sync'),
'description' => t('Timestamp for the latest sync with Salesforce.'),
'weight' => 0,
],
],
];
}
return $extra;
}
Functions
Name | Description |
---|---|
salesforce_mapping_ui_entity_extra_field_info | Implements hook_entity_extra_field_info(). |
salesforce_mapping_ui_entity_operation | Implements hook_entity_operation(). |
salesforce_mapping_ui_entity_type_alter | Implements hook_entity_type_alter(). |
salesforce_mapping_ui_menu_local_actions_alter | Implements hook_local_actions_alter(). |