Skip to content
Snippets Groups Projects
Commit 0bfd3ae9 authored by Aaron Bauman's avatar Aaron Bauman
Browse files

Merge remote-tracking branch 'salesforce-3349963/3349963-pushpull-revisions' into 5.1.x

parents 8680417c 46924143
No related branches found
No related tags found
No related merge requests found
Pipeline #179354 passed with warnings
Showing
with 77 additions and 33 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: ^9 || ^10 core_version_requirement: ^10.1
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: ^9 || ^10 core_version_requirement: ^10.1
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: ^9 || ^10 core_version_requirement: ^10.1
package: Salesforce package: Salesforce
configure: salesforce.auth_config configure: salesforce.auth_config
dependencies: dependencies:
......
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: ^9 || ^10 core_version_requirement: ^10.1
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: ^9 || ^10 core_version_requirement: ^10.1
dependencies: dependencies:
- salesforce:salesforce - salesforce:salesforce
- dynamic_entity_reference:dynamic_entity_reference - dynamic_entity_reference:dynamic_entity_reference
......
...@@ -23,6 +23,7 @@ use Drupal\salesforce_mapping\Event\SalesforcePushParamsEvent; ...@@ -23,6 +23,7 @@ use Drupal\salesforce_mapping\Event\SalesforcePushParamsEvent;
use Drupal\salesforce_mapping\MappingConstants; use Drupal\salesforce_mapping\MappingConstants;
use Drupal\salesforce_mapping\Plugin\Field\FieldType\SalesforceLinkItemList; use Drupal\salesforce_mapping\Plugin\Field\FieldType\SalesforceLinkItemList;
use Drupal\salesforce_mapping\PushParams; use Drupal\salesforce_mapping\PushParams;
use Drupal\user\Entity\User;
/** /**
* Defines a Salesforce Mapped Object entity class. * Defines a Salesforce Mapped Object entity class.
...@@ -40,6 +41,9 @@ use Drupal\salesforce_mapping\PushParams; ...@@ -40,6 +41,9 @@ use Drupal\salesforce_mapping\PushParams;
* "view_builder" = "Drupal\Core\Entity\EntityViewBuilder", * "view_builder" = "Drupal\Core\Entity\EntityViewBuilder",
* "views_data" = "Drupal\views\EntityViewsData", * "views_data" = "Drupal\views\EntityViewsData",
* "access" = "Drupal\salesforce_mapping\MappedObjectAccessControlHandler", * "access" = "Drupal\salesforce_mapping\MappedObjectAccessControlHandler",
* "route_provider" = {
* "revision" = "Drupal\Core\Entity\Routing\RevisionHtmlRouteProvider"
* },
* }, * },
* base_table = "salesforce_mapped_object", * base_table = "salesforce_mapped_object",
* revision_table = "salesforce_mapped_object_revision", * revision_table = "salesforce_mapped_object_revision",
...@@ -105,24 +109,6 @@ class MappedObject extends RevisionableContentEntityBase implements MappedObject ...@@ -105,24 +109,6 @@ class MappedObject extends RevisionableContentEntityBase implements MappedObject
parent::__construct($values, 'salesforce_mapped_object'); parent::__construct($values, 'salesforce_mapped_object');
} }
/**
* {@inheritdoc}
*/
public function preSaveRevision(EntityStorageInterface $storage, \stdClass $record) {
// Revision uid, timestamp, and message are required for D9.
if ($this->isNewRevision()) {
if (empty($this->getRevisionUserId())) {
$this->setRevisionUserId(1);
}
if (empty($this->getRevisionCreationTime())) {
$this->setRevisionCreationTime(time());
}
if (empty($this->getRevisionLogMessage())) {
$this->setRevisionLogMessage('New revision');
}
}
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
...@@ -131,6 +117,11 @@ class MappedObject extends RevisionableContentEntityBase implements MappedObject ...@@ -131,6 +117,11 @@ class MappedObject extends RevisionableContentEntityBase implements MappedObject
if ($this->isNew()) { if ($this->isNew()) {
$this->created = $this->getRequestTime(); $this->created = $this->getRequestTime();
} }
if ($this->isNewRevision()) {
$this
->setRevisionCreationTime($this->getRequestTime())
->setRevisionUserId($this->getCurrentUserId());
}
return parent::save(); return parent::save();
} }
...@@ -474,6 +465,7 @@ class MappedObject extends RevisionableContentEntityBase implements MappedObject ...@@ -474,6 +465,7 @@ class MappedObject extends RevisionableContentEntityBase implements MappedObject
$this $this
->set('last_sync_action', 'push_delete') ->set('last_sync_action', 'push_delete')
->set('last_sync_status', TRUE) ->set('last_sync_status', TRUE)
->set('revision_log_message', '')
->save(); ->save();
return $this; return $this;
} }
...@@ -600,19 +592,60 @@ class MappedObject extends RevisionableContentEntityBase implements MappedObject ...@@ -600,19 +592,60 @@ class MappedObject extends RevisionableContentEntityBase implements MappedObject
$drupal_entity->setSyncing(TRUE); $drupal_entity->setSyncing(TRUE);
$drupal_entity->save(); $drupal_entity->save();
$this->setNewRevision(TRUE);
// Update mapping object. // Update mapping object.
$this->setNewRevision(TRUE); $this->setNewRevision(TRUE);
$this $this
->set('drupal_entity', $drupal_entity) ->set('drupal_entity', $drupal_entity)
->set('entity_updated', $this->getRequestTime()) ->set('entity_updated', $this->getRequestTime())
->set('last_sync_action', 'pull') ->set('last_sync_action', $this->isNew() ? 'pull_create' : 'pull_update')
->set('last_sync_status', TRUE) ->set('last_sync_status', TRUE)
->set('force_pull', 0) ->set('force_pull', 0)
->set('revision_log_message', '')
->save(); ->save();
return $this; return $this;
} }
/**
* {@inheritDoc}
*/
public function getRevisionLogMessage() {
return parent::getRevisionLogMessage() ?: $this->last_sync_action->value;
}
/**
* {@inheritDoc}
*/
public function getRevisionUserId() {
return parent::getRevisionUserId() ?: 1;
}
/**
* {@inheritDoc}
*/
public function getRevisionUser() {
return parent::getRevisionuser() ?: User::load(1);
}
/**
* {@inheritDoc}
*/
public function getRevisionCreationTime() {
return parent::getRevisionCreationTime() ?: $this->entity_updated->value;
}
/**
* Testable func to return current user id.
*
* @return int
* The current user id.
*/
protected function getCurrentUserId() {
return \Drupal::currentUser()->id();
}
/** /**
* Testable func to return the request time server variable. * Testable func to return the request time server variable.
* *
......
...@@ -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: ^9 || ^10 core_version_requirement: ^10.1
configure: entity.salesforce_mapping.list configure: entity.salesforce_mapping.list
dependencies: dependencies:
- salesforce:salesforce_mapping - salesforce:salesforce_mapping
...@@ -58,6 +58,7 @@ function salesforce_mapping_ui_entity_type_alter(array &$entity_types) { ...@@ -58,6 +58,7 @@ function salesforce_mapping_ui_entity_type_alter(array &$entity_types) {
$entity_types['salesforce_mapped_object']->setLinkTemplate('edit-form', '/admin/content/salesforce/{salesforce_mapped_object}/edit'); $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('delete-form', '/admin/content/salesforce/{salesforce_mapped_object}/delete');
$entity_types['salesforce_mapped_object']->setLinkTemplate('canonical', '/admin/content/salesforce/{salesforce_mapped_object}'); $entity_types['salesforce_mapped_object']->setLinkTemplate('canonical', '/admin/content/salesforce/{salesforce_mapped_object}');
$entity_types['salesforce_mapped_object']->setLinkTemplate('version-history', '/admin/content/salesforce/{salesforce_mapped_object}/revisions');
} }
/** /**
......
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: ^9 || ^10 core_version_requirement: ^10.1
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: ^9 || ^10 core_version_requirement: ^10.1
dependencies: dependencies:
- salesforce:salesforce_mapping - salesforce:salesforce_mapping
...@@ -224,9 +224,18 @@ abstract class PullBase extends QueueWorkerBase implements ContainerFactoryPlugi ...@@ -224,9 +224,18 @@ abstract class PullBase extends QueueWorkerBase implements ContainerFactoryPlugi
} }
catch (\Exception $e) { catch (\Exception $e) {
$this->eventDispatcher->dispatch(new SalesforceErrorEvent($e, 'Failed to update entity %label from Salesforce object %sfobjectid.', [ $this->eventDispatcher->dispatch(new SalesforceErrorEvent($e, 'Failed to update entity %label from Salesforce object %sfobjectid.', [
'%label' => $entity->label(), '%label' => (isset($entity)) ? $entity->label() : "Unknown",
'%sfobjectid' => (string) $sf_object->id(), '%sfobjectid' => (string) $sf_object->id(),
]), SalesforceEvents::WARNING); ]), SalesforceEvents::WARNING);
$mapped_object->setNewRevision(TRUE);
// Update mapped object.
$mapped_object
->set('last_sync_action', 'pull_update')
->set('last_sync_status', FALSE)
->set('revision_log_message', $e->getMessage())
->save();
// Throwing a new exception keeps current item in cron queue. // Throwing a new exception keeps current item in cron queue.
throw $e; throw $e;
} }
......
...@@ -2,6 +2,6 @@ name: Salesforce Push ...@@ -2,6 +2,6 @@ name: Salesforce Push
type: module type: module
description: Push data to Salesforce when updates are made to Drupal entities. description: Push data to Salesforce when updates are made to Drupal entities.
package: Salesforce package: Salesforce
core_version_requirement: ^9 || ^10 core_version_requirement: ^10.1
dependencies: dependencies:
- salesforce:salesforce_mapping - salesforce:salesforce_mapping
...@@ -188,6 +188,7 @@ function salesforce_push_entity_crud_mapping(EntityInterface $entity, $op, Sales ...@@ -188,6 +188,7 @@ function salesforce_push_entity_crud_mapping(EntityInterface $entity, $op, Sales
if (!$mapped_object->isNew()) { if (!$mapped_object->isNew()) {
// Only update existing mapped objects. // Only update existing mapped objects.
$mapped_object->setNewRevision(TRUE);
$mapped_object $mapped_object
->set('last_sync_action', $op) ->set('last_sync_action', $op)
->set('last_sync_status', FALSE) ->set('last_sync_status', FALSE)
......
...@@ -2,6 +2,6 @@ name: Salesforce Soap ...@@ -2,6 +2,6 @@ name: Salesforce Soap
type: module type: module
description: Exposes a SoapClient service for communicating with the Salesforce SOAP API. description: Exposes a SoapClient service for communicating with the Salesforce SOAP API.
package: Salesforce package: Salesforce
core_version_requirement: ^9 || ^10 core_version_requirement: ^10.1
dependencies: dependencies:
- salesforce:salesforce - salesforce:salesforce
...@@ -2,7 +2,7 @@ name: Salesforce Webform ...@@ -2,7 +2,7 @@ name: Salesforce Webform
type: module type: module
description: Adds support for webforms fields in Salesforce Mapping. description: Adds support for webforms fields in Salesforce Mapping.
package: Salesforce package: Salesforce
core_version_requirement: ^9 || ^10 core_version_requirement: ^10.1
dependencies: dependencies:
- salesforce:salesforce_mapping - salesforce:salesforce_mapping
......
...@@ -2,5 +2,5 @@ name: Salesforce Integration ...@@ -2,5 +2,5 @@ name: Salesforce Integration
type: module type: module
description: Modules to integrate Drupal and Salesforce description: Modules to integrate Drupal and Salesforce
package: Salesforce package: Salesforce
core_version_requirement: ^9 || ^10 core_version_requirement: ^10.1
configure: salesforce.admin_config_salesforce configure: salesforce.admin_config_salesforce
...@@ -2,6 +2,6 @@ name: 'Salesforce Test Rest Client' ...@@ -2,6 +2,6 @@ name: 'Salesforce Test Rest Client'
type: module type: module
description: 'Provides a dummy Rest Client for functional tests.' description: 'Provides a dummy Rest Client for functional tests.'
package: Testing package: Testing
core_version_requirement: ^9 || ^10 core_version_requirement: ^10.1
dependencies: dependencies:
- salesforce:salesforce - salesforce:salesforce
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment