| 
									
										
										
										
											2010-09-30 16:25:15 -07:00
										 |  |  | <?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 | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * 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(); | 
					
						
							| 
									
										
										
										
											2011-04-08 18:46:41 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-30 16:25:15 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * New user registrations will automatically join these groups on | 
					
						
							|  |  |  |      * registration. They're not prevented from leaving, however. | 
					
						
							| 
									
										
										
										
											2011-04-08 18:46:41 +02:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2010-09-30 16:25:15 -07:00
										 |  |  |      * 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(); | 
					
						
							| 
									
										
										
										
											2012-06-18 23:39:47 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-25 13:17:29 +02:00
										 |  |  |         $isRemote = !(User::getKV('id', $profile->id)); | 
					
						
							| 
									
										
										
										
											2012-06-18 23:39:47 -04:00
										 |  |  |         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; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-30 16:25:15 -07:00
										 |  |  |         foreach ($this->post as $nickname) { | 
					
						
							|  |  |  |             $group = User_group::getForNickname($nickname); | 
					
						
							|  |  |  |             if ($group && $profile->isMember($group)) { | 
					
						
							|  |  |  |                 $notice->addToGroupInbox($group); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-14 18:36:35 +02:00
										 |  |  |     public function onEndUserRegister(Profile $profile) | 
					
						
							| 
									
										
										
										
											2010-09-30 16:25:15 -07:00
										 |  |  |     { | 
					
						
							|  |  |  |         foreach ($this->join as $nickname) { | 
					
						
							|  |  |  |             $group = User_group::getForNickname($nickname); | 
					
						
							|  |  |  |             if ($group && !$profile->isMember($group)) { | 
					
						
							|  |  |  |                 try { | 
					
						
							| 
									
										
										
										
											2011-03-21 14:35:29 -07:00
										 |  |  |                     $profile->joinGroup($group); | 
					
						
							| 
									
										
										
										
											2010-09-30 16:25:15 -07:00
										 |  |  |                 } catch (Exception $e) { | 
					
						
							| 
									
										
										
										
											2010-10-01 21:53:20 +02:00
										 |  |  |                     // 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.'), | 
					
						
							| 
									
										
										
										
											2013-09-14 18:36:35 +02:00
										 |  |  |                                                $profile->nickname, $group->nickname)); | 
					
						
							| 
									
										
										
										
											2010-09-30 16:25:15 -07:00
										 |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-10-01 21:53:20 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * 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(&$versions) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $url = 'http://status.net/wiki/Plugin:ForceGroup'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $versions[] = array('name' => 'ForceGroup', | 
					
						
							| 
									
										
										
										
											2013-11-01 13:51:41 +01:00
										 |  |  |             'version' => GNUSOCIAL_VERSION, | 
					
						
							| 
									
										
										
										
											2010-10-01 21:53:20 +02:00
										 |  |  |             '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; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2010-09-30 16:25:15 -07:00
										 |  |  | } |