* 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();
function onStartNoticeDistribute($notice)
{
$profile = $notice->getProfile();
+
+ $isRemote = !(User::getKV('id', $profile->id));
+ if ($isRemote) {
+ /*
+ * Notices from remote users on other sites
+ * will normally not end up here unless they're
+ * specifically directed here, e.g.: via explicit
+ * post to a remote (to them) group. But remote
+ * notices can also be `pulled in' as a result of
+ * local users subscribing to the remote user;
+ * from the remote user's perspective, this results
+ * in group-forcing appearing effectively random.
+ * So let's be consistent, and just never force
+ * incoming remote notices into a ForceGroup:
+ */
+ return true;
+ }
+
foreach ($this->post as $nickname) {
$group = User_group::getForNickname($nickname);
if ($group && $profile->isMember($group)) {
return true;
}
- function onEndUserRegister($profile, $user)
+ public function onEndUserRegister(Profile $profile)
{
- $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));
- }
+ $profile->joinGroup($group);
} catch (Exception $e) {
- throw new ServerException(sprintf(_('Could not join user %1$s to group %2$s.'),
- $user->nickname, $group->nickname));
+ // TRANS: Server exception.
+ // TRANS: %1$s is a user nickname, %2$s is a group nickname.
+ throw new ServerException(sprintf(_m('Could not join user %1$s to group %2$s.'),
+ $profile->nickname, $group->nickname));
}
}
}
}
+
+ /**
+ * Provide plugin version information.
+ *
+ * This data is used when showing the version page.
+ *
+ * @param array &$versions array of version data arrays; see EVENTS.txt
+ *
+ * @return boolean hook value
+ */
+ function onPluginVersion(array &$versions)
+ {
+ $url = 'http://status.net/wiki/Plugin:ForceGroup';
+
+ $versions[] = array('name' => 'ForceGroup',
+ 'version' => GNUSOCIAL_VERSION,
+ 'author' => 'Brion Vibber',
+ 'homepage' => $url,
+ 'rawdescription' =>
+ // TRANS: Plugin description.
+ _m('Allows forced group memberships and forces all notices to appear in groups that users were forced in.'));
+
+ return true;
+ }
}