From 50f672b20773e512f4707f9936ec45fc072d4623 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Thu, 1 Mar 2018 15:53:59 +0100 Subject: [PATCH] subscribe for newsletter, opt in email and confirmation --- democracy/api/api_democracy.php | 65 ++++++++++++++++++- democracy/api/autoload.inc | 6 +- democracy/api/sql/SUBSCRIBE_ADD.php | 10 +++ democracy/api/sql/SUBSCRIBE_CONFIRM_EMAIL.php | 9 +++ democracy/api/sql/SUBSCRIBE_EMAIL_COUNT.php | 9 +++ democracy/api/sql/SUBSCRIBE_GET.php | 9 +++ democracy/api/token_confirm_subscribe.php | 48 ++++++++++++++ democracy/api/tpl/send_mail_subscribe.tpl | 7 ++ democracy/page/default_page/css/style.css | 2 +- .../page/default_page/js/default_page.js | 62 +++++++++++++++++- .../page/default_page/tpl/default_page.tpl | 42 ++++++++++++ democracy/sql/DATA_DEMOCRACY.php | 3 +- democracy/sql/mysql/schema_subscribe.sql | 9 +++ democracy/sql/mysql/system_api.sql | 3 +- 14 files changed, 277 insertions(+), 7 deletions(-) create mode 100644 democracy/api/sql/SUBSCRIBE_ADD.php create mode 100644 democracy/api/sql/SUBSCRIBE_CONFIRM_EMAIL.php create mode 100644 democracy/api/sql/SUBSCRIBE_EMAIL_COUNT.php create mode 100644 democracy/api/sql/SUBSCRIBE_GET.php create mode 100644 democracy/api/token_confirm_subscribe.php create mode 100644 democracy/api/tpl/send_mail_subscribe.tpl create mode 100644 democracy/sql/mysql/schema_subscribe.sql diff --git a/democracy/api/api_democracy.php b/democracy/api/api_democracy.php index c61d575..b05946d 100644 --- a/democracy/api/api_democracy.php +++ b/democracy/api/api_democracy.php @@ -6,7 +6,8 @@ class api_democracy extends \SYSTEM\API\api_system { $mail = new PHPMailer; - $mail->CharSet = 'utf-8'; + $mail->CharSet = 'utf-8'; + $mail->Encoding = 'base64'; $mail->Host = 'atmanspacher.eu'; $mail->Port = 465; @@ -31,4 +32,66 @@ class api_democracy extends \SYSTEM\API\api_system { throw new \SYSTEM\LOG\ERROR("Mailer Error: " . $mail->ErrorInfo);} return \SYSTEM\LOG\JsonResult::ok(); } + + public static function call_send_subscribe($data){ + $beta = $data['beta'] == 'true' ? 1 : 0; + $android = $data['android'] == 'true' ? 1 : 0; + $ios = $data['ios'] == 'true' ? 1 : 0; + \SQL\SUBSCRIBE_ADD::Q1(array($data['email'],$beta,$android,$ios,$beta,$android,$ios)); + + $sub = \SQL\SUBSCRIBE_GET::Q1(array($data['email'])); + if(!$sub['confirmed']){ + self::send_subscribe_mail($data['email']);} + + return \SYSTEM\LOG\JsonResult::ok(); + } + + /** + * @see http://www.jwz.org/doc/mid.html + */ + public static function generateMessageID() + { + return sprintf( + "<%s.%s@%s>", + base_convert(microtime(), 10, 36), + base_convert(bin2hex(openssl_random_pseudo_bytes(8)), 16, 36), + "democracy-deutschland.de" + ); + } + + private static function send_subscribe_mail($email){ + require((new \SYSTEM\PROOT('PHPMailer-master/PHPMailerAutoload.php'))->SERVERPATH()); + date_default_timezone_set('Europe/Berlin'); + + $mail = new PHPMailer; + + $mail->CharSet = 'utf-8'; + + $mail->Host = 'atmanspacher.eu'; + $mail->Port = 465; + $mail->SMTPSecure = 'tls'; + $mail->SMTPAuth = true; + + $mail->setFrom( 'contact@democracy-deutschland.de', 'DEMOCRACY Deutschland e.V.'); + $mail->addReplyTo( 'contact@democracy-deutschland.de', 'DEMOCRACY Deutschland e.V.'); + $mail->addAddress( $email); + + $mail->addCustomHeader('Return-Path', 'contact@democracy-deutschland.de'); + $mail->addCustomHeader('Message-ID', self::generateMessageID()); + $mail->addCustomHeader('Date', date('r', time())); + + $token = \SYSTEM\TOKEN\token::request('token_confirm_subscribe', array('email' => $email)); + + $html = \SYSTEM\PAGE\replace::replaceFile((new PAPI('tpl/send_mail_subscribe.tpl'))->SERVERPATH(), array('token' => $token)); + + $mail->Subject = '📱 DEMOCRACY: Bitte bestätige Deine Newsletter-Anmeldung'; + $mail->Body = $html; + $mail->IsHTML(true); + + //send the message, check for errors + if(!$mail->send()){ + throw new \SYSTEM\LOG\ERROR("Mailer Error: " . $mail->ErrorInfo);} + + \SQL\SUBSCRIBE_EMAIL_COUNT::Q1(array($email)); + } } \ No newline at end of file diff --git a/democracy/api/autoload.inc b/democracy/api/autoload.inc index f4aad13..e33e424 100644 --- a/democracy/api/autoload.inc +++ b/democracy/api/autoload.inc @@ -1,3 +1,5 @@ +
+Bitte bestätige den Erhalt von unserem Newsletter indem du folgenden Link klickst:
+
https://test.democracy-deutschland.de/api.php?call=account&action=confirm&token=${token} +
+Herzliche Grüße
+Team DEMOCRACY \ No newline at end of file diff --git a/democracy/page/default_page/css/style.css b/democracy/page/default_page/css/style.css index 8ac52eb..9a018f6 100644 --- a/democracy/page/default_page/css/style.css +++ b/democracy/page/default_page/css/style.css @@ -831,7 +831,7 @@ i.fa.fa-quote-right { } .agileinfo-social-grids { - margin:1em 0 0 -10px; + margin:1em 0 0 -7px; } .agileinfo-social-grids ul { diff --git a/democracy/page/default_page/js/default_page.js b/democracy/page/default_page/js/default_page.js index 0afa8ea..9816173 100644 --- a/democracy/page/default_page/js/default_page.js +++ b/democracy/page/default_page/js/default_page.js @@ -18,4 +18,64 @@ $(document).ready(function() { $('.navbar-nav>li>a').on('click', function(){ $('.navbar-collapse').collapse('hide'); }); -}); \ No newline at end of file + + $('#beta').change(function(){ + $('#plattform').toggle(); + }); + + $('#subscribe').click(function(){ + var ok = true; + var email = $('#email').val(); + var beta = $('#beta').is(':checked'); + var android = $('#android').is(':checked'); + var ios = $('#ios').is(':checked'); + + if(!validateEmail(email)){ + $('#email').addClass("blink-class"); + ok = false; + } else { + $('#email').removeClass("blink-class"); + } + + if(beta && (!android && !ios)){ + $('#android').addClass("blink-class"); + $('#ios').addClass("blink-class"); + ok = false; + } else { + $('#android').removeClass("blink-class"); + $('#ios').removeClass("blink-class"); + } + + if(ok){ + $.ajax({ + async: true, + url: './api.php', + type: 'GET', + dataType: 'JSON', + data: { + call: 'send_subscribe', + data: { email: email, + beta: beta, + android:android, + ios: ios} + }, + success: function(data){ + if(!data.status){ + alert("Das Eintragen in den Newsletter hat leider nicht funktioniert. Bitte versuche es später noch einmal. Danke."); + } else { + $('#confirm').show(); + $('#formular').hide(); + } + }, + error: function(){ + alert("Das Eintragen in den Newsletter hat leider nicht funktioniert. Bitte versuche es später noch einmal. Danke."); + } + }); + } + }); +}); + +function validateEmail(email) { + var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; + return re.test(String(email).toLowerCase()); +} \ No newline at end of file diff --git a/democracy/page/default_page/tpl/default_page.tpl b/democracy/page/default_page/tpl/default_page.tpl index 8b6eccd..998283e 100644 --- a/democracy/page/default_page/tpl/default_page.tpl +++ b/democracy/page/default_page/tpl/default_page.tpl @@ -138,6 +138,48 @@
  • +
    + +
    +
    + +
    + + + +  Beta-Test + + +
    +
    + +