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/AccountController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log as LaravelLog;
use App\Library\Facades\Billing;

class AccountController extends Controller
{
    /**
     * Update user profile.
     *
     * @param \Illuminate\Http\Request $request
     *
     * @return \Illuminate\Http\Response
     **/
    public function profile(Request $request)
    {
        // Get current user
        $user = $request->user();
        $customer = $user->customer;
        $customer->getColorScheme();

        // Save posted data
        if ($request->isMethod('post')) {
            $this->validate($request, [
                'first_name' => 'required',
                'last_name' => 'required',
                'timezone' => 'required',
                'language_id' => 'required',
                'image' => 'nullable|image',
                'phone' => [(\App\Model\Setting::get('user.require_mobile_phone') == 'yes' ? 'required' : 'nullable'), 'regex:/^[\+0-9]{10,15}$/'],
            ]);

            // Update user attributes
            $user->first_name = $request->first_name;
            $user->last_name = $request->last_name;
            $user->phone = $request->phone;

            // Update password
            if (!empty($request->password)) {
                $user->password = bcrypt($request->password);
            }

            $user->save();

            // Authorize
            if ($request->user()->customer->can('updateProfile', $customer)) {
                // Save current user info
                $customer->fill($request->all());

                // Upload and save image
                if ($request->hasFile('image')) {
                    if ($request->file('image')->isValid()) {
                        // Remove old images
                        $user->uploadProfileImage($request->file('image'));
                    }
                }

                // Remove image
                if ($request->_remove_image == 'true') {
                    $user->removeProfileImage();
                }

                if ($customer->save()) {
                    $request->session()->flash('alert-success', trans('messages.profile.updated'));
                }
            }

            return redirect()->action('AccountController@profile');
        }

        if (!empty($request->old())) {
            $customer->fill($request->old());
            // User info
            $user->fill($request->old());
        }

        return view('account.profile', [
            'customer' => $customer,
            'user' => $request->user(),
        ]);
    }

    /**
     * Update customer contact information.
     *
     * @param \Illuminate\Http\Request $request
     *
     * @return \Illuminate\Http\Response
     **/
    public function contact(Request $request)
    {
        // Get current user
        $customer = $request->user()->customer;
        $contact = $customer->contact;

        // Create new company if null
        if (!$contact) {
            $contact = new \App\Model\Contact();
        }

        // save posted data
        if ($request->isMethod('post')) {
            $this->validate($request, \App\Model\Contact::$rules);

            $contact->fill($request->all());

            // Save current user info
            if ($contact->save()) {
                $customer->contact_id = $contact->id;
                $customer->save();
                $request->session()->flash('alert-success', trans('messages.customer_contact.updated'));
            }
        }

        return view('account.contact', [
            'customer' => $customer,
            'contact' => $contact->fill($request->old()),
        ]);
    }

    /**
     * User logs.
     */
    public function logs(Request $request)
    {
        $logs = $request->user()->customer->logs;

        return view('account.logs', [
            'logs' => $logs,
        ]);
    }

    /**
     * Logs list.
     */
    public function logsListing(Request $request)
    {
        $logs = \App\Model\ActivityLog::search($request)->paginate($request->per_page);

        return view('account.logs_listing', [
            'logs' => $logs,
        ]);
    }

    /**
     * Quta logs.
     */
    public function quotaLog(Request $request)
    {
        $customer = $request->user()->customer;
        $subscription = $customer->getCurrentActiveSubscription();
        $credits = app(\App\Services\Plans\Credits\CreditsService::class);
        $quotas  = app(\App\Services\Plans\Quotas\QuotasService::class);
        $sendKey = \App\Services\Plans\Credits\CreditKey::SEND_EMAIL;
        $QK = \App\Services\Plans\Quotas\QuotaKey::class;
        $QS = \App\Services\Plans\Quotas\QuotasService::class;

        // Credits — display strings only (sub-view consumes pre-formatted text).
        $sendCreditRemainingDisplay = $credits->displayRemainingLive($subscription, $sendKey);
        $sendingCreditsLimitDisplay = $credits->displayCap($subscription->plan, $sendKey);

        // Quotas — service helpers encapsulate the 4-state (false/null/0/int)
        // mapping. View consumes count (int), display (string), used ratio (float).
        $listsCount       = $customer->local()->listsCount();
        $listsDisplay     = $quotas->display($customer, $QK::MAX_LISTS);
        $listsUsed        = $quotas->usedRatio($customer, $QK::MAX_LISTS);

        $campaignsCount   = $customer->local()->campaignsCount();
        $campaignsDisplay = $quotas->display($customer, $QK::MAX_CAMPAIGNS);
        $campaignsUsed    = $quotas->usedRatio($customer, $QK::MAX_CAMPAIGNS);

        $subscribersCount   = \App\Library\Cache\AppCache::for($customer->local())->read('SubscriberCount', 0);
        $subscribersDisplay = $quotas->display($customer, $QK::MAX_SUBSCRIBERS);
        $subscribersUsed    = $quotas->usedRatio($customer, $QK::MAX_SUBSCRIBERS);

        $automationsCount   = $customer->local()->automationsCount();
        $automationsDisplay = $quotas->display($customer, $QK::MAX_AUTOMATIONS);
        $automationsUsed    = $quotas->usedRatio($customer, $QK::MAX_AUTOMATIONS);

        $domainsCount   = $customer->local()->sendingDomainsCount();
        $domainsDisplay = $quotas->display($customer, $QK::MAX_SENDING_DOMAINS);
        $domainsUsed    = $quotas->usedRatio($customer, $QK::MAX_SENDING_DOMAINS);

        $usersCount   = $customer->users()->count();
        $usersDisplay = $quotas->display($customer, $QK::MAX_USERS);
        $usersUsed    = $quotas->usedRatio($customer, $QK::MAX_USERS);

        // Storage uses MB-derived usage (no built-in QuotaCounter for bytes scope).
        $uploadCount   = $customer->totalUploadSize();
        $uploadDisplay = $quotas->display($customer, $QK::MAX_UPLOAD_SIZE_TOTAL);
        $uploadUsed    = $QS::ratioFor((float) $uploadCount, $quotas->limit($customer, $QK::MAX_UPLOAD_SIZE_TOTAL));

        return view('account.quota_log', [
            'sendCreditRemainingDisplay' => $sendCreditRemainingDisplay,
            'sendingCreditsLimitDisplay' => $sendingCreditsLimitDisplay,
            'listsDisplay'        => $listsDisplay,
            'listsCount'          => $listsCount,
            'listsUsed'           => $listsUsed,
            'campaignsDisplay'    => $campaignsDisplay,
            'campaignsCount'      => $campaignsCount,
            'campaignsUsed'       => $campaignsUsed,
            'subscribersDisplay'  => $subscribersDisplay,
            'subscribersCount'    => $subscribersCount,
            'subscribersUsed'     => $subscribersUsed,
            'automationsDisplay'  => $automationsDisplay,
            'automationsCount'    => $automationsCount,
            'automationsUsed'     => $automationsUsed,
            'uploadDisplay'       => $uploadDisplay,
            'uploadCount'         => $uploadCount,
            'uploadUsed'          => $uploadUsed,
            'domainsDisplay'      => $domainsDisplay,
            'domainsCount'        => $domainsCount,
            'domainsUsed'         => $domainsUsed,
            'usersDisplay'        => $usersDisplay,
            'usersCount'          => $usersCount,
            'usersUsed'           => $usersUsed,
        ]);
    }

    /**
     * Quta logs 2.
     */
    public function quotaLog2(Request $request)
    {
        $customer = $request->user()->customer;
        $subscription = $customer->getCurrentActiveSubscription();
        $credits = app(\App\Services\Plans\Credits\CreditsService::class);
        $quotas  = app(\App\Services\Plans\Quotas\QuotasService::class);
        $QK = \App\Services\Plans\Quotas\QuotaKey::class;
        $QS = \App\Services\Plans\Quotas\QuotasService::class;

        $sendingCreditsLimitDisplay = $credits->displayCap($subscription->plan, \App\Services\Plans\Credits\CreditKey::SEND_EMAIL);

        $listsCount       = $customer->local()->listsCount();
        $listsDisplay     = $quotas->display($customer, $QK::MAX_LISTS);
        $listsUsed        = $quotas->usedRatio($customer, $QK::MAX_LISTS);

        $campaignsCount   = $customer->local()->campaignsCount();
        $campaignsDisplay = $quotas->display($customer, $QK::MAX_CAMPAIGNS);
        $campaignsUsed    = $quotas->usedRatio($customer, $QK::MAX_CAMPAIGNS);

        $subscribersCount   = \App\Library\Cache\AppCache::for($customer->local())->read('SubscriberCount', 0);
        $subscribersDisplay = $quotas->display($customer, $QK::MAX_SUBSCRIBERS);
        $subscribersUsed    = $quotas->usedRatio($customer, $QK::MAX_SUBSCRIBERS);

        $automationsCount   = $customer->local()->automationsCount();
        $automationsDisplay = $quotas->display($customer, $QK::MAX_AUTOMATIONS);
        $automationsUsed    = $quotas->usedRatio($customer, $QK::MAX_AUTOMATIONS);

        $domainsCount   = $customer->local()->sendingDomainsCount();
        $domainsDisplay = $quotas->display($customer, $QK::MAX_SENDING_DOMAINS);
        $domainsUsed    = $quotas->usedRatio($customer, $QK::MAX_SENDING_DOMAINS);

        // Storage uses MB-derived usage (no built-in QuotaCounter for bytes scope).
        $uploadCount   = $customer->totalUploadSize();
        $uploadDisplay = $quotas->display($customer, $QK::MAX_UPLOAD_SIZE_TOTAL);
        $uploadUsed    = $QS::ratioFor((float) $uploadCount, $quotas->limit($customer, $QK::MAX_UPLOAD_SIZE_TOTAL));

        return view('account.quota_log_2', [
            'sendingCreditsLimitDisplay' => $sendingCreditsLimitDisplay,
            'listsDisplay'        => $listsDisplay,
            'listsCount'          => $listsCount,
            'listsUsed'           => $listsUsed,
            'campaignsDisplay'    => $campaignsDisplay,
            'campaignsCount'      => $campaignsCount,
            'campaignsUsed'       => $campaignsUsed,
            'subscribersDisplay'  => $subscribersDisplay,
            'subscribersCount'    => $subscribersCount,
            'subscribersUsed'     => $subscribersUsed,
            'automationsDisplay'  => $automationsDisplay,
            'automationsCount'    => $automationsCount,
            'automationsUsed'     => $automationsUsed,
            'uploadDisplay'       => $uploadDisplay,
            'uploadCount'         => $uploadCount,
            'uploadUsed'          => $uploadUsed,
            'domainsDisplay'      => $domainsDisplay,
            'domainsCount'        => $domainsCount,
            'domainsUsed'         => $domainsUsed,
        ]);
    }

    /**
     * Api token.
     */
    public function api(Request $request)
    {
        return view('account.api');
    }

    /**
     * Renew api token.
     */
    public function renewToken(Request $request)
    {
        $user = $request->user();

        $user->api_token = str_random(60);
        $user->save();

        // Redirect to my lists page
        $request->session()->flash('alert-success', trans('messages.user_api.renewed'));

        return redirect()->action('AccountController@api');
    }

    /**
     * Billing.
     */
    public function billing(Request $request)
    {
        return view('account.billing', [
            'customer' => $request->user()->customer,
            'user' => $request->user(),
        ]);
    }

    /**
     * Edit billing address.
     */
    public function editBillingAddress(Request $request)
    {
        $customer = $request->user()->customer;
        $billingAddress = $customer->getDefaultBillingAddress();

        // has no address yet
        if (!$billingAddress) {
            $billingAddress = $customer->newBillingAddress();
        }

        // copy from contacy
        if ($request->same_as_contact == 'true') {
            $billingAddress->copyFromContact();
        }

        // Save posted data
        if ($request->isMethod('post')) {
            list($validator, $billingAddress) = $billingAddress->updateAll($request);

            // redirect if fails
            if ($validator->fails()) {
                return response()->view('account.editBillingAddress', [
                    'billingAddress' => $billingAddress,
                    'errors' => $validator->errors(),
                ], 400);
            }

            $request->session()->flash('alert-success', trans('messages.billing_address.updated'));

            return;
        }

        return view('account.editBillingAddress', [
            'billingAddress' => $billingAddress,
        ]);
    }

    /**
     * Remove payment method
     */
    public function removePaymentMethod(Request $request)
    {
        $customer = $request->user()->customer;

        $customer->removePaymentMethod();
    }

    public function leftbarState(Request $request)
    {
        $request->session()->put('customer-leftbar-state', $request->state);
    }

    public function wizardColorScheme(Request $request)
    {
        $customer = $request->user()->customer;

        // Save color scheme
        if ($request->isMethod('post')) {
            $customer->color_scheme = $request->color_scheme;
            $customer->theme_mode = $request->theme_mode;
            $customer->save();

            return view('account.wizardMenuLayout');
        }

        return view('account.wizardColorScheme');
    }

    public function wizardMenuLayout(Request $request)
    {
        $customer = $request->user()->customer;

        // Save color scheme
        if ($request->isMethod('post')) {
            $customer->menu_layout = $request->menu_layout;
            $customer->save();
            return;
        }

        return view('account.wizardMenuLayout');
    }

    public function activity(Request $request)
    {
        $currentTimezone = $request->user()->customer->getTimezone();
        return view('account.activity', [
            'currentTimezone' => $currentTimezone
        ]);
    }

    public function saveAutoThemeMode(Request $request)
    {
        $request->session()->put('customer-auto-theme-mode', $request->theme_mode);
    }

    public function changeThemeMode(Request $request)
    {
        $customer = $request->user()->customer;

        // Save color scheme
        if ($request->isMethod('post')) {
            $customer->theme_mode = $request->theme_mode;
            $customer->save();
        }
    }
}