]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - plugins/ForceGroup/ForceGroupPlugin.php
Merge branch '0.9.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                     if (Event::handle('StartJoinGroup', array($group, $user))) {
72                         Group_member::join($group->id, $user->id);
73                         Event::handle('EndJoinGroup', array($group, $user));
74                     }
75                 } catch (Exception $e) {
76                     // TRANS: Server exception.
77                     // TRANS: %1$s is a user nickname, %2$s is a group nickname.
78                     throw new ServerException(sprintf(_m('Could not join user %1$s to group %2$s.'),
79                                                $user->nickname, $group->nickname));
80                 }
81             }
82         }
83     }
84
85     /**
86      * Provide plugin version information.
87      *
88      * This data is used when showing the version page.
89      *
90      * @param array &$versions array of version data arrays; see EVENTS.txt
91      *
92      * @return boolean hook value
93      */
94     function onPluginVersion(&$versions)
95     {
96         $url = 'http://status.net/wiki/Plugin:ForceGroup';
97
98         $versions[] = array('name' => 'ForceGroup',
99             'version' => STATUSNET_VERSION,
100             'author' => 'Brion Vibber',
101             'homepage' => $url,
102             'rawdescription' =>
103             // TRANS: Plugin description.
104             _m('Allows forced group memberships and forces all notices to appear in groups that users were forced in.'));
105
106         return true;
107     }
108 }