function drush_salesforce_mapping_sf_purge_salesforce in Salesforce Suite 8.4
Same name and namespace in other branches
- 8.3 modules/salesforce_mapping/salesforce_mapping.drush.inc \drush_salesforce_mapping_sf_purge_salesforce()
- 5.0.x modules/salesforce_mapping/salesforce_mapping.drush.inc \drush_salesforce_mapping_sf_purge_salesforce()
Support for drush 8 is deprecated and will be removed in a future release.
1 call to drush_salesforce_mapping_sf_purge_salesforce()
- drush_salesforce_mapping_sf_purge_all in modules/
salesforce_mapping/ salesforce_mapping.drush.inc - Support for drush 8 is deprecated and will be removed in a future release.
File
- modules/
salesforce_mapping/ salesforce_mapping.drush.inc, line 152 - Drush integration for Salesforce.
Code
function drush_salesforce_mapping_sf_purge_salesforce() {
_drush_salesforce_deprecated();
$etm = \Drupal::service('entity_type.manager');
$client = \Drupal::service('salesforce.client');
$object_types = _drush_salesforce_mapping_object_types_by_prefix($client);
$mapped_obj_storage = $etm
->getStorage('salesforce_mapped_object');
$mapped_obj_table = $etm
->getDefinition('salesforce_mapped_object')
->getBaseTable();
$query = \Drupal::service('database')
->select($mapped_obj_table, 'm');
$query
->addExpression('distinct substr(salesforce_id, 1, 3)');
$mapping_id = FALSE;
if ($mapping_id = drush_get_option('mapping')) {
$query
->condition('salesforce_mapping', $mapping_id);
}
$sfid_prefixes = $query
->execute()
->fetchCol();
foreach ($sfid_prefixes as $prefix) {
if (empty($object_types[$prefix]['name'])) {
$mapped_obj_ids = \Drupal::service('database')
->select($mapped_obj_table, 'm')
->fields('m', [
'salesforce_id',
'id',
])
->condition('salesforce_id', $prefix . '%', 'LIKE')
->execute()
->fetchAllKeyed();
if (empty($mapped_obj_ids)) {
continue;
}
drush_log('Unknown object type for Salesforce ID prefix ' . $prefix);
_drush_salesforce_mapping_confirm_and_delete($mapped_obj_ids, $mapped_obj_storage, 'prefix ' . $prefix);
continue;
}
$query = \Drupal::service('database')
->select($mapped_obj_table, 'm')
->fields('m', [
'salesforce_id',
'id',
]);
if ($mapping_id) {
$query
->condition('salesforce_mapping', $mapping_id);
}
else {
$query
->condition('salesforce_id', $prefix . '%', 'LIKE');
}
$sfids = $query
->execute()
->fetchAllKeyed();
$to_delete = $sfids;
// SOQL queries are limited to 4000-characters in where statements.
// Chunkify in case we have more than ~200 sfids.
foreach (array_chunk($sfids, 200, TRUE) as $chunk) {
$soql_query = new SelectQuery($object_types[$prefix]['name']);
$soql_query->fields[] = 'Id';
$soql_query
->addCondition('Id', array_keys($chunk));
$results = $client
->query($soql_query);
foreach ($results
->records() as $record) {
unset($to_delete[(string) $record
->id()]);
}
}
if (empty($to_delete)) {
drush_log('No orphaned mapped objects found for SObject type ' . $object_types[$prefix]['name'], 'ok');
continue;
}
_drush_salesforce_mapping_confirm_and_delete(array_values($to_delete), $mapped_obj_storage, 'SObject type *' . $object_types[$prefix]['name'] . '*');
}
}