Fixes for emails; send user registered/pending depending on state
This commit is contained in:
17
app/Database/factories/AirlineFactory.php
Normal file
17
app/Database/factories/AirlineFactory.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
use Faker\Generator as Faker;
|
||||
|
||||
/**
|
||||
* Add any number of airports. Don't really care if they're real or not
|
||||
*/
|
||||
$factory->define(App\Models\Airline::class, function (Faker $faker) {
|
||||
return [
|
||||
'id' => $faker->unique()->numberBetween(10, 10000),
|
||||
'icao' => function(array $apt) { return substr($apt['id'],0, 4); },
|
||||
'iata' => function (array $apt) { return $apt['id']; },
|
||||
'name' => $faker->sentence(3),
|
||||
'country' => $faker->country,
|
||||
'active' => 1
|
||||
];
|
||||
});
|
||||
@@ -12,7 +12,9 @@ $factory->define(App\Models\User::class, function (Faker $faker)
|
||||
'email' => $faker->safeEmail,
|
||||
'password' => $password ?: $password = Hash::make('secret'),
|
||||
'api_key' => $faker->sha1,
|
||||
'airline_id' => 1,
|
||||
'airline_id' => function () {
|
||||
return factory(App\Models\Airline::class)->create()->id;
|
||||
},
|
||||
'rank_id' => 1,
|
||||
'flights' => $faker->numberBetween(0, 1000),
|
||||
'flight_time' => $faker->numberBetween(0, 10000),
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Facades\Utils;
|
||||
use App\Models\User;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Validator;
|
||||
use App\Models\Airport;
|
||||
use App\Models\Airline;
|
||||
@@ -61,12 +64,12 @@ class RegisterController extends Controller
|
||||
/**
|
||||
* Get a validator for an incoming registration request.
|
||||
*
|
||||
* @param array $data
|
||||
* @param array $data
|
||||
* @return \Illuminate\Contracts\Validation\Validator
|
||||
* @throws \RuntimeException
|
||||
*/
|
||||
protected function create(array $data)
|
||||
{
|
||||
# First, validate the posted data
|
||||
$this->validate(request(), [
|
||||
'name' => 'required',
|
||||
'email' => 'required|email',
|
||||
@@ -75,13 +78,19 @@ class RegisterController extends Controller
|
||||
'password' => 'required|confirmed'
|
||||
]);
|
||||
|
||||
# Let's tell the service to create the pilot
|
||||
if($p = $this->userService->createPilot($data))
|
||||
{
|
||||
//return $this->view('auth.registered');
|
||||
return $p;
|
||||
}
|
||||
$opts = [
|
||||
'name' => $data['name'],
|
||||
'email' => $data['email'],
|
||||
'api_key' => Utils::generateApiKey(),
|
||||
'airline_id' => $data['airline'],
|
||||
'home_airport_id' => $data['home_airport'],
|
||||
'curr_airport_id' => $data['home_airport'],
|
||||
'password' => Hash::make($data['password'])
|
||||
];
|
||||
|
||||
# I'm not sure if we really need to add the error something if createPilot fails?
|
||||
$user = User::create($opts);
|
||||
$user = $this->userService->createPilot($user);
|
||||
|
||||
return $user;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,12 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* User: nabeelshahzad
|
||||
* Date: 12/22/17
|
||||
* Time: 11:44 AM
|
||||
*/
|
||||
|
||||
namespace App\Listeners;
|
||||
|
||||
use Log;
|
||||
use \App\Events\UserRegistered;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
|
||||
use App\Models\Enums\PilotState;
|
||||
use \App\Events\UserRegistered;
|
||||
|
||||
/**
|
||||
* Handle sending emails on different events
|
||||
@@ -26,9 +22,22 @@ class EmailEventListener
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send an email when the user registered
|
||||
* @param UserRegistered $event
|
||||
*/
|
||||
public function onUserRegister(UserRegistered $event)
|
||||
{
|
||||
Log::info($event->user->toArray());
|
||||
Log::info('onUserRegister: '
|
||||
. $event->user->pilot_id . ' is '
|
||||
. PilotState::label($event->user->state)
|
||||
. ', sending active email');
|
||||
|
||||
if($event->user->state === PilotState::ACTIVE) {
|
||||
Mail::to($event->user->email)->send(new \App\Mail\UserRegistered($event->user));
|
||||
} else if($event->user->state === PilotState::PENDING) {
|
||||
Mail::to($event->user->email)->send(new \App\Mail\UserPending($event->user));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
32
app/Mail/UserPending.php
Normal file
32
app/Mail/UserPending.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Mail;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
|
||||
class UserPending extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
private $user;
|
||||
|
||||
public function __construct(User $user)
|
||||
{
|
||||
$this->user = $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the message.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function build()
|
||||
{
|
||||
return $this->markdown('emails.user.pending')
|
||||
->with(['user' => $this->user]);
|
||||
}
|
||||
}
|
||||
34
app/Mail/UserRegistered.php
Normal file
34
app/Mail/UserRegistered.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Mail;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
|
||||
class UserRegistered extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
private $user;
|
||||
|
||||
public function __construct(User $user)
|
||||
{
|
||||
$this->user = $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the message.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function build()
|
||||
{
|
||||
return $this->markdown('emails.user.registered')
|
||||
->with([
|
||||
'user' => $this->user,
|
||||
]);
|
||||
}
|
||||
}
|
||||
25
app/Models/Enums/PilotState.php
Normal file
25
app/Models/Enums/PilotState.php
Normal file
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* User: nabeelshahzad
|
||||
* Date: 12/22/17
|
||||
* Time: 12:14 PM
|
||||
*/
|
||||
|
||||
namespace App\Models\Enums;
|
||||
|
||||
|
||||
class PilotState extends EnumBase
|
||||
{
|
||||
const PENDING = 1;
|
||||
const ACTIVE = 2;
|
||||
const ON_LEAVE = 3;
|
||||
const SUSPENDED = 4;
|
||||
|
||||
protected static $labels = [
|
||||
PilotState::PENDING => 'Pending',
|
||||
PilotState::ACTIVE => 'Active',
|
||||
PilotState::ON_LEAVE => 'On Leave',
|
||||
PilotState::SUSPENDED => 'Suspended',
|
||||
];
|
||||
}
|
||||
@@ -39,7 +39,8 @@ class User extends Authenticatable
|
||||
'curr_airport_id',
|
||||
'rank_id',
|
||||
'timezone',
|
||||
'active',
|
||||
'state',
|
||||
'status',
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace App\Services;
|
||||
|
||||
use App\Events\UserRegistered;
|
||||
use App\Facades\Utils;
|
||||
use App\Models\Enums\PilotState;
|
||||
use App\Models\User;
|
||||
use App\Models\Rank;
|
||||
use App\Models\Role;
|
||||
@@ -18,29 +19,19 @@ class UserService extends BaseService
|
||||
|
||||
/**
|
||||
* Register a pilot
|
||||
* @param array $data
|
||||
* @param User $user
|
||||
* @return mixed
|
||||
*/
|
||||
public function createPilot(array $data)
|
||||
public function createPilot(User $user)
|
||||
{
|
||||
$opts = [
|
||||
'name' => $data['name'],
|
||||
'email' => $data['email'],
|
||||
'api_key' => Utils::generateApiKey(),
|
||||
'airline_id' => $data['airline'],
|
||||
'home_airport_id' => $data['home_airport'],
|
||||
'curr_airport_id' => $data['home_airport'],
|
||||
'password' => Hash::make($data['password'])
|
||||
];
|
||||
|
||||
# Determine if we want to auto accept
|
||||
if(setting('pilot.auto_accept') === true) {
|
||||
$opts['status'] = config('enums.states.ACTIVE');
|
||||
$user->state = PilotState::ACTIVE;
|
||||
} else {
|
||||
$opts['status'] = config('enums.states.PENDING');
|
||||
$user->state = PilotState::PENDING;
|
||||
}
|
||||
|
||||
$user = User::create($opts);
|
||||
$user->save();
|
||||
|
||||
# Attach the user roles
|
||||
$role = Role::where('name', 'user')->first();
|
||||
@@ -49,6 +40,8 @@ class UserService extends BaseService
|
||||
# Let's check their rank
|
||||
$this->calculatePilotRank($user);
|
||||
|
||||
$user->refresh();
|
||||
|
||||
event(new UserRegistered($user));
|
||||
|
||||
return $user;
|
||||
|
||||
Reference in New Issue
Block a user