jabber send and confirmation code

darcs-hash:20080624013203-34904-fe87dc6b3b991e9753512b8b7cc192f7610eb1dc.gz
This commit is contained in:
Evan Prodromou 2008-06-23 21:32:03 -04:00
parent 63dcbe1e6e
commit d1e55b3777
4 changed files with 126 additions and 16 deletions

View File

@ -83,11 +83,10 @@ class ImsettingsAction extends SettingsAction {
$original = clone($user); $original = clone($user);
$user->jabber = $jabber;
$user->jabbernotify = $jabbernotify; $user->jabbernotify = $jabbernotify;
$user->updatefrompresence = $updatefrompresence; $user->updatefrompresence = $updatefrompresence;
$result = $user->updateKeys($original); # For key columns $result = $user->update($original); # For key columns
if ($result === FALSE) { if ($result === FALSE) {
common_log_db_error($user, 'UPDATE', __FILE__); common_log_db_error($user, 'UPDATE', __FILE__);
@ -95,17 +94,58 @@ class ImsettingsAction extends SettingsAction {
return; return;
} }
$result = $user->update($original); # For non-key columns $confirmation_sent = false;
if ($user->jabber != $jabber) {
if ($jabber) {
$confirm = new Confirm_address();
$confirm->address = $jabber;
$confirm->address_type = 'jabber';
$confirm->user_id = $user->id;
$confirm->code = common_confirmation_code(64);
$result = $confirm->insert();
if ($result === FALSE) {
common_log_db_error($confirm, 'INSERT', __FILE__);
common_server_error(_t('Couldnt insert confirmation code.'));
return;
}
# XXX: optionally queue for offline sending
jabber_confirm_address($confirm->code,
$user->nickname,
$jabber);
if ($result === FALSE) {
common_log_db_error($confirm, 'INSERT', __FILE__);
common_server_error(_t('Couldnt insert confirmation code.'));
return;
}
$confirmation_sent = false;
} else {
# Clearing the ID is free
$user->jabber = NULL;
$result = $user->updateKeys($original);
if ($result === FALSE) { if ($result === FALSE) {
common_log_db_error($user, 'UPDATE', __FILE__); common_log_db_error($user, 'UPDATE', __FILE__);
common_server_error(_t('Couldnt update user.')); common_server_error(_t('Couldnt update user.'));
return; return;
} }
}
}
$user->query('COMMIT'); $user->query('COMMIT');
$this->show_form(_t('Settings saved.'), TRUE); $msg = ($confirmation_sent) ?
_t('Settings saved. A confirmation code was ' .
' sent to the IM address you added. ') :
_t('Settings saved.');
$this->show_form($msg, TRUE);
} }
function jabber_exists($jabber) { function jabber_exists($jabber) {

View File

@ -13,5 +13,9 @@ This package requires PHP 5.x and the following PHP Pear libraries:
- OAuth.php from http://oauth.googlecode.com/svn/code/php/ - OAuth.php from http://oauth.googlecode.com/svn/code/php/
- markdown.php from http://michelf.com/projects/php-markdown/ - markdown.php from http://michelf.com/projects/php-markdown/
- PEAR Mail, for sending out mail notifications - PEAR Mail, for sending out mail notifications
http://pear.php.net/package/Mail
- PEAR Net_SMTP, if you use the SMTP factory for notifications - PEAR Net_SMTP, if you use the SMTP factory for notifications
http://pear.php.net/package/Net_SMTP
- xmpphp, the follow-up to Class.Jabber.php. Probably the best XMPP
library available for PHP. http://xmpphp.googlecode.com/

View File

@ -31,3 +31,69 @@ function jabber_normalize_jid($jid) {
$resource = $matches[3]; $resource = $matches[3];
return strtolower($node.'@'.$server); return strtolower($node.'@'.$server);
} }
function jabber_connect($resource=NULL) {
static $conn = NULL;
if (!$conn) {
$conn = new XMPP(common_config('xmpp', 'server'),
common_config('xmpp', 'port'),
common_config('xmpp', 'user'),
common_config('xmpp', 'password'),
($resource) ? $resource :
common_config('xmpp', 'resource'));
if (!$conn) {
return false;
}
$conn->connect(true); # try to get a persistent connection
if ($conn->disconnected) {
return false;
}
$conn->processUntil('session_start');
}
return $conn;
}
function jabber_send_message($to, $body, $type='chat', $subject=NULL) {
$conn = jabber_connect();
if (!$conn) {
return false;
}
$conn->message($to, $body, $type, $subject);
return true;
}
function jabber_send_presence($status=Null, $show='available', $to=Null) {
$conn = jabber_connect();
if (!$conn) {
return false;
}
$conn->presence($status, $show, $to);
return true;
}
function jabber_confirm_address($code, $nickname, $address) {
# FIXME: do we have to request presence first?
$body = "Hey, $nickname.";
$body .= "\n\n";
$body .= 'Someone just entered this IM address on ';
$body .= common_config('site', 'name') . '.';
$body .= "\n\n";
$body .= 'If it was you, and you want to confirm your entry, ';
$body .= 'use the URL below:';
$body .= "\n\n";
$body .= "\t".common_local_url('confirmaddress',
array('code' => $code));
$body .= "\n\n";
$body .= 'If not, just ignore this message.';
$body .= "\n\n";
$body .= 'Thanks for your time, ';
$body .= "\n";
$body .= common_config('site', 'name');
$body .= "\n";
jabber_send_message($address, $body);
}

View File

@ -55,7 +55,7 @@ function mail_notify_from() {
} }
} }
# For confirming an email address # For confirming a Jabber address
function mail_confirm_address($code, $nickname, $address) { function mail_confirm_address($code, $nickname, $address) {
$recipients = $address; $recipients = $address;