]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Email notify-on-fave moved to Profile_prefs (run upgrade.php)
authorMikael Nordfeldth <mmn@hethane.se>
Sun, 13 Jul 2014 15:13:05 +0000 (17:13 +0200)
committerMikael Nordfeldth <mmn@hethane.se>
Sun, 13 Jul 2014 17:46:40 +0000 (19:46 +0200)
actions/emailsettings.php
classes/User.php
lib/mail.php
plugins/Favorite/FavoritePlugin.php
plugins/Favorite/actions/apifavoritecreate.php
plugins/Favorite/actions/atompubfavoritefeed.php
plugins/Favorite/lib/favcommand.php

index cc1a345f09cdce080e4e2b707b882f92548a7dca..fea649d6def474d7512e131245fd9d0f39957a94 100644 (file)
@@ -214,13 +214,6 @@ class EmailsettingsAction extends SettingsAction
                             $user->emailnotifysub);
             $this->elementEnd('li');
             $this->elementStart('li');
-            $this->checkbox('emailnotifyfav',
-                            // TRANS: Checkbox label in e-mail preferences form.
-                            _('Send me email when someone '.
-                              'adds my notice as a favorite.'),
-                            $user->emailnotifyfav);
-            $this->elementEnd('li');
-            $this->elementStart('li');
             $this->checkbox('emailnotifymsg',
                             // TRANS: Checkbox label in e-mail preferences form.
                             _('Send me email when someone sends me a private message.'),
@@ -324,7 +317,6 @@ class EmailsettingsAction extends SettingsAction
 
         if (Event::handle('StartEmailSaveForm', array($this, $this->scoped))) {
             $emailnotifysub   = $this->boolean('emailnotifysub');
-            $emailnotifyfav   = $this->boolean('emailnotifyfav');
             $emailnotifymsg   = $this->boolean('emailnotifymsg');
             $emailnotifynudge = $this->boolean('emailnotifynudge');
             $emailnotifyattn  = $this->boolean('emailnotifyattn');
@@ -338,7 +330,6 @@ class EmailsettingsAction extends SettingsAction
             $original = clone($user);
 
             $user->emailnotifysub   = $emailnotifysub;
-            $user->emailnotifyfav   = $emailnotifyfav;
             $user->emailnotifymsg   = $emailnotifymsg;
             $user->emailnotifynudge = $emailnotifynudge;
             $user->emailnotifyattn  = $emailnotifyattn;
index b55b57c181c6558d567fb8f07fe4e29217cc3182..1ccbdbc2174c20128845b19247040ff9d9030ab6 100644 (file)
@@ -73,7 +73,7 @@ class User extends Managed_DataObject
                 'email' => array('type' => 'varchar', 'length' => 255, 'description' => 'email address for password recovery etc.'),
                 'incomingemail' => array('type' => 'varchar', 'length' => 255, 'description' => 'email address for post-by-email'),
                 'emailnotifysub' => array('type' => 'int', 'size' => 'tiny', 'default' => 1, 'description' => 'Notify by email of subscriptions'),
-                'emailnotifyfav' => array('type' => 'int', 'size' => 'tiny', 'default' => 1, 'description' => 'Notify by email of favorites'),
+                'emailnotifyfav' => array('type' => 'int', 'size' => 'tiny', 'default' => null, 'description' => 'Notify by email of favorites'),
                 'emailnotifynudge' => array('type' => 'int', 'size' => 'tiny', 'default' => 1, 'description' => 'Notify by email of nudges'),
                 'emailnotifymsg' => array('type' => 'int', 'size' => 'tiny', 'default' => 1, 'description' => 'Notify by email of direct messages'),
                 'emailnotifyattn' => array('type' => 'int', 'size' => 'tiny', 'default' => 1, 'description' => 'Notify by email of @-replies'),
@@ -289,7 +289,6 @@ class User extends Managed_DataObject
         // initially for sites using caching, since the initial encache
         // doesn't know about the defaults in the database.
         $user->emailnotifysub = 1;
-        $user->emailnotifyfav = 1;
         $user->emailnotifynudge = 1;
         $user->emailnotifymsg = 1;
         $user->emailnotifyattn = 1;
index 182c95ea48dac93d4d2f566ba18cf75c3035f1be..15b2351b4356d256b3550f310d069e6882fad887 100644 (file)
@@ -683,6 +683,10 @@ function mail_notify_fave(User $rcpt, Profile $sender, Notice $notice)
         return;
     }
 
+    if (!$rcpt->getPref('notify', 'email_fave', 1)) {
+        return;
+    }
+
     $bestname = $profile->getBestName();
 
     common_switch_locale($rcpt->language);
index 144fef77978173c896d17dd5cbe70f10be752e85..baa8df43c441b5261fdb2e009b2afb0538648d86 100644 (file)
@@ -25,6 +25,8 @@ if (!defined('GNUSOCIAL')) { exit(1); }
  */
 class FavoritePlugin extends ActivityHandlerPlugin
 {
+    protected $notify_email_fave = 1;
+
     public function tag()
     {
         return 'favorite';
@@ -46,6 +48,27 @@ class FavoritePlugin extends ActivityHandlerPlugin
         $schema->ensureTable('fave', Fave::schemaDef());
         return true;
     }
+
+    public function onStartUpgrade()
+    {
+        // This is a migration feature that will make sure we move
+        // certain User preferences to the Profile_prefs table.
+        // Introduced after commit b5fd2a048fc621ea05d756caba17275ab3dd0af4
+        // on Sun Jul 13 16:30:37 2014 +0200
+        $user = new User();
+        $user->whereAdd('emailnotifyfav IS NOT NULL');
+        if ($user->find()) {
+            printfnq("Detected old User table (emailnotifyfav IS NOT NULL). Moving 'emailnotifyfav' property to Profile_prefs...");
+            // Make sure we have our own tables setup properly
+            while ($user->fetch()) {
+                $user->setPref('email', 'notify_fave', $user->emailnotifyfav);
+                $orig = clone($user);
+                $user->emailnotifyfav = 'null';   // flag this preference as migrated
+                $user->update($orig);
+            }
+            printfnq("DONE.\n");
+        }
+    }
     
     public function onEndUpgrade()
     {
@@ -198,7 +221,7 @@ class FavoritePlugin extends ActivityHandlerPlugin
         foreach ($mentioned_ids as $id) {
             $mentioned = User::getKV('id', $id);
             if ($mentioned instanceof User && $mentioned->id != $stored->profile_id
-                    && $mentioned->email && $mentioned->emailnotifyfav) {   // do we have an email, and does user want it?
+                    && $mentioned->email && $mentioned->getPref('email', 'notify_fave', $this->notify_email_fave)) {   // do we have an email, and does user want it?
                 mail_notify_fave($mentioned, $stored->getProfile(), $stored->getParent());
             }
         }
@@ -390,6 +413,41 @@ class FavoritePlugin extends ActivityHandlerPlugin
         $supported = $supported || $cmd instanceof FavCommand;
     }
 
+    // Form stuff (settings etc.)
+
+    public function onEndEmailFormData(Action $action, Profile $scoped)
+    {
+        // getConfigData will fall back on systemwide default
+        // and we only wish to save numerical true or false.
+        $emailfave = $scoped->getPref('email', 'notify_fave', $this->notify_email_fave) ? 1 : 0;
+
+        $action->elementStart('li');
+        $action->checkbox('email-notify_fave',
+                        // TRANS: Checkbox label in e-mail preferences form.
+                        _('Send me email when someone adds my notice as a favorite.'),
+                        $emailfave);
+        $action->elementEnd('li');
+
+        return true;
+    }
+
+    public function onStartEmailSaveForm(Action $action, Profile $scoped)
+    {
+        $emailfave = $action->boolean('email-notify_fave') ? 1 : 0;
+        try {
+            if ($emailfave == $scoped->getPref('email', 'notify_fave')) {
+                // No need to update setting
+                return true;
+            }
+        } catch (NoResultException $e) {
+            // Apparently there's no previously stored setting, then continue to save it as it is now.
+        }
+
+        $scoped->setPref('email', 'notify_fave', $emailfave);
+
+        return true;
+    }
+
     // Layout stuff
 
     public function onEndPersonalGroupNav(Menu $menu, Profile $target, Profile $scoped=null)
index 4172692441413493b02b57602fed7a18cb910e57..e0c8c0cd83902c603cb6c39c0f373673dfff7999 100644 (file)
@@ -162,12 +162,10 @@ class ApiFavoriteCreateAction extends ApiAuthAction
     function notify($fave, $notice, $user)
     {
         $other = User::getKV('id', $notice->profile_id);
-        if ($other && $other->id != $user->id) {
-            if ($other->email && $other->emailnotifyfav) {
-                require_once INSTALLDIR.'/lib/mail.php';
+        if ($other && $other->id != $user->id && !empty($other->email)) {
+            require_once INSTALLDIR.'/lib/mail.php';
 
-                mail_notify_fave($other, $user->getProfile(), $notice);
-            }
+            mail_notify_fave($other, $user->getProfile(), $notice);
             // XXX: notify by IM
             // XXX: notify by SMS
         }
index 4ff76e183d1622b20a47625d76d1013c35411284..cfc79ec0f003df0e2e565ef1d7861908942f4260 100644 (file)
@@ -361,12 +361,10 @@ class AtompubfavoritefeedAction extends ApiAuthAction
     function notify($fave, $notice, $user)
     {
         $other = User::getKV('id', $notice->profile_id);
-        if ($other && $other->id != $user->id) {
-            if ($other->email && $other->emailnotifyfav) {
-                require_once INSTALLDIR.'/lib/mail.php';
+        if ($other && $other->id != $user->id && !empty($other->email)) {
+            require_once INSTALLDIR.'/lib/mail.php';
 
-                mail_notify_fave($other, $user->getProfile(), $notice);
-            }
+            mail_notify_fave($other, $user->getProfile(), $notice);
             // XXX: notify by IM
             // XXX: notify by SMS
         }
index 65ccdaae4b1b8b16169df4d587dbbaf2912e3c1f..94658b8a53390e7173294977ecd0faa25943bd4e 100644 (file)
@@ -38,12 +38,10 @@ class FavCommand extends Command
  
         $other = User::getKV('id', $notice->profile_id); 
  
-        if ($other && $other->id != $this->user->id) { 
-            if ($other->email && $other->emailnotifyfav) { 
-                require_once INSTALLDIR.'/lib/mail.php';
+        if ($other && $other->id != $this->user->id && !empty($other->email)) { 
+            require_once INSTALLDIR.'/lib/mail.php';
 
-                mail_notify_fave($other, $this->user->getProfile(), $notice);
-            } 
+            mail_notify_fave($other, $this->user->getProfile(), $notice);
         } 
  
         Fave::blowCacheForProfileId($this->user->id);