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();
}
}
}