3 * StatusNet - the distributed open-source microblogging tool
4 * Copyright (C) 2010, StatusNet, Inc.
6 * When a new user registers, all existing users follow them automatically.
10 * This program is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU Affero General Public License as published by
12 * the Free Software Foundation, either version 3 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU Affero General Public License for more details.
20 * You should have received a copy of the GNU Affero General Public License
21 * along with this program. If not, see <http://www.gnu.org/licenses/>.
25 * @author Evan Prodromou <evan@status.net>
26 * @copyright 2010 StatusNet, Inc.
27 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
28 * @link http://status.net/
31 if (!defined('STATUSNET')) {
32 // This check helps protect against security problems;
33 // your code file can't be executed directly from the web.
38 * Plugin to make all users follow each other at registration
40 * Users can unfollow afterwards if they want.
44 * @author Evan Prodromou <evan@status.net>
45 * @copyright 2010 StatusNet, Inc.
46 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
47 * @link http://status.net/
49 class FollowEveryonePlugin extends Plugin
51 const PLUGIN_VERSION = '2.0.0';
54 * Called when a new user is registered.
56 * We find all users, and try to subscribe them to the new user, and
57 * the new user to them. Exceptions (like silenced users or whatever)
58 * are caught, logged, and ignored.
60 * @param Profile $profile The new user's profile
62 * @return boolean hook value
64 public function onEndUserRegister(Profile $profile)
66 $otherUser = new User();
67 $otherUser->whereAdd('id != ' . $profile->id);
69 if ($otherUser->find()) {
70 while ($otherUser->fetch()) {
71 $otherProfile = $otherUser->getProfile();
73 if (User_followeveryone_prefs::followEveryone($otherUser->id)) {
74 Subscription::start($otherProfile, $profile);
76 Subscription::start($profile, $otherProfile);
77 } catch (Exception $e) {
78 common_log(LOG_WARNING, $e->getMessage());
84 $ufep = new User_followeveryone_prefs();
86 $ufep->user_id = $profile->id;
87 $ufep->followeveryone = true;
95 * Database schema setup
97 * Plugins can add their own tables to the StatusNet database. Plugins
98 * should use StatusNet's schema interface to add or delete tables. The
99 * ensureTable() method provides an easy way to ensure a table's structure
102 * By default, the schema is checked every time StatusNet is run (say, when
103 * a Web page is hit). Admins can configure their systems to only check the
104 * schema when the checkschema.php script is run, greatly improving performance.
105 * However, they need to remember to run that script after installing or
106 * upgrading a plugin!
111 * @return boolean hook value; true means continue processing, false means stop.
113 function onCheckSchema()
115 $schema = Schema::get();
117 // For storing user-submitted flags on profiles
118 $schema->ensureTable('user_followeveryone_prefs', User_followeveryone_prefs::schemaDef());
124 * Show a checkbox on the profile form to ask whether to follow everyone
126 * @param Action $action The action being executed
128 * @return boolean hook value
130 function onEndProfileFormData($action)
132 $user = common_current_user();
134 $action->elementStart('li');
135 // TRANS: Checkbox label in form for profile settings.
136 $action->checkbox('followeveryone', _m('Follow everyone'),
137 ($action->arg('followeveryone')) ?
138 $action->arg('followeveryone') :
139 User_followeveryone_prefs::followEveryone($user->id));
140 $action->elementEnd('li');
146 * Save checkbox value for following everyone
148 * @param Action $action The action being executed
150 * @return boolean hook value
152 function onEndProfileSaveForm($action)
154 $user = common_current_user();
156 User_followeveryone_prefs::savePref($user->id,
157 $action->boolean('followeveryone'));
163 * Provide version information about this plugin.
165 * @param Array &$versions Array of version data
167 * @return boolean hook value
170 function onPluginVersion(array &$versions)
172 $versions[] = array('name' => 'FollowEveryone',
173 'version' => self::PLUGIN_VERSION,
174 'author' => 'Evan Prodromou',
175 'homepage' => 'https://git.gnu.io/gnu/gnu-social/tree/master/plugins/FollowEveryone',
177 // TRANS: Plugin description.
178 _m('New users follow everyone at registration and are followed in return.'));