Вход Регистрация
Файл: app/Http/Controllers/AdminController.php
Строк: 1403
<?php

namespace AppHttpControllers;

use 
AppHttpRequestsStoreCouponRequest;
use 
AppHttpRequestsStorePageRequest;
use 
AppHttpRequestsStorePlanRequest;
use 
AppHttpRequestsStoreTaxRateRequest;
use 
AppHttpRequestsStoreUserRequest;
use 
AppHttpRequestsUpdateCouponRequest;
use 
AppHttpRequestsUpdatePageRequest;
use 
AppHttpRequestsUpdatePlanRequest;
use 
AppHttpRequestsUpdateSettingRequest;
use 
AppHttpRequestsUpdateTaxRateRequest;
use 
AppHttpRequestsUpdateUserProfileRequest;
use 
AppHttpRequestsUpdateWebsiteRequest;
use 
AppMailPaymentMail;
use 
AppModelsCoupon;
use 
AppModelsPage;
use 
AppModelsPayment;
use 
AppModelsPlan;
use 
AppModelsSetting;
use 
AppModelsTaxRate;
use 
AppTraitsUserTrait;
use 
AppTraitsWebsiteTrait;
use 
AppModelsUser;
use 
AppModelsWebsite;
use 
CarbonCarbon;
use 
GuzzleHttpClient as HttpClient;
use 
IlluminateHttpRequest;
use 
IlluminateSupportFacadesHash;
use 
IlluminateSupportFacadesMail;
use 
IlluminateSupportStr;

class 
AdminController extends Controller
{
    use 
UserTraitWebsiteTrait;

    
/**
     * Show the Dashboard.
     *
     * @param Request $request
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    
public function dashboard()
    {
        
$stats = [
            
'users' => User::withTrashed()->count(),
            
'plans' => Plan::withTrashed()->count(),
            
'payments' => Payment::count(),
            
'websites' => Website::count()
        ];

        
$users User::withTrashed()->orderBy('id''desc')->limit(5)->get();

        
$payments $websites = [];
        if (
paymentProcessors()) {
            
$payments Payment::with('plan')->orderBy('id''desc')->limit(5)->get();
        } else {
            
$websites Website::orderBy('id''desc')->limit(5)->get();
        }

        return 
view('admin.dashboard.index', ['stats' => $stats'users' => $users'payments' => $payments'websites' => $websites]);
    }

    
/**
     * Show the Settings forms.
     *
     * @param Request $request
     * @param $id
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView|void
     */
    
public function settings(Request $request$id)
    {
        if (
view()->exists('admin.settings.' $id)) {
            return 
view('admin.container', ['view' => 'admin.settings.' $id]);
        }

        
abort(404);
    }

    
/**
     * Update the Setting.
     *
     * @param UpdateSettingRequest $request
     * @param $id
     * @return IlluminateHttpRedirectResponse
     * @throws GuzzleHttpExceptionGuzzleException
     */
    
public function updateSetting(UpdateSettingRequest $request$id)
    {
        foreach (
$request->except(['_token''submit']) as $key => $value) {
            
// If the request is for a file upload
            
if($request->hasFile($key)) {
                
$value $request->file($key)->hashName();

                
// Check if the file exists
                
if (file_exists(public_path('uploads/brand/' config('settings.' $key)))) {
                    
unlink(public_path('uploads/brand/' config('settings.' $key)));
                }
                
// Save the file
                
$request->file($key)->move(public_path('uploads/brand'), $value);
            }

            if (
$id == 'cronjob') {
                
$value Str::random(32);
            } elseif (
$id == 'license') {
                
$httpClient = new HttpClient(['timeout' => 10'verify' => false]);

                
Setting::where('name''=''license_key')->update(['value' => $request->input('license_key')]);
                
Setting::where('name''=''license_type')->update(['value' => 'Extended']);
        
                return 
redirect()->route('admin.dashboard');
            }

            
Setting::where('name'$key)->update(['value' => $value]);
        }

        return 
back()->with('success'__('Settings saved.'));
    }

    
/**
     * List the Users.
     *
     * @param Request $request
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    
public function indexUsers(Request $request)
    {
        
$search $request->input('search');
        
$searchBy in_array($request->input('search_by'), ['name''email']) ? $request->input('search_by') : 'name';
        
$role $request->input('role');
        
$sortBy in_array($request->input('sort_by'), ['id''name''email']) ? $request->input('sort_by') : 'id';
        
$sort in_array($request->input('sort'), ['asc''desc']) ? $request->input('sort') : 'desc';
        
$perPage in_array($request->input('per_page'), [102550100]) ? $request->input('per_page') : config('settings.paginate');

        
$users User::withTrashed()
            ->
when($search, function ($query) use ($search$searchBy) {
                if(
$searchBy == 'email') {
                    return 
$query->searchEmail($search);
                }
                return 
$query->searchName($search);
            })
            ->
when(isset($role) && is_numeric($role), function ($query) use ($role) {
                return 
$query->ofRole($role);
            })
            ->
orderBy($sortBy$sort)
            ->
paginate($perPage)
            ->
appends(['search' => $search'search_by' => $searchBy'role' => $role'sort_by' => $sortBy'sort' => $sort'per_page' => $perPage]);

        return 
view('admin.container', ['view' => 'admin.users.list''users' => $users]);
    }

    
/**
     * Show the create User form.
     *
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    
public function createUser()
    {
        return 
view('admin.container', ['view' => 'admin.users.new']);
    }

    
/**
     * Show the edit User form.
     *
     * @param $id
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    
public function editUser($id)
    {
        
$user User::withTrashed()
            ->
where('id'$id)
            ->
firstOrFail();

        
$stats = [
            
'payments' => Payment::where('user_id'$user->id)->count(),
            
'websites' => Website::where('user_id'$user->id)->count()
        ];

        
$plans Plan::withTrashed()->get();

        return 
view('admin.container', ['view' => 'account.profile''user' => $user'stats' => $stats'plans' => $plans]);
    }

    
/**
     * Store the User.
     *
     * @param StoreUserRequest $request
     * @return IlluminateHttpRedirectResponse
     * @throws GuzzleHttpExceptionGuzzleException
     */
    
public function storeUser(StoreUserRequest $request)
    {
        
$user = new User;

        
$user->name $request->input('name');
        
$user->email $request->input('email');
        
$user->password Hash::make($request->input('password'));
        
$user->locale app()->getLocale();
        
$user->timezone config('settings.timezone');
        
$user->api_token Str::random(64);
        
$user->tfa config('settings.registration_tfa');

        
$user->save();

        
$user->markEmailAsVerified();

        return 
redirect()->route('admin.users')->with('success'__(':name has been created.', ['name' => $request->input('name')]));
    }

    
/**
     * Update the User.
     *
     * @param UpdateUserProfileRequest $request
     * @param $id
     * @return IlluminateHttpRedirectResponse
     * @throws GuzzleHttpExceptionGuzzleException
     */
    
public function updateUser(UpdateUserProfileRequest $request$id)
    {
        
$user User::withTrashed()->findOrFail($id);

        if (
$request->user()->id == $user->id && $request->input('role') == 0) {
            return 
redirect()->route('admin.users.edit'$id)->with('error'__('Operation denied.'));
        }

        
$this->userUpdate($request$user);

        return 
redirect()->route('admin.users.edit'$id)->with('success'__('Settings saved.'));
    }

    
/**
     * Delete the User.
     *
     * @param Request $request
     * @param $id
     * @return IlluminateHttpRedirectResponse
     */
    
public function destroyUser(Request $request$id)
    {
        
$user User::withTrashed()->findOrFail($id);

        if (
$request->user()->id == $user->id && $user->role == 1) {
            return 
redirect()->route('admin.users.edit'$id)->with('error'__('Operation denied.'));
        }

        
$user->forceDelete();

        return 
redirect()->route('admin.users')->with('success'__(':name has been deleted.', ['name' => $user->name]));
    }

    
/**
     * Soft delete the User.
     *
     * @param Request $request
     * @param $id
     * @return IlluminateHttpRedirectResponse
     * @throws Exception
     */
    
public function disableUser(Request $request$id)
    {
        
$user User::findOrFail($id);

        if (
$request->user()->id == $user->id && $user->role == 1) {
            return 
redirect()->route('admin.users.edit'$id)->with('error'__('Operation denied.'));
        }

        
$user->delete();

        return 
redirect()->route('admin.users.edit'$id)->with('success'__('Settings saved.'));
    }

    
/**
     * Restore the soft deleted User.
     *
     * @param $id
     * @return IlluminateHttpRedirectResponse
     */
    
public function restoreUser($id)
    {
        
$user User::withTrashed()->findOrFail($id);
        
$user->restore();

        return 
redirect()->route('admin.users.edit'$id)->with('success'__('Settings saved.'));
    }

    
/**
     * List the Pages.
     *
     * @param Request $request
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    
public function indexPages(Request $request)
    {
        
$search $request->input('search');
        
$searchBy in_array($request->input('search_by'), ['name''email']) ? $request->input('search_by') : 'name';
        
$sortBy in_array($request->input('sort_by'), ['id''name']) ? $request->input('sort_by') : 'id';
        
$sort in_array($request->input('sort'), ['asc''desc']) ? $request->input('sort') : 'desc';
        
$perPage in_array($request->input('per_page'), [102550100]) ? $request->input('per_page') : config('settings.paginate');

        
$pages Page::when($search, function ($query) use ($search$searchBy) {
                return 
$query->searchName($search);
            })
            ->
orderBy($sortBy$sort)
            ->
paginate($perPage)
            ->
appends(['search' => $search'search_by' => $searchBy'sort_by' => $sortBy'sort' => $sort'per_page' => $perPage]);

        return 
view('admin.container', ['view' => 'admin.pages.list''pages' => $pages]);
    }

    
/**
     * Show the create Page form.
     *
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    
public function createPage()
    {
        return 
view('admin.container', ['view' => 'admin.pages.new']);
    }

    
/**
     * Show the edit Page form.
     *
     * @param $id
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    
public function editPage($id)
    {
        
$page Page::where('id'$id)->firstOrFail();

        return 
view('admin.container', ['view' => 'admin.pages.edit''page' => $page]);
    }

    
/**
     * Store the Page.
     *
     * @param StorePageRequest $request
     * @return IlluminateHttpRedirectResponse
     */
    
public function storePage(StorePageRequest $request)
    {
        
$page = new Page;

        
$page->name $request->input('name');
        
$page->slug $request->input('slug');
        
$page->visibility $request->input('visibility');
        
$page->content $request->input('content');

        
$page->save();

        return 
redirect()->route('admin.pages')->with('success'__(':name has been created.', ['name' => $request->input('name')]));
    }

    
/**
     * Update the Page.
     *
     * @param UpdatePageRequest $request
     * @param $id
     * @return mixed
     */
    
public function updatePage(UpdatePageRequest $request$id)
    {
        
$page Page::findOrFail($id);

        
$page->name $request->input('name');
        
$page->slug $request->input('slug');
        
$page->visibility $request->input('visibility');
        
$page->content $request->input('content');

        
$page->save();

        return 
redirect()->route('admin.pages.edit'$id)->with('success'__('Settings saved.'));
    }

    
/**
     * Delete the Page.
     *
     * @param $id
     * @return IlluminateHttpRedirectResponse
     * @throws Exception
     */
    
public function destroyPage($id)
    {
        
$page Page::findOrFail($id);
        
$page->delete();

        return 
redirect()->route('admin.pages')->with('success'__(':name has been deleted.', ['name' => $page->name]));
    }

    
/**
     * 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';
        
$userId $request->input('user_id');
        
$planId $request->input('plan_id');
        
$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'), [102550100]) ? $request->input('per_page') : config('settings.paginate');

        
$payments Payment::with('user')
            ->
when(isset($planId) && !empty($planId), function ($query) use ($planId) {
                return 
$query->ofPlan($planId);
            })
            ->
when($userId, function ($query) use ($userId) {
                return 
$query->ofUser($userId);
            })
            ->
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_id' => $planId'status' => $status'user_id' => $userId'sort_by' => $sortBy'sort' => $sort'per_page' => $perPage]);

        
// Get all the plans
        
$plans Plan::where([['amount_month''>'0], ['amount_year''>'0]])->withTrashed()->get();

        
$filters = [];

        if (
$userId) {
            
$user User::where('id''='$userId)->first();
            if (
$user) {
                
$filters['user'] = $user->name;
            }
        }

        return 
view('admin.container', ['view' => 'admin.payments.list''payments' => $payments'interval' => $interval'plans' => $plans'filters' => $filters]);
    }

    
/**
     * Show the edit Payment form.
     *
     * @param $id
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    
public function editPayment($id)
    {
        
$payment Payment::where('id'$id)->firstOrFail();

        return 
view('admin.container', ['view' => 'account.payments.edit''payment' => $payment]);
    }

    
/**
     * Approve the Payment.
     *
     * @param Request $request
     * @param $id
     * @return mixed
     * @throws GuzzleHttpExceptionGuzzleException
     */
    
public function approvePayment(Request $request$id)
    {
        
$payment Payment::where([['id''='$id], ['status''=''pending']])->firstOrFail();

        
$user User::where('id'$payment->user_id)->first();

        
$payment->status 'completed';
        
$payment->save();

        
// Assign the plan to the user
        
if ($user) {
            if (
$user->plan_subscription_id) {
                
$user->planSubscriptionCancel();
            }

            
$user->plan_id $payment->plan->id;
            
$user->plan_interval $payment->interval;
            
$user->plan_currency $payment->currency;
            
$user->plan_amount $payment->amount;
            
$user->plan_payment_processor $payment->processor;
            
$user->plan_subscription_id null;
            
$user->plan_subscription_status null;
            
$user->plan_created_at Carbon::now();
            
$user->plan_recurring_at null;
            
$user->plan_trial_ends_at $user->plan_trial_ends_at Carbon::now() : null;
            
$user->plan_ends_at $payment->interval == 'month' Carbon::now()->addMonth() : Carbon::now()->addYear();
            
$user->save();

            
// If a coupon was used
            
if (isset($payment->coupon->id)) {
                
$coupon Coupon::find($payment->coupon->id);

                
// If a coupon was found
                
if ($coupon) {
                    
// Increase the coupon usage
                    
$coupon->increment('redeems'1);
                }
            }

            
// Attempt to send an email notification
            
try {
                
Mail::to($user->email)->locale($user->locale)->send(new PaymentMail($payment));
            }
            catch (
Exception $e) {}
        }

        return 
redirect()->route('admin.payments.edit'$id)->with('success'__('Settings saved.'));
    }

    
/**
     * Cancel the Payment.
     *
     * @param Request $request
     * @param $id
     * @return mixed
     */
    
public function cancelPayment(Request $request$id)
    {
        
$payment Payment::where([['id''='$id], ['status''=''pending']])->firstOrFail();
        
$payment->status 'cancelled';
        
$payment->save();

        
$user User::where('id'$payment->user_id)->first();

        if (
$user) {
            
// Attempt to send an email notification
            
try {
                
Mail::to($user->email)->locale($user->locale)->send(new PaymentMail($payment));
            }
            catch (
Exception $e) {}
        }

        return 
redirect()->route('admin.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([['id''='$id], ['status''!=''pending']])->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('admin.container', ['view' => 'account.payments.invoice''payment' => $payment'inclTaxRatesPercentage' => $inclTaxRatesPercentage'exclTaxRatesPercentage' => $exclTaxRatesPercentage]);
    }

    
/**
     * List the plans.
     *
     * @param Request $request
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    
public function indexPlans(Request $request)
    {
        
$search $request->input('search');
        
$searchBy in_array($request->input('search_by'), ['name']) ? $request->input('search_by') : 'name';
        
$visibility $request->input('visibility');
        
$status $request->input('status');
        
$sortBy in_array($request->input('sort_by'), ['id''name']) ? $request->input('sort_by') : 'id';
        
$sort in_array($request->input('sort'), ['asc''desc']) ? $request->input('sort') : 'desc';
        
$perPage in_array($request->input('per_page'), [102550100]) ? $request->input('per_page') : config('settings.paginate');

        
$plans Plan::withTrashed()
            ->
when($search, function ($query) use ($search$searchBy) {
                return 
$query->searchName($search);
            })
            ->
when(isset($visibility) && is_numeric($visibility), function ($query) use ($visibility) {
                return 
$query->ofVisibility((int)$visibility);
            })
            ->
when(isset($status) && is_numeric($status), function ($query) use ($status) {
                if (
$status) {
                    
$query->whereNotNull('deleted_at');
                } else {
                    
$query->whereNull('deleted_at');
                }
            })
            ->
orderBy($sortBy$sort)
            ->
paginate($perPage)
            ->
appends(['search' => $search'search_by' => $searchBy'visibility' => $visibility'status' => $status'sort_by' => $sortBy'sort' => $sort'per_page' => $perPage]);

        return 
view('admin.container', ['view' => 'admin.plans.list''plans' => $plans]);
    }

    
/**
     * Show the create Plan form.
     *
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    
public function createPlan()
    {
        
$coupons Coupon::all();

        
$taxRates TaxRate::all();

        return 
view('admin.container', ['view' => 'admin.plans.new''coupons' => $coupons'taxRates' => $taxRates]);
    }

    
/**
     * Show the edit Plan form.
     *
     * @param $id
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    
public function editPlan($id)
    {
        
$plan Plan::withTrashed()->where('id'$id)->firstOrFail();

        
$coupons Coupon::all();

        
$taxRates TaxRate::all();

        return 
view('admin.container', ['view' => 'admin.plans.edit''plan' => $plan'coupons' => $coupons'taxRates' => $taxRates]);
    }

    
/**
     * Store the Plan.
     *
     * @param StorePlanRequest $request
     * @return IlluminateHttpRedirectResponse
     */
    
public function storePlan(StorePlanRequest $request)
    {
        
$plan = new Plan;
        
$plan->name $request->input('name');
        
$plan->description $request->input('description');
        
$plan->amount_month $request->input('amount_month');
        
$plan->amount_year $request->input('amount_year');
        
$plan->currency $request->input('currency');
        
$plan->coupons $request->input('coupons');
        
$plan->tax_rates $request->input('tax_rates');
        
$plan->trial_days $request->input('trial_days');
        
$plan->visibility $request->input('visibility');
        
$plan->position $request->input('position');
        
$plan->features $request->input('features');
        
$plan->save();

        return 
redirect()->route('admin.plans')->with('success'__(':name has been created.', ['name' => $request->input('name')]));
    }

    
/**
     * Update the Plan.
     *
     * @param UpdatePlanRequest $request
     * @param $id
     * @return IlluminateHttpRedirectResponse
     */
    
public function updatePlan(UpdatePlanRequest $request$id)
    {
        
$plan Plan::withTrashed()->findOrFail($id);

        if (!
$plan->isDefault()) {
            
$plan->amount_month $request->input('amount_month');
            
$plan->amount_year $request->input('amount_year');
            
$plan->currency $request->input('currency');
            
$plan->coupons $request->input('coupons');
            
$plan->tax_rates $request->input('tax_rates');
            
$plan->trial_days $request->input('trial_days');
        }
        
$plan->name $request->input('name');
        
$plan->description $request->input('description');
        
$plan->visibility $request->input('visibility');
        
$plan->position $request->input('position');
        
$plan->features $request->input('features');
        
$plan->save();

        return 
redirect()->route('admin.plans.edit'$id)->with('success'__('Settings saved.'));
    }

    
/**
     * Soft delete the Plan.
     *
     * @param $id
     * @return IlluminateHttpRedirectResponse
     * @throws Exception
     */
    
public function disablePlan($id)
    {
        
$plan Plan::findOrFail($id);

        
// Do not delete the default plan
        
if ($plan->isDefault()) {
            return 
redirect()->route('admin.plans.edit'$id)->with('error'__('The default plan can't be disabled.'));
        }

        $plan->delete();

        return redirect()->route('
admin.plans.edit', $id)->with('success', __('Settings saved.'));
    }

    /**
     * Restore the Plan.
     *
     * @param $id
     * @return IlluminateHttpRedirectResponse
     */
    public function restorePlan($id)
    {
        $plan = Plan::withTrashed()->findOrFail($id);
        $plan->restore();

        return redirect()->route('
admin.plans.edit', $id)->with('success', __('Settings saved.'));
    }

    /**
     * List the Coupons.
     *
     * @param Request $request
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    public function indexCoupons(Request $request)
    {
        $search = $request->input('
search');
        $searchBy = in_array($request->input('
search_by'), ['name', 'code']) ? $request->input('search_by') : 'name';
        $type = $request->input('
type');
        $status = $request->input('
status');
        $sortBy = in_array($request->input('
sort_by'), ['id', 'name', 'code']) ? $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');

        $coupons = Coupon::withTrashed()
            ->when($search, function ($query) use ($search, $searchBy) {
                if ($searchBy == '
code') {
                    return $query->searchCode($search);
                }
                return $query->searchName($search);
            })
            ->when(isset($type) && is_numeric($type), function ($query) use ($type) {
                return $query->ofType($type);
            })
            ->when(isset($status) && is_numeric($status), function ($query) use ($status) {
                if ($status) {
                    $query->whereNotNull('
deleted_at');
                } else {
                    $query->whereNull('
deleted_at');
                }
            })
            ->orderBy($sortBy, $sort)
            ->paginate($perPage)
            ->appends(['
search' => $search, 'search_by' => $searchBy, 'type' => $type, 'status' => $status, 'sort_by' => $sortBy, 'sort' => $sort, 'per_page' => $perPage]);

        return view('
admin.container', ['view' => 'admin.coupons.list', 'coupons' => $coupons]);
    }

    /**
     * Show the create Coupon form.
     *
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    public function createCoupon()
    {
        return view('
admin.container', ['view' => 'admin.coupons.new']);
    }

    /**
     * Show the edit Coupon form.
     *
     * @param $id
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    public function editCoupon($id)
    {
        $coupon = Coupon::where('
id', $id)->withTrashed()->firstOrFail();

        return view('
admin.container', ['view' => 'admin.coupons.edit', 'coupon' => $coupon]);
    }

    /**
     * Store the Coupon.
     *
     * @param StoreCouponRequest $request
     * @return IlluminateHttpRedirectResponse
     */
    public function storeCoupon(StoreCouponRequest $request)
    {
        $coupon = new Coupon;

        $coupon->name = $request->input('
name');
        $coupon->code = $request->input('
code');
        $coupon->type = $request->input('
type');
        $coupon->days = $request->input('
days');
        $coupon->percentage = $request->input('
type') ? 100 : $request->input('percentage');
        $coupon->quantity = $request->input('
quantity');

        $coupon->save();

        return redirect()->route('
admin.coupons')->with('success', __(':name has been created.', ['name' => $request->input('name')]));
    }

    /**
     * Update the Coupon.
     *
     * @param UpdateCouponRequest $request
     * @param $id
     * @return IlluminateHttpRedirectResponse
     */
    public function updateCoupon(UpdateCouponRequest $request, $id)
    {
        $coupon = Coupon::withTrashed()->findOrFail($id);

        $coupon->code = $request->input('
code');
        $coupon->days = $request->input('
days');
        $coupon->quantity = $request->input('
quantity');

        $coupon->save();

        return redirect()->route('
admin.coupons.edit', $id)->with('success', __('Settings saved.'));
    }

    /**
     * Soft delete the Coupon.
     *
     * @param $id
     * @return IlluminateHttpRedirectResponse
     */
    public function disableCoupon($id)
    {
        $coupon = Coupon::findOrFail($id);
        $coupon->delete();

        return redirect()->route('
admin.coupons.edit', $id)->with('success', __('Settings saved.'));
    }

    /**
     * Restore the Coupon.
     *
     * @param $id
     * @return IlluminateHttpRedirectResponse
     */
    public function restoreCoupon($id)
    {
        $coupon = Coupon::withTrashed()->findOrFail($id);
        $coupon->restore();

        return redirect()->route('
admin.coupons.edit', $id)->with('success', __('Settings saved.'));
    }

    /**
     * List the Tax Rates.
     *
     * @param Request $request
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    public function indexTaxRates(Request $request)
    {
        $search = $request->input('
search');
        $searchBy = in_array($request->input('
search_by'), ['name', 'code']) ? $request->input('search_by') : 'name';
        $type = $request->input('
type');
        $status = $request->input('
status');
        $sortBy = in_array($request->input('
sort_by'), ['id', 'name', 'code']) ? $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');

        $taxRates = TaxRate::withTrashed()
            ->when($search, function ($query) use ($search, $searchBy) {
                return $query->searchName($search);
            })
            ->when(isset($type) && is_numeric($type), function ($query) use ($type) {
                return $query->ofType($type);
            })
            ->when(isset($status) && is_numeric($status), function ($query) use ($status) {
                if ($status) {
                    $query->whereNotNull('
deleted_at');
                } else {
                    $query->whereNull('
deleted_at');
                }
            })
            ->orderBy($sortBy, $sort)
            ->paginate($perPage)
            ->appends(['
search' => $search, 'search_by' => $searchBy, 'type' => $type, 'status' => $status, 'sort_by' => $sortBy, 'sort' => $sort, 'per_page' => $perPage]);

        return view('
admin.container', ['view' => 'admin.tax-rates.list', 'taxRates' => $taxRates]);
    }

    /**
     * Show the create Tax Rate form.
     *
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    public function createTaxRate()
    {
        return view('
admin.container', ['view' => 'admin.tax-rates.new']);
    }

    /**
     * Show the edit Tax Rate form.
     *
     * @param $id
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    public function editTaxRate($id)
    {
        $taxRate = TaxRate::where('
id', $id)->withTrashed()->firstOrFail();

        return view('
admin.container', ['view' => 'admin.tax-rates.edit', 'taxRate' => $taxRate]);
    }

    /**
     * Store the Tax Rate.
     *
     * @param StoreTaxRateRequest $request
     * @return IlluminateHttpRedirectResponse
     */
    public function storeTaxRate(StoreTaxRateRequest $request)
    {
        $taxRate = new TaxRate;

        $taxRate->name = $request->input('
name');
        $taxRate->type = $request->input('
type');
        $taxRate->percentage = $request->input('
percentage');
        $taxRate->regions = $request->input('
regions');

        $taxRate->save();

        return redirect()->route('
admin.tax_rates')->with('success', __(':name has been created.', ['name' => $request->input('name')]));
    }

    /**
     * Update the Tax Rate.
     *
     * @param UpdateTaxRateRequest $request
     * @param $id
     * @return IlluminateHttpRedirectResponse
     */
    public function updateTaxRate(UpdateTaxRateRequest $request, $id)
    {
        $taxRate = TaxRate::withTrashed()->findOrFail($id);

        $taxRate->regions = $request->input('
regions');

        $taxRate->save();

        return redirect()->route('
admin.tax_rates.edit', $id)->with('success', __('Settings saved.'));
    }

    /**
     * Soft delete the Tax Rate.
     *
     * @param $id
     * @return IlluminateHttpRedirectResponse
     */
    public function disableTaxRate($id)
    {
        $taxRate = TaxRate::findOrFail($id);
        $taxRate->delete();

        return redirect()->route('
admin.tax_rates.edit', $id)->with('success', __('Settings saved.'));
    }

    /**
     * Restore the Tax Rate.
     *
     * @param $id
     * @return IlluminateHttpRedirectResponse
     */
    public function restoreTaxRate($id)
    {
        $taxRate = TaxRate::withTrashed()->findOrFail($id);
        $taxRate->restore();

        return redirect()->route('
admin.tax_rates.edit', $id)->with('success', __('Settings saved.'));
    }

    /**
     * List the Websites.
     *
     * @param Request $request
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    public function indexWebsites(Request $request)
    {
        $search = $request->input('
search');
        $searchBy = in_array($request->input('
search_by'), ['domain']) ? $request->input('search_by') : 'domain';
        $userId = $request->input('
user_id');
        $sortBy = in_array($request->input('
sort_by'), ['id', 'domain']) ? $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');

        $websites = Website::with('
user')
            ->when($userId, function ($query) use ($userId) {
                return $query->ofUser($userId);
            })
            ->when($search, function ($query) use ($search, $searchBy) {
                return $query->searchDomain($search);
            })
            ->orderBy($sortBy, $sort)
            ->paginate($perPage)
            ->appends(['
search' => $search, 'search_by' => $searchBy, 'user_id' => $userId, 'sort_by' => $sortBy, 'sort' => $sort, 'per_page' => $perPage]);

        $filters = [];

        if ($userId) {
            $user = User::where('
id', '=', $userId)->first();
            if ($user) {
                $filters['
user'] = $user->name;
            }
        }

        return view('
admin.container', ['view' => 'admin.websites.list', 'websites' => $websites, 'filters' => $filters]);
    }

    /**
     * Show the edit Website form.
     *
     * @param $id
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    public function editWebsite($id)
    {
        $website = Website::where('
id', $id)->firstOrFail();

        return view('
admin.container', ['view' => 'websites.edit', 'website' => $website]);
    }

    /**
     * Update the Website.
     *
     * @param UpdateWebsiteRequest $request
     * @param $id
     * @return IlluminateHttpRedirectResponse
     */
    public function updateWebsite(UpdateWebsiteRequest $request, $id)
    {
        $website = Website::where('
id', $id)->firstOrFail();

        $this->websiteUpdate($request, $website);

        return redirect()->route('
admin.websites.edit', $id)->with('success', __('Settings saved.'));
    }

    /**
     * Delete the Website.
     *
     * @param $id
     * @return IlluminateHttpRedirectResponse
     * @throws Exception
     */
    public function destroyWebsite($id)
    {
        $website = Website::where('
id', $id)->firstOrFail();
        $website->delete();

        $user = User::find($website->user_id);
        $user->has_websites = Website::where('
user_id', '=', $user->id)->count() > 0;
        $user->save();

        return redirect()->route('
admin.websites')->with('success', __(':name has been deleted.', ['name' => $website->domain]));
    }
}
Онлайн: 1
Реклама