You are here

function drush_salesforce_push_unmapped in Salesforce Suite 5.0.x

Same name and namespace in other branches
  1. 8.4 modules/salesforce_push/salesforce_push.drush.inc \drush_salesforce_push_unmapped()
  2. 8.3 modules/salesforce_push/salesforce_push.drush.inc \drush_salesforce_push_unmapped()

Implements drush_hook_COMMAND().

Search for entities without Salesforce Object mappings and attempt to push them to Salesforce.

File

modules/salesforce_push/salesforce_push.drush.inc, line 78
Drush tools for the Salesforce Push module.

Code

function drush_salesforce_push_unmapped($name = NULL) {
  _drush_salesforce_deprecated();
  if (!($mapping = _salesforce_drush_get_mapping($name))) {
    return;
  }
  $entity_type = $mapping
    ->get('drupal_entity_type');
  $etm = \Drupal::entityTypeManager();
  $entity_storage = $etm
    ->getStorage($entity_type);
  $entity_keys = $etm
    ->getDefinition($entity_type)
    ->getKeys();
  $id_key = $entity_keys['id'];
  $bundle_key = empty($entity_keys['bundle']) ? FALSE : $entity_keys['bundle'];
  $query = \Drupal::database()
    ->select($entity_storage
    ->getBaseTable(), 'b');
  $query
    ->leftJoin('salesforce_mapped_object', 'm', "b.{$id_key} = m.drupal_entity__target_id AND m.drupal_entity__target_type = '{$entity_type}'");
  if ($bundle_key) {
    $query
      ->condition("b.{$bundle_key}", $mapping
      ->get('drupal_bundle'));
  }
  $results = $query
    ->fields('b', [
    $id_key,
  ])
    ->isNull('m.drupal_entity__target_id')
    ->range(0, drush_get_option('count', 50))
    ->execute()
    ->fetchAllAssoc($id_key);
  $entities = $entity_storage
    ->loadMultiple(array_keys($results));
  $log = [];
  foreach ($entities as $entity) {
    salesforce_push_entity_crud($entity, 'push_create');
    $log[] = $entity
      ->id();
  }
  drush_print(count($log) . " unmapped entities found and push to Salesforce attempted. See logs for more details.");
}