]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
optionally queue jabber confirmations
authorEvan Prodromou <evan@prodromou.name>
Sun, 6 Jul 2008 03:57:07 +0000 (23:57 -0400)
committerEvan Prodromou <evan@prodromou.name>
Sun, 6 Jul 2008 03:57:07 +0000 (23:57 -0400)
darcs-hash:20080706035707-84dde-5403fe9bcb017c401fe5847527628df548e54499.gz

actions/imsettings.php
lib/jabber.php
xmppdaemon.php

index 4ad63e1ccf1b8ea89a5239d9558f9861e9a17465..bad0bc18a49ccdddf69897eb8a98d16b5d9195fc 100644 (file)
@@ -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);
        }
index 9b6d1c71a640cae4b17b4f53d8f0f1011638305c..0b5aae4ea81871f59a3186ff5ec390305df0714e 100644 (file)
@@ -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) {
index b07f44cffaa5694b2b42d32e79366a3bfd346d32..772e99d3dddbfd3802e0dc94a069fdb966d896fb 100755 (executable)
@@ -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;