]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Add ability to send special one-time reminders
authorZach Copley <zach@status.net>
Mon, 20 Jun 2011 19:58:14 +0000 (12:58 -0700)
committerZach Copley <zach@status.net>
Mon, 20 Jun 2011 19:58:14 +0000 (12:58 -0700)
plugins/EmailReminder/EmailReminderPlugin.php
plugins/EmailReminder/classes/Email_reminder.php
plugins/EmailReminder/lib/siteconfirmreminderhandler.php
plugins/EmailReminder/lib/userconfirmregreminderhandler.php
plugins/EmailReminder/lib/userinvitereminderhandler.php
plugins/EmailReminder/mail-src/invite-onetime [new file with mode: 0644]
plugins/EmailReminder/mail-src/register-1
plugins/EmailReminder/mail-src/register-onetime [new file with mode: 0644]
plugins/EmailReminder/scripts/sendemailreminder.php

index 0bb10921b031a24f4eca9ef20ac63ee9c90cdab8..701d04e01647d76aa86260b40b2fd905d9d0b654 100644 (file)
@@ -114,22 +114,25 @@ class EmailReminderPlugin extends Plugin
     }
 
     /**
+     * Send a reminder and record doing so
      *
-     * @param type $object
-     * @param type $subject
-     * @param type $day
+     * @param string $type      type of reminder
+     * @param mixed  $object    Confirm_address or Invitation object
+     * @param string $subject   subjct of the email reminder
+     * @param int    $day       number of days
      */
     static function sendReminder($type, $object, $subject, $day)
     {
-        common_debug("QQQQQ sendReminder() enter ... ", __FILE__);
-
-        $title = "{$type}-{$day}";
-
-        common_debug("QQQQ title = {$title}", __FILE__);
+        // XXX: -1 is a for the special one-time reminder (maybe 30) would be
+        // better?  Like >= 30 days?
+        if ($day == -1) {
+            $title = "{$type}-onetime";
+        } else {
+            $title = "{$type}-{$day}";
+        }
 
         // Record the fact that we sent a reminder
         if (self::sendReminderEmail($type, $object, $subject, $title)) {
-            common_debug("Recording reminder record for {$object->address}", __FILE__);
             try {
                 Email_reminder::recordReminder($type, $object, $day);
             } catch (Exception $e) {
@@ -138,19 +141,21 @@ class EmailReminderPlugin extends Plugin
             }
         }
 
-        common_debug("QQQQQ sendReminder() exit ... ", __FILE__);
-
         return true;
     }
 
     /**
+     * Send a real live email reminder
      *
-     * @param type $object
-     * @param type $subject
-     * @param type $title
-     * @return type
+     * @todo This would probably be better as two or more sep functions
+     *
+     * @param string $type      type of reminder
+     * @param mixed  $object    Confirm_address or Invitation object
+     * @param string $subject   subjct of the email reminder
+     * @param string $title     title of the email reminder
+     * @return boolean true if the email subsystem doesn't explode
      */
-    static function sendReminderEmail($type, $object, $subject, $title=null) {
+    static function sendReminderEmail($type, $object, $subject, $title = null) {
 
         $sitename   = common_config('site', 'name');
         $recipients = array($object->address);
@@ -177,14 +182,15 @@ class EmailReminderPlugin extends Plugin
 
         $template = DocFile::forTitle($title, DocFile::mailPaths());
 
-        $body = $template->toHTML(
-            array(
-                'confirmurl' => $confirmUrl,
-                'inviter'    => $inviter,
-                'inviterurl' => $inviterUrl
-                // @todo private invitation message
-            )
-        );
+        $blankfillers = array('confirmurl' => $confirmUrl);
+
+        if ($type == UserInviteReminderHandler::INVITE_REMINDER) {
+            $blankfillers['inviter'] = $inviter;
+            $blankfillers['inviterurl'] = $inviterUrl;
+            // @todo private invitation message?
+        }
+
+        $body = $template->toHTML($blankfillers);
 
         return mail_send($recipients, $headers, $body);
     }
@@ -205,5 +211,5 @@ class EmailReminderPlugin extends Plugin
         );
         return true;
     }
-    
+
 }
index 2a82e6c4d88a0a401417f37c77d41e63f0ca4368..58dc2e14609577cbbea5ef36bfb69f6c44b4b2ae 100644 (file)
@@ -28,8 +28,6 @@
 
 class Email_reminder extends Managed_DataObject
 {
-    const INVITE_REMINDER   = 'invite'; // @todo Move this to the invite reminder handler
-
     public $__table = 'email_reminder';
 
     public $type;     // type of reminder
@@ -56,40 +54,45 @@ class Email_reminder extends Managed_DataObject
     }
 
     /**
+     * Do we need to send a reminder?
      *
-     * @param type $type
-     * @param type $confirm
-     * @param type $day
-     * @return type
+     * @param string $type      type of reminder
+     * @param Object $object    an object with a 'code' property
+     *                          (Confirm_address or Invitation)
+     * @param int    $days      Number of days after the code was created
+     * @return boolean true if any Email_reminder records were found
      */
-    static function needsReminder($type, $confirm, $days) {
+    static function needsReminder($type, $object, $days = null) {
 
         $reminder        = new Email_reminder();
         $reminder->type  = $type;
-        $reminder->code  = $confirm->code;
-        $reminder->days  = $days;
-
-        $result = $reminder->find(true);
+        $reminder->code  = $object->code;
+        if (!empty($days)) {
+            $reminder->days  = $days;
+        }
+        $result = $reminder->find();
 
-        if (empty($result)) {
-            return true;
+        if (!empty($result)) {
+            return false;
         }
 
-        return false;
+        return true;
     }
 
     /**
+     * Record a record of sending the reminder
      *
-     * @param type $type
-     * @param type $confirm
-     * @param type $day
-     * @return type
+     * @param string $type      type of reminder
+     * @param Object $object    an object with a 'code' property
+     *                          (Confirm_address or Invitation)
+     * @param int    $days      Number of days after the code was created
+     * @return int   $result    row ID of the new reminder record
      */
-    static function recordReminder($type, $confirm, $days) {
+    static function recordReminder($type, $object, $days) {
 
         $reminder        = new Email_reminder();
         $reminder->type  = $type;
-        $reminder->code  = $confirm->code;
+        $reminder->code  = $object->code;
         $reminder->days  = $days;
         $reminder->sent  = $reminder->created = common_sql_now();
         $result          = $reminder->insert();
index e5b561827b0de4d1b3f084accd013a9292f47165..d75c40f5300f2eee46900a1cbf077ad367abc3e7 100644 (file)
@@ -60,22 +60,24 @@ class SiteConfirmReminderHandler extends QueueHandler
     /**
      * Handle the site
      *
-     * @param string $reminderType type of reminder to send
+     * @param array $remitem type of reminder to send and any special options
      * @return boolean true on success, false on failure
      */
-    function handle($reminderType)
+    function handle($remitem)
     {
+        list($type, $opts) = $remitem;
+
         $qm = QueueManager::get();
 
         try {
-            switch($reminderType) {
+            switch($type) {
             case UserConfirmRegReminderHandler::REGISTER_REMINDER:
                 $confirm               = new Confirm_address();
-                $confirm->address_type = $object;
+                $confirm->address_type = $type;
                 $confirm->find();
                 while ($confirm->fetch()) {
                     try {
-                        $qm->enqueue($confirm, 'uregrem');
+                        $qm->enqueue(array($confirm, $opts), 'uregrem');
                     } catch (Exception $e) {
                         common_log(LOG_WARNING, $e->getMessage());
                         continue;
@@ -87,7 +89,7 @@ class SiteConfirmReminderHandler extends QueueHandler
                 $invitation->find();
                 while ($invitation->fetch()) {
                     try {
-                        $qm->enqueue($invitation, 'uinvrem');
+                        $qm->enqueue(array($invitation, $opts), 'uinvrem');
                     } catch (Exception $e) {
                         common_log(LOG_WARNING, $e->getMessage());
                         continue;
index 5f1bbd62d942b1763bbba43edf4fbd4127fe69d2..d8345c10a92d35262ed75b655e1314f78acff58f 100644 (file)
@@ -64,16 +64,34 @@ class UserConfirmRegReminderHandler extends UserReminderHandler {
      *
      * @todo abstract this bit further
      *
-     * @param Confirm_address $confirm
+     * @param array $regitem confirmation address and any special options
      * @return boolean success value
      */
-    function sendNextReminder($confirm)
+    function sendNextReminder($regitem)
     {
+        list($confirm, $opts) = $regitem;
+
         $regDate = strtotime($confirm->modified); // Seems like my best bet
         $now     = strtotime('now');
 
         // Days since registration
         $days = ($now - $regDate) / 86499; // 60*60*24 = 86499
+        // $days = ($now - $regDate) / 120; // Two mins, good for testing
+
+        if ($days > 7 && isset($opts['onetime'])) {
+            // Don't send the reminder if we're past the normal reminder window and
+            // we've already pestered her at all before
+            if (Email_reminder::needsReminder(self::REGISTER_REMINDER, $confirm)) {
+                common_log(LOG_INFO, "Sending one-time registration confirmation reminder to {$confirm->address}", __FILE__);
+                $subject = _m("One time reminder - please confirm your registration!");
+                return EmailReminderPlugin::sendReminder(
+                    self::REGISTER_REMINDER,
+                    $confirm,
+                    $subject,
+                    -1 // special one-time indicator
+                );
+            }
+        }
 
         // Welcome to one of the ugliest switch statement I've ever written
 
@@ -86,7 +104,8 @@ class UserConfirmRegReminderHandler extends UserReminderHandler {
                     self::REGISTER_REMINDER,
                     $confirm,
                     $subject,
-                1);
+                    1
+                );
             } else {
                 return true;
             }
index c4acecc62f252ea6f3d1e3c70a94cf3338f3e7f1..4ca68be686ad753d0fe116818f8681d689219b7a 100644 (file)
@@ -62,24 +62,42 @@ class UserInviteReminderHandler extends UserReminderHandler {
      *
      * @todo Abstract this stuff further
      *
-     * @param Invitation $invitation
+     * @param array $invitem Invitation obj and any special options
      * @return boolean success value
      */
-    function sendNextReminder($invitation)
+    function sendNextReminder($invitem)
     {
+        list($invitation, $opts) = $invitem;
+
         $invDate = strtotime($invitation->created);
         $now     = strtotime('now');
-        
+
         // Days since first invitation was sent
         $days = ($now - $invDate) / 86499; // 60*60*24 = 86499
+        // $days = ($now - $regDate) / 120; // Two mins, good for testing
 
         $siteName = common_config('site', 'name');
 
+        if ($days > 7 && isset($opts['onetime'])) {
+            // Don't send the reminder if we're past the normal reminder window and
+            // we've already pestered her at all before
+            if (Email_reminder::needsReminder(self::INVITE_REMINDER, $invitation)) {
+                common_log(LOG_INFO, "Sending one-time invitation reminder to {$invitation->address}", __FILE__);
+                $subject = _m("One time reminder - you have been invited to join {$siteName}!");
+                return EmailReminderPlugin::sendReminder(
+                    self::INVITE_REMINDER,
+                    $invitation,
+                    $subject,
+                    -1 // special one-time indicator
+                );
+            }
+        }
+
         switch($days) {
         case ($days > 1 && $days < 2):
             if (Email_reminder::needsReminder(self::INVITE_REMINDER, $invitation, 1)) {
                 common_log(LOG_INFO, "Sending one day invitation reminder to {$invitation->address}", __FILE__);
-                $subject = _m("Reminder - You have been invited to join {$siteName}!");
+                $subject = _m("Reminder - you have been invited to join {$siteName}!");
                 return EmailReminderPlugin::sendReminder(
                     self::INVITE_REMINDER,
                     $invitation,
@@ -102,7 +120,7 @@ class UserInviteReminderHandler extends UserReminderHandler {
                 } else {
                     return true;
                 }
-            break;        
+            break;
         }
         return true;
     }
diff --git a/plugins/EmailReminder/mail-src/invite-onetime b/plugins/EmailReminder/mail-src/invite-onetime
new file mode 100644 (file)
index 0000000..0426e4f
--- /dev/null
@@ -0,0 +1,26 @@
+Special ONE TIME reminder...
+
+%%arg.inviter%% has invited you to join them on %%site.name%%.
+
+%%site.name%% is a micro-blogging service that lets you keep
+up-to-date with people you know and people who interest you.
+
+You can also share news about yourself, your thoughts, or your life
+online with people who know about you.
+
+It's great for meeting new people who share your interests.
+
+You can see %%arg.inviter%%'s profile page on %%site.name%% here:
+
+> [%%arg.inviterurl%%](%%arg.inviterurl%%)
+
+If you'd like to try the service, click on the link below to accept
+the invitation.
+
+> [%%arg.confirmurl%%](%%arg.confirmurl%%)
+
+If not, you can ignore this message. Thanks for your patience and your time.
+
+Sincerely,
+
+%%site.name%%
index 9461842407c6c53f802f534489586261192113fe..3caa451452ae7cb2d7ccf108283e4a78ad37563b 100644 (file)
@@ -1,4 +1,4 @@
-Hey, it's been a whole day!
+Reminder:
 
 Someone (probably you) has requested an account on %%site.name%% using this email address.
 
diff --git a/plugins/EmailReminder/mail-src/register-onetime b/plugins/EmailReminder/mail-src/register-onetime
new file mode 100644 (file)
index 0000000..0cefd12
--- /dev/null
@@ -0,0 +1,9 @@
+Hi, this is a special ONE TIME reminder.
+
+Someone (probably you) has requested an account on %%site.name%% using this email address.
+
+To confirm the address, click the following URL or copy it into the address bar of your browser.
+
+> [%%arg.confirmurl%%](%%arg.confirmurl%%)
+
+If it was not you, you can safely ignore this message.
index 4cb7087fc720044ee427ce27b0a313ad4b5d4b10..6c5ad63f4d6b5bad40f3af88293d0463e32c8a3f 100644 (file)
@@ -20,8 +20,8 @@
 
 define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
 
-$shortoptions = 't:e:au';
-$longoptions = array('type=', 'email=', 'all', 'universe');
+$shortoptions = 't:e:auo';
+$longoptions = array('type=', 'email=', 'all', 'universe', 'onetime');
 
 $helptext = <<<END_OF_SENDEMAILREMINDER_HELP
 sendemailreminder.php [options]
@@ -31,6 +31,7 @@ Send an email summary of the inbox to users
  -e --email    email address to send reminder to
  -a --all      send reminder to all addresses
  -u --universe send reminder to all addresses on all sites
+ -o --onetime  send one-time reminder to older addresses
 
 END_OF_SENDEMAILREMINDER_HELP;
 
@@ -55,6 +56,7 @@ $types = array(
 );
 
 $type = null;
+$opts = array(); // special options like "onetime"
 
 if (have_option('t', 'type')) {
     $type = trim(get_option_value('t', 'type'));
@@ -67,6 +69,11 @@ if (have_option('t', 'type')) {
    exit(1);
 }
 
+if (have_option('o', 'onetime')) {
+    $opts['onetime'] = true;
+    if (!$quiet) { print "Special one-time reminder mode.\n"; }
+}
+
 $reminders = array();
 
 switch($type) {
@@ -91,7 +98,7 @@ if (have_option('u', 'universe')) {
             $qm = QueueManager::get();
             foreach ($reminders as $reminder) {
                 extract($reminder);
-                $qm->enqueue($type, 'siterem');
+                $qm->enqueue(array($type, $opts), 'siterem');
                 if (!$quiet) { print "Sent pending {$type} reminders to all unconfirmed addresses in the known universe.\n"; }
             }
         }
@@ -111,13 +118,13 @@ if (have_option('u', 'universe')) {
                 if (empty($result)) {
                     throw new Exception("No confirmation code found for {$address}.");
                 }
-                $qm->enqueue($confirm, $utransport);
+                $qm->enqueue(array($confirm, $opts), $utransport);
                 if (!$quiet) { print "Sent all pending {$type} reminder to {$address}.\n"; }
             }
         } else if (have_option('a', 'all')) {
             foreach ($reminders as $reminder) {
                 extract($reminder);
-                $qm->enqueue($type, 'siterem');
+                $qm->enqueue(array($type, $opts), 'siterem');
                 if (!$quiet) { print "Sent pending {$type} reminders to all unconfirmed addresses on the site.\n"; }
             }
         } else {