Файл: app/Console/Commands/EmailReportsCommand.php
Строк: 73
<?php
namespace AppConsoleCommands;
use AppMailReportMail;
use AppModelsUser;
use AppModelsWebsite;
use IlluminateConsoleCommand;
use IlluminateSupportCarbon;
use IlluminateSupportFacadesMail;
class EmailReportsCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'cron:email-reports';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Send out websites analytics email reports';
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
$now = Carbon::now();
if (config('settings.email_reports_period') == 'weekly') {
$from = (clone $now)->startOfWeek()->subWeek();
$to = (clone $now)->endOfWeek()->subWeek();
} else {
$from = (clone $now)->startOfMonth()->subMonthsNoOverflow(1);
$to = (clone $now)->endOfMonth()->subMonthsNoOverflow(1);
}
foreach (User::where('has_websites', '=', 1)->cursor() as $user) {
if ($user->can('emailReports', ['AppModelsUser'])) {
$websites = Website::with([
'visitors' => function ($query) use ($from, $to) {
$query->whereBetween('date', [$from->format('Y-m-d'), $to->format('Y-m-d')]);
},
'pageviews' => function ($query) use ($from, $to) {
$query->whereBetween('date', [$from->format('Y-m-d'), $to->format('Y-m-d')]);
}]
)
->where([['user_id', '=', $user->id], ['email', '=', 1]])->get();
$stats = [];
foreach ($websites as $website) {
$stats[] = ['domain' => $website->domain, 'visitors' => $website->visitors->sum('count') ?? 0, 'pageviews' => $website->pageviews->sum('count') ?? 0];
}
// If the user has any websites with email notifications enabled
if ($stats) {
try {
Mail::to($user->email)->locale($user->locale)->send(new ReportMail($stats, ['from' => $from->format('Y-m-d'), 'to' => $to->format('Y-m-d')]));
} catch (Exception $e) {}
}
}
}
return 0;
}
}