You are here

function _crm_core_user_sync_batch_processing in CRM Core 8.2

Same name and namespace in other branches
  1. 7 modules/crm_core_user_sync/crm_core_user_sync.admin.inc \_crm_core_user_sync_batch_processing()

Helper function for batch processing of users synchronization.

Parameters

$uid: User id for which contact should be created.

1 string reference to '_crm_core_user_sync_batch_processing'
crm_core_user_sync_admin_form_user_sync_submit in modules/crm_core_user_sync/crm_core_user_sync.admin.inc
Submit callback. Handles user synchronization.

File

modules/crm_core_user_sync/crm_core_user_sync.admin.inc, line 557

Code

function _crm_core_user_sync_batch_processing(&$context) {
  $query = db_select('users', 'users');
  $query
    ->leftJoin('field_data_endpoints', 'endpoints', "endpoints.endpoints_entity_id = users.uid AND endpoints.endpoints_entity_type = 'user'");
  $query
    ->addField('users', 'uid');
  $query
    ->addField('endpoints', 'entity_id', 'rid');
  $query
    ->condition('users.status', "'0'", '<>');
  $query
    ->isNull('endpoints.entity_id');
  if (empty($context['sandbox'])) {
    $context['sandbox'] = array();
    $count_query = $query
      ->countQuery();
    $context['sandbox']['max'] = $count_query
      ->execute()
      ->fetchField();
    $context['sandbox']['progress'] = 0;
  }

  // Limit users quantity to process per request.
  $limit = 20;
  $uids = $query
    ->range(0, $limit)
    ->execute()
    ->fetchCol();
  $users = user_load_multiple($uids);
  foreach ($users as $user) {
    crm_core_user_sync_sync($user);
    $context['sandbox']['progress']++;
  }
  if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
    $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
  }
  else {
    $context['results']['synced'] = $context['sandbox']['max'];
  }
}