forked from GNUsocial/gnu-social
46f98b3142
The core plugins whose version was attached to GS's were reseted to 2.0.0. 2.0.0 was chosen as reset version for plugins because it is higher than the one that was set by inheriting GS version. Furthermore, it's a major change from prior plugin versioning system thus it also makes semantic sense. Justification for version bump: == GS == 9a4ab31f26 1.19.0c13b935201
1.18.3c13b935201
1.18.218fc39d2cf
1.18.1c083a8bcc2
1.18.0e8783d46d0
1.17.1d9a42550ff
1.17.01536d3ef29
1.16.0c03ed457a6
1.15.0d2e6519bad
1.14.2fe411e8138
1.14.1b17e0b4169
1.14.0daa5f87fd4
1.13.0d75b5d2f4a
1.11.7f6dbf66983
1.11.66cf674f8f8
1.11.57845a09b34
1.11.4e4d432295d
1.11.3339204f1ee
1.11.2a4e679a118
1.11.17967db6ff5
1.11.0bc030da320
1.10.19cc7df51d6
1.10.0bf7f17474d
1.9.28a07edec5f
1.9.10042971d74
1.9.06b5450b7e6
1.8.05dcc98d1c6
1.7.0e6667db0cd
1.6.03290227b50
1.5.0a59c439b46
1.4.0496ab8c920
1.3.10986030060b
1.3.91d529c021a
1.3.8f89c052cf8
1.3.738f2ecefac
1.3.6e473937cb9
1.3.59a39ebe66f
1.3.4ddc3cecfc0
1.3.32b43d484eb
1.3.2e8e487187e
1.3.1 == Plugins == XMPP plugine0887220b0
bump patche186ad57d0
bump patch OStatuse186ad57d0
bump patch Nodeinfoceae66a30f
bump minor586fb5a517
bump major195296846e
bump minor
125 lines
4.1 KiB
PHP
125 lines
4.1 KiB
PHP
<?php
|
|
/*
|
|
* StatusNet - the distributed open-source microblogging tool
|
|
* Copyright (C) 2010, StatusNet, Inc.
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/**
|
|
* @package ForceGroupPlugin
|
|
* @maintainer Brion Vibber <brion@status.net>
|
|
*/
|
|
|
|
if (!defined('STATUSNET')) { exit(1); }
|
|
|
|
class ForceGroupPlugin extends Plugin
|
|
{
|
|
const PLUGIN_VERSION = '2.0.0';
|
|
|
|
/**
|
|
* 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();
|
|
|
|
$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)) {
|
|
$notice->addToGroupInbox($group);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public function onEndUserRegister(Profile $profile)
|
|
{
|
|
foreach ($this->join as $nickname) {
|
|
$group = User_group::getForNickname($nickname);
|
|
if ($group && !$profile->isMember($group)) {
|
|
try {
|
|
$profile->joinGroup($group);
|
|
} catch (Exception $e) {
|
|
// 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 = 'https://git.gnu.io/gnu/gnu-social/tree/master/plugins/ForceGroup';
|
|
|
|
$versions[] = array('name' => 'ForceGroup',
|
|
'version' => self::PLUGIN_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;
|
|
}
|
|
}
|