| 
									
										
										
										
											2008-06-23 18:36:41 -04:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2020-09-08 12:42:51 +03: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/>.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Settings for Jabber/XMPP integration | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category  Settings | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |  * @package   GNUsocial | 
					
						
							| 
									
										
										
										
											2009-08-25 18:19:04 -04:00
										 |  |  |  * @author    Evan Prodromou <evan@status.net> | 
					
						
							| 
									
										
										
										
											2009-08-25 18:12:20 -04:00
										 |  |  |  * @copyright 2008-2009 StatusNet, Inc. | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |  * @license   https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later | 
					
						
							| 
									
										
										
										
											2008-06-23 18:36:41 -04:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  | defined('GNUSOCIAL') || die(); | 
					
						
							| 
									
										
										
										
											2008-06-23 18:36:41 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Settings for Jabber/XMPP integration | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |  * @category  Settings | 
					
						
							|  |  |  |  * @package   GNUsocial | 
					
						
							|  |  |  |  * @author    Evan Prodromou <evan@status.net> | 
					
						
							|  |  |  |  * @license   https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |  * @see       SettingsAction | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2008-06-23 18:36:41 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-23 12:35:35 -05:00
										 |  |  | class ImsettingsAction extends SettingsAction | 
					
						
							| 
									
										
										
										
											2008-12-23 14:49:23 -05:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Title of the page | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return string Title of the page | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |     public function title() | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2011-01-31 18:16:55 +01:00
										 |  |  |         // TRANS: Title for Instant Messaging settings.
 | 
					
						
							| 
									
										
										
										
											2010-01-10 12:26:24 +01:00
										 |  |  |         return _('IM settings'); | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Instructions for use | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return instructions for use | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |     public function getInstructions() | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2010-04-11 22:37:03 +02:00
										 |  |  |         // TRANS: Instant messaging settings page instructions.
 | 
					
						
							|  |  |  |         // TRANS: [instant messages] is link text, "(%%doc.im%%)" is the link.
 | 
					
						
							|  |  |  |         // TRANS: the order and formatting of link text and link should remain unchanged.
 | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |         return _('You can send and receive notices through '. | 
					
						
							| 
									
										
										
										
											2011-08-18 14:21:43 +02:00
										 |  |  |                  '[instant messaging](%%doc.im%%). '. | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |                  'Configure your addresses and settings below.'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Content area of the page | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * We make different sections of the form for the different kinds of | 
					
						
							|  |  |  |      * functions, and have submit buttons with different names. These | 
					
						
							|  |  |  |      * are muxed by handlePost() to see what the user really wants to do. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |     public function showContent() | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |         $transports = array(); | 
					
						
							|  |  |  |         Event::handle('GetImTransports', array(&$transports)); | 
					
						
							|  |  |  |         if (! $transports) { | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |             $this->element( | 
					
						
							|  |  |  |                 'div', | 
					
						
							|  |  |  |                 ['class' => 'error'], | 
					
						
							|  |  |  |                 // TRANS: Message given in the IM settings if IM is not enabled on the site.
 | 
					
						
							|  |  |  |                 _('IM is not available.') | 
					
						
							|  |  |  |             ); | 
					
						
							| 
									
										
										
										
											2009-08-07 01:18:17 +08:00
										 |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $user = common_current_user(); | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $user_im_prefs_by_transport = array(); | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |         foreach ($transports as $transport => $transport_info) { | 
					
						
							|  |  |  |             $this->elementStart( | 
					
						
							|  |  |  |                 'form', | 
					
						
							|  |  |  |                 [ | 
					
						
							|  |  |  |                     'method' => 'post', | 
					
						
							|  |  |  |                     'id'     => 'form_settings_im', | 
					
						
							|  |  |  |                     'class'  => 'form_settings', | 
					
						
							|  |  |  |                     'action' => common_local_url('imsettings'), | 
					
						
							|  |  |  |                 ] | 
					
						
							|  |  |  |             ); | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |             $this->elementStart('fieldset', array('id' => 'settings_im_address')); | 
					
						
							| 
									
										
										
										
											2010-04-18 19:21:15 -04:00
										 |  |  |             // TRANS: Form legend for IM settings form.
 | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |             $this->element('legend', null, $transport_info['display']); | 
					
						
							|  |  |  |             $this->hidden('token', common_session_token()); | 
					
						
							|  |  |  |             $this->hidden('transport', $transport); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-08 12:42:51 +03:00
										 |  |  |             if (!empty($user_im_prefs = User_im_prefs::pkeyGet([ | 
					
						
							|  |  |  |                 'transport' => $transport, | 
					
						
							|  |  |  |                 'user_id'   => $user->id, | 
					
						
							|  |  |  |             ]))) { | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |                 $user_im_prefs_by_transport[$transport] = $user_im_prefs; | 
					
						
							|  |  |  |                 $this->element('p', 'form_confirmed', $user_im_prefs->screenname); | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |                 $this->element( | 
					
						
							|  |  |  |                     'p', | 
					
						
							|  |  |  |                     'form_note', | 
					
						
							|  |  |  |                     // TRANS: Form note in IM settings form. %s is the type of IM address that was confirmed.
 | 
					
						
							|  |  |  |                     sprintf(_('Current confirmed %s address.'), $transport_info['display']) | 
					
						
							|  |  |  |                 ); | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |                 $this->hidden('screenname', $user_im_prefs->screenname); | 
					
						
							| 
									
										
										
										
											2010-04-18 19:21:15 -04:00
										 |  |  |                 // TRANS: Button label to remove a confirmed IM address.
 | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |                 $this->submit('remove', _m('BUTTON', 'Remove')); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             } else { | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |                 try { | 
					
						
							|  |  |  |                     $confirm = $this->getConfirmation($transport); | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |                     $this->element('p', 'form_unconfirmed', $confirm->address); | 
					
						
							| 
									
										
										
										
											2010-04-18 19:21:15 -04:00
										 |  |  |                     // TRANS: Form note in IM settings form.
 | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |                     $this->element( | 
					
						
							|  |  |  |                         'p', | 
					
						
							|  |  |  |                         'form_note', | 
					
						
							|  |  |  |                         // TRANS: Form note in IM settings form.
 | 
					
						
							|  |  |  |                         // TRANS: %s is the IM service name, %2$s is the IM address set.
 | 
					
						
							|  |  |  |                         sprintf( | 
					
						
							|  |  |  |                             _('Awaiting confirmation on this address. ' | 
					
						
							|  |  |  |                             . 'Check your %1$s account for a ' | 
					
						
							|  |  |  |                             . 'message with further instructions. ' | 
					
						
							|  |  |  |                             . '(Did you add %2$s to your buddy list?)'), | 
					
						
							|  |  |  |                             $transport_info['display'], | 
					
						
							|  |  |  |                             $transport_info['daemonScreenname'] | 
					
						
							|  |  |  |                         ) | 
					
						
							|  |  |  |                     ); | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |                     $this->hidden('screenname', $confirm->address); | 
					
						
							| 
									
										
										
										
											2010-04-18 19:21:15 -04:00
										 |  |  |                     // TRANS: Button label to cancel an IM address confirmation procedure.
 | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |                     $this->submit('cancel', _m('BUTTON', 'Cancel')); | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |                 } catch (NoResultException $e) { | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |                     $this->elementStart('ul', 'form_data'); | 
					
						
							|  |  |  |                     $this->elementStart('li'); | 
					
						
							| 
									
										
										
										
											2011-03-18 13:48:47 +01:00
										 |  |  |                     // TRANS: Field label for IM address.
 | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |                     $this->input( | 
					
						
							|  |  |  |                         'screenname', | 
					
						
							|  |  |  |                         _('IM address'), | 
					
						
							|  |  |  |                         ($this->arg('screenname')) ? $this->arg('screenname') : null, | 
					
						
							|  |  |  |                         // TRANS: Field title for IM address. %s is the IM service name.
 | 
					
						
							|  |  |  |                         sprintf(_('%s screenname.'), $transport_info['display']) | 
					
						
							|  |  |  |                     ); | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |                     $this->elementEnd('li'); | 
					
						
							|  |  |  |                     $this->elementEnd('ul'); | 
					
						
							| 
									
										
										
										
											2010-04-18 19:21:15 -04:00
										 |  |  |                     // TRANS: Button label for adding an IM address in IM settings form.
 | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |                     $this->submit('add', _m('BUTTON', 'Add')); | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |                 } | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |             $this->elementEnd('fieldset'); | 
					
						
							|  |  |  |             $this->elementEnd('form'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |         if ($user_im_prefs_by_transport) { | 
					
						
							|  |  |  |             $this->elementStart( | 
					
						
							|  |  |  |                 'form', | 
					
						
							|  |  |  |                 [ | 
					
						
							|  |  |  |                     'method' => 'post', | 
					
						
							|  |  |  |                     'id'     => 'form_settings_im', | 
					
						
							|  |  |  |                     'class'  => 'form_settings', | 
					
						
							|  |  |  |                     'action' => common_local_url('imsettings'), | 
					
						
							|  |  |  |                 ] | 
					
						
							|  |  |  |             ); | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |             $this->elementStart('fieldset', array('id' => 'settings_im_preferences')); | 
					
						
							| 
									
										
										
										
											2010-04-30 14:41:54 -07:00
										 |  |  |             // TRANS: Header for IM preferences form.
 | 
					
						
							|  |  |  |             $this->element('legend', null, _('IM Preferences')); | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |             $this->hidden('token', common_session_token()); | 
					
						
							|  |  |  |             $this->elementStart('table'); | 
					
						
							|  |  |  |             $this->elementStart('tr'); | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |             foreach ($user_im_prefs_by_transport as $transport => $user_im_prefs) { | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |                 $this->element('th', null, $transports[$transport]['display']); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             $this->elementEnd('tr'); | 
					
						
							|  |  |  |             $preferences = array( | 
					
						
							| 
									
										
										
										
											2010-04-18 19:21:15 -04:00
										 |  |  |                 // TRANS: Checkbox label in IM preferences form.
 | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |                 array('name'=>'notify', 'description'=>_('Send me notices')), | 
					
						
							| 
									
										
										
										
											2010-04-18 19:21:15 -04:00
										 |  |  |                 // TRANS: Checkbox label in IM preferences form.
 | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |                 array('name'=>'updatefrompresence', 'description'=>_('Post a notice when my status changes.')), | 
					
						
							| 
									
										
										
										
											2010-04-18 19:21:15 -04:00
										 |  |  |                 // TRANS: Checkbox label in IM preferences form.
 | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |                 array('name'=>'replies', 'description'=>_('Send me replies '. | 
					
						
							|  |  |  |                               'from people I\'m not subscribed to.')), | 
					
						
							|  |  |  |             ); | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |             foreach ($preferences as $preference) { | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |                 $this->elementStart('tr'); | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |                 foreach ($user_im_prefs_by_transport as $transport => $user_im_prefs) { | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |                     $preference_name = $preference['name']; | 
					
						
							|  |  |  |                     $this->elementStart('td'); | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |                     $this->checkbox( | 
					
						
							|  |  |  |                         $transport . '_' . $preference['name'], | 
					
						
							|  |  |  |                         $preference['description'], | 
					
						
							|  |  |  |                         $user_im_prefs->$preference_name | 
					
						
							|  |  |  |                     ); | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |                     $this->elementEnd('td'); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 $this->elementEnd('tr'); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             $this->elementEnd('table'); | 
					
						
							| 
									
										
										
										
											2010-04-18 19:21:15 -04:00
										 |  |  |             // TRANS: Button label to save IM preferences.
 | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |             $this->submit('save', _m('BUTTON', 'Save')); | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |             $this->elementEnd('fieldset'); | 
					
						
							|  |  |  |             $this->elementEnd('form'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Get a confirmation code for this user | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return Confirm_address address object for this user | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |     public function getConfirmation($transport) | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         $confirm = new Confirm_address(); | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |         $confirm->user_id      = $this->scoped->getID(); | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |         $confirm->address_type = $transport; | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:44:28 -05:00
										 |  |  |         if ($confirm->find(true)) { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             return $confirm; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         throw new NoResultException($confirm); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |     protected function doPost() | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         if ($this->arg('save')) { | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |             return $this->savePreferences(); | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |         } elseif ($this->arg('add')) { | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |             return $this->addAddress(); | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |         } elseif ($this->arg('cancel')) { | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |             return $this->cancelConfirmation(); | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |         } elseif ($this->arg('remove')) { | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |             return $this->removeAddress(); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |         // TRANS: Message given submitting a form with an unknown action in Instant Messaging settings.
 | 
					
						
							|  |  |  |         throw new ClientException(_('Unexpected form submission.')); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |      * Save user's XMPP preferences | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |      * | 
					
						
							|  |  |  |      * These are the checkboxes at the bottom of the page. They're used to | 
					
						
							|  |  |  |      * set different settings | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |     public function savePreferences() | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |         $user_im_prefs = new User_im_prefs(); | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |         $user_im_prefs->query('START TRANSACTION'); | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |         $user_im_prefs->user_id = $this->scoped->getID(); | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |         if ($user_im_prefs->find() && $user_im_prefs->fetch()) { | 
					
						
							| 
									
										
										
										
											2015-07-14 16:52:20 +02:00
										 |  |  |             $preferences = array('notify', 'updatefrompresence', 'replies'); | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |             do { | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |                 $original = clone($user_im_prefs); | 
					
						
							| 
									
										
										
										
											2010-04-30 14:41:54 -07:00
										 |  |  |                 $new = clone($user_im_prefs); | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |                 foreach ($preferences as $preference) { | 
					
						
							| 
									
										
										
										
											2010-04-30 14:41:54 -07:00
										 |  |  |                     $new->$preference = $this->boolean($new->transport . '_' . $preference); | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |                 } | 
					
						
							| 
									
										
										
										
											2010-04-30 14:41:54 -07:00
										 |  |  |                 $result = $new->update($original); | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 if ($result === false) { | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |                     common_log_db_error($user_im_prefs, 'UPDATE', __FILE__); | 
					
						
							| 
									
										
										
										
											2010-04-18 19:21:15 -04:00
										 |  |  |                     // TRANS: Server error thrown on database error updating IM preferences.
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |                     throw new ServerException(_('Could not update IM preferences.')); | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |                 } | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |             } while ($user_im_prefs->fetch()); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-04-30 14:41:54 -07:00
										 |  |  |         $user_im_prefs->query('COMMIT'); | 
					
						
							| 
									
										
										
										
											2010-04-11 22:37:03 +02:00
										 |  |  |         // TRANS: Confirmation message for successful IM preferences save.
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |         return _('Preferences saved.'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Sends a confirmation to the address given | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Stores a confirmation record and sends out a | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |      * message with the confirmation info. | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |     public function addAddress() | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |         $screenname = $this->trimmed('screenname'); | 
					
						
							|  |  |  |         $transport = $this->trimmed('transport'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |         // Some validation
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |         if (empty($screenname)) { | 
					
						
							| 
									
										
										
										
											2010-04-11 22:37:03 +02:00
										 |  |  |             // TRANS: Message given saving IM address without having provided one.
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |             throw new ClientException(_('No screenname.')); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |         if (empty($transport)) { | 
					
						
							| 
									
										
										
										
											2011-03-18 13:48:47 +01:00
										 |  |  |             // TRANS: Form validation error when no transport is available setting an IM address.
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |             throw new ClientException(_('No transport.')); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         Event::handle('NormalizeImScreenname', array($transport, &$screenname)); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |         if (empty($screenname)) { | 
					
						
							| 
									
										
										
										
											2010-04-11 22:37:03 +02:00
										 |  |  |             // TRANS: Message given saving IM address that cannot be normalised.
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |             throw new ClientException(_('Cannot normalize that screenname.')); | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |         } | 
					
						
							|  |  |  |         $valid = false; | 
					
						
							|  |  |  |         Event::handle('ValidateImScreenname', array($transport, $screenname, &$valid)); | 
					
						
							|  |  |  |         if (!$valid) { | 
					
						
							| 
									
										
										
										
											2010-04-11 22:37:03 +02:00
										 |  |  |             // TRANS: Message given saving IM address that not valid.
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |             throw new ClientException(_('Not a valid screenname.')); | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |         } elseif ($this->screennameExists($transport, $screenname)) { | 
					
						
							| 
									
										
										
										
											2010-04-11 22:37:03 +02:00
										 |  |  |             // TRANS: Message given saving IM address that is already set for another user.
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |             throw new ClientException(_('Screenname already belongs to another user.')); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |         $confirm = new Confirm_address(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |         $confirm->address      = $screenname; | 
					
						
							|  |  |  |         $confirm->address_type = $transport; | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |         $confirm->user_id      = $this->scoped->getID(); | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |         $confirm->code         = common_confirmation_code(64); | 
					
						
							| 
									
										
										
										
											2010-01-21 16:42:50 -08:00
										 |  |  |         $confirm->sent         = common_sql_now(); | 
					
						
							|  |  |  |         $confirm->claimed      = common_sql_now(); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $result = $confirm->insert(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:44:28 -05:00
										 |  |  |         if ($result === false) { | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |             common_log_db_error($confirm, 'INSERT', __FILE__); | 
					
						
							| 
									
										
										
										
											2011-01-31 18:16:55 +01:00
										 |  |  |             // TRANS: Server error thrown on database error adding Instant Messaging confirmation code.
 | 
					
						
							| 
									
										
										
										
											2011-01-20 20:00:45 +01:00
										 |  |  |             $this->serverError(_('Could not insert confirmation code.')); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |         Event::handle('SendImConfirmationCode', array($transport, $screenname, $confirm->code, $this->scoped)); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-11 22:37:03 +02:00
										 |  |  |         // TRANS: Message given saving valid IM address that is to be confirmed.
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |         return _('A confirmation code was sent to the IM address you added.'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Cancel a confirmation | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * If a confirmation exists, cancel it. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |     public function cancelConfirmation() | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |         $screenname = $this->trimmed('screenname'); | 
					
						
							|  |  |  |         $transport = $this->trimmed('transport'); | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |         try { | 
					
						
							|  |  |  |             $confirm = $this->getConfirmation($transport); | 
					
						
							|  |  |  |             if ($confirm->address != $screenname) { | 
					
						
							|  |  |  |                 // TRANS: Message given canceling IM address confirmation for the wrong IM address.
 | 
					
						
							|  |  |  |                 throw new ClientException(_('That is the wrong IM address.')); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } catch (NoResultException $e) { | 
					
						
							| 
									
										
										
										
											2011-01-31 18:16:55 +01:00
										 |  |  |             // TRANS: Message given canceling Instant Messaging address confirmation that is not pending.
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |             throw new AlreadyFulfilledException(_('No pending confirmation to cancel.')); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2008-06-26 14:11:44 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 15:31:48 +01:00
										 |  |  |         $confirm->delete(); | 
					
						
							| 
									
										
										
										
											2008-06-26 14:11:44 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-11 22:37:03 +02:00
										 |  |  |         // TRANS: Message given after successfully canceling IM address confirmation.
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |         return _('IM confirmation cancelled.'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Remove an address | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * If the user has a confirmed address, remove it. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |     public function removeAddress() | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |         $screenname = $this->trimmed('screenname'); | 
					
						
							|  |  |  |         $transport = $this->trimmed('transport'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |         // Maybe an old tab open...?
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |         $user_im_prefs = new User_im_prefs(); | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |         $user_im_prefs->user_id = $this->scoped->getID(); | 
					
						
							|  |  |  |         $user_im_prefs->transport = $transport; | 
					
						
							|  |  |  |         if (!$user_im_prefs->find(true)) { | 
					
						
							| 
									
										
										
										
											2010-04-11 22:37:03 +02:00
										 |  |  |             // TRANS: Message given trying to remove an IM address that is not
 | 
					
						
							|  |  |  |             // TRANS: registered for the active user.
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |             throw new AlreadyFulfilledException(_('There were no preferences stored for this transport.')); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |         $result = $user_im_prefs->delete(); | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |         if ($result === false) { | 
					
						
							|  |  |  |             common_log_db_error($user_im_prefs, 'UPDATE', __FILE__); | 
					
						
							| 
									
										
										
										
											2010-04-11 22:37:03 +02:00
										 |  |  |             // TRANS: Server error thrown on database error removing a registered IM address.
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |             throw new ServerException(_('Could not update user IM preferences.')); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |         // XXX: unsubscribe to the old address
 | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-31 18:16:55 +01:00
										 |  |  |         // TRANS: Message given after successfully removing a registered Instant Messaging address.
 | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |         return _('The IM address was removed.'); | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |      * Does this screenname exist? | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |      * | 
					
						
							|  |  |  |      * Checks if we already have another user with this address. | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |      * @param string $transport Transport to check | 
					
						
							|  |  |  |      * @param string $screenname Screenname to check | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |      * @return boolean whether the screenname exists | 
					
						
							| 
									
										
										
										
											2009-01-16 21:39:39 +00:00
										 |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-08 12:25:01 +03:00
										 |  |  |     public function screennameExists($transport, $screenname) | 
					
						
							| 
									
										
										
										
											2008-12-23 14:33:23 -05:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2010-01-23 01:25:27 -05:00
										 |  |  |         $user_im_prefs = new User_im_prefs(); | 
					
						
							|  |  |  |         $user_im_prefs->transport = $transport; | 
					
						
							|  |  |  |         $user_im_prefs->screenname = $screenname; | 
					
						
							| 
									
										
										
										
											2015-07-16 21:18:50 +02:00
										 |  |  |         return $user_im_prefs->find(true) ? true : false; | 
					
						
							| 
									
										
										
										
											2008-12-23 14:19:07 -05:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-06-23 18:36:41 -04:00
										 |  |  | } |