Файл: app/Http/Controllers/AccountController.php
Строк: 419
<?php
namespace AppHttpControllers;
use AppHttpRequestsDestroyUserRequest;
use AppHttpRequestsUpdateUserPreferencesRequest;
use AppHttpRequestsUpdateUserProfileRequest;
use AppHttpRequestsUpdateUserSecurityRequest;
use AppModelsPayment;
use AppModelsPlan;
use AppModelsStat;
use AppModelsWebsite;
use AppTraitsUserTrait;
use IlluminateHttpRequest;
use IlluminateSupportCarbon;
use IlluminateSupportFacadesAuth;
use IlluminateSupportFacadesHash;
use IlluminateSupportStr;
class AccountController extends Controller
{
use UserTrait;
/**
* Show the Settings index.
*
* @param Request $request
* @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
*/
public function index(Request $request) {
return view('account.container', ['view' => 'index', 'user' => $request->user()]);
}
/**
* Show the Profile settings form.
*
* @param Request $request
* @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
*/
public function profile(Request $request)
{
return view('account.container', ['view' => 'profile', 'user' => $request->user()]);
}
/**
* Update the Profile settings.
*
* @param UpdateUserProfileRequest $request
* @return IlluminateHttpRedirectResponse
* @throws GuzzleHttpExceptionGuzzleException
*/
public function updateProfile(UpdateUserProfileRequest $request)
{
$this->userUpdate($request, $request->user());
return back()->with('success', __('Settings saved.'));
}
/**
* Resent the Account Email Confirmation request.
*
* @param Request $request
* @return IlluminateHttpRedirectResponse
*/
public function resendAccountEmailConfirmation(Request $request)
{
try {
$request->user()->resendPendingEmailVerificationMail();
} catch (Exception $e) {
return redirect()->route('account.profile')->with('error', $e->getMessage());
}
return back()->with('success', __('A new verification link has been sent to your email address.'));
}
/**
* Cancel the Account Email Confirmation request.
*
* @param Request $request
* @return IlluminateHttpRedirectResponse
*/
public function cancelAccountEmailConfirmation(Request $request)
{
$request->user()->clearPendingEmail();
return back();
}
/**
* Show the Security settings form.
*
* @param Request $request
* @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
*/
public function security(Request $request)
{
return view('account.container', ['view' => 'security', 'user' => $request->user()]);
}
/**
* Update the Security settings.
*
* @param UpdateUserSecurityRequest $request
* @return IlluminateHttpRedirectResponse
*/
public function updateSecurity(UpdateUserSecurityRequest $request)
{
if ($request->input('password')) {
$request->user()->password = Hash::make($request->input('password'));
Auth::logoutOtherDevices($request->input('password'));
}
if ($request->has('tfa')) {
$request->user()->tfa = $request->boolean('tfa');
}
$request->user()->save();
return back()->with('success', __('Settings saved.'));
}
/**
* Show the Preference settings form.
*
* @param Request $request
* @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
*/
public function preferences(Request $request)
{
return view('account.container', ['view' => 'preferences']);
}
/**
* Update the Preferences settings.
*
* @param Request $request
* @return IlluminateHttpRedirectResponse
*/
public function updatePreferences(UpdateUserPreferencesRequest $request)
{
$request->user()->email_account_limit = $request->input('email_account_limit');
$request->user()->save();
return back()->with('success', __('Settings saved.'));
}
/**
* Show the Plan settings form.
*
* @param Request $request
* @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
*/
public function plan(Request $request)
{
return view('account.container', ['view' => 'plan', 'user' => $request->user()]);
}
/**
* Update the Plan settings.
*
* @param Request $request
* @return IlluminateHttpRedirectResponse
*/
public function updatePlan(Request $request)
{
$request->user()->planSubscriptionCancel();
return back()->with('success', __('Settings saved.'));
}
/**
* List the Payments.
*
* @param Request $request
* @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
*/
public function indexPayments(Request $request)
{
$search = $request->input('search');
$searchBy = in_array($request->input('search_by'), ['payment_id', 'invoice_id']) ? $request->input('search_by') : 'payment_id';
$plan = $request->input('plan');
$interval = $request->input('interval');
$processor = $request->input('processor');
$status = $request->input('status');
$sortBy = in_array($request->input('sort_by'), ['id']) ? $request->input('sort_by') : 'id';
$sort = in_array($request->input('sort'), ['asc', 'desc']) ? $request->input('sort') : 'desc';
$perPage = in_array($request->input('per_page'), [10, 25, 50, 100]) ? $request->input('per_page') : config('settings.paginate');
$payments = Payment::where('user_id', '=', $request->user()->id)
->when(isset($plan) && !empty($plan), function ($query) use ($plan) {
return $query->ofPlan($plan);
})
->when($interval, function ($query) use ($interval) {
return $query->ofInterval($interval);
})
->when($processor, function ($query) use ($processor) {
return $query->ofProcessor($processor);
})
->when($status, function ($query) use ($status) {
return $query->ofStatus($status);
})
->when($search, function ($query) use ($search, $searchBy) {
if($searchBy == 'invoice_id') {
return $query->searchInvoice($search);
}
return $query->searchPayment($search);
})
->orderBy($sortBy, $sort)
->paginate($perPage)
->appends(['search' => $search, 'search_by' => $searchBy, 'interval' => $interval, 'processor' => $processor, 'plan' => $plan, 'status' => $status, 'sort_by' => $sortBy, 'sort' => $sort, 'per_page' => $perPage]);
// Get all the plans
$plans = Plan::where([['amount_month', '>', 0], ['amount_year', '>', 0]])->withTrashed()->get();
return view('account.container', ['view' => 'payments.list', 'payments' => $payments, 'plans' => $plans]);
}
/**
* Show the edit Payment form.
*
* @param Request $request
* @param $id
* @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
*/
public function editPayment(Request $request, $id)
{
$payment = Payment::where([['id', '=', $id], ['user_id', '=', $request->user()->id]])->firstOrFail();
return view('account.container', ['view' => 'payments.edit', 'payment' => $payment]);
}
/**
* Cancel the Payment.
*
* @param Request $request
* @param $id
* @return mixed
*/
public function cancelPayment(Request $request, $id)
{
$payment = Payment::where([['id', '=', $id], ['status', '=', 'pending'], ['user_id', '=', $request->user()->id]])->firstOrFail();
$payment->status = 'cancelled';
$payment->save();
return redirect()->route('account.payments.edit', $id)->with('success', __('Settings saved.'));
}
/**
* Show the Invoice.
*
* @param Request $request
* @param $id
* @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
*/
public function showInvoice(Request $request, $id)
{
$payment = Payment::where([['user_id', '=', $request->user()->id], ['id', '=', $id], ['status', '=', 'completed']])->firstOrFail();
// Sum the inclusive tax rates
$inclTaxRatesPercentage = collect($payment->tax_rates)->where('type', '=', 0)->sum('percentage');
// Sum the exclusive tax rates
$exclTaxRatesPercentage = collect($payment->tax_rates)->where('type', '=', 1)->sum('percentage');
return view('account.container', ['view' => 'payments.invoice', 'payment' => $payment, 'inclTaxRatesPercentage' => $inclTaxRatesPercentage, 'exclTaxRatesPercentage' => $exclTaxRatesPercentage]);
}
/**
* Show the API settings form.
*
* @param Request $request
* @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
*/
public function api(Request $request)
{
return view('account.container', ['view' => 'api', 'user' => $request->user()]);
}
/**
* Update the API settings.
*
* @param Request $request
* @return IlluminateHttpRedirectResponse
*/
public function updateApi(Request $request)
{
$request->user()->api_token = Str::random(64);
$request->user()->save();
return back()->with('success', __('Settings saved.'));
}
/**
* Show the Delete Account form.
*
* @param Request $request
* @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
*/
public function delete(Request $request)
{
return view('account.container', ['view' => 'delete', 'user' => $request->user()]);
}
/**
* Delete the Account.
*
* @param DestroyUserRequest $request
* @return IlluminateHttpRedirectResponse
*/
public function destroyUser(DestroyUserRequest $request)
{
$request->user()->forceDelete();
return redirect()->route('home');
}
}