function simplenews_roles_update_subscriptions in Simplenews Roles 7
Same name and namespace in other branches
- 5 simplenews_roles.module \simplenews_roles_update_subscriptions()
- 6.2 simplenews_roles.module \simplenews_roles_update_subscriptions()
- 6 simplenews_roles.module \simplenews_roles_update_subscriptions()
API function
A function that synchronizes users and newsletter categories according to user roles.
2 calls to simplenews_roles_update_subscriptions()
- simplenews_roles_cron in ./
simplenews_roles.module - Implements hook_cron().
- simplenews_roles_newsletter_submit in ./
simplenews_roles.module - Forms API callback; additional submit handler for newsletter form.
File
- ./
simplenews_roles.module, line 140 - Synchronize user subscriptions based on user roles membership.
Code
function simplenews_roles_update_subscriptions($tid, $rids = array()) {
$sync_done = TRUE;
if (is_array($rids) && !empty($rids)) {
if (!in_array(DRUPAL_AUTHENTICATED_RID, $rids)) {
$db_or = db_or();
foreach ($rids as $rid) {
$db_or
->condition('ur.rid', $rid);
}
// Unsubscribe query
$auto_remove = variable_get('simplenews_roles_auto_remove', array());
if (!isset($auto_remove[$tid]) || $auto_remove[$tid]) {
// Define how many items to unsubscribe per each cron.
$unsubscribe_limit = variable_get('simplenews_roles_unsubscribe_limit', 1000);
$subquery = db_select('users', 'u');
$subquery
->fields('u', array(
'uid',
));
$subquery
->leftJoin('users_roles', 'ur', 'ur.uid = u.uid');
$subquery
->condition($db_or);
$query = db_select('simplenews_subscriber', 'subscriber');
$query
->fields('subscriber', array(
'mail',
));
$query
->leftJoin('simplenews_subscription', 'subscription', 'subscriber.snid = subscription.snid');
$query
->condition('subscription.tid', $tid);
$query
->condition('subscription.status', SIMPLENEWS_SUBSCRIPTION_ACTIVE);
$query
->condition('subscriber.uid', $subquery, 'NOT IN');
$query
->range(0, $unsubscribe_limit);
$unsubscribe = $query
->execute();
$i = 1;
foreach ($unsubscribe as $account) {
simplenews_unsubscribe_user($account->mail, $tid, FALSE, 'simplenews_roles');
$i++;
}
if ($i > $unsubscribe_limit) {
$sync_done = FALSE;
}
}
}
// Define how many items to subscribe per each cron.
$subscribe_limit = variable_get('simplenews_roles_subscribe_limit', 1000);
// Build subscribe query
$subquery = db_select('simplenews_subscriber', 'subscriber');
$subquery
->fields('subscriber', array(
'uid',
));
$subquery
->leftJoin('simplenews_subscription', 'subscription', 'subscriber.snid = subscription.snid');
$subquery
->condition('subscription.tid', $tid);
$subquery
->condition('subscription.status', SIMPLENEWS_SUBSCRIPTION_ACTIVE);
$query = db_select('users', 'u');
$query
->fields('u', array(
'mail',
));
$query
->leftJoin('users_roles', 'ur', 'ur.uid = u.uid');
if (isset($db_or)) {
$query
->condition($db_or);
}
$query
->condition('u.uid', 0, '>');
$query
->condition('u.uid', $subquery, 'NOT IN');
$query
->range(0, $subscribe_limit);
$subscribe = $query
->execute();
// Users to subscribe
$i = 1;
foreach ($subscribe as $account) {
simplenews_subscribe_user($account->mail, $tid, FALSE, 'simplenews_roles');
$i++;
}
if ($i > $subscribe_limit) {
$sync_done = FALSE;
}
}
return $sync_done;
}