[freeside-commits] branch master updated. e4829d1025798f30b0af30d1e22da2f7c769df31

Mitch Jackson mitch at freeside.biz
Tue Feb 13 18:45:54 PST 2018


The branch, master has been updated
       via  e4829d1025798f30b0af30d1e22da2f7c769df31 (commit)
      from  d2b55d07a9e6e64a38877136d7974ab93e14f1ed (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit e4829d1025798f30b0af30d1e22da2f7c769df31
Author: Mitch Jackson <mitch at freeside.biz>
Date:   Tue Feb 13 20:44:18 2018 -0600

    RT# 77217 Add email_opt_out action to API

diff --git a/FS/FS/API.pm b/FS/FS/API.pm
index 75948a3e3..33c4775d9 100644
--- a/FS/FS/API.pm
+++ b/FS/FS/API.pm
@@ -10,6 +10,7 @@ use FS::cust_pay;
 use FS::cust_credit;
 use FS::cust_refund;
 use FS::cust_pkg;
+use FS::cust_contact;
 
 =head1 NAME
 
@@ -794,6 +795,8 @@ Including this implements per-customer custom pricing for this package, overridi
 A single string for just one detail line, or an array reference of one or more
 lines of detail
 
+=back
+
 =cut
 
 sub order_package {
@@ -1201,6 +1204,66 @@ sub edit_advertising_source {
 }
 
 
+=item email_optout OPTION => VALUE, ...
+
+Each e-mail address, or L<FS::cust_contact> record, has two opt-in flags:
+message_dest: recieve non-invoicing messages, and invoice_dest: recieve
+invoicing messages
+
+Use this API call to remove opt-in flags for an e-mail address
+
+=over 4
+
+=item address
+
+E-Mail address
+
+=item disable_message_dest
+
+Enabled by default:
+Set this parameter as 0 in your API call to leave the message_dest flag as is
+
+=item disable_invoice_dest
+
+Enabled by default:
+Set this parameter as 0 in your API call to leave the invoice_dest flag as is
+
+=back
+
+=cut
+
+sub email_opt_out {
+  my ($class, %opt) = @_;
+
+  return _shared_secret_error()
+    unless _check_shared_secret($opt{secret});
+
+  return {error => 'No e-mail address specified'}
+    unless $opt{address} && $opt{address} =~ /\@/;
+
+  $opt{disable_message_dest} ||= 1;
+  $opt{disable_invoice_dest} ||= 1;
+
+  my $address = FS::Record::dbh->quote($opt{address});
+
+  for my $cust_contact (
+    FS::Record::qsearch({
+      table     => 'cust_contact',
+      select    => 'cust_contact.*',
+      addl_from => 'LEFT JOIN contact_email USING (contactnum)',
+      extra_sql => "WHERE contact_email.emailaddress = $address",
+    })
+  ) {
+    $cust_contact->set(invoice_dest => '') if $opt{disable_invoice_dest};
+    $cust_contact->set(message_dest => '') if $opt{disable_message_dest};
+
+    my $error = $cust_contact->replace();
+    return {error => $error} if $error;
+  }
+  return;
+}
+
+
 ##
 # helper subroutines
 ##
@@ -1213,4 +1276,9 @@ sub _shared_secret_error {
   return { 'error' => 'Incorrect shared secret' };
 }
 
+
+=back
+
+=cut
+
 1;
diff --git a/bin/xmlrpc-email_opt_out b/bin/xmlrpc-email_opt_out
new file mode 100755
index 000000000..f8c6713c9
--- /dev/null
+++ b/bin/xmlrpc-email_opt_out
@@ -0,0 +1,44 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use Frontier::Client;
+
+my $uri = new URI 'http://localhost:8008/';
+
+my $server = new Frontier::Client ( 'url' => $uri );
+
+my $secret = 'sharingiscaring';
+
+die "
+Usage:
+  xmlrpc-email_opt_out email\@address.com email\@address.net ...
+
+" unless @ARGV && $ARGV[0] =~ /\@/;
+
+
+for my $address (@ARGV) {
+
+  my $response = $server->call('FS.API.email_opt_out',
+    # API shared secret
+    secret => $secret,
+
+    # E-Mail address
+    address => $address,
+
+    #   Do not clear the invoice_dest field:
+    # disable_invoice_dest => 0,
+
+    #   Do not clear the message_dest field:
+    # disable_message_dest => 0,
+  );
+
+  if ($response->{error}) {
+    print "$response->{error} \n";
+  } else {
+    print "opt-out: $address \n";
+  }
+}
+
+
+1;

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/API.pm             | 68 ++++++++++++++++++++++++++++++++++++++++++++++++
 bin/xmlrpc-email_opt_out | 44 +++++++++++++++++++++++++++++++
 2 files changed, 112 insertions(+)
 create mode 100755 bin/xmlrpc-email_opt_out




More information about the freeside-commits mailing list