Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • project/salesforce
  • issue/salesforce-2975914
  • issue/salesforce-3168388
  • issue/salesforce-3169218
  • issue/salesforce-3072830
  • issue/salesforce-3170030
  • issue/salesforce-3170137
  • issue/salesforce-3173210
  • issue/salesforce-3177326
  • issue/salesforce-3181364
  • issue/salesforce-3279290
  • issue/salesforce-3203287
  • issue/salesforce-3204383
  • issue/salesforce-3204704
  • issue/salesforce-3217061
  • issue/salesforce-3217586
  • issue/salesforce-3102133
  • issue/salesforce-3210809
  • issue/salesforce-3221747
  • issue/salesforce-3222661
  • issue/salesforce-3222940
  • issue/salesforce-3226511
  • issue/salesforce-3226070
  • issue/salesforce-3222683
  • issue/salesforce-3120102
  • issue/salesforce-3231850
  • issue/salesforce-3281008
  • issue/salesforce-3213468
  • issue/salesforce-3247923
  • issue/salesforce-3255740
  • issue/salesforce-3257058
  • issue/salesforce-3276564
  • issue/salesforce-3284336
  • issue/salesforce-3310785
  • issue/salesforce-3312317
  • issue/salesforce-3312979
  • issue/salesforce-3320557
  • issue/salesforce-3340664
  • issue/salesforce-3358568
  • issue/salesforce-3404815
  • issue/salesforce-3400562
  • issue/salesforce-3400903
  • issue/salesforce-3400897
  • issue/salesforce-3405570
  • issue/salesforce-3349963
  • issue/salesforce-3389025
  • issue/salesforce-3154024
  • issue/salesforce-3395912
  • issue/salesforce-3396890
  • issue/salesforce-3398897
  • issue/salesforce-3408393
  • issue/salesforce-3410886
  • issue/salesforce-3411280
  • issue/salesforce-3414401
  • issue/salesforce-3414659
  • issue/salesforce-3415336
  • issue/salesforce-3415242
  • issue/salesforce-3417891
  • issue/salesforce-3417994
  • issue/salesforce-3419551
  • issue/salesforce-3419804
  • issue/salesforce-3382005
  • issue/salesforce-3418124
  • issue/salesforce-3427415
  • issue/salesforce-3427904
  • issue/salesforce-3428593
  • issue/salesforce-3443380
  • issue/salesforce-3443506
  • issue/salesforce-3439625
  • issue/salesforce-3442186
  • issue/salesforce-3445088
  • issue/salesforce-3432569
  • issue/salesforce-3449141
  • issue/salesforce-3449163
  • issue/salesforce-3460395
  • issue/salesforce-3472489
  • issue/salesforce-3472706
  • issue/salesforce-3460502
  • issue/salesforce-3477260
  • issue/salesforce-3209120
  • issue/salesforce-3491809
  • issue/salesforce-3495316
  • issue/salesforce-3492972
  • issue/salesforce-3497252
  • issue/salesforce-3502753
  • issue/salesforce-3503227
  • issue/salesforce-3511455
  • issue/salesforce-3512519
  • issue/salesforce-3514383
  • issue/salesforce-3515337
90 results
Show changes
Commits on Source (9)
Showing
with 158 additions and 44 deletions
name: Salesforce Address name: Salesforce Address
type: module type: module
description: A custom Address Field Widget for Salesforce compatibility. description: A custom Address Field Widget for Salesforce compatibility.
core_version_requirement: ^8.7.7 || ^9 core_version_requirement: ^8.7.7 || 9.0.*
package: Salesforce package: Salesforce
dependencies: dependencies:
- address:address - address:address
name: Salesforce Example name: Salesforce Example
type: module type: module
description: Salesforce Examples description: Salesforce Examples
core_version_requirement: ^8.7.7 || ^9 core_version_requirement: ^8.7.7 || 9.0.*
package: Salesforce package: Salesforce
dependencies: dependencies:
- salesforce:salesforce_push - salesforce:salesforce_push
......
name: Salesforce JWT Auth Provider name: Salesforce JWT Auth Provider
type: module type: module
description: Provides key-based Salesforce authentication. description: Provides key-based Salesforce authentication.
core_version_requirement: ^8.7.7 || ^9 core_version_requirement: ^8.7.7 || 9.0.*
package: Salesforce package: Salesforce
configure: salesforce.auth_config configure: salesforce.auth_config
dependencies: dependencies:
......
...@@ -177,6 +177,7 @@ class SalesforceJWTPlugin extends SalesforceAuthProviderPluginBase { ...@@ -177,6 +177,7 @@ class SalesforceJWTPlugin extends SalesforceAuthProviderPluginBase {
$response = $this->httpClient->retrieveResponse(new Uri($this->getLoginUrl() . static::AUTH_TOKEN_PATH), $data, ['Content-Type' => 'application/x-www-form-urlencoded']); $response = $this->httpClient->retrieveResponse(new Uri($this->getLoginUrl() . static::AUTH_TOKEN_PATH), $data, ['Content-Type' => 'application/x-www-form-urlencoded']);
$token = $this->parseAccessTokenResponse($response); $token = $this->parseAccessTokenResponse($response);
$this->storage->storeAccessToken($this->service(), $token); $this->storage->storeAccessToken($this->service(), $token);
$this->refreshIdentity($token);
return $token; return $token;
} }
...@@ -184,7 +185,9 @@ class SalesforceJWTPlugin extends SalesforceAuthProviderPluginBase { ...@@ -184,7 +185,9 @@ class SalesforceJWTPlugin extends SalesforceAuthProviderPluginBase {
* {@inheritDoc} * {@inheritDoc}
*/ */
public function refreshAccessToken(TokenInterface $token) { public function refreshAccessToken(TokenInterface $token) {
return $this->requestAccessToken($this->generateAssertion()); $token = $this->requestAccessToken($this->generateAssertion());
$this->refreshIdentity($token);
return $token;
} }
/** /**
......
name: Salesforce Logger name: Salesforce Logger
type: module type: module
description: Consolidated logging for Salesforce Log events. description: Consolidated logging for Salesforce Log events.
core_version_requirement: ^8.7.7 || ^9 core_version_requirement: ^8.7.7 || 9.0.*
package: Salesforce package: Salesforce
configure: salesforce_logger.settings configure: salesforce_logger.settings
dependencies: dependencies:
......
...@@ -2,7 +2,7 @@ name: Salesforce Mapping ...@@ -2,7 +2,7 @@ name: Salesforce Mapping
type: module type: module
description: Map Drupal entities to Salesforce objects. description: Map Drupal entities to Salesforce objects.
package: Salesforce package: Salesforce
core_version_requirement: ^8.7.7 || ^9 core_version_requirement: ^8.7.7 || 9.0.*
dependencies: dependencies:
- salesforce:salesforce - salesforce:salesforce
- dynamic_entity_reference:dynamic_entity_reference - dynamic_entity_reference:dynamic_entity_reference
......
...@@ -565,7 +565,7 @@ class SalesforceMapping extends ConfigEntityBase implements SalesforceMappingInt ...@@ -565,7 +565,7 @@ class SalesforceMapping extends ConfigEntityBase implements SalesforceMappingInt
* {@inheritdoc} * {@inheritdoc}
*/ */
public function getLastDeleteTime() { public function getLastDeleteTime() {
return $this->pull_info['last_delete_timestamp'] ? $this->pull_info['last_delete_timestamp'] : NULL; return $this->pull_info['last_delete_timestamp'] ?? NULL;
} }
/** /**
...@@ -579,7 +579,7 @@ class SalesforceMapping extends ConfigEntityBase implements SalesforceMappingInt ...@@ -579,7 +579,7 @@ class SalesforceMapping extends ConfigEntityBase implements SalesforceMappingInt
* {@inheritdoc} * {@inheritdoc}
*/ */
public function getLastPullTime() { public function getLastPullTime() {
return $this->pull_info['last_pull_timestamp'] ? $this->pull_info['last_pull_timestamp'] : NULL; return $this->pull_info['last_pull_timestamp'] ?? NULL;
} }
/** /**
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
namespace Drupal\salesforce_mapping\Plugin\SalesforceMappingField; namespace Drupal\salesforce_mapping\Plugin\SalesforceMappingField;
use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\TypedData\ComplexDataDefinitionInterface; use Drupal\Core\TypedData\ComplexDataDefinitionInterface;
...@@ -90,11 +91,14 @@ abstract class PropertiesBase extends SalesforceMappingFieldPluginBase { ...@@ -90,11 +91,14 @@ abstract class PropertiesBase extends SalesforceMappingFieldPluginBase {
->objectDescribe($mapping->getSalesforceObjectType()); ->objectDescribe($mapping->getSalesforceObjectType());
$field_definition = $describe->getField($this->config('salesforce_field')); $field_definition = $describe->getField($this->config('salesforce_field'));
if ($field_definition['type'] == 'multipicklist') { if ($field_definition['type'] == 'multipicklist') {
$values = []; $data = $this->getDataValue($entity, $this->config('drupal_field_value'));
foreach ($entity->get($this->config('drupal_field_value')) as $value) { if (!empty($data)) {
$values[] = $this->getStringValue($entity, $value); $strings = [];
foreach ($data as $item) {
$strings[] = $item->getString();
}
return implode(';', $strings);
} }
return implode(';', $values);
} }
else { else {
return $this->getStringValue($entity, $this->config('drupal_field_value')); return $this->getStringValue($entity, $this->config('drupal_field_value'));
...@@ -211,8 +215,30 @@ abstract class PropertiesBase extends SalesforceMappingFieldPluginBase { ...@@ -211,8 +215,30 @@ abstract class PropertiesBase extends SalesforceMappingFieldPluginBase {
*/ */
protected function getStringValue(EntityInterface $entity, $drupal_field_value) { protected function getStringValue(EntityInterface $entity, $drupal_field_value) {
try { try {
return $this->dataFetcher()->fetchDataByPropertyPath($entity->getTypedData(), $drupal_field_value) $data = $this->getDataValue($entity, $drupal_field_value);
->getString(); return empty($data) ? NULL : $data->getString();
}
catch (\Exception $e) {
return NULL;
}
}
/**
* Another helper Method to check for and retrieve field data.
*
* Same as getStringValue(), but returns the typed data prior to stringifying.
*
* @param \Drupal\Core\Entity\EntityInterface $entity
* The entity to search the Typed Data for.
* @param string $drupal_field_value
* The Typed Data property to get.
*
* @return \Drupal\Core\TypedData\TypedDataInterface|NULL
* The array representation of the Typed Data property value.
*/
protected function getDataValue(EntityInterface $entity, $drupal_field_value) {
try {
return $this->dataFetcher()->fetchDataByPropertyPath($entity->getTypedData(), $drupal_field_value);
} }
catch (\Exception $e) { catch (\Exception $e) {
return NULL; return NULL;
......
...@@ -51,7 +51,7 @@ class RelatedProperties extends SalesforceMappingFieldPluginBase { ...@@ -51,7 +51,7 @@ class RelatedProperties extends SalesforceMappingFieldPluginBase {
* {@inheritdoc} * {@inheritdoc}
*/ */
public function value(EntityInterface $entity, SalesforceMappingInterface $mapping) { public function value(EntityInterface $entity, SalesforceMappingInterface $mapping) {
list($field_name, $referenced_field_name) = explode(':', $this->config('drupal_field_value'), 2); [$field_name, $referenced_field_name] = explode(':', $this->config('drupal_field_value'), 2);
// Since we're not setting hard restrictions around bundles/fields, we may // Since we're not setting hard restrictions around bundles/fields, we may
// have a field that doesn't exist for the given bundle/entity. In that // have a field that doesn't exist for the given bundle/entity. In that
// case, calling get() on an entity with a non-existent field argument // case, calling get() on an entity with a non-existent field argument
...@@ -80,7 +80,9 @@ class RelatedProperties extends SalesforceMappingFieldPluginBase { ...@@ -80,7 +80,9 @@ class RelatedProperties extends SalesforceMappingFieldPluginBase {
if ($field_definition['type'] == 'multipicklist') { if ($field_definition['type'] == 'multipicklist') {
$values = []; $values = [];
foreach ($field as $ref_entity) { foreach ($field as $ref_entity) {
$values[] = $ref_entity->entity->get($referenced_field_name)->value; if (!$ref_entity->entity->get($referenced_field_name)->isEmpty()) {
$values[] = $ref_entity->entity->get($referenced_field_name)->value;
}
} }
return implode(';', $values); return implode(';', $values);
} }
...@@ -101,7 +103,7 @@ class RelatedProperties extends SalesforceMappingFieldPluginBase { ...@@ -101,7 +103,7 @@ class RelatedProperties extends SalesforceMappingFieldPluginBase {
$definition['config_dependencies']['config'] = []; $definition['config_dependencies']['config'] = [];
$field_name = $this->config('drupal_field_value'); $field_name = $this->config('drupal_field_value');
if (strpos($field_name, ':')) { if (strpos($field_name, ':')) {
list($field_name, $dummy) = explode(':', $field_name, 2); [$field_name, $dummy] = explode(':', $field_name, 2);
} }
// Add reference field. // Add reference field.
if ($field = FieldConfig::loadByName($this->mapping->getDrupalEntityType(), $this->mapping->getDrupalBundle(), $field_name)) { if ($field = FieldConfig::loadByName($this->mapping->getDrupalEntityType(), $this->mapping->getDrupalBundle(), $field_name)) {
......
...@@ -41,7 +41,7 @@ class UniqueFieldsConstraintValidator extends ConstraintValidator { ...@@ -41,7 +41,7 @@ class UniqueFieldsConstraintValidator extends ConstraintValidator {
->load($id); ->load($id);
$url = $entity->toUrl(); $url = $entity->toUrl();
$message_replacements = [ $message_replacements = [
'@entity_type' => $entity_type->getLowercaseLabel(), '@entity_type' => $entity_type->getSingularLabel(),
':url' => $url->toString(), ':url' => $url->toString(),
'@label' => $entity->label(), '@label' => $entity->label(),
]; ];
......
langcode: en
status: true
dependencies:
config:
- field.storage.node.field_salesforce_test_multi
- node.type.salesforce_mapping_test_content
module:
- options
id: node.salesforce_mapping_test_content.field_salesforce_test_multi
field_name: field_salesforce_test_multi
entity_type: node
bundle: salesforce_mapping_test_content
label: 'Salesforce Test Multi'
description: ''
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings: { }
field_type: list_string
langcode: en
status: true
dependencies:
module:
- node
- options
id: node.field_salesforce_test_multi
field_name: field_salesforce_test_multi
entity_type: node
type: list_string
settings:
allowed_values:
-
value: 'Value 1'
label: 'Value 1'
-
value: 'Value 2'
label: 'Value 2'
-
value: 'Value 3'
label: 'Value 3'
allowed_values_function: ''
module: options
locked: false
cardinality: -1
translatable: true
indexes: { }
persist_with_no_fields: false
custom_storage: false
langcode: en langcode: en
status: true status: true
dependencies: { }
name: 'Salesforce Mapping Test Content Type' name: 'Salesforce Mapping Test Content Type'
type: salesforce_mapping_test_content type: salesforce_mapping_test_content
description: '' description: ''
......
...@@ -6,12 +6,15 @@ dependencies: ...@@ -6,12 +6,15 @@ dependencies:
- field.field.node.salesforce_mapping_test_content.field_salesforce_test_date - field.field.node.salesforce_mapping_test_content.field_salesforce_test_date
- field.field.node.salesforce_mapping_test_content.field_salesforce_test_email - field.field.node.salesforce_mapping_test_content.field_salesforce_test_email
- field.field.node.salesforce_mapping_test_content.field_salesforce_test_link - field.field.node.salesforce_mapping_test_content.field_salesforce_test_link
- field.field.node.salesforce_mapping_test_content.field_salesforce_test_multi
- field.field.node.salesforce_mapping_test_content.field_salesforce_test_reference - field.field.node.salesforce_mapping_test_content.field_salesforce_test_reference
- field.storage.node.field_salesforce_test_link - field.storage.node.field_salesforce_test_link
- field.storage.node.field_salesforce_test_reference - field.storage.node.field_salesforce_test_reference
- node.type.salesforce_mapping_test_content - node.type.salesforce_mapping_test_content
module: module:
- link - link
- salesforce_pull
- salesforce_push
id: test_mapping id: test_mapping
label: 'Test Mapping' label: 'Test Mapping'
weight: 0 weight: 0
...@@ -38,49 +41,64 @@ field_mappings: ...@@ -38,49 +41,64 @@ field_mappings:
drupal_field_value: 'SALESFORCE TEST' drupal_field_value: 'SALESFORCE TEST'
salesforce_field: FirstName salesforce_field: FirstName
direction: drupal_sf direction: drupal_sf
id: 8 description: ''
id: 0
- -
drupal_field_type: DrupalConstant drupal_field_type: DrupalConstant
drupal_field_value: title drupal_field_value: title
direction: sf_drupal direction: sf_drupal
description: ''
drupal_constant: 'SALESFORCE TEST' drupal_constant: 'SALESFORCE TEST'
id: 9 id: 1
- -
drupal_field_type: properties drupal_field_type: properties
drupal_field_value: field_salesforce_test_email drupal_field_value: field_salesforce_test_email
salesforce_field: Email salesforce_field: Email
direction: sync direction: sync
id: 10 description: ''
id: 2
- -
drupal_field_type: properties drupal_field_type: properties
drupal_field_value: field_salesforce_test_date drupal_field_value: field_salesforce_test_date.value
salesforce_field: Birthdate salesforce_field: Birthdate
direction: sync direction: sync
id: 11 description: ''
id: 3
- -
drupal_field_type: properties drupal_field_type: properties
drupal_field_value: field_salesforce_test_bool drupal_field_value: field_salesforce_test_bool
salesforce_field: d5__Do_Not_Mail__c salesforce_field: d5__Do_Not_Mail__c
direction: sync direction: sync
id: 12 description: ''
id: 4
- -
drupal_field_type: properties_extended drupal_field_type: properties_extended
drupal_field_value: field_salesforce_test_link.uri drupal_field_value: field_salesforce_test_link.uri
salesforce_field: Description salesforce_field: Description
direction: sync direction: sync
id: 13 description: ''
id: 5
- -
drupal_field_type: RelatedIDs drupal_field_type: RelatedIDs
drupal_field_value: field_salesforce_test_reference drupal_field_value: field_salesforce_test_reference
salesforce_field: ReportsToId salesforce_field: ReportsToId
direction: sync direction: sync
id: 14 description: ''
id: 6
- -
drupal_field_type: record_type drupal_field_type: record_type
drupal_field_value: Contact_Type_1 drupal_field_value: Contact_Type_1
salesforce_field: RecordTypeId salesforce_field: RecordTypeId
direction: drupal_sf direction: drupal_sf
id: 15 description: ''
id: 7
-
drupal_field_type: properties
drupal_field_value: field_salesforce_test_multi
salesforce_field: d5__Multipicklist_Test__c
direction: sync
description: ''
id: 8
push_limit: 0 push_limit: 0
push_retries: 3 push_retries: 3
push_frequency: 0 push_frequency: 0
......
...@@ -7,6 +7,10 @@ dependencies: ...@@ -7,6 +7,10 @@ dependencies:
- datetime - datetime
- link - link
- node - node
- options
- user
- salesforce_mapping - salesforce_mapping
- salesforce_push
- salesforce_pull
- salesforce_test_rest_client - salesforce_test_rest_client
- taxonomy - taxonomy
...@@ -4,6 +4,7 @@ namespace Drupal\Tests\salesforce_mapping\Functional; ...@@ -4,6 +4,7 @@ namespace Drupal\Tests\salesforce_mapping\Functional;
use Drupal\Core\Datetime\DrupalDateTime; use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface; use Drupal\datetime\Plugin\Field\FieldType\DateTimeItemInterface;
use Drupal\KernelTests\KernelTestBase;
use Drupal\node\Entity\Node; use Drupal\node\Entity\Node;
use Drupal\salesforce_mapping\Entity\MappedObject; use Drupal\salesforce_mapping\Entity\MappedObject;
use Drupal\salesforce_mapping\Entity\SalesforceMapping; use Drupal\salesforce_mapping\Entity\SalesforceMapping;
...@@ -32,8 +33,12 @@ class PushParamsTest extends BrowserTestBase { ...@@ -32,8 +33,12 @@ class PushParamsTest extends BrowserTestBase {
*/ */
public static $modules = [ public static $modules = [
'typed_data', 'typed_data',
'options',
'dynamic_entity_reference', 'dynamic_entity_reference',
'salesforce',
'salesforce_mapping', 'salesforce_mapping',
'salesforce_push',
'salesforce_pull',
'salesforce_mapping_test', 'salesforce_mapping_test',
]; ];
...@@ -54,12 +59,11 @@ class PushParamsTest extends BrowserTestBase { ...@@ -54,12 +59,11 @@ class PushParamsTest extends BrowserTestBase {
$entity1->save(); $entity1->save();
// Mapped Object to be used for RelatedIDs push params property. // Mapped Object to be used for RelatedIDs push params property.
$mappedObject = MappedObject::create([ $mappedObject = \Drupal::entityTypeManager()
'drupal_entity' => $entity1, ->getStorage('salesforce_mapped_object')
'salesforce_mapping' => $mapping, ->loadByEntityAndMapping($entity1, $mapping);
'salesforce_id' => '0123456789ABCDEFGH',
'salesforce_link' => NULL, $mappedObject->set('salesforce_id', '0123456789ABCDEFGH');
]);
$mappedObject->save(); $mappedObject->save();
// Entity 2 to be mapped to Salesforce. // Entity 2 to be mapped to Salesforce.
...@@ -71,6 +75,7 @@ class PushParamsTest extends BrowserTestBase { ...@@ -71,6 +75,7 @@ class PushParamsTest extends BrowserTestBase {
'field_salesforce_test_email' => 'test2@example.com', 'field_salesforce_test_email' => 'test2@example.com',
'field_salesforce_test_link' => 'https://example.com', 'field_salesforce_test_link' => 'https://example.com',
'field_salesforce_test_reference' => $entity1, 'field_salesforce_test_reference' => $entity1,
'field_salesforce_test_multi' => [['value' => 'Value 1'], ['value' => 'Value 2'], ['value' => 'Value 3']],
]); ]);
$entity2->save(); $entity2->save();
...@@ -81,11 +86,12 @@ class PushParamsTest extends BrowserTestBase { ...@@ -81,11 +86,12 @@ class PushParamsTest extends BrowserTestBase {
$expected = [ $expected = [
'FirstName' => 'SALESFORCE TEST', 'FirstName' => 'SALESFORCE TEST',
'Email' => 'test2@example.com', 'Email' => 'test2@example.com',
'Birthdate' => $expectedDate->format(DateTime::ISO8601), 'Birthdate' => $expectedDate->format('Y-m-d\TH:i:sO'),
'd5__Do_Not_Mail__c' => TRUE, 'd5__Do_Not_Mail__c' => TRUE,
'ReportsToId' => '0123456789ABCDEFGH', 'ReportsToId' => '0123456789ABCDEFGH',
'RecordTypeId' => '012i0000001B15mAAC', 'RecordTypeId' => '012i0000001B15mAAC',
'Description' => 'https://example.com', 'Description' => 'https://example.com',
'd5__Multipicklist_Test__c' => 'Value 1;Value 2;Value 3'
]; ];
$actual = $pushParams->getParams(); $actual = $pushParams->getParams();
ksort($actual); ksort($actual);
...@@ -108,12 +114,11 @@ class PushParamsTest extends BrowserTestBase { ...@@ -108,12 +114,11 @@ class PushParamsTest extends BrowserTestBase {
$entity1->save(); $entity1->save();
// Mapped Object to be used for RelatedIDs push params property. // Mapped Object to be used for RelatedIDs push params property.
$mappedObject = MappedObject::create([ $mappedObject = \Drupal::entityTypeManager()
'drupal_entity' => $entity1, ->getStorage('salesforce_mapped_object')
'salesforce_mapping' => $mapping, ->loadByEntityAndMapping($entity1, $mapping);
'salesforce_id' => '0123456789ABCDEFGH',
'salesforce_link' => NULL, $mappedObject->set('salesforce_id', '0123456789ABCDEFGH');
]);
$mappedObject->save(); $mappedObject->save();
// Entity 2 to be mapped to Salesforce. // Entity 2 to be mapped to Salesforce.
...@@ -125,6 +130,7 @@ class PushParamsTest extends BrowserTestBase { ...@@ -125,6 +130,7 @@ class PushParamsTest extends BrowserTestBase {
'field_salesforce_test_email' => 'test2@example.com', 'field_salesforce_test_email' => 'test2@example.com',
'field_salesforce_test_link' => 'https://example.com', 'field_salesforce_test_link' => 'https://example.com',
'field_salesforce_test_reference' => $entity1, 'field_salesforce_test_reference' => $entity1,
'field_salesforce_test_multi' => ['Value 1', 'Value 2', 'Value 3'],
]); ]);
$entity2->save(); $entity2->save();
...@@ -133,11 +139,12 @@ class PushParamsTest extends BrowserTestBase { ...@@ -133,11 +139,12 @@ class PushParamsTest extends BrowserTestBase {
$expected = [ $expected = [
'FirstName' => 'SALESFORCE TEST', 'FirstName' => 'SALESFORCE TEST',
'Email' => 'test2@example.com', 'Email' => 'test2@example.com',
'Birthdate' => '', 'Birthdate' => null,
'd5__Do_Not_Mail__c' => TRUE, 'd5__Do_Not_Mail__c' => TRUE,
'ReportsToId' => '0123456789ABCDEFGH', 'ReportsToId' => '0123456789ABCDEFGH',
'RecordTypeId' => '012i0000001B15mAAC', 'RecordTypeId' => '012i0000001B15mAAC',
'Description' => 'https://example.com', 'Description' => 'https://example.com',
'd5__Multipicklist_Test__c' => 'Value 1;Value 2;Value 3'
]; ];
$actual = $pushParams->getParams(); $actual = $pushParams->getParams();
ksort($actual); ksort($actual);
......
...@@ -2,7 +2,7 @@ name: Salesforce Mapping UI ...@@ -2,7 +2,7 @@ name: Salesforce Mapping UI
type: module type: module
description: User interface for managing Salesforce mappings. description: User interface for managing Salesforce mappings.
package: Salesforce package: Salesforce
core_version_requirement: ^8.7.7 || ^9 core_version_requirement: ^8.7.7 || 9.0.*
configure: entity.salesforce_mapping.list configure: entity.salesforce_mapping.list
dependencies: dependencies:
- salesforce:salesforce_mapping - salesforce:salesforce_mapping
salesforce_mapping.entities:
class: \Drupal\Core\Menu\LocalTaskDefault
deriver: \Drupal\salesforce_mapping_ui\Plugin\Derivative\SalesforceMappingLocalTask
salesforce_mapped_object.admin: salesforce_mapped_object.admin:
title: Salesforce title: Salesforce
base_route: system.admin_content base_route: system.admin_content
......
name: Salesforce OAuth user-agent Provider name: Salesforce OAuth user-agent Provider
type: module type: module
description: Provides user-agent-based Salesforce OAuth authentication. description: Provides user-agent-based Salesforce OAuth authentication.
core_version_requirement: ^8.7.7 || ^9 core_version_requirement: ^8.7.7 || 9.0.*
package: Salesforce package: Salesforce
configure: salesforce.auth_config configure: salesforce.auth_config
dependencies: dependencies:
......
...@@ -2,6 +2,6 @@ name: Salesforce Pull ...@@ -2,6 +2,6 @@ name: Salesforce Pull
type: module type: module
description: Imports objects from Salesforce based on mappings defined in Salesforce Mapping. description: Imports objects from Salesforce based on mappings defined in Salesforce Mapping.
package: Salesforce package: Salesforce
core_version_requirement: ^8.7.7 || ^9 core_version_requirement: ^8.7.7 || 9.0.*
dependencies: dependencies:
- salesforce:salesforce_mapping - salesforce:salesforce_mapping