summaryrefslogtreecommitdiff
path: root/actions/imsettings.php
blob: b34f8ca12db7b054d9001537ac8c2549092f3d11 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php
/*
 * Laconica - a distributed open-source microblogging tool
 * Copyright (C) 2008, Controlez-Vous, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

if (!defined('LACONICA')) { exit(1); }

require_once(INSTALLDIR.'/lib/settingsaction.php');

class ImsettingsAction extends SettingsAction {

	function show_top($arr) {
		$msg = $arr[0];
		$success = $arr[1];
		if ($msg) {
			$this->message($msg, $success);
		} else {
			common_element('div', 'instructions',
						   _t('You can send and receive notices through '.
							  'Jabber/GTalk instant messages. Configure '.
							  'your address and settings below.'));
		}
		$this->settings_menu();
	}

	function show_form($msg=NULL, $success=false) {
		$user = common_current_user();
		common_show_header(_t('IM settings'), NULL, array($msg, $success),
						   array($this, 'show_top'));

		common_element_start('form', array('method' => 'POST',
										   'id' => 'imsettings',
										   'action' =>
										   common_local_url('imsettings')));
		# too much common patterns here... abstractable?
		common_input('jabber', _t('IM Address'),
					 ($this->arg('jabber')) ? $this->arg('jabber') : $user->jabber,
					 _t('Jabber or GTalk address, like "UserName@example.org"'));
		common_checkbox('jabbernotify',
		                _t('Send me notices through Jabber/GTalk.'));
		common_checkbox('updatefrompresence',
		                _t('Post a notice when my Jabber/GTalk status changes.'));
		common_submit('submit', _t('Save'));
		common_element_end('form');
		common_show_footer();
	}

	function handle_post() {

		$jabber = $this->trimmed('jabber');
		$jabbernotify = $this->boolean('jabbernotify');
		$updatefrompresence = $this->boolean('updatefrompresence');

		if (!jabber_validate_jid($jabber)) {
			$this->show_form(_('Not a valid Jabber ID'));
			return;
		} else if ($this->jabber_exists($jabber)) {
			$this->show_form(_('Not a valid Jabber ID'));
			return;
		}

		# Some validation

		$user = common_current_user();

		assert(!is_null($user)); # should already be checked

		$user->query('BEGIN');

		$original = clone($user);

		$user->jabber = $jabber;
		$user->jabbernotify = $jabbernotify;
		$user->updatefrompresence = $updatefrompresence;

		$result = $user->updateKeys($original); # For key columns

		if ($result === FALSE) {
			common_log_db_error($user, 'UPDATE', __FILE__);
			common_server_error(_t('Couldnt update user.'));
			return;
		}

		$result = $user->update($original); # For non-key columns

		if ($result === FALSE) {
			common_log_db_error($user, 'UPDATE', __FILE__);
			common_server_error(_t('Couldnt update user.'));
			return;
		}

		$user->query('COMMIT');

		$this->show_form(_t('Settings saved.'), TRUE);
	}

	function jabber_exists($jabber) {
		$user = common_current_user();
		$other = User::staticGet('jabber', $jabber);
		if (!$other) {
			return false;
		} else {
			return $other->id != $user->id;
		}
	}
}