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;
|
||||
}
|
||||
|
||||
# XXX: queue for offline sending
|
||||
|
||||
jabber_confirm_address($confirm->code,
|
||||
$user->nickname,
|
||||
$jabber);
|
||||
|
||||
if (!common_config('queue', 'enabled')) {
|
||||
jabber_confirm_address($confirm->code,
|
||||
$user->nickname,
|
||||
$jabber);
|
||||
}
|
||||
|
||||
# XXX: I18N
|
||||
|
||||
$msg = 'A confirmation code was sent to the IM address you added. ' .
|
||||
@ -246,9 +246,7 @@ class ImsettingsAction extends SettingsAction {
|
||||
}
|
||||
$user->query('COMMIT');
|
||||
|
||||
# Unsubscribe to the old address
|
||||
|
||||
jabber_special_presence('unsubscribe', $jabber);
|
||||
# XXX: unsubscribe to the old address
|
||||
|
||||
$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, ' .
|
||||
'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) {
|
||||
|
@ -93,6 +93,7 @@ class XMPPDaemon {
|
||||
}
|
||||
|
||||
$this->broadcast_queue();
|
||||
$this->confirmation_queue();
|
||||
}
|
||||
}
|
||||
|
||||
@ -312,7 +313,6 @@ class XMPPDaemon {
|
||||
|
||||
function clear_old_claims() {
|
||||
$qi = new Queue_item();
|
||||
$qi->claimed = NULL;
|
||||
$qi->whereAdd('now() - claimed > '.CLAIM_TIMEOUT);
|
||||
$qi->update(DB_DATAOBJECT_WHEREADD_ONLY);
|
||||
}
|
||||
@ -321,6 +321,71 @@ class XMPPDaemon {
|
||||
$user = User::staticGet($notice->profile_id);
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user