HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: /home/xedaptot/ai.naniguide.com/app/Http/Controllers/AudienceController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Carbon\Carbon;

class AudienceController extends Controller
{
    public function overview(Request $request)
    {
        // authorize
        if (\Gate::denies('list', \App\Model\MailList::class)) {
            return $this->notAuthorized();
        }

        // stats
        $subscriberCount = $request->user()->customer->local()->subscribers()->count();
        $subscribedCount = $request->user()->customer->local()->subscribers()->subscribed()->count();
        $activeContactPercent = $subscriberCount > 0 ? ($subscribedCount / $subscriberCount) : 0;

        return view('audience.overview', [
            'subscriberCount' => $subscriberCount,
            'subscribedCount' => $subscribedCount,
            'activeContactPercent' => $activeContactPercent,
            'formCount' => $request->user()->customer->local()->forms()->count(),

            // Cross db join
            'blacklistedCount' => config('sharding.enabled') ? 0 : $request->user()->customer->local()->subscribers()
                ->join('blacklists', 'subscribers.email', '=', 'blacklists.email')->count(),
        ]);
    }

    public function growthChart(Request $request)
    {
        // authorize
        if (\Gate::denies('list', \App\Model\MailList::class)) {
            return $this->notAuthorized();
        }

        $currentTimezone = $request->user()->customer->getTimezone();

        $result = [
            'columns' => [],
            'total' => [],
            'unsubscribed' => [],
        ];

        $times = [];

        // columns
        for ($i = 15; $i >= 0; --$i) {
            $time = Carbon::now($currentTimezone)->subMonths($i);
            $result['columns'][] = $time->format('y M');
            $times[] = $time;
        }

        // data
        foreach ($times as $time) {
            $result['total'][] = \App\Model\LocalCustomer::subscribersCountByTime(
                \Carbon\Carbon::now($currentTimezone)->subYears(1000),
                $time->endOfDay(),
                $request->user()->customer->id
            );

            $result['unsubscribed'][] = \App\Model\LocalCustomer::subscribersCountByTime(
                \Carbon\Carbon::now($currentTimezone)->subYears(1000),
                $time->endOfDay(),
                $request->user()->customer->id,
                null,
                \App\Model\Subscriber::STATUS_UNSUBSCRIBED
            );
        }

        return response()->json($result);
    }
}