+ $data = $res->fetchOneAssoc();
+ $positions = XDB::fetchAllAssoc('SELECT position, uid
+ FROM group_members
+ WHERE asso_id = {?} AND position IS NOT NULL
+ ORDER BY position',
+ $data['id']);
+ return new Group(array_merge($data, array('positions' => $positions)));
+ }
+
+ static public function subscribe($group_id, $uid)
+ {
+ XDB::execute('DELETE FROM group_former_members
+ WHERE uid = {?} AND asso_id = {?}',
+ $uid, $group_id);
+ XDB::execute('INSERT IGNORE INTO group_members (asso_id, uid)
+ VALUES ({?}, {?})',
+ $group_id, $uid);
+ }
+
+ static public function unsubscribe($group_id, $uid, $remember)
+ {
+ XDB::execute('INSERT INTO group_former_members (asso_id, uid, remember, unsubsciption_date)
+ VALUES ({?}, {?}, {?}, NOW())',
+ $group_id, $uid, $remember);
+ XDB::execute('DELETE FROM group_members
+ WHERE uid = {?} AND asso_id = {?}',
+ $uid, $group_id);
+ self::fix_notification($group_id);
+ }
+
+ static private function fix_notification($group_id)
+ {
+ $count = XDB::fetchOneCell("SELECT COUNT(uid)
+ FROM group_members
+ WHERE asso_id = {?} AND perms = 'admin' AND FIND_IN_SET('notify', flags)",
+ $group_id);
+ if ($count == 0) {
+ XDB::execute("UPDATE groups
+ SET flags = IF(flags = '', 'notify_all', CONCAT(flags, ',', 'notify_all'))
+ WHERE id = {?}",
+ $group_id);
+ }