]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - plugins/ForceGroup/ForceGroupPlugin.php
Merge branch 'master' into 1.0.x
[quix0rs-gnu-social.git] / plugins / ForceGroup / ForceGroupPlugin.php
1 <?php
2 /*
3  * StatusNet - the distributed open-source microblogging tool
4  * Copyright (C) 2010, StatusNet, Inc.
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Affero General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU Affero General Public License for more details.
15  *
16  * You should have received a copy of the GNU Affero General Public License
17  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18  */
19
20 /**
21  * @package ForceGroupPlugin
22  * @maintainer Brion Vibber <brion@status.net>
23  */
24
25 if (!defined('STATUSNET')) { exit(1); }
26
27 class ForceGroupPlugin extends Plugin
28 {
29     /**
30      * Members of these groups will have all their posts mirrored into
31      * the group even if they don't explicitly mention it.
32      *
33      * List by local nickname.
34      */
35     public $post = array();
36
37     /**
38      * New user registrations will automatically join these groups on
39      * registration. They're not prevented from leaving, however.
40      *
41      * List by local nickname.
42      */
43     public $join = array();
44
45     /**
46      * If poster is in one of the forced groups, make sure their notice
47      * gets saved into that group even if not explicitly mentioned.
48      *
49      * @param Notice $notice
50      * @return boolean event hook return
51      */
52     function onStartNoticeDistribute($notice)
53     {
54         $profile = $notice->getProfile();
55         foreach ($this->post as $nickname) {
56             $group = User_group::getForNickname($nickname);
57             if ($group && $profile->isMember($group)) {
58                 $notice->addToGroupInbox($group);
59             }
60         }
61         return true;
62     }
63
64     function onEndUserRegister($profile, $user)
65     {
66         $profile = $user->getProfile();
67         foreach ($this->join as $nickname) {
68             $group = User_group::getForNickname($nickname);
69             if ($group && !$profile->isMember($group)) {
70                 try {
71                     $profile->joinGroup($group);
72                 } catch (Exception $e) {
73                     // TRANS: Server exception.
74                     // TRANS: %1$s is a user nickname, %2$s is a group nickname.
75                     throw new ServerException(sprintf(_m('Could not join user %1$s to group %2$s.'),
76                                                $user->nickname, $group->nickname));
77                 }
78             }
79         }
80     }
81
82     /**
83      * Provide plugin version information.
84      *
85      * This data is used when showing the version page.
86      *
87      * @param array &$versions array of version data arrays; see EVENTS.txt
88      *
89      * @return boolean hook value
90      */
91     function onPluginVersion(&$versions)
92     {
93         $url = 'http://status.net/wiki/Plugin:ForceGroup';
94
95         $versions[] = array('name' => 'ForceGroup',
96             'version' => STATUSNET_VERSION,
97             'author' => 'Brion Vibber',
98             'homepage' => $url,
99             'rawdescription' =>
100             // TRANS: Plugin description.
101             _m('Allows forced group memberships and forces all notices to appear in groups that users were forced in.'));
102
103         return true;
104     }
105 }