. */ /** * @package ForceGroupPlugin * @maintainer Brion Vibber */ if (!defined('STATUSNET')) { exit(1); } class ForceGroupPlugin extends Plugin { /** * Members of these groups will have all their posts mirrored into * the group even if they don't explicitly mention it. * * List by local nickname. */ public $post = array(); /** * New user registrations will automatically join these groups on * registration. They're not prevented from leaving, however. * * List by local nickname. */ public $join = array(); /** * If poster is in one of the forced groups, make sure their notice * gets saved into that group even if not explicitly mentioned. * * @param Notice $notice * @return boolean event hook return */ function onStartNoticeDistribute($notice) { $profile = $notice->getProfile(); foreach ($this->post as $nickname) { $group = User_group::getForNickname($nickname); if ($group && $profile->isMember($group)) { $notice->addToGroupInbox($group); } } return true; } function onEndUserRegister($profile, $user) { $profile = $user->getProfile(); foreach ($this->join as $nickname) { $group = User_group::getForNickname($nickname); if ($group && !$profile->isMember($group)) { try { if (Event::handle('StartJoinGroup', array($group, $user))) { Group_member::join($group->id, $user->id); Event::handle('EndJoinGroup', array($group, $user)); } } catch (Exception $e) { throw new ServerException(sprintf(_('Could not join user %1$s to group %2$s.'), $user->nickname, $group->nickname)); } } } } }