Просмотр исходного кода

Added newsletter field on registration

Will Browning 6 лет назад
Родитель
Сommit
05b3a77ef9

+ 2 - 0
.env.example

@@ -45,3 +45,5 @@ ENVOY_RUN_TESTS="ssh -tt -p22 vagrant@192.168.10.10 '/path/to/homestead/app/vend
 ANONADDY_ADMIN_USERNAME=johndoe
 ANONADDY_DOMAIN=anonaddy.me
 ANONADDY_SECRET=long-random-string
+ANONADDY_NEWSLETTER_URL=https://newsletter.yourdomain.com/subscribe
+ANONADDY_NEWSLETTER_LIST=your-list-id

+ 6 - 0
app/Http/Controllers/Auth/RegisterController.php

@@ -3,6 +3,7 @@
 namespace App\Http\Controllers\Auth;
 
 use App\Http\Controllers\Controller;
+use App\Jobs\SubscribeToNewsletter;
 use App\Recipient;
 use App\Rules\NotBlacklisted;
 use App\Rules\NotDeletedUsername;
@@ -63,6 +64,7 @@ class RegisterController extends Controller
             ],
             'email' => ['required', 'email', 'max:254', 'confirmed'],
             'password' => ['required', 'min:8'],
+            'newsletter' => ['nullable'],
             'terms' => ['required', 'accepted']
         ]);
     }
@@ -82,6 +84,10 @@ class RegisterController extends Controller
             'user_id' => $userId
         ]);
 
+        if (isset($data['newsletter'])) {
+            SubscribeToNewsletter::dispatch($data['email']);
+        }
+
         $twoFactor = app('pragmarx.google2fa');
 
         return User::create([

+ 48 - 0
app/Jobs/SubscribeToNewsletter.php

@@ -0,0 +1,48 @@
+<?php
+
+namespace App\Jobs;
+
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Queue\SerializesModels;
+
+class SubscribeToNewsletter implements ShouldQueue
+{
+    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
+
+    protected $email;
+
+    /**
+     * Create a new job instance.
+     *
+     * @return void
+     */
+    public function __construct($email)
+    {
+        $this->email = $email;
+    }
+
+    /**
+     * Execute the job.
+     *
+     * @return void
+     */
+    public function handle()
+    {
+        $data = [
+            'email' => $this->email,
+            'list' => config('anonaddy.newsletter_list'),
+            'gdpr' => "true"
+        ];
+
+        $ch = curl_init(config('anonaddy.newsletter_url'));
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($ch, CURLOPT_POST, true);
+        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data, '', '&'));
+
+        curl_exec($ch);
+        curl_close($ch);
+    }
+}

+ 22 - 0
config/anonaddy.php

@@ -50,6 +50,28 @@ return [
 
     'limit' => env('ANONADDY_LIMIT'),
 
+    /*
+    |--------------------------------------------------------------------------
+    | Newsletter URL
+    |--------------------------------------------------------------------------
+    |
+    | This value is the url to subscribe new registrations to the newsletter if they opt in
+    |
+    */
+
+    'newsletter_url' => env('ANONADDY_NEWSLETTER_URL'),
+
+    /*
+    |--------------------------------------------------------------------------
+    | Newsletter List
+    |--------------------------------------------------------------------------
+    |
+    | This value is the ID of the list to subscribe to
+    |
+    */
+
+    'newsletter_list' => env('ANONADDY_NEWSLETTER_LIST'),
+
     /*
     |--------------------------------------------------------------------------
     | Username Blacklist

+ 15 - 1
resources/views/auth/register.blade.php

@@ -74,7 +74,21 @@
                             @endif
                         </div>
 
-                        <div class="flex flex-wrap">
+                        <div class="flex flex-wrap mb-3 items-center">
+                            <input type="checkbox" name="newsletter" class="mr-2" id="newsletter">
+
+                            <label class="text-sm text-grey-700" for="newsletter">
+                                Sign up to our newsletter
+                            </label>
+
+                            @if ($errors->has('newsletter'))
+                                <p class="text-red-500 text-xs italic mt-4">
+                                    {{ $errors->first('newsletter') }}
+                                </p>
+                            @endif
+                        </div>
+
+                        <div class="flex flex-wrap items-center">
                             <input type="checkbox" name="terms" class="mr-2" id="terms">
 
                             <label class="text-sm text-grey-700" for="terms">