]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
email notification on new subscriptions
authorEvan Prodromou <evan@prodromou.name>
Sun, 15 Jun 2008 03:02:02 +0000 (23:02 -0400)
committerEvan Prodromou <evan@prodromou.name>
Sun, 15 Jun 2008 03:02:02 +0000 (23:02 -0400)
darcs-hash:20080615030202-84dde-ebed7919c227ce280dc818f301e15001eb8b5926.gz

actions/subscribe.php
classes/Profile.php
lib/common.php
lib/mail.php [new file with mode: 0644]

index 522c315935a1ca46e184e82a3c8171b64c5768d7..9a1d43fa5df4786b5f97f61013575e5b51c481e2 100644 (file)
@@ -55,7 +55,44 @@ class SubscribeAction extends Action {
                        return;
                }
 
+               $this->notify($other, $user);
+
                common_redirect(common_local_url('subscriptions', array('nickname' =>
                                                                                                                                $user->nickname)));
        }
+       
+       function notify($listenee, $listener) {
+               # XXX: add other notifications (Jabber, SMS) here
+               # XXX: queue this and handle it offline
+               $this->notify_email($listenee, $listener);
+       }
+       
+       function notify_email($listenee, $listener) {
+               if ($listenee->email) {
+                       global $config;
+                       $profile = $listenee->getProfile();
+                       $other = $listener->getProfile();
+                       $name = $profile->getBestName();
+                       $other_name = $other->getBestName();
+                       $recipients = $listenee->email;
+                       $headers['From'] = mail_notify_from();
+                       $headers['To'] = $name . ' <' . $listenee->email . '>';
+                       $headers['Subject'] = $other_name . _t(' is now listening to your notices on ') . $config['site']['name'];
+
+                       $body = 
+                         ($other->fullname) ? 
+                         ($other->fullname . ' (' . $other->nickname . ')') : $other->nickname;
+
+                       $body .= _t(' is now listening to your notices on ') . $config['site']['name'] . '.';
+                       $body .= "\n\n";
+                       $body .= "\t".$other->profileurl;
+                       $body .= "\n\n";
+                       $body .= _t('Faithfully yours, ');
+                       $body .= "\n";
+                       $body .= $config['site']['name'];
+                       $body .= "\n";
+
+                       mail_send($recipients, $headers, $body);
+               }
+       }
 }
\ No newline at end of file
index b7bd2a2d9293260525fae5f53958e40e5ed8417e..5a45d43979c52a68a23de608511c1822d4b1b51f 100644 (file)
@@ -133,4 +133,8 @@ class Profile extends DB_DataObject
                }
                return true;
        }
+       
+       function getBestName() {
+               return ($this->fullname) ? $this->fullname : $this->nickname;
+       }
 }
index 8050476e7435f0d0898491ce44d70bb596b48d2c..34c024ece0b49b6912b9773ab24f3e03bf113363 100644 (file)
@@ -51,7 +51,11 @@ $config =
                'license' =>
                array('url' => 'http://creativecommons.org/licenses/by/3.0/',
                          'title' => 'Creative Commons Attribution 3.0',
-                         'image' => 'http://i.creativecommons.org/l/by/3.0/88x31.png'));
+                         'image' => 'http://i.creativecommons.org/l/by/3.0/88x31.png'),
+               'mail' =>
+               array('backend' => 'mail',
+                         'params' => NULL)
+               );
 
 $config['db'] = &PEAR::getStaticProperty('DB_DataObject','options');
 
@@ -68,6 +72,7 @@ require_once(INSTALLDIR.'/config.php');
 require_once(INSTALLDIR.'/lib/util.php');
 require_once(INSTALLDIR.'/lib/action.php');
 require_once(INSTALLDIR.'/lib/theme.php');
+require_once(INSTALLDIR.'/lib/mail.php');
 
 require_once(INSTALLDIR.'/classes/Avatar.php');
 require_once(INSTALLDIR.'/classes/Notice.php');
diff --git a/lib/mail.php b/lib/mail.php
new file mode 100644 (file)
index 0000000..6656964
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+/*
+ * Laconica - a distributed open-source microblogging tool
+ * Copyright (C) 2008, Controlez-Vous, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (!defined('LACONICA')) { exit(1); }
+
+require_once('Mail.php');
+
+function mail_backend() {
+       static $backend = NULL; 
+       
+       if (!$backend) {
+               global $config;
+               $backend = Mail::factory($config['mail']['backend'],
+                                                                ($config['mail']['params']) ? $config['mail']['params'] : array());
+               if (PEAR::isError($backend)) {
+                       common_server_error($backend->getMessage(), 500);
+               }
+       }
+       return $backend;
+}
+
+# XXX: use Mail_Queue... maybe
+
+function mail_send($recipients, $headers, $body) {
+       $backend = mail_backend();
+       assert($backend); # throws an error if it's bad
+       $sent = $backend->send($recipients, $headers, $body);
+       if (PEAR::isError($sent)) {
+               common_server_error($sent->getMessage(), 500);
+       }
+}
+
+function mail_notify_from() {
+       global $config;
+       if ($config['mail']['notifyfrom']) {
+               return $config['mail']['notifyfrom'];
+       } else {
+               return 'Do Not Reply <nobody@'.$config['site']['server'].'>';
+       }
+}
\ No newline at end of file