Add email digests
This commit is contained in:
parent
940fa5fda4
commit
a569ac5cc6
6 changed files with 218 additions and 35 deletions
91
app/Mail/Digest.php
Normal file
91
app/Mail/Digest.php
Normal file
|
@ -0,0 +1,91 @@
|
|||
<?php
|
||||
|
||||
namespace App\Mail;
|
||||
|
||||
use DateTime;
|
||||
use App\Http\Controllers\TrackerController;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class Digest extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
/**
|
||||
* The type of digest (e.g. weekly, monthly, etc.).
|
||||
* TODO: Replace with enum
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $digest_type;
|
||||
|
||||
/**
|
||||
* The current trip locations as a JSON object.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $locations;
|
||||
|
||||
/**
|
||||
* The current trip checkins as a JSON object.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $checkins;
|
||||
|
||||
/**
|
||||
* Create a new message instance.
|
||||
*
|
||||
* @param string $digest_type
|
||||
* @param string $trip_id
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(string $digest_type, string $trip_id)
|
||||
{
|
||||
$this->digest_type = $digest_type;
|
||||
$trip = (new TrackerController)->get_trip_data($trip_id);
|
||||
|
||||
$cutoffDateTime = new DateTime();
|
||||
switch ($this->digest_type) {
|
||||
case 'daily':
|
||||
$cutoffDateTime->modify('-1 day');
|
||||
break;
|
||||
case 'weekly':
|
||||
$cutoffDateTime->modify('-1 week');
|
||||
break;
|
||||
case 'monthly':
|
||||
$cutoffDateTime->modify('-1 month');
|
||||
break;
|
||||
default:
|
||||
}
|
||||
|
||||
$this->locations = array_filter(
|
||||
$trip->locations,
|
||||
function($elem) use ($cutoffDateTime) {
|
||||
$elemDateTime = new DateTime($elem->created_at);
|
||||
return $elemDateTime > $cutoffDateTime;
|
||||
}
|
||||
);
|
||||
|
||||
$this->checkins = array_filter(
|
||||
$trip->checkins,
|
||||
function($elem) use ($cutoffDateTime) {
|
||||
$elemDateTime = new DateTime($elem->created_at);
|
||||
return $elemDateTime > $cutoffDateTime;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the message.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function build()
|
||||
{
|
||||
return $this->view('emails.digest')
|
||||
->subject("track.bengoldsworthy.net ".ucwords($this->digest_type)." Digest");
|
||||
}
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Mail;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class WeeklyDigest extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
/**
|
||||
* Create a new message instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the message.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function build()
|
||||
{
|
||||
return $this->view('emails.weekly-digest')
|
||||
->subject('Weekly Digest');
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue