}
if (self::maySubscribe($user)) {
XDB::execute('INSERT IGNORE INTO newsletter_ins (nlid, uid, last, hash)
- VALUES ({?}, {?}, 0, hash)',
+ VALUES ({?}, {?}, NULL, hash)',
$this->id, $user->id());
}
}
+ /** Subscribe a batch of users to a newsletter.
+ * This skips 'maySubscribe' test.
+ *
+ * @p $user_ids Array of user IDs to subscribe to the newsletter.
+ */
+ public function bulkSubscribe($user_ids)
+ {
+ // TODO: use a 'bulkMaySubscribe'.
+ XDB::execute('INSERT IGNORE INTO newsletter_ins (nlid, uid, last, hash)
+ SELECT {?}, a.uid, NULL, NULL
+ FROM accounts AS a
+ WHERE a.uid IN {?}',
+ $this->id, $user_ids);
+ }
+
/** Retrieve subscription state of a user
* @p $user Target user; if null, use current user.
* @return Boolean: true if the user has subscribed to the NL.
}
if ($globals->asso('has_nl')) {
+ $nl = NewsLetter::forGroup($globals->asso('shortname');
// Updates group's newsletter subscription.
if (Post::i('newsletter') == 1) {
- XDB::execute('INSERT IGNORE INTO newsletter_ins (uid, nlid)
- SELECT {?}, id
- FROM newsletters
- WHERE group_id = {?}',
- $user->id(), $globals->asso('id'));
+ $nl->subscribe($user);
} else {
- XDB::execute('DELETE ni
- FROM newsletter_ins AS ni
- INNER JOIN newsletters AS n ON (n.id = ni.nlid)
- WHERE ni.uid = {?} AND n.group_id = {?}',
- $user->id(), $globals->asso('id'));
+ $nl->unsubscribe(null, $user->id);
}
}
}
$res = XDB::rawFetchAllAssoc('SHOW COLUMNS FROM group_members LIKE \'position\'');
$positions = str_replace(array('enum(', ')', '\''), '', $res[0]['Type']);
- $nl_registered = XDB::fetchOneCell('SELECT COUNT(ni.uid)
- FROM newsletter_ins AS ni
- INNER JOIN newsletters AS n ON (n.id = ni.nlid)
- WHERE ni.uid = {?} AND n.group_id = {?}',
- $user->id(), $globals->asso('id'));
+ if ($globals->asso('has_nl')) {
+ $nl = NewsLetter::forGroup($globals->asso('shortname'));
+ $nl_registered = $nl->subscriptionState($user);
+ } else {
+ $nl_registered = false;
+ }
$page->assign('user', $user);
$page->assign('suggest', $this->suggest($user));
if (Env::has('add_users')) {
S::assert_xsrf_token();
- XDB::execute('INSERT IGNORE INTO newsletter_ins (uid, nlid)
- SELECT g.uid, n.id
- FROM group_members AS g
- INNER JOIN newsletters AS n ON (n.group_id = g.asso_id)
- WHERE g.uid IN {?} AND g.asso_id = {?}',
- array_keys(Env::v('add_users')), $globals->asso('id'));
+ $nl->bulkSubscribe(array_keys(Env::v('add_users')));
$page->trigSuccess('Ajouts réalisés avec succès.');
}
+ // TODO(x2006barrois): remove raw SQL query.
$uids = XDB::fetchColumn('SELECT DISTINCT(g.uid)
FROM group_members AS g
WHERE g.asso_id = {?} AND NOT EXISTS (SELECT ni.*