function _ldap_user_orphans in Lightweight Directory Access Protocol (LDAP) 7.2
Same name and namespace in other branches
- 8.2 ldap_user/ldap_user.cron.inc \_ldap_user_orphans()
Function to respond to ldap associated drupal accounts which no longer have a related LDAP entry.
Parameters
LdapUserConf $ldap_user_conf:
Return value
boolean FALSE on error or incompletion or TRUE otherwise
1 call to _ldap_user_orphans()
- ldap_user_cron in ldap_user/
ldap_user.module - Implements hook_cron().
File
- ldap_user/
ldap_user.cron.inc, line 16 - Cron relate functions.
Code
function _ldap_user_orphans($ldap_user_conf) {
if (!$ldap_user_conf->orphanedDrupalAcctBehavior || $ldap_user_conf->orphanedDrupalAcctBehavior == 'ldap_user_orphan_do_not_check') {
return TRUE;
}
/**
* query drupal accounts
* - ldap associated drupal accounts
* - where (ldap_user_current_dn not null)
* - ordered by ldap_user_last_checked
* - order by uid asc (get oldest first)
*/
$last_uid_checked = variable_get('ldap_user_cron_last_uid_checked', 1);
$query = new EntityFieldQuery();
$query
->entityCondition('entity_type', 'user')
->fieldCondition('ldap_user_puid_sid', 'value', 'NULL', '!=')
->fieldCondition('ldap_user_puid_property', 'value', 'NULL', '!=')
->fieldCondition('ldap_user_puid', 'value', 'NULL', '!=')
->fieldCondition('ldap_user_current_dn', 'value', 'NULL', '!=')
->propertyCondition('uid', $last_uid_checked, '>')
->propertyCondition('status', 1)
->propertyOrderBy('uid', 'ASC')
->range(0, $ldap_user_conf->orphanedCheckQty)
->addMetaData('account', user_load(1));
$result = $query
->execute();
$email_list = [];
$ldap_servers = ldap_servers_get_servers(NULL, 'enabled');
$watchdogs_sids_missing_watchdogged = [];
/**
* First produce array of form:
* $drupal_users[$sid][$puid_attr][$puid]['exists'] = bool
* signifying if corresponding LDAP Entry exists.
*/
if (!(isset($result['user']) && count($result['user']) > 0)) {
variable_set('ldap_user_cron_last_uid_checked', 1);
return TRUE;
}
$uids = array_keys($result['user']);
$user_count = count($uids);
// If maxed out reset uid check counter.
if ($user_count < $ldap_user_conf->orphanedCheckQty) {
variable_set('ldap_user_cron_last_uid_checked', 1);
}
else {
variable_set('ldap_user_cron_last_uid_checked', $uids[count($uids) - 1]);
}
$batches = floor($user_count / LDAP_SERVERS_MAXFILTER_ORS) + 1;
// e.g. 175 users and 50 max ldap query ors will yield 4 batches.
for ($batch = 1; $batch <= $batches; $batch++) {
$email_list = _ldap_user_orphan_process_batch($ldap_user_conf, $batch, $user_count, $uids, $ldap_servers, $watchdogs_sids_missing_watchdogged, $query, $email_list);
}
if (count($email_list) > 0) {
$site_email = variable_get('site_mail', FALSE);
$params = [
'accounts' => $email_list,
];
if ($site_email) {
drupal_mail('ldap_user', 'orphaned_accounts', $site_email, language_default(), $params);
}
}
return TRUE;
}