You are here

function simplenews_roles_update_subscriptions in Simplenews Roles 6

Same name and namespace in other branches
  1. 5 simplenews_roles.module \simplenews_roles_update_subscriptions()
  2. 6.2 simplenews_roles.module \simplenews_roles_update_subscriptions()
  3. 7 simplenews_roles.module \simplenews_roles_update_subscriptions()

API function; clears subscription list for specified newsletter and replaces it with users from the specified roles.

5 calls to simplenews_roles_update_subscriptions()
SimplenewsRolesTestCase::testRoleSync in tests/simplenews_roles.test
Test role synchronization.
simplenews_roles_cron in ./simplenews_roles.module
Implementation of hook_cron().
simplenews_roles_newsletter_submit in ./simplenews_roles.module
Forms API callback; additional submit handler for newsletter form.
simplenews_roles_nodeapi in ./simplenews_roles.module
Implementation of hook_nodeapi().
simplenews_roles_user in ./simplenews_roles.module
Implementation of hook_user().

File

./simplenews_roles.module, line 155

Code

function simplenews_roles_update_subscriptions($tid, $rids = array()) {
  if (is_array($rids) && $rids) {

    // TODO: Don't delete then insert, find the diff and add/remove!
    // Remove all subscriptions from this newsletter.
    $result = db_query('DELETE FROM {simplenews_snid_tid} WHERE tid = %d', $tid);

    // Subscribe all active users from selected roles, if special authenticated user
    // is in selected roles, just pull all active users.
    if (in_array(DRUPAL_AUTHENTICATED_RID, $rids)) {
      $result = db_query('SELECT u.mail FROM {users} u WHERE u.status = 1 AND u.uid != 0');
    }
    else {
      $result = db_query('SELECT u.mail FROM {users} u INNER JOIN {users_roles} r ON u.uid = r.uid WHERE u.status = 1 AND (' . implode(' OR ', array_fill(0, count($rids), 'r.rid = %d')) . ')', $rids);
    }
    while ($account = db_fetch_object($result)) {
      simplenews_subscribe_user($account->mail, $tid, FALSE);
    }
    watchdog('newsletter', t('Newsletter subscription list was automatically regenerated.'));
  }
}