optionally queue jabber confirmations
darcs-hash:20080706035707-84dde-5403fe9bcb017c401fe5847527628df548e54499.gz
This commit is contained in:
parent
13ac93481c
commit
e4a1b9cde9
@ -185,12 +185,12 @@ class ImsettingsAction extends SettingsAction {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
# XXX: queue for offline sending
|
if (!common_config('queue', 'enabled')) {
|
||||||
|
jabber_confirm_address($confirm->code,
|
||||||
jabber_confirm_address($confirm->code,
|
$user->nickname,
|
||||||
$user->nickname,
|
$jabber);
|
||||||
$jabber);
|
}
|
||||||
|
|
||||||
# XXX: I18N
|
# XXX: I18N
|
||||||
|
|
||||||
$msg = 'A confirmation code was sent to the IM address you added. ' .
|
$msg = 'A confirmation code was sent to the IM address you added. ' .
|
||||||
@ -246,9 +246,7 @@ class ImsettingsAction extends SettingsAction {
|
|||||||
}
|
}
|
||||||
$user->query('COMMIT');
|
$user->query('COMMIT');
|
||||||
|
|
||||||
# Unsubscribe to the old address
|
# XXX: unsubscribe to the old address
|
||||||
|
|
||||||
jabber_special_presence('unsubscribe', $jabber);
|
|
||||||
|
|
||||||
$this->show_form(_t('The address was removed.'), TRUE);
|
$this->show_form(_t('The address was removed.'), TRUE);
|
||||||
}
|
}
|
||||||
|
@ -93,7 +93,7 @@ function jabber_confirm_address($code, $nickname, $address) {
|
|||||||
'address bar of your browser). If that user isn\'t you, ' .
|
'address bar of your browser). If that user isn\'t you, ' .
|
||||||
'or if you didn\'t request this confirmation, just ignore this message.';
|
'or if you didn\'t request this confirmation, just ignore this message.';
|
||||||
|
|
||||||
jabber_send_message($address, $body);
|
return jabber_send_message($address, $body);
|
||||||
}
|
}
|
||||||
|
|
||||||
function jabber_special_presence($type, $to=NULL, $show=NULL, $status=NULL) {
|
function jabber_special_presence($type, $to=NULL, $show=NULL, $status=NULL) {
|
||||||
|
@ -93,6 +93,7 @@ class XMPPDaemon {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$this->broadcast_queue();
|
$this->broadcast_queue();
|
||||||
|
$this->confirmation_queue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -312,7 +313,6 @@ class XMPPDaemon {
|
|||||||
|
|
||||||
function clear_old_claims() {
|
function clear_old_claims() {
|
||||||
$qi = new Queue_item();
|
$qi = new Queue_item();
|
||||||
$qi->claimed = NULL;
|
|
||||||
$qi->whereAdd('now() - claimed > '.CLAIM_TIMEOUT);
|
$qi->whereAdd('now() - claimed > '.CLAIM_TIMEOUT);
|
||||||
$qi->update(DB_DATAOBJECT_WHEREADD_ONLY);
|
$qi->update(DB_DATAOBJECT_WHEREADD_ONLY);
|
||||||
}
|
}
|
||||||
@ -321,6 +321,71 @@ class XMPPDaemon {
|
|||||||
$user = User::staticGet($notice->profile_id);
|
$user = User::staticGet($notice->profile_id);
|
||||||
return !$user;
|
return !$user;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function confirmation_queue() {
|
||||||
|
$this->clear_old_confirm_claims();
|
||||||
|
$this->log(LOG_INFO, 'checking for queued confirmations');
|
||||||
|
do {
|
||||||
|
$confirm = $this->next_confirm();
|
||||||
|
if ($confirm) {
|
||||||
|
$this->log(LOG_INFO, 'Sending confirmation for ' . $confirm->address);
|
||||||
|
$user = User::staticGet($confirm->user_id);
|
||||||
|
if (!$user) {
|
||||||
|
$this->log(LOG_WARNING, 'Confirmation for unknown user ' . $confirm->user_id);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$success = jabber_confirm_address($confirm->code,
|
||||||
|
$user->nickname,
|
||||||
|
$jabber);
|
||||||
|
if (!$success) {
|
||||||
|
$this->log(LOG_ERROR, 'Confirmation failed for ' . $confirm->address);
|
||||||
|
# Just let the claim age out; hopefully things work then
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
$this->log(LOG_INFO, 'Confirmation sent for ' . $confirm->address);
|
||||||
|
# Mark confirmation sent
|
||||||
|
$original = clone($confirm);
|
||||||
|
$confirm->sent = DB_DataObject_Cast::dateTime();
|
||||||
|
$result = $confirm->update($original);
|
||||||
|
if (!$result) {
|
||||||
|
$this->log(LOG_ERROR, 'Cannot mark sent for ' . $confirm->address);
|
||||||
|
# Just let the claim age out; hopefully things work then
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while ($confirm);
|
||||||
|
}
|
||||||
|
|
||||||
|
function next_confirm() {
|
||||||
|
$confirm = new Confirm_address();
|
||||||
|
$confirm->sent = NULL;
|
||||||
|
$confirm->claimed = NULL;
|
||||||
|
$confirm->orderBy('modified DESC');
|
||||||
|
$confirm->limit(1);
|
||||||
|
if ($confirm->find(TRUE)) {
|
||||||
|
$this->log(LOG_INFO, 'Claiming confirmation for ' . $confirm->address);
|
||||||
|
$original = clone($confirm);
|
||||||
|
$confirm->claimed = DB_DataObject_Cast::dateTime();
|
||||||
|
$result = $confirm->update($original);
|
||||||
|
if ($result) {
|
||||||
|
$this->log(LOG_INFO, 'Succeeded in claim!');
|
||||||
|
return $confirm;
|
||||||
|
} else {
|
||||||
|
$this->log(LOG_INFO, 'Failed in claim!');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
function clear_old_confirm_claims() {
|
||||||
|
$confirm = new Confirm();
|
||||||
|
$confirm->whereAdd('now() - claimed > '.CLAIM_TIMEOUT);
|
||||||
|
$confirm->update(DB_DATAOBJECT_WHEREADD_ONLY);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$resource = ($argc > 1) ? $argv[1] : NULL;
|
$resource = ($argc > 1) ? $argv[1] : NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user