2020-06-21 23:56:26 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								< ? php 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// {{{ License
 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-14 22:37:45 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-06-21 23:56:26 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								// 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/>.
 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-14 22:37:45 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-06-21 23:56:26 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								// }}}
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								/** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  Handle  network  public  feed 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  @ package   GNUsocial 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  @ category  Controller 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-19 23:29:43 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 *  @ author     Hugo  Sales  < hugo @ hsal . es > 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-30 17:35:38 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 *  @ author     Eliseu  Amaro  < eliseu @ fc . up . pt > 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-19 23:29:43 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 *  @ copyright  2020 - 2021  Free  Software  Foundation ,  Inc  http :// www . fsf . org 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-21 23:56:26 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								 *  @ license    https :// www . gnu . org / licenses / agpl . html  GNU  AGPL  v3  or  later 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								namespace  App\Controller ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-07-30 22:47:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// {{{ Imports
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								use  App\Core\DB\DB ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								use  App\Core\Event ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-26 23:44:53 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								use  App\Core\Form ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-21 23:56:26 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								use  function  App\Core\I18n\_m ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-07 18:25:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								use  App\Entity\UserNotificationPrefs ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-25 17:56:38 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								use  App\Util\Common ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-04 20:11:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								use  App\Util\Exception\AuthenticationException ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								use  App\Util\Exception\ServerException ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-27 03:48:35 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								use  App\Util\Form\ArrayTransformer ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-06 11:12:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								use  App\Util\Form\FormFields ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								use  App\Util\Formatting ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-30 22:47:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								use  Doctrine\DBAL\Types\Types ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								use  Exception ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								use  Functional  as  F ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-26 00:02:20 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								use  Misd\PhoneNumberBundle\Form\Type\PhoneNumberType ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-20 00:22:41 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								use  Symfony\Bundle\FrameworkBundle\Controller\AbstractController ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-21 22:02:39 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								use  Symfony\Component\Form\Extension\Core\Type\CheckboxType ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-04 20:11:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								use  Symfony\Component\Form\Extension\Core\Type\LocaleType ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-21 23:56:26 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								use  Symfony\Component\Form\Extension\Core\Type\SubmitType ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-20 22:05:10 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								use  Symfony\Component\Form\Extension\Core\Type\TextareaType ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-21 23:56:26 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								use  Symfony\Component\Form\Extension\Core\Type\TextType ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								use  Symfony\Component\HttpFoundation\Request ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-07-30 22:47:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// }}} Imports
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-07-20 00:22:41 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								class  UserPanel  extends  AbstractController 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-21 23:56:26 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-29 17:29:25 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     *  Return  main  settings  page  forms 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     *  @ param  Request  $request 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     *  @ throws  Exception 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     *  @ return  array 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    public  function  all_settings ( Request  $request ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-04 20:11:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        $account_form              =  $this -> account ( $request ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        $personal_form             =  $this -> personal_info ( $request ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        $notifications_form_array  =  $this -> notifications ( $request ); 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-29 17:29:25 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-04 20:11:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        return  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            '_template'            =>  'settings/base.html.twig' , 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-29 17:29:25 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            'prof'                 =>  $personal_form -> createView (), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            'acc'                  =>  $account_form -> createView (), 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-04 20:11:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            'tabbed_forms_notify'  =>  $notifications_form_array , 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-29 17:29:25 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-06 19:47:15 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     *  Local  user  personal  information  panel 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-26 00:02:20 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    public  function  personal_info ( Request  $request ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-21 23:56:26 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-25 17:56:38 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        $user             =  Common :: user (); 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-04 20:11:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        $actor            =  $user -> getActor (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        $extra            =  [ 'self_tags'  =>  $actor -> getSelfTags ()]; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-25 17:56:38 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        $form_definition  =  [ 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-04 20:11:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            [ 'nickname' ,    TextType :: class ,       [ 'label'  =>  _m ( 'Nickname' ),   'required'  =>  true ,   'help'  =>  _m ( '1-64 lowercase letters or numbers, no punctuation or spaces.' )]], 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            [ 'full_name' ,   TextType :: class ,       [ 'label'  =>  _m ( 'Full Name' ),  'required'  =>  false ,  'help'  =>  _m ( 'A full name is required, if empty it will be set to your nickname.' )]], 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            [ 'homepage' ,    TextType :: class ,       [ 'label'  =>  _m ( 'Homepage' ),   'required'  =>  false ,  'help'  =>  _m ( 'URL of your homepage, blog, or profile on another site.' )]], 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            [ 'bio' ,         TextareaType :: class ,   [ 'label'  =>  _m ( 'Bio' ),        'required'  =>  false ,  'help'  =>  _m ( 'Describe yourself and your interests.' )]], 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            [ 'location' ,    TextType :: class ,       [ 'label'  =>  _m ( 'Location' ),   'required'  =>  false ,  'help'  =>  _m ( 'Where you are, like "City, State (or Region), Country".' )]], 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            [ 'self_tags' ,   TextType :: class ,       [ 'label'  =>  _m ( 'Self Tags' ),  'required'  =>  false ,  'help'  =>  _m ( 'Tags for yourself (letters, numbers, -, ., and _), comma- or space-separated.' ),  'transformer'  =>  ArrayTransformer :: class ]], 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-18 18:38:54 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            [ 'save_personal_info' ,        SubmitType :: class ,     [ 'label'  =>  _m ( 'Save personal info' )]], 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-25 17:56:38 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        ]; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-29 17:29:25 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        $extra_step  =  function  ( $data ,  $extra_args )  use  ( $user )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            $user -> setNickname ( $data [ 'nickname' ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        }; 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-04 20:11:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        $form  =  Form :: handle ( $form_definition ,  $request ,  $actor ,  $extra ,  $extra_step ,  [[ 'self_tags'  =>  $extra [ 'self_tags' ]]]); 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-21 23:56:26 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-29 17:29:25 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        return  $form ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-21 23:56:26 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-21 22:02:39 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-06 19:47:15 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     *  Local  user  account  information  panel 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-21 22:02:39 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    public  function  account ( Request  $request ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-04 20:11:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        $user  =  Common :: user (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // TODO Add support missing settings
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        $form  =  Form :: create ([ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            [ 'outgoing_email' ,  TextType :: class ,         [ 'label'  =>  _m ( 'Outgoing email' ),  'required'  =>  true ,   'help'  =>  _m ( 'Change the email we use to contact you' )]], 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            [ 'incoming_email' ,  TextType :: class ,         [ 'label'  =>  _m ( 'Incoming email' ),  'required'  =>  true ,   'help'  =>  _m ( 'Change the email you use to contact us (for posting, for instance)' )]], 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            [ 'old_password' ,    TextType :: class ,         [ 'label'  =>  _m ( 'Old password' ),    'required'  =>  false ,  'help'  =>  _m ( 'Enter your old password for verification' ),  'attr'  =>  [ 'placeholder'  =>  '********' ]]], 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            FormFields :: repeated_password ([ 'required'  =>  false ]), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            [ 'language' ,        LocaleType :: class ,       [ 'label'  =>  _m ( 'Language' ),        'required'  =>  false ,  'help'  =>  _m ( 'Your preferred language' )]], 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            [ 'phone_number' ,    PhoneNumberType :: class ,  [ 'label'  =>  _m ( 'Phone number' ),    'required'  =>  false ,  'help'  =>  _m ( 'Your phone number' ),                         'data_class'  =>  null ]], 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-18 18:38:54 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            [ 'save_account_info' ,            SubmitType :: class ,       [ 'label'  =>  _m ( 'Save account info' )]], 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-04 20:11:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        $form -> handleRequest ( $request ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( $form -> isSubmitted ()  &&  $form -> isValid ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            $data  =  $form -> getData (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( ! is_null ( $data [ 'old_password' ]))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                $data [ 'password' ]  =  $form -> get ( 'password' ) -> getData (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                if  ( ! ( $user -> changePassword ( $data [ 'old_password' ],  $data [ 'password' ])))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    throw  new  AuthenticationException ( _m ( 'The provided password is incorrect' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-27 03:48:35 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-04 20:11:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            unset ( $data [ 'old_password' ],  $data [ 'password' ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            foreach  ( $data  as  $key  =>  $val )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                $method  =  'set'  .  ucfirst ( Formatting :: snakeCaseToCamelCase ( $key )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                if  ( method_exists ( $user ,  $method ))  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    $user -> { $method }( $val ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            DB :: flush (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-21 22:02:39 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-29 17:29:25 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        return  $form ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-21 22:02:39 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-22 21:58:23 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-06 19:47:15 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    /** 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     *  Local  user  notification  settings  tabbed  panel 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-26 16:05:07 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    public  function  notifications ( Request  $request ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-22 21:58:23 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-07 18:25:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        $user       =  Common :: user (); 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-30 22:47:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        $schema     =  DB :: getConnection () -> getSchemaManager (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        $platform   =  $schema -> getDatabasePlatform (); 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-05 16:31:39 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        $columns    =  Common :: arrayRemoveKeys ( $schema -> listTableColumns ( 'user_notification_prefs' ),  [ 'user_id' ,  'transport' ,  'created' ,  'modified' ]); 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-30 22:47:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        $form_defs  =  [ 'placeholder'  =>  []]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        foreach  ( $columns  as  $name  =>  $col )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-05 16:31:39 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            $type      =  $col -> getType (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            $val       =  $type -> convertToPHPValue ( $col -> getDefault (),  $platform ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            $type_str  =  lcfirst ( substr (( string )  $type ,  1 )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            $label     =  str_replace ( '_' ,  ' ' ,  ucfirst ( $name )); 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-05 23:05:06 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            $labels  =  [ 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-04 20:11:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                'target_gsactor_id'  =>  'Target Actors' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                'dm'                 =>  'DM' , 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-05 23:05:06 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            $help  =  [ 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-04 20:11:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                'target_gsactor_id'      =>  'If specified, these settings apply only to these profiles (comma- or space-separated list)' , 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-05 23:05:06 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                'activity_by_followed'   =>  'Notify me when someone I follow has new activity' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                'mention'                =>  'Notify me when mentions me in a notice' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                'reply'                  =>  'Notify me when someone replies to a notice made by me' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                'follow'                 =>  'Notify me when someone follows me or asks for permission to do so' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                'favorite'               =>  'Notify me when someone favorites one of my notices' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                'nudge'                  =>  'Notify me when someone nudges me' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                'dm'                     =>  'Notify me when someone sends me a direct message' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                'post_on_status_change'  =>  'Post a notice when my status in this service changes' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                'enable_posting'         =>  'Enable posting from this service' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            ]; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-08-05 16:31:39 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            switch  ( $type_str )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-30 22:47:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            case  Types :: BOOLEAN : 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-05 23:05:06 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                $form_defs [ 'placeholder' ][ $name ]  =  [ $name ,  CheckboxType :: class ,  [ 'data'  =>  $val ,  'label'  =>  _m ( $labels [ $name ]  ? ?  $label ),  'help'  =>  _m ( $help [ $name ])]]; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-30 22:47:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            case  Types :: INTEGER : 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-04 20:11:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                if  ( $name  ==  'target_gsactor_id' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    $form_defs [ 'placeholder' ][ $name ]  =  [ $name ,  TextType :: class ,  [ 'data'  =>  $val ,  'label'  =>  _m ( $labels [ $name ]),  'help'  =>  _m ( $help [ $name ])],  'transformer'  =>  ActorArrayTransformer :: class ]; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-30 22:47:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-11 17:19:29 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                break ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-30 22:47:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            default : 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-04 20:11:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                // @codeCoverageIgnoreStart
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                throw  new  ServerException ( _m ( 'Internal server error' )); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                Log :: critical ( " Structure of table user_notification_prefs changed in a way not accounted to in notification settings ( { $name } ):  "  .  $type_str ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                // @codeCoverageIgnoreEnd
 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-30 22:47:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-08-07 18:25:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        $form_defs [ 'placeholder' ][ 'save' ]  =  fn  ( string  $transport ,  string  $form_name )  =>  [ $form_name ,  SubmitType :: class , 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-04 20:11:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            [ 'label'  =>  _m ( 'Save notification settings for {transport}' ,  [ 'transport'  =>  $transport ])],  ]; 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-07 18:24:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-10-19 18:22:59 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        Event :: handle ( 'AddNotificationTransport' ,  [ & $form_defs ]); 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-30 22:47:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        unset ( $form_defs [ 'placeholder' ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        $tabbed_forms  =  []; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        foreach  ( $form_defs  as  $transport_name  =>  $f )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-07 18:24:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            unset ( $f [ 'save' ]); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            $form                           =  Form :: create ( $f ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            $tabbed_forms [ $transport_name ]  =  $form ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            $form -> handleRequest ( $request ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( $form -> isSubmitted ()  &&  $form -> isValid ())  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                $data  =  $form -> getData (); 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-07 18:25:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                unset ( $data [ 'translation_domain' ]); 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-04 20:11:01 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    [ $ent ,  $is_update ]  =  UserNotificationPrefs :: createOrUpdate ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        array_merge ([ 'user_id'  =>  $user -> getId (),  'transport'  =>  $transport_name ],  $data ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        find_by_keys :  [ 'user_id' ,  'transport' ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    if  ( ! $is_update )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        DB :: persist ( $ent ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    DB :: flush (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    // @codeCoverageIgnoreStart
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                }  catch  ( \Exception  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    // Somehow, the exception doesn't bubble up in phpunit
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    dd ( $data ,  $e ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    // @codeCoverageIgnoreEnd
 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-07 18:25:10 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                } 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-07 18:24:11 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-30 22:47:47 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-29 17:29:25 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        $tabbed_forms  =  F\map ( $tabbed_forms ,  function  ( $f )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            return  $f -> createView (); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        }); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        return  $tabbed_forms ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-22 21:58:23 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2020-07-23 14:08:31 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								}