2021-12-21 17:20:22 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< ? php  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								declare ( strict_types  =  1 );  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// {{{ License
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// This file is part of GNU social - https://www.gnu.org/software/social
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// GNU social 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.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// GNU social 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 GNU social.  If not, see <http://www.gnu.org/licenses/>.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// }}}
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								namespace  Component\Group ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								use  App\Core\Event ;  
						 
					
						
							
								
									
										
										
										
											2022-02-11 11:39:25 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								use  App\Entity\Activity ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								use  Component\Notification\Notification ;  
						 
					
						
							
								
									
										
										
										
											2021-12-23 17:13:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								use  function  App\Core\I18n\_m ;  
						 
					
						
							
								
									
										
										
										
											2021-12-21 17:20:22 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								use  App\Core\Modules\Component ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								use  App\Core\Router\RouteLoader ;  
						 
					
						
							
								
									
										
										
										
											2021-12-23 17:13:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								use  App\Core\Router\Router ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								use  App\Entity\Actor ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								use  App\Util\Common ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								use  App\Util\HTML ;  
						 
					
						
							
								
									
										
										
										
											2021-12-21 17:20:22 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								use  App\Util\Nickname ;  
						 
					
						
							
								
									
										
										
										
											2022-01-04 22:22:48 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								use  Component\Circle\Controller\SelfTagsSettings ;  
						 
					
						
							
								
									
										
										
										
											2021-12-21 17:20:22 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								use  Component\Group\Controller  as  C ;  
						 
					
						
							
								
									
										
										
										
											2021-12-27 17:27:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								use  Component\Group\Entity\LocalGroup ;  
						 
					
						
							
								
									
										
										
										
											2021-12-23 17:13:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								use  Symfony\Component\HttpFoundation\Request ;  
						 
					
						
							
								
									
										
										
										
											2021-12-21 17:20:22 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  Group  extends  Component  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  function  onAddRoute ( RouteLoader  $r ) :  bool 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-15 17:13:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $r -> connect ( id :  'group_actor_view_id' ,  uri_path :  '/group/{id<\d+>}' ,  target :  [ C\GroupFeed :: class ,  'groupViewId' ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $r -> connect ( id :  'group_actor_view_nickname' ,  uri_path :  '/!{nickname<'  .  Nickname :: DISPLAY_FMT  .  '>}' ,  target :  [ C\GroupFeed :: class ,  'groupViewNickname' ]); 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-10 16:02:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $r -> connect ( id :  'group_create' ,  uri_path :  '/group/new' ,  target :  [ C\Group :: class ,  'groupCreate' ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $r -> connect ( id :  'group_settings' ,  uri_path :  '/group/{id<\d+>}/settings' ,  target :  [ C\Group :: class ,  'groupSettings' ]); 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-21 17:20:22 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        return  Event :: next ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-11 11:39:25 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Enqueues  a  notification  for  an  Actor  ( such  as  person  or  group )  which  means 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  it  shows  up  in  their  home  feed  and  such . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  Actor  $sender 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  Activity  $activity 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  array  $targets 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  string | null  $reason 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ return  bool 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    public  function  onNewNotificationWithTargets ( Actor  $sender ,  Activity  $activity ,  array  $targets  =  [],  ? string  $reason  =  null ) :  bool 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        foreach ( $targets  as  $target )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $target -> isGroup ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // The Group announces to its subscribers
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                Notification :: notify ( $target ,  $activity ,  $target -> getSubscribers (),  $reason ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  Event :: next ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-12-24 09:34:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Add  an  < a  href = group_settings >  to  the  profile  card  for  groups ,  if  the  current  actor  can  access  them 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-21 17:20:22 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    public  function  onAppendCardProfile ( array  $vars ,  array  & $res ) :  bool 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-23 17:13:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        $actor  =  Common :: actor (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $group  =  $vars [ 'actor' ]; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-15 17:13:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        if  ( ! \is_null ( $actor )  &&  $group -> isGroup ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( $actor -> canModerate ( $group ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $url  =  Router :: url ( 'group_settings' ,  [ 'id'  =>  $group -> getId ()]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                $res []  =  HTML :: html ([ 'a'  =>  [ 'attrs'  =>  [ 'href'  =>  $url ,  'title'  =>  _m ( 'Edit group settings' ),  'class'  =>  'profile-extra-actions' ],  _m ( 'Group settings' )]]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $res []  =  HTML :: html ([ 'a'  =>  [ 'attrs'  =>  [ 'href'  =>  Router :: url ( 'blog_post' ,  [ 'in'  =>  $group -> getId ()]),  'title'  =>  _m ( 'Make a new blog post' ),  'class'  =>  'profile-extra-actions' ],  _m ( 'Post in blog' )]]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-12-23 17:13:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  Event :: next ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-10 16:02:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  onPopulateSettingsTabs ( Request  $request ,  string  $section ,  array  & $tabs ) :  bool 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-23 17:13:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( $section  ===  'profile'  &&  $request -> get ( '_route' )  ===  'group_settings' )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-10 04:31:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $group_id  =  $request -> get ( 'id' ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $group     =  Actor :: getById ( $group_id ); 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-23 17:13:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $tabs []    =  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                'title'       =>  'Self tags' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                'desc'        =>  'Add or remove tags on this group' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                'id'          =>  'settings-self-tags' , 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-04 22:22:48 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                'controller'  =>  SelfTagsSettings :: settingsSelfTags ( $request ,  $group ,  'settings-self-tags-details' ), 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-23 17:13:08 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            ]; 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-21 17:20:22 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  Event :: next ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-25 11:23:25 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  If  in  a  group  route ,  get  the  current  group 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    private  function  getGroupFromContext ( Request  $request ) :  ? Actor 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( str_starts_with ( $request -> get ( '_route' ),  'group_actor_view_' ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! \is_null ( $id  =  $request -> get ( 'id' )))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  Actor :: getById (( int )  $id ); 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-26 20:01:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! \is_null ( $nickname  =  $request -> get ( 'nickname' )))  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-27 17:27:07 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                return  LocalGroup :: getActorByNickname ( $nickname ); 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-25 11:23:25 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-10 16:02:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  onPostingFillTargetChoices ( Request  $request ,  Actor  $actor ,  array  & $targets ) :  bool 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-25 11:23:25 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $group  =  $this -> getGroupFromContext ( $request ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! \is_null ( $group ))  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-10 04:31:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $nick            =  " ! { $group -> getNickname () } " ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-01-02 20:04:52 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            $targets [ $nick ]  =  $group -> getId (); 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-25 11:23:25 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  Event :: next ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-01-26 20:01:37 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Indicates  the  context  in  which  Posting 's form is to be presented. Passing on $context_actor to Posting' s 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  onAppendRightPostingBlock  event ,  the  Group  a  given  $actor  is  currently  browsing . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  Makes  it  possible  to  automagically  fill  in  the  targets  ( aka  the  Group  which  this  $request  route  is  connected  to ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  in  the  Posting ' s  form . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     *  @ param  null | Actor  $context_actor  Actor  group ,  if  current  route  is  part  of  an  existing  Group  set  of  routes 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-10 16:02:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    public  function  onPostingGetContextActor ( Request  $request ,  Actor  $actor ,  ? Actor  & $context_actor ) :  bool 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-25 11:23:25 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        $ctx  =  $this -> getGroupFromContext ( $request ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ! \is_null ( $ctx ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            $context_actor  =  $ctx ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  Event :: stop ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  Event :: next ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-21 17:20:22 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}