From: Evan Prodromou <evan@prodromou.name>
Date: Sat, 19 Jul 2008 20:26:25 +0000 (-0400)
Subject: email settings for post by email
X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=594811350c67feede35d50f05a9e1311b8c4c036;p=quix0rs-gnu-social.git

email settings for post by email

darcs-hash:20080719202625-84dde-52b3d6710302f55e35ef57ea0aa4aff07cbeafaa.gz
---

diff --git a/actions/emailsettings.php b/actions/emailsettings.php
index b7e356c256..d8a7bb6c33 100644
--- a/actions/emailsettings.php
+++ b/actions/emailsettings.php
@@ -63,14 +63,36 @@ class EmailsettingsAction extends SettingsAction {
 			}
 		}
 
+		if ($user->email) {
+			common_element('h2', NULL, _('Incoming email'));
+			
+			if ($user->incomingemail) {
+				common_element_start('p');
+				common_element('span', 'address', $user->incomingemail);
+				common_element('span', 'input_instructions',
+							   _('Send email to this address to post new notices.'));
+				common_element_end('p');
+				common_submit('removeincoming', _('Remove'));
+			}
+			
+			common_element_start('p');
+			common_element('span', 'input_instructions',
+						   _('Make a new email address for posting to; cancels the old one.'));
+			common_element_end('p');
+			common_submit('newincoming', _('New'));
+		}
+		
 		common_element('h2', NULL, _('Preferences'));
-
-		common_checkbox('emailnotifysub',
-		                _('Send me notices of new subscriptions through email.'),
-		                $user->emailnotifysub);
 		
+		common_checkbox('emailnotifysub',
+						_('Send me notices of new subscriptions through email.'),
+						$user->emailnotifysub);
+		common_checkbox('emailpost',
+						_('I want to post notices by email.'),
+						$user->emailpost);
+			
 		common_submit('save', _('Save'));
-
+		
 		common_element_end('form');
 		common_show_footer();
 	}
@@ -97,6 +119,10 @@ class EmailsettingsAction extends SettingsAction {
 			$this->cancel_confirmation();
 		} else if ($this->arg('remove')) {
 			$this->remove_address();
+		} else if ($this->arg('removeincoming')) {
+			$this->remove_incoming();
+		} else if ($this->arg('newincoming')) {
+			$this->new_incoming();
 		} else {
 			$this->show_form(_('Unexpected form submission.'));
 		}
@@ -228,11 +254,42 @@ class EmailsettingsAction extends SettingsAction {
 		}
 		$user->query('COMMIT');
 
-		# XXX: unsubscribe to the old address
-
 		$this->show_form(_('The address was removed.'), TRUE);
 	}
 
+	function remove_incoming() {
+		$user = common_current_user();
+		
+		if (!$user->incomingemail) {
+			$this->show_form(_('No incoming email address.'));
+			return;
+		}
+		
+		$orig = clone($user);
+		$user->incomingemail = NULL;
+		
+		if (!$user->update($orig)) {
+			common_log_db_error($user, 'UPDATE', __FILE__);
+			$this->server_error(_("Couldn't update user record."));
+		}
+		
+		$this->show_form(_('Incoming email address removed.'), TRUE);
+	}
+
+	function new_incoming() {
+		$user = common_current_user();
+		
+		$orig = clone($user);
+		$user->incomingemail = mail_new_incoming_address();
+		
+		if (!$user->update($orig)) {
+			common_log_db_error($user, 'UPDATE', __FILE__);
+			$this->server_error(_("Couldn't update user record."));
+		}
+
+		$this->show_form(_('New incoming email address added.'), TRUE);
+	}
+	
 	function email_exists($email) {
 		$user = common_current_user();
 		$other = User::staticGet('email', $email);
diff --git a/classes/User.php b/classes/User.php
index 8600bae7a2..0292b55823 100644
--- a/classes/User.php
+++ b/classes/User.php
@@ -36,6 +36,7 @@ class User extends DB_DataObject
     public $email;                           // varchar(255)  unique_key
     public $incomingemail;                   // varchar(255)  unique_key
     public $emailnotifysub;                  // tinyint(1)   default_1
+    public $emailpost;                       // tinyint(1)   default_1
     public $jabber;                          // varchar(255)  unique_key
     public $jabbernotify;                    // tinyint(1)  
     public $jabberreplies;                   // tinyint(1)  
diff --git a/classes/stoica.ini b/classes/stoica.ini
index 6ee2981c2a..c79e095dce 100644
--- a/classes/stoica.ini
+++ b/classes/stoica.ini
@@ -160,6 +160,7 @@ password = 2
 email = 2
 incomingemail = 2
 emailnotifysub = 17
+emailpost = 17
 jabber = 2
 jabbernotify = 17
 jabberreplies = 17
diff --git a/db/laconica.sql b/db/laconica.sql
index 4591caf141..a598e44709 100644
--- a/db/laconica.sql
+++ b/db/laconica.sql
@@ -47,6 +47,7 @@ create table user (
     email varchar(255) unique key comment 'email address for password recovery etc.',
     incomingemail varchar(255) unique key comment 'email address for post-by-email',
     emailnotifysub tinyint default 1 comment 'Notify by email of subscriptions',
+    emailpost tinyint default 1 comment 'Post by email',
     jabber varchar(255) unique key comment 'jabber ID for notices',
     jabbernotify tinyint default 0 comment 'whether to send notices to jabber',
     jabberreplies tinyint default 0 comment 'whether to send notices to jabber on replies',
diff --git a/lib/mail.php b/lib/mail.php
index f852f385a3..21a1c7a8f2 100644
--- a/lib/mail.php
+++ b/lib/mail.php
@@ -48,13 +48,21 @@ function mail_send($recipients, $headers, $body) {
 	return true;
 }
 
+function mail_domain() {
+	$maildomain = common_config('mail', 'domain');
+	if (!$maildomain) {
+		$maildomain = common_config('site', 'server');
+	}
+	return $maildomain;
+}
+
 function mail_notify_from() {
-	global $config;
-	if ($config['mail']['notifyfrom']) {
-		return $config['mail']['notifyfrom'];
-	} else {
-		return $config['site']['name'] . ' <noreply@'.$config['site']['server'].'>';
+	$notifyfrom = common_config('mail', 'notifyfrom');
+	if (!$notifyfrom) {
+		$domain = mail_domain();
+		$notifyfrom = common_config('site', 'name') .' <noreply@'.$domain.'>';
 	}
+	return $notifyfrom;
 }
 
 function mail_to_user(&$user, $subject, $body, $address=NULL) {
@@ -121,3 +129,31 @@ function mail_subscribe_notify($listenee, $listener) {
 		mail_send($recipients, $headers, $body);
 	}
 }
+
+function mail_new_incoming_notify($user) {
+
+	$profile = $user->getProfile();
+	$name = $profile->getBestName();
+	
+	$headers['From'] = $user->incomingemail;
+	$headers['To'] = $name . ' <' . $user->email . '>';
+	$headers['Subject'] = sprintf(_('New email address for posting to %s'),
+								  common_config('site', 'name'));
+	
+	$body  = sprintf(_("You have a new posting address on %1\$s.\n\n".
+					   "Send email to %2\$s to post new messages.\n\n".
+					   "More email instructions at %3\$s.\n\n".
+					   "Faithfully yours,\n%4\$s"),
+					 common_config('site', 'name'),
+					 $user->incomingemail,
+					 common_local_url('doc', array('title' => 'email')),
+					 common_config('site', 'name'));
+	
+	mail_send($user->email, $headers, $body);
+}
+
+function mail_new_incoming_address() {
+	$prefix = common_good_rand(8);
+	$suffix = mail_domain();
+	return $prefix . '@' . $suffix;
+}
diff --git a/maildaemon.php b/maildaemon.php
index ba88774bf3..59659b9909 100755
--- a/maildaemon.php
+++ b/maildaemon.php
@@ -50,6 +50,8 @@ class MailerDaemon {
 		if (!$this->user_match_to($user, $to)) {
 			$this->error($from, _('Sorry, that is not your incoming email address.'));
 		}
+		if (!$user->emailpost) {
+		}
 		$response = $this->handle_command($user, $msg);
 		if ($response) {
 			$this->respond($from, $to, $response);